Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
У. Столлингс ГЛАВА 15 Безопасность.doc
Скачиваний:
66
Добавлен:
11.05.2015
Размер:
795.14 Кб
Скачать

Классы объектов

На практике обычно вещи одного типа представлены несколькими объектами. Например, если процесс представлен объектом, то в системе для каждого процесса будет присутствовать свой объект. Очевидно, что каждый такой объект нуждается в своем наборе переменных. Однако если методы объекта являются реентерабельными процедурами, то все похожие объекты могут совместно использовать одни и те же методы. Более того, может оказаться, что для каждого нового, но похожего на пре­дыдущие, объекта неэффективно определять и методы, и переменные.

Чтобы избежать трудностей, нужно научиться различать класс объекта и экземпляр объекта. Класс объекта (object class) — это шаблон, по которому оп­ределяются методы и переменные, входящие в объект определенного вида. Эк­земпляр объекта (object instance) — это сам объект, включающий в себя харак­теристики того класса, в котором он определен. В экземпляре содержатся значе­ния переменных, определенных в классе объектов.

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

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

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

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

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

  3. Подклассы могут ограничивать методы или переменные, каким-либо обра­зом унаследованные от соответствующего надкласса.

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

Полиморфизм

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

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