Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Обєктно орієнтовні концепції.docx
Скачиваний:
1
Добавлен:
12.09.2019
Размер:
871.6 Кб
Скачать

Наследование

Благодаря существованию понятия класса объектов можно с минимальны­ми усилиями создавать многие экземпляры объектов. Эта концепция стала еще мощнее благодаря механизму наследования [TAIV96].

Наследование позволяет определять новые классы объектов в терминах су­ществующего класса. Новый класс (более низкого уровня), который называется, подклассом (subclass), автоматически включает в себя определения методов и переменных исходного класса (более высокого уровня), который называется над- классом (superclass). Подкласс может отличаться от своего надкласса по не­скольким параметрам.

Подкласс может содержать в себе дополнительные методы и переменные, которых нет в надклассе этого подкласса.

В подклассе можно изменить определение любого метода или любой пере­менной, имеющееся в его надклассе; при этом новое определение используй ется с тем же именем. «

Подклассы могут ограничивать методы или переменные, каким-либо обра­зом унаследованные от соответствующего надкласса. иерархию наследования. Иерархию наследования можно представлять себе как определение способа поиска методов и переменных. Получив сообщение с пред­писанием выполнить метод, который не задан в данном классе, объект осущест­вляет его поиск на других иерархических уровнях, пока не найдет нужный ме­тод. Аналогично, если при выполнении метода происходит ссылка на перемен­ную, которая не определена в данном классе, объект ищет переменную с таким именем на других иерархических уровнях.

Полиморфизм

Полиморфизм — это мощная характеристика, позволяющая скрывать за общим интерфейсом различные реализации. В двух полиморфных по отношению друг к другу объектах используются одинаковые имена методов и представлены одинаковые интерфейсы по отношению к другим объектам. Можно определить несколько предназначенных для печати объектов, каждый для своего устройства вывода (например, printDotmatrix для матричного принтера, printLaser для лазерного принтера, printScreen для вывода на экран и т.д.) или каждый для своего вида документа (например, printText для текстовых документов, printDrawing для рисунков, printCompound для документов смешанного типа). Если в каждом таком объекте содержится метод под названием print, то любой документ можно распечатать, отправив сообщение print соответствующему объ­екту. При этом не имеет значения, как именно выполняется этот метод.

Интересно сравнить полиморфизм с методами обычного модульного про­граммирования. Целью нисходящего модульного проектирования является раз­работка в рамках общей утилиты модулей более низких уровней с фиксирован­ным по отношению к модулям более высоких уровней интерфейсом. Это позво­ляет различным модулям более высоких уровней вызывать один и тот же модуль низкого уровня. Если внутренняя структура модуля низкого уровня из­меняется, не затрагивая при этом интерфейс, то это никак не влияет ни на один из модулей более высоких уровней, которые используют изменяемый модуль. Когда речь идет о полиморфизме, все происходит наоборот. Здесь имеется в виду способность объекта более высокого уровня вызывать с помощью сообщения в одном и том же формате различные объекты более низких уровней, выполняя таким образом подобные функции. При этом можно добавлять новые объекты низких уровней с минимальными изменениями в существующих объектах.