Студопедия
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Введение в паттерны проектирования

Читайте также:
  1. I. Введение
  2. I. Введение
  3. I. Введение
  4. I. Введение
  5. I. Введение.
  6. II. Введение (зачем и для кого написан данный текст).
  7. Автоматизация ивведение звуков в речь
  8. Алексеев Н.Н. Введение в изучение права. М., 1917.
  9. Введение
  10. Введение

 

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

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


Как решать задачи проектирования

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

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

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

Определение степени детализации объекта

Размеры и число объектов могут сильно варьироваться. С их помощью может быть представлено все, начиная с уровня аппаратуры и до законченных приложе­ний. Как же решить, что должен представлять собой объект?

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

Специфицирование интерфейсов объекта

При объявлении объектом любой операции должны быть заданы: имя опера­ции, объекты, передаваемые в качестве параметров, и значение, возвращаемое опе­рацией. Эту триаду называют сигнатурой операции. Множество сигнатур всех определенных для объекта операций называется интерфейсом этого объекта. Ин­терфейс описывает все множество запросов, которые можно отправить объекту. Любой запрос, сигнатура которого соответствует интерфейсу объекта, может быть ему послан.


 


Тип — это имя, используемое для обозначения конкретного интерфейса. Гово­рят, что объект имеет тип Window, если он готов принимать запросы на выполне­ние любых операций, определенных в интерфейсе с именем Window. У одного объекта может быть много типов. Напротив, сильно отличающиеся объекты мо­гут разделять общий тип. Часть интерфейса объекта может быть охарактеризова­на одним типом, а часть - другим. Два объекта одного и того же типа должны раз­делять только часть своих интерфейсов. Интерфейсы могут содержать другие интерфейсы в качестве подмножеств. Мы говорим, что один тип является подти­пом другого, если интерфейс первого содержит интерфейс второго. В этом случае второй тип называется супертипом для первого. Часто говорят также, что подтип наследует интерфейс своего супертцпа.

В объектно-ориентированных системах интерфейсы фундаментальны. Об объектах известно только то, что они сообщают о себе через свои интерфейсы. Никакого способа получить информацию об объекте или заставить его что-то сде­лать в обход интерфейса не существует. Интерфейс объекта ничего не говорит о его реализации; разные объекты вправе реализовывать сходные запросы совер­шенно по-разному. Это означает, что два объекта с различными реализациями могут иметь одинаковые интерфейсы.

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

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

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


Как решать задачи проектирования

 


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

Специфицирование реализации объектов

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

В нашей нотации, основанной на ОМТ (см. приложение В), класс изобража­ется в виде прямоугольника, внутри которого жирным шрифтом написано имя класса. Ниже обычным шрифтом перечислены операции. Любые данные, которые определены для класса, следуют после операций. Имя класса, операции и данные разделяются горизонтальными линиями.

Типы возвращаемого значения и переменных экземпляра необязательны, поскольку мы не ограничиваем себя языками программирования с сильной ти­пизацией.

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

Пунктирная линия со стрелкой обозначает класс, который инстанцирует объекты другого класса. Стрелка направлена в сторону класса инстанцированно-го объекта.



 


Новые классы можно определить в терминах существую­щих с помощью наследования классов. Если подкласс наследу­ет родительскому классу, то он включает определения всех данных и операций, определенных в родительском классе. Объекты, являющиеся экземплярами подкласса, будут со­держать все данные, определенные как в самом подклассе, так и во всех его родительских классах. Такой объект сможет выполнять все операции, определенные в подклассе и его предках. Отношение «яв­ляется подклассом» обозначается вертикальной линией с треугольником.

Класс называется абстрактным, если его единственное назначение - опреде­лить общий интерфейс для всех своих подклассов. Абстрактный класс делегирует




Дата добавления: 2015-09-11; просмотров: 102 | Поможем написать вашу работу | Нарушение авторских прав

Гамма Э., Хелм Р., Джонсон Р., Влиссидес Дж. | Вступительное слово | Глава 1. Введение в паттерны проектирования | Введение в паттерны проектирования | Чтотакое паттерн проектирования | Паттерны проектирования в схеме MVC | Каталог паттернов проектирования | Как решать задачи проектирования | Введение в паттерны проектирования | Введение в паттерны проектирования |


lektsii.net - Лекции.Нет - 2014-2025 год. (0.011 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав