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

converted to PDF by BoJIoc

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

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

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

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

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

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

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

Упражнения

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

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

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

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