Объектно-ориентированный подход, Основные принципы - Объектно-ориентированный подход и диаграммы классов в UML

Основные принципы

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

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

Инкапсуляция - это принцип, заключающийся в построении оболочки вокруг некоторого набора данных и кода, обрабатывающего эти данные.

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

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

Для описания следующего принципа, лежащего в основе ООП, надо определить, что такое класс.

Как уже говорилось, разрабатываемая система представляется в виде набора объектов. В частности, объектами являются "Телевизор Горизонт-ТЦ375И No. 1234567", "Телевизор Янтарь No. 7654321". В некоторый момент бывает удобно сослаться не на конкретный телевизор, а на все телевизоры, независимо от их конкретной модели, года выпуска и серийного номера. В этом случае нам поможет понятие класса.

Класс - это группа сущностей (объектов), обладающих сходными свойствами, а именно, данными и поведением [4].

В дальнейшем отдельного представителя некоторого класса будем называть объектом класса или просто объектом.

Под поведением объекта в UML понимаются любые правила взаимодействия объекта с внешним миром и с данными самого объекта.

В нашем примере можно выделить следующие классы и их представителей:

Класс

Представители

Человек

Михаил Сергеевич, Раиса Максимовна, Петя

Помещение

Гостиная, спальня, кабинет, кухня, ванная, туалет, балкон, кладовка

Прибор

Телевизор Янтарь No. 7654321, утюг, пылесос, плита, холодильник, компьютер, водопроводный кран, раковина

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

Наследование - это отношение типа "является разновидностью". В контексте рассматриваемого примера можно сказать, что Электроприбор "является разновидностью" Прибора, а Телевизор "является разновидностью" Устройства Отображения. Фактически, мы говорим, что один класс является наследником другого, если класс имеет все те свойства, что и предок, плюс еще некоторые дополнительные.

В случае с приборами из нашего примера можно построить такую иерархию наследования:

Предок

Потомки

Прибор

Электроприбор, сантехнический прибор

Электроприбор

Нагревательный прибор, устройство отображения, звуковоспроизводящий прибор

Устройство отображения

Телевизор, монитор

Третий принцип, лежащий в основании ООП, - полиморфизм - касается аспектов определения поведения объектов классов и распространения поведения вдоль иерархии наследования от предков к потомкам.

В UML для описания полиморфизма вводятся понятия операции и метода. У классов есть операции, которые определяют его поведение. В некотором смысле операция - это набор общих сведений о поведении класса: детали реализации никак не специфицированы операцией, но некоторый комментарий по поводу реализации может быть дан в неформальном виде, например, на естественном языке. При этом каждый потомок класса может предоставить метод, реализующий любую унаследованную операцию, отличный от соответствующего метода предка. Подчеркнем, что операция - это лишь описание какой-либо черты поведения объекта, а метод - уже конкретная реализация. Операции обязательно наследуются, т. е. распространяются вдоль иерархии без каких-либо изменений, а методы могут перекрываться потомками для реализации конкретных деталей поведения, присущих объектам класса-потомка.

Возвращаясь к приведенному примеру, можно сказать, что класс Устройство Отображения имеет операцию Принять Сигнал, которая лишь обозначает возможность получения объектом класса Устройство Отображения (или производного от него) некоторого сигнала извне. Вместе с тем у класса Телевизор будет метод Принять Сигнал, принимающий сигнал с антенного кабеля, а у класса Монитор будет метод Принять Сигнал, принимающий сигнал от схемы видеоадаптера.

Еще один принцип ООП - это модульность [4], и это означает, что вся система должна быть разделена на части, называемые модулями. Это деление более крупное, чем разбиение на классы - модули должны их в себе содержать.

Похожие статьи




Объектно-ориентированный подход, Основные принципы - Объектно-ориентированный подход и диаграммы классов в UML

Предыдущая | Следующая