Заключение
Заканчивая
обзор основных положений объектной технологии,
хотелось бы ещё раз остановить внимание
на ключевых моментах.
Объектная
технология является логичным следствием
развития идей структурного программирования.
Структурное программирование за счёт декомпозиции
кода позволило создавать удобные подпрограммы,
которые можно было использовать во многих
проектах. Декомпозиция кода посредством
подпрограмм снизило сложность программы
за счёт локализации связей между операторами
и отделения интерфейса. Интерфейсом подпрограммы
являлись: название, тип и количество передаваемых
и возвращаемых параметров. Механизм формальных/фактических
параметров являл собой механизм виртуализации
данных.
Объектная
технология развивает идею виртуализации
и переносит её на сами подпрограммы. Объект
представляет собой агрегат, объединяющий
некоторый набор свойств, реализованных
в виде данных и подпрограмм (методов).
Виртуализация подпрограмм позволила абстрагировать
интерфейс подпрограммы, поставив ему в
соответствие не одну, а несколько реализаций.
Каждый подкласс может иметь собственную
реализацию интерфейса (метода), объявленного
у его суперкласса. Последующее развитие
идеи виртуализации логично приводит к
виртуализации самих объектов в рамках
контейнера. В основе виртуализации объектов
лежит понятие роли. Роль понимается как
произвольная совокупность интерфейсов.
Говоря о том, что объект некоторого класса,
может выступать в данной роли, подразумевают,
что объект этого класса обладает необходимыми
для данной роли интерфейсами. Для контейнера
важна роль, а не конкретный объект и,
поэтому вполне допустимо заменять в контейнере
объект одного класса на объект другого
класса, если оба этих объекта обладают
необходимыми для данной роли интерфейсами.
Точно так же, как происходит виртуализация
элементарных объектов в контейнере, можно
подвергать виртуализации и сами контейнеры,
вкладывая их в контейнеры более высоких
логических уровней.
Полиморфизм,
рассматриваемый как самостоятельное понятие,
позволяет строить иерархии классов более
естественным образом, достигая их простоты
и выразительности. Кроме того, самостоятельность
полиморфизма является основой для введения
понятия ролей. Посредством полиморфизма,
в частности, становится возможным объявлять
у контейнеров интерфейсы, аналогичные
интерфейсам, которые имеют вложенные классы.
А в схемах, которые реализуют эти интерфейсы
контейнеров, определить способ передачи
сообщения одному или более вложенным классам.
Инкапсуляция
необходима, если в создаваемом проекте
записаны требования надёжности и модернизируемости.
Главным следствием инкапсуляции можно
смело назвать необычайно высокую гибкость
и настраиваемость системы. На основе этого
возможен переход к иному подходу к разработке
программного обеспечения: подходе, основанном
на макетировании и моделировании. То есть,
программное обеспечение создаётся в виде
очень простого макета, обладающего минимальной
функциональностью, а затем постепенно
доводится до необходимого уровня готовности.
Такой подход отражает тот факт, что реальный
мир не является чем-то завершённым и находится
в постоянном развитии.
Наследование
неотделимо от абстракции. Благодаря наследованию
достигается абстрактная спецификация интерфейсов
классов. Реализация этих интерфейсов может
различаться в подклассах. Благодаря наследованию,
подклассы могут получать от своего суперкласса
не только интерфейсы, но и их реализацию,
что увеличивает повторное использование
кода и повышает его качество. На уровне
суперкласса можно определять и поведение
данного вида. Подклассы наследуют это
поведение, обеспечивая тем самым, идентичность
реакций на те или иные события. Абстракция
при наследовании реализации наиболее полно
раскрывает свои возможности и достоинства
при агрегации. Подкласс-контейнер получает
реализацию суперкласса-контейнера и может
видоизменять её, увеличивая функциональные
возможности. Этот процесс хорошо отражает
явления, происходящие в реальной жизни.
Таким
образом, объектная технология предоставляет
превосходную основу для построения программных
моделей. Однако обилие возможностей, заложенных
в объектной технологии, позволяет применить
иные подходы к проектированию, подходы,
способные не только ускорить разработку
программного обеспечения, но и дающие
возможность реализовывать гораздо более
сложные системы. Но перед тем, как перейти
к вопросам проектирования, необходимо
рассмотреть два важных положения: о формах
связей между объектами и о параллелизме.
Этим вопросам посвящено следующее письмо.
|