8. Резюме
ООП – не просто набор новых свойств, добавленных в существующие языки. Это новый шаг в осмыслении процессов декомпозиции задач и разработки ПО.
ООП рассматривает программы как совокупность гибко связанных между собой агентов, называемых объектами. Каждый из них отвечает за конкретные задачи. Вычисление осуществляется посредством взаимодействия объектов. Программирование превращается в процесс моделирования в какой-либо предметной области.
Объект получается в результате инкапсуляции состояния (данных) и поведения (операций). Тем самым объект во многих отношениях аналогичен модулю или абстрактному типу данных.
Поведение объекта диктуется его классом. Каждый объект является экземпляром некоторого класса. Все экземпляры одного класса будут вести себя одинаковым образом (то есть вызывать те же методы) в ответ на одинаковые запросы.
Объект проявляет свое поведение путем вызова метода в ответ на сообщение. Интерпретация сообщения (то есть конкретный используемый метод) зависит от объекта и может быть различной для различных классов объектов.
Объекты и классы расширяют понятие АТД путем введения наследования. Классы могут быть организованы в виде иерархического дерева наследования. Данные и поведение, связанные с классами, которые расположены выше в иерархическом дереве, доступны для нижележащих классов. Происходит наследование поведения от родительских классов.
С помощью уменьшения взаимозависимости между компонентами программного обеспечения ООП позволяет разрабатывать системы, пригодные для многократного использования. Такие компоненты могут быть созданы и отлажены как независимые программные единицы, в изоляции от других частей прикладной программы.
Многократно используемые программные компоненты позволяют разработчику иметь дело с проблемами на более высокой ступени абстрагирования. Мы можем определять и манипулировать объектами просто в терминах сообщений, которые они распознают, и работы, которую они выполняют, игнорируя детали реализации.
Лекция 2. Объектно-ориентированное проектирование
Работа на ОО-языке (т.е. на языке с поддержкой наследования, пересылки сообщений и классов) не является ни необходимым, ни достаточным условием для того, чтобы заниматься ООП. Наиболее важный аспект в ООП – техника проектирования, основанная на выделении и распределении обязанностей (responsibility-driven design).
В примере из предыдущей лекции о заказе компьютера в магазине можно отметить, что после того, как заказ сделан, покупатель не задумывается о том, как именно заказ будет выполнен. Для покупателя важно только то, что после выдачи запроса будет получен желаемый результат.
Традиционное процедурное программирование основывается в основном на приказаниях чему-либо сделать что-то – к примеру, модифицировать запись или обновить массив данных. Каждый фрагмент программы оказывается сильно связанным со многими другими фрагментами. Проектирование, основанное на распределении обязанностей, старается отсекать эти связи или по крайней мере сделать их максимально слабыми. Поэтому в ООП жизненно важным оказывается принцип скрытия информации.
1. Масштаб проектов разработки программного обеспечения
Одно из основных преимуществ ООП наблюдается, когда программные компоненты многократно используются в разных проектах. Это особенно важно при разработке "больших проектов". Программные проекты можно условно разделить на "малые" и "большие".
Для "малых" проектов характерно:
Код разрабатывается единственным программистом, или, возможно, небольшой группой программистов. Отдельно взятый индивидуум может понять все аспекты проекта.
Основная проблема при разработке состоит в проектировании программы и написании алгоритмов для решения поставленной задачи.
С другой стороны, у "больших" проектов можно отметить следующее:
Программная система разрабатывается большой командой программистов. При этом одна группа может заниматься проектированием (или спецификацией) системы, другая – осуществлять написание кода отдельных компонент, а третья – объединять компоненты в конечный продукт. Нет единственного человека, который бы знал о проекте все.
Основная проблема в процессе разработки – управление проектом и обмен информацией между группами и внутри групп.
Особенности многих ОО-языков наилучшим образом проявляются при программировании "больших" проектов. ООП получило широкое развитие как раз благодаря упрощению разработки подобных проектов.
|