Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Объектно-ориентированное программирование.PDF
Скачиваний:
220
Добавлен:
01.05.2014
Размер:
4 Мб
Скачать
☆

converted to PDF by BoJIoc

языков программирования настаивают, что большинство таких ошибок может быть отловлено на этапе компиляции для языка со статическим связыванием методов. Эта точка зрения оспаривается (как и следовало ожидать) сторонниками динамического программирования.

Тем самым нам приходится решать, что более важно: эффективность или гибкость, правильность или легкость использования. Брэд Кокс [Cox 1986] настаивает, что решение зависит как от уровня абстракции программы, так и от того, являемся ли мы производителями или потребителями программной системы. Кокс утверждает, что объектно-ориентированное программирование будет основным (хотя и не единственным) средством в «революции в области программной индустрии».

Точно так же как в девятнадцатом веке индустриальная революция стала возможна только после разработки взаимозаменяемых деталей, так и целью

программной революции является конструирование многократно используемых и надежных абстрактных компонент высокого уровня для программного обеспечения, из которых собираются реальные приложения.

Эффективность — главное, о чем следует думать на низком уровне (Кокс называет этот уровень «абстракцией уровня транзисторов» («gate-level abstractions») по аналогии с электроникой). По мере повышения уровня абстракции (до интегральных микросхем и готовых плат) гибкость становится более существенной.

Эффективность программы является первостепенной заботой разработчика. Для потребителя, заинтересованного в комбинировании программных систем, гибкость может быть более важной.

Итак, нет единственно правильного ответа на вопрос, какая из техник связывания является более подходящей. Все зависит от конкретной ситуации.

Упражнения

∙Язык Object Pascal использует и статические типы данных, и динамическое связывание. Объясните, почему обратная ситуация (динамические типы данных и статическое связывание сообщений с методами) невозможна.

∙Проиллюстрируйте, почему в объектно-ориентированных языках программирования со статическими типами данных (например, C+ или Object Pascal) компилятор проверяет, чтобы значение переменной родительского класса не присваивалось переменной, описанной как экземпляр подкласса.

∙Подумайте о том, стоит ли проверка ошибок, которая становится возможной при статических типах данных, проигрыша в гибкости. Насколько важны контейнерные классы?

∙Где не срабатывает аналогия Брэда Кокса между аппаратным и программным обеспечением? Что препятствует разработке переносимых надежных программных компонент?