По определению признанного авторитета в области объектно-ориентированных методов разработки программ Гради Буча "объектно-ориентированное программирование (ООП) — это методология программирования, которая основана на представлении программы в виде совокупности объектов, каждый из которых является реализацией определенного класса (типа), а классы (типы) образуют иерархию на принципах наследуемости".
Объектно-ориентированная методология (ОО-методология) так же, как и структурная методология, была создана с целью дисциплинировать процесс разработки больших программных комплексов и тем самым снизить их сложность и стоимость.
ОО-методология преследует те же цели, что и структурная, но решает их с другой отправной точки и в большинстве случаев позволяет управлять более сложными проектами, чем структурная методология.
Как отмечалось выше, одним из принципов управления сложностью проекта является декомпозиция. Гради Буч выделяет две разновидности декомпозиции: алгоритмическую (так он называет декомпозицию, поддерживаемую структурными методами) и объектно-ориентированную, отличие которых состоит, по его мнению, в следующем: " Разделение по алгоритмам концентрирует внимание на порядке происходящих событий, а разделение по объектам придает ocoбое значение факторам, либо вызывающим действия, либо являющимся "объектами приложения этих действий".
Другими словами, алгоритмическая декомпозиция учитывает в большей степени структуру взаимосвязей между частями сложной проблемы, а объектно-ориентированная декомпозиция уделяет больше внимания характеру взаимосвязей.
На практике рекомендуется применять обе разновидности декомпозиции: при создании крупных проектов целесообразно сначала применять объектно-ориентированный подход для создания общей иерархии объектов, отражающих сущность программируемой задачи, а затем использовать алгоритмическую декомпозицию на модули для упрощения разработки и сопровождения разрабатываемого программного комплекса.
Следует заметить, что определений понятия "объект" существует несколько. Дадим определение объекта, придерживаясь мнения Гради Буча: "Объект — осязаемая сущность, которая четко проявляет свое поведение".
Объект характеризуется как совокупностью всех своих свойств (например для животных — это наличие головы, ушей, глаз и т.д.) и их текущих значений (голова — большая, уши — длинные, глаза — желтые и т.д.), так и совокупностью допустимых для данного объекта действий (умение принимать пищу, стоять, сидеть, идти, бежать и т.н.). Указанное объединение в едином объекте как "материальных" составных частей (голова, лапы, хвост), так и действий, манипулирующих этими частями (действие "бежать" быстро перемещает лапы) называется инкапсуляцией. Объекты постоянно взаимодействуют, оказывая влияние на другие объекты, и, в свою очередь, подвергаясь влиянию с их стороны.
Другим принципом управления сложностью проекта является иерархическое упорядочение объектов (подзадач), получаемых в процессе декомпозиции.
И структурная, и ОО -методология преследуют цель построения иерархического дерева взаимосвязей между объектами (подзадачами). Но если структурная иерархия строится по простому принципу разделения целого на составные части,
![]() |
..........
Рис.6.1. Структурная иерархия
то при создании объектно-ориентированной иерархии (ОО-иерархии) принимается другой взгляд на тот же исходный объект и в иерархии непременно отражается наследование свойств родительских (вышележащих) типов объектов дочерними (нижележащими) типами объектов.
![]() |
..........
Рис. 6.2. Объектная иерархия
Родительские типы также называют просто родителями, а дочерние — потомками. Если тип А непосредственно (без промежуточных типов) связан с нижележащим типом В, то тип А называется непосредственным родителем типа В, а тип В — непосредственным потомком типа А.
По Гради Бучу "наследование — это такое отношение между объектами, когда один объект повторяет структуру и поведение другого ".
Принцип наследования действует в жизни повсеместно и повседневно. Млекопитающие и птицы наследуют признаки живых организмов, в отличие от растений, орел и воробей наследуют общее свойство птиц — умение летать. С другой стороны, львы, тигры, леопарды наследуют "структуру" и поведение, характерное для представителей отряда кошачьих и так далее.
Типы верхних уровней ОО-иерархии, как правило, не имеют конкретных экземпляров объектов. Не существует, например, конкретного живого организма (объекта), который бы сам по себе назывался "Млекопитающее" или "Птица". Такие типы называются абстрактными. Конкретные экземпляры объектов имеют, как правило, типы самых нижних уровней ОО-иерархии: "крокодил Гена" — конкретный экземпляр объекта типа "Крокодил", "кот Матроскин" — конкретный экземпляр объекта типа "Кошка домашняя".
Еще одним основополагающим понятием ООП является полиморфизм. Полиморфизм представляет собой свойство различных объектов выполнять одно и то же действие по-своему. Например, действие "бежать" свойственно большинству животных. Однако каждое из них (лев, слон, крокодил, черепаха) выполняет это действие различным образом.
При традиционном (не объектно-ориентированном) подходе к программированию, животных перемещать будет программист, вызывая отдельную для конкретного животного и конкретного действия подпрограмму. При объектно-ориентированном подходе программист только указывает, какому объекту, какое из присущих ему действий требуется выполнить, и (для рассматриваемого примера) однажды описанные объекты-животные сами будут себя передвигать характерным для них способом, используя входящие в его состав методы.
Таким образом, в данном случае действие "бежать" будет называться полиморфическим действием, а многообразие форм проявления этого действия — полиморфизмом.








