|
Программирование >> Программирование на языке c++
1.5. Базовые принципы объектно-ориентированного программирования К базовым принципам объектно-ориентированного стиля программирования относятся: 1) пакетирование (encapsulation); 2) наследование (inheritance); 3) полиморфизм (poli-morphism); 4) передача сообщений. Пакетирование предполагает соединение в одном объекте данных и функций, которые манипулируют этими данными. Рассмотренный в § 1.4 класс RECORD является примером реализации этого принципа. Доступ к некоторым данным внутри пакета может быть либо запрещен, либо ограничен. Наследование позволяет использовать библиотеки классов и развивать их (совершенствовать и модифицировать библиотечные классы) в конкретной программе. Примерами библиотек классов являются NIH [5] (среда UNIX), Microsoft Foundation Classes [6] и ObjectWindows [7,8] (среда Windows). Основные идеи наследования были рассмотрены выше и будут детально описаны в дальнейшем. Полиморфизм позволяет использовать одни и те же функции для решения разных задач. Рассмотренные выше виртуальные (модифицируемые) функции являются примером реализации этого принципа. Различают полиморфные и мономорфные языки [2, с. 115]. Полиморфные языки поддерживают концепцию полиморфизма в теории типов, когда одно и то же имя может быть использовано для выражения различных действий. Другое направление называется мономорфизмом. Примером моно-морфного языка является, например, ПАСКАЛЬ, в котором функции, процедуры и операторы имеют уникальный тип. Поддержка полиморфизма в объектно-ориентированном программировании осуществляется через виртуальные функции и идею переопределения операторов. Детальное пояснение этих механизмов будет дано ниже. Передача сообщений выражает основную методологию построения объектно-ориентированных программ. Такие программы представляются в виде набора объектов и передачи сообщений между этими объектами. В § 1.6 показывается, как перечисленные принципы реализованы в языке С++. При построении объектно-ориентированной программы рассматривается некоторая иерархия классов. Часто, например в ObjectWindows, вы можете рассматривать некоторую базовую иерархию классов или библиотеку. Библиотеки создаются опытными программистами. Можно непосредственно использовать библиотеку классов для решения разных задач, а также расширять и совершенствовать ее. Предположим, имеется некоторая иерархия библиотечных классов. В этом случае можно: определить объект для заданного класса; построить новый класс, наследуя его из существуюш[его класса; 4- изменить поведение нового класса (изменить его функции или добавить новые функции). Когда вы строите новый класс, наследуя его из существующего класса, можно: добавить в новый класс новые компоненты-данные; добавить в новый класс новые компоненты-функции; заменить в новом классе наследуемые из старого класса компоненты-функции. При использовании принципов множественного наследования применяется следующая модель: ребенок (наследуемый или новый класс) имеет много родителей (много старых классов, из которых образуется новый класс). В этом случае новый класс будет наследовать поведение многих старых классов и далее можно определить объект, имеющий комбинированное (смешанное) поведение. Определим теперь более точно, что понимается под объектно-ориентированным программированием. Объектно-ориентированное программирование - это метод построения программ в виде множества взаимодействующих объектов, структура и поведение которых описаны соответствующими классами, и все эти классы являются компонентами иерархии классов, выражающей отношения наследования [2, с. 38]. Это определение можно разделить на несколько частей. Базовым абстрактным типом объектно-ориентированной программы является класс. Совокупность классов можно описать в виде такой иерархической структуры, что: если класс D наследует структуру и поведение класса В (рис. 1.2), то класс В называется базовым, а класс D - производным. В иерархической структуре такое отношение наследования изображается стрелкой, идущей от класса D к классу В . В литературе можно встретить разные названия классов В и D. Так, класс В называют базовым (base), суперклассом (superclass), родителем (parent), предшественником (predecessor). Класс D называют: производным (derive), подклассом (subclass), ребенком (child), потомком (descendant): она выражает иерархическое упорядочение, которое сегодня является одним из наиболее эффективных средств построения сложных программ [1, с. 9]. Наиболее часто та- Базовый класс структура описыва- ет взаимосвязанные концепции в виде дерева (графа с особыми Производный класс свойствами [3]). Вершины дерева соответству- Рис. 1.2. Отношение наследования классам, а его кор- ню соответствует класс, который описывает что-то общее (самое общее) для всех других классов. Вообще говоря, дерево является частным случаем иерархической структуры, которая может быть описана любым ориентированным графом без циклов (рис. 1.3). Объектно-ориентированная программа состоит из объектов, которые: описываются в виде CLASSi OBJECTj;, где CLASSi соответствует одной из вершин иерархической структуры (см. рис. 1.3), OBJECTj - это действительный (не абстрактный) компонент программы, реально существующий во времени и в пространстве; взаимодействуют друг с другом через сообщения. При разработке объектно-ориентированных программ часто используются библиотеки классов. Библиотека может рассматриваться как заданная базовая иерархическая структура (граф). Для конкретной программы, использующей библиотеку, мы выбираем некоторую подструктуру (подграф)
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |