Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OOP / books / Osnovi objektno-orientirovannogo programmirovaniya.pdf
Скачиваний:
62
Добавлен:
03.03.2016
Размер:
9.04 Mб
Скачать

Ключевые концепции

*С помощью наследования можно определять новые классы как расширение, специализацию и комбинацию ранее определенных классов.

*Класс, наследующий другому классу, называется его наследником, а исходный класс - его родителем. Распространенные на произвольное число уровней (включая ноль) эти понятия становятся понятиями потомка и предка.

*Наследование является ключевым методом как для повторного использования, так и для расширяемости.

*Плодотворное применение наследования требует переопределения (предоставления классу возможности переписать реализацию некоторых компонентов его собственного предка), полиморфизма (возможности связывать ссылку во время выполнения с экземплярами разных классов), динамического связывания (динамического выбора подходящего варианта переопределенного компонента), совместности типов (требования, чтобы всякая сущность могла присоединяться только к экземплярам типов-наследников).

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

*С точки зрения типов отношение между наследником и его родителем - это отношение " является ". Оно полезно как для повторного использования, так и для расширяемости.

*Функцию без аргументов можно переопределить как атрибут, но не наоборот.

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

*Для типизированных языков динамическое связывание можно реализовать с малыми накладными расходами. Связанные с ним оптимизации, в частности, применяемое компилятором статическое связывание и подстановка кода, помогают ОО-программам достичь или превзойти эффективность выполнения традиционных программ.

*Отложенные классы содержат один или более отложенный (не реализованный) компонент. Они описывают частичные реализации абстрактных типов данных.

*Способность эффективных подпрограмм вызывать отложенные позволяет примирить с помощью "классов поведения" повторное использование с расширяемостью.

*Отложенные классы являются основным средством, используемым ОО-методами на стадиях анализа и проектирования.

*Утверждения, применяемые к отложенным компонентам, позволяют точно специфицировать отложенные классы.

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

Библиографические замечания

Понятия (единичного) наследования и динамического связывания были введены в языке Симула 67, на который можно найти ссылки в лекции 17 курса "Основы объектноориентированного проектирования". Отложенные процедуры - это тоже изобретение Симулы (под другим именем (виртуальные процедуры) и при других соглашениях).

Отношение " является " изучалось, в основном, с точки зрения приложений искусственного интеллекта в [Brachman 1983].

Формальное изучение наследования и его семантики проведено в [Cardelli 1984]. Соглашение об использовании для переопределения двойного плюса пришло из системы

обозначений Business Object Notation, предложенной Nerson'ом и Walden'ом (ссылки в лекции 9

курса "Основы объектно-ориентированного проектирования").

Конструкция Precursor (аналогичная конструкции super в языке Smalltalk, но с важным отличием, разрешающим ее использовать только для переопределения процедур) является результатом неопубликованной совместной работы с Roger Browne, James McKim, Kim Walden и Steve Tynor.

Соседние файлы в папке books