Программирование >>  Программирование на языке c++ 

1 ... 5 6 7 [ 8 ] 9 10 11 ... 159


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 - это действительный (не абстрактный) компонент программы, реально существующий во времени и в пространстве;

взаимодействуют друг с другом через сообщения.

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



1 ... 5 6 7 [ 8 ] 9 10 11 ... 159

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика