Основные понятия и определения. По определению признанного авторитета в области объектно-ориентиро­ванных методов разработки программ Гради Буча "объектно-ориентирован­ное

По определению признанного авторитета в области объектно-ориентиро­ванных методов разработки программ Гради Буча "объектно-ориентирован­ное программирование (ООП) — это методология программирования, которая ос­нована на представлении программы в виде совокупности объектов, каждый из ко­торых является реализацией определенного класса (типа), а классы (типы) образу­ют иерархию на принципах наследуемости".

Объектно-ориентированная методология (ОО-методология) так же, как и структурная методология, была создана с целью дисциплинировать процесс разработки больших программных комплексов и тем самым снизить их сложность и стоимость.

ОО-методология преследует те же цели, что и структурная, но решает их с другой отправной точки и в большинстве случаев позволяет управлять более сложными проектами, чем структурная методология.

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

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

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

Следует заметить, что определений понятия "объект" существует не­сколько. Дадим определение объекта, придерживаясь мнения Гради Буча: "Объект — осязаемая сущность, которая четко проявляет свое поведение".

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

Другим принципом управления сложностью проекта является иерархичес­кое упорядочение объектов (подзадач), получаемых в процессе декомпозиции.

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

 
 


..........

Рис.6.1. Структурная иерархия

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

 
 


..........

Рис. 6.2. Объектная иерархия

Родительские типы также называют просто родителями, а дочерние — потомками. Если тип А непосредственно (без промежуточных типов) связан с нижележащим типом В, то тип А называется непосредственным родителем ти­па В, а тип Внепосредственным потомком типа А.

По Гради Бучу "наследованиеэто такое отношение между объектами, когда один объект повторяет структуру и поведение другого ".

Принцип наследования действует в жизни повсеместно и повседневно. Млекопитающие и птицы наследуют признаки живых организмов, в отличие от растений, орел и воробей наследуют общее свойство птиц — умение летать. С другой стороны, львы, тигры, леопарды наследуют "структуру" и поведение, характерное для представителей отряда кошачьих и так далее.

Типы верхних уровней ОО-иерархии, как правило, не имеют конкретных экземпляров объектов. Не существует, например, конкретного живого организ­ма (объекта), который бы сам по себе назывался "Млекопитающее" или "Пти­ца". Такие типы называются абстрактными. Конкретные экземпляры объектов имеют, как правило, типы самых нижних уровней ОО-иерархии: "крокодил Ге­на" — конкретный экземпляр объекта типа "Крокодил", "кот Матроскин" — конкретный экземпляр объекта типа "Кошка домашняя".

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

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

Таким образом, в данном случае действие "бежать" будет называться полиморфическим действием, а многообразие форм проявления этого действия — полиморфизмом.




double arrow
Сейчас читают про: