Главная страница
Навигация по странице:

  • НОТАЦИЯ КАРДИНАЛЬНОСТИ _________________________________________________________

  • Ассоциации, включающие множественные объекты

  • Рис. 9.7.

  • Необязательные ассоциации

  • Рис. 9.8.

  • ГДЕ HEAD ____________________________________________________________________________

  • Чем хороши паттерны проектирования

  • Схема «Модель — Представление — Контроллер» в языке Smalltalk

  • SMALLTALK ____________________________________________________________________________

  • Рис. 10.1.

  • ПРИМЕР MVC _________________________________________________________________________

  • Объектно-ориентированный подход. Объектно_ориентированный_подход. Объектно ориентированный подход Мэтт Вайсфельд 5е международное издание ббк 32. 973. 2018


    Скачать 5.43 Mb.
    НазваниеОбъектно ориентированный подход Мэтт Вайсфельд 5е международное издание ббк 32. 973. 2018
    АнкорОбъектно-ориентированный подход
    Дата31.03.2023
    Размер5.43 Mb.
    Формат файлаpdf
    Имя файлаОбъектно_ориентированный_подход.pdf
    ТипДокументы
    #1028905
    страница22 из 25
    1   ...   17   18   19   20   21   22   23   24   25
    Таблица 9.1..Кардинальность.ассоциаций.классов
    Необязательная/Ассоциация
    Кардинальность
    Обязательная
    Employee/Division
    1
    Обязательная
    Employee/JobDescription
    1...n
    Обязательная
    Employee/Spouse
    0...1
    Необязательная
    Employee/Child
    0...n
    Необязательная
    НОТАЦИЯ КАРДИНАЛЬНОСТИ _________________________________________________________
    Нотация.0...1.означает,.что.у.работника.может.не.быть.супруга.либо.иметься.один.
    супруг..Нотация.0...n.означает,.что.у.работника.может.быть.любое.количество.детей.
    от.нуля.до.бесконечности.
    На рис. 9.7 показана диаграмма класса для рассматриваемой нами системы.
    Обратите внимание, что на этой диаграмме класса кардинальность указана вдоль ассоциативных линий. Загляните в табл. 9.1, чтобы узнать, является ли опреде- ленная ассоциация обязательной.
    Ассоциации, включающие множественные объекты
    Как нам представить ассоциацию, которая может включать множественные объекты (например, от 0 до большого количества детей) в коде? Вот код для класса
    Employee
    :
    import java.util.Date;
    public class Employee extends Person{
    private String CompanyID;

    201
    Кардинальность. .
    private String Title;
    private Date StartDate;
    private Spouse spouse;
    private Child[] child;
    private Division division;
    private JobDescription[] jobDescriptions;
    public String getCompanyID() {return CompanyID;}
    public String getTitle() {return Title;}
    public Date getStartDate() {return StartDate;}
    public void setCompanyID(String CompanyID) {}
    public void setTitle(String Title) {}
    public void setStartDate(int StartDate) {}
    }
    Рис. 9.7. Кардинальность.на.UML-диаграмме

    Глава.9..Создание.объектов.и.объектно-ориентированное.проектирование
    202
    Обратите внимание, что классы, для которых имеет место отношение «один ко многим», представлены в коде массивами:
    private Child[] child;
    private JobDescription[] jobDescriptions;
    Необязательные ассоциации
    Когда речь идет об ассоциациях, одним из наиболее важных аспектов является необходимость позаботиться о проектировании вашего приложения таким об- разом, чтобы оно выполняло проверку необязательных ассоциаций. Это озна- чает, что ваш код должен проверять, имеет ли место null для определенной ассоциации.
    Допустим, в приводившемся ранее примере ваш код полагает, что у каждого работника есть супруг. Однако если один из работников окажется не состоящим в браке, то у кода возникнет проблема (рис. 9.8). Если ваш код в действитель- ности ожидает, что супруг будет иметься, то при его выполнении вполне может произойти сбой, что ввергнет систему в нестабильное состояние. Важно, чтобы код проводил проверку на предмет условия null
    , а также обрабатывал его как допустимое условие.
    Например, если супруг отсутствует, то код не должен пытаться вызывать метод
    Spouse
    , иначе это может привести к сбою приложения. Таким образом, код дол- жен быть способен обработать объект
    Employee
    , у которого нет
    Spouse
    Рис. 9.8. Проверка.всех.необязательных.ассоциаций

    203
    Связываем.все.воедино:.пример. .
    Связываем все воедино: пример
    Поработаем над простым примером, который свяжет воедино концепции на- следования, интерфейсов, композиции, ассоциаций и агрегаций в рамках одной компактной системной диаграммы.
    Снова обратимся к примеру, приводившемуся в главе 8, но на этот раз с одним дополнением: мы добавим класс
    Owner
    , который будет содержать поведение walkDog
    Напомним, что класс
    Dog наследует напрямую от класса
    Mammal
    . Сплошная стрелка представляет это отношение между классами
    Dog и
    Mammal на рис. 9.9.
    Класс
    Nameable является интерфейсом, реализуемым
    Dog
    , что демонстрирует штриховая стрелка от класса
    Dog к интерфейсу
    Nameable
    Рис. 9.9. UML-диаграмма.для.примера.с.Dog
    В этой главе мы главным образом рассматривали ассоциации и агрегации. От- ношение между классами
    Dog и
    Head считается отношением агрегации, посколь- ку
    Head на самом деле является частью
    Dog
    . Кардинальность, указанная над линией, соединяющей эти два класса на диаграмме, определяет, что для
    Dog может иметься только один класс
    Head
    Отношение между классами
    Dog и
    Owner является отношением ассоциации.
    Owner
    , разумеется, не является частью
    Dog
    , и наоборот, поэтому мы можем с уверенно- стью исключить отношение агрегации. Однако классу
    Dog требуется услуга от
    Owner
    — поведение walkDog
    . Кардинальность, указанная над линией, соединяю- щей классы
    Dog и
    Owner
    , определяет, что для
    Dog может иметься один или более классов, представляющих владельцев (например, как жену, так и мужа можно

    Глава.9..Создание.объектов.и.объектно-ориентированное.проектирование
    204
    считать владельцами, совместно отвечающими за то, чтобы выводить собаку на прогулку).
    Определение этих отношений наследования, интерфейса, композиции, ассоци- ации и агрегации станет основной частью проектной работы, с которой вы бу- дете сталкиваться при проектировании объектно-ориентированных систем.
    ГДЕ HEAD? ____________________________________________________________________________
    Вы,.возможно,.решите,.что.имеет.смысл.присоединить.класс.
    Head
    .к.классу.
    Mammal
    ,.
    а.не.к.классу.
    Dog
    ,.поскольку.в.реальной.жизни.у.всех.млекопитающих.вроде.бы.име- ется.голова..В.этой.модели.я.использовал.класс.
    Dog
    .как.центральный.элемент.при- мера,.в.силу.чего.и.прикрепил.
    Head
    .к.
    Dog
    Резюме
    В текущей главе мы разобрали некоторые особенности композиции, а также два ее типа — агрегацию и ассоциацию. В то время как наследование представляет новую разновидность уже существующего объекта, композиция представляет взаимодействия между разными объектами.
    В трех последних главах мы рассмотрели основы наследования и композиции.
    Используя эти концепции и применяя свои навыки в процессе разработки про- граммного обеспечения, вы сможете проектировать качественные классы и объ- ектные модели. В следующей главе мы поговорим о том, как использовать
    UML-диаграммы классов в качестве средств, помогающих создавать объектные модели.
    Ссылки
    ‰
    Гради Буч, Роберт А. Максимчук, Майкл У. Энгл, Бобби Дж. Янг, Джим
    Коналлен и Келли А. Хьюстон, «Объектно-ориентированный анализ и про- ектирование с примерами приложений» (Object-Oriented Analysis and Design with Applications). — 3-е изд. — Бостон, штат Массачусетс: Addison-Wesley,
    2007.
    ‰
    Петер Коуд и Марк Мейфилд, «Проектирование на Java» (Java Design). —
    Аппер Сэддл Ривер, штат Нью-Джерси: Prentice-Hall, 1997.
    ‰
    Стивен Гилберт и Билл Маккарти, «Объектно-ориентированное проектиро- вание на Java» (Object-Oriented Design in Java). — Беркли, штат Калифорния:
    The Waite Group Press (Pearson Education), 1998.
    ‰
    Скотт Майерс, «Эффективное использование C++» (Effective C++). —
    3-е изд. — Бостон, штат Массачусетс: Addison-Wesley Professional, 2005.

    Глава 10
    ПАТТЕРНЫ ПРОЕКТИРОВАНИЯ
    В разработке программного обеспечения интересно то, что при создании систе- мы фактически воплощается модель системы, существующей в реальном мире.
    К примеру, можно уверенно утверждать, что сфера информационных техноло- гий — это бизнес или она по крайней мере дополняет его.
    Чтобы написать программное обеспечение для бизнеса, разработчику требует- ся тщательно изучить модель работы той или иной сферы. В результате чего разработчики глубоко осведомлены о том, как проходят деловые процессы компании.
    Мы уже рассматривали эту концепцию на страницах этой книги, поскольку она имеет отношение к нашему обсуждению. Например, когда мы затрагивали при- менение наследования для абстрагирования поведения и атрибуты млекопита- ющих, модель была основана на тех моделях, которые существуют в действи- тельности, а не на модели, искусственно вымышленной для наших целей.
    Получается, что когда мы создаем класс mammal
    , мы можем потом применять его для построения бесконечного количества прочих классов, например dogs
    , cats и т. п., потому что у всех млекопитающих есть общие поведения и атрибуты.
    Ради познания паттернов мы изучаем собак, кошек, белок и прочих млекопита- ющих. Такие паттерны позволяют нам рассмотреть животное и определить, на самом ли деле это млекопитающее или, допустим, пресмыкающееся, у которого могут быть другие паттерны поведений и атрибутов.
    На протяжении всей истории люди применяли модели во многих сферах жизни, в том числе и в технической.
    Эти паттерны идут рука об руку со святая святых разработки программного обеспечения — повторным использованием кода.
    В этой главе мы рассматриваем паттерны проектирования, сравнительно новую область в разработке программного обеспечения (первая эпохальная книга о паттернах проектирования опубликована еще в 1995 году).

    Глава.10..Паттерны.проектирования
    206
    Паттерны проектирования, пожалуй, являются одним из наиболее влиятельных шагов за последние несколько лет, произошедших из движения за объектно- ориентированный подход. Сами по себе паттерны прекрасно подходят для концепции повторного использования программного кода. Из-за того, что объ- ектно-ориентированная разработка содержит в своей основе идею повторного использования кода, объектно-ориентированная разработка идет с паттернами рука об руку.
    Основная концепция паттернов проектирования вращается вокруг принципа лучших практик. Под лучшими практиками мы понимаем случаи, когда созда- ются подходящие эффективные решения. Такие решения документированы так, чтобы окружающие смогли получить положительные результаты из успешных действий, уже проверенных в прошлом, поскольку мы учимся методом проб и ошибок.
    Одна из важнейших книг по объектно-ориентированному программированию — это «Приемы объектно-ориентированного проектирования. Паттерны проекти- рования», написанная Эрихом Гаммой, Ричардом Хелмом, Ральфом Джонсоном и Джоном Влиссидесом. Эта книга стала значительной вехой в сфере разработ- ки программного обеспечения, лексика из нее распространилась в мире ком- пьютерных наук и стала невероятно популярной, поэтому авторы книги полу- чили прозвище Gang of Four (Банда четырех).
    В трудах по объектно-ориентированной разработке можно часто встретить упоминание Банды четырех или просто GoF.
    Цель этой главы — объяснить, что такое паттерны проектирования. Объяснение каждого паттерна проектирования выходит далеко за рамки этой книги и займет не один толстый том. Чтобы добиться цели этой главы, мы рассмотрим каждую из трех категорий паттернов проектирования (порождающий, структурный и поведенческий) по классификации Банды четырех и приведем по одному конкретному примеру из каждой категории.
    Чем хороши паттерны проектирования?
    Суть концепции паттернов проектирования относится не только к понятию повторного использования кода. Bзначально паттерны проектирования при- менялись при строительстве зданий и планировании городов. Как верно под- метил Кристофер Александер в работе A Pattern Language: Towns, Buildings,
    Construction (Язык шаблонов: города, здания, сооружения): «Каждый паттерн повторяет собой задачу, многократно возникающую в том, что нас окружает, и таким образом содержит суть решения такой задачи, тем самым позволяя повторное применение решения столько, сколько требуется, не выполняя двой- ной работы».

    207
    Схема.«Модель.—.Представление.—.Контроллер».в.языке.Smalltalk. .
    ЧЕТЫРЕ ЭЛЕМЕНТА ПАТТЕРНА ________________________________________________________
    По.классификации.The.GoF.паттерн.содержит.четыре.основных.элемента:
    y
    Название.паттерна..В.нем.кратко.выражается.описание.задачи.проектирования,.
    ее.решений.и.последствий.ее.выполнения..Творческое.мышление.при.создании.
    названия.для.паттерна.непременно.расширяет.словарный.запас,.который.мы.
    используем.в.проектировании..Оно.помогает.проектировать.на.более.высоких.
    уровнях.абстракции..Благодаря.словарному.запасу,.который.мы.используем.при.
    создании.паттернов,.мы.можем.говорить.о.них.с.нашими.коллегами,.вести.до- кументацию.и.даже.самостоятельно.их.обдумывать..Так.легче.продумать.кон- струкции.и.отладить.их.взаимодействие.друг.с.другом..На.протяжении.периода.
    разработки.нашего.каталога.подбор.подходящего.названия.всегда.был.одной.из.
    труднейших.задач.
    y
    Задача.дает.представление,.когда.применяется.паттерн..Он.раскрывает.содер- жание.задачи..Он.может.содержать.особые.задачи.проектирования,.такие.как.
    представление.алгоритмов.в.виде.объектов..Он.может.содержать.описание.
    структур.классов.и.объектов,.которые.указывают.на.негибкость.проектирования..
    Иногда.задача.включает.в.себя.список.условий,.которые.должны.быть.выполне- ны.до.применения.паттерна,.чтобы.оно.имело.смысл.
    y
    Решение.приводит.описание.элементов,.из.которых.состоит.конструкция,.их.
    отношения,.обязанности.и.взаимодействие..Решение.не.приводит.описаний.той.
    или.иной.реализации.конструкции,.поскольку.паттерн.подобен.лишь.шаблону,.
    который.применим.в.различных.ситуациях..Вместо.этого.паттерн.дает.абстракт- ное.описание.задачи.проектирования,.а.также.как.общее.расположение.элемен- тов.(в.нашем.случае.классов.и.объектов).эту.задачу.решает.
    y
    Последствия.—.это.результаты.и.компромиссы,.полученные.применением.пат- терна..Когда.мы.даем.описание.решениям.в.проектировании,.последствия.часто.
    остаются.без.огласки,.однако.стоит.заметить,.что.они.критически.важны.для.
    оценки.альтернативных.решений.и.для.лучшего.понимания.издержек.и.преиму- ществ.в.результате.применения.паттерна..Последствия.для.программного.обе- спечения.часто.касаются.компромиссов.в.пространстве.и.времени..Они.могут.
    также.решить.проблемы.языка.и.реализации..Поскольку.повторное.использова- ние.кода.часто.является.важным.фактором.в.объектно-ориентированном.про- ектировании,.последствия.применения.паттерна.оказывают.влияние.на.гибкость,.
    расширяемость.и.переносимость.системы..Создание.списка.последствий.по- может.ясно.понять.и.оценить.их.
    Схема «Модель — Представление —
    Контроллер» в языке Smalltalk
    Чтобы понимать историческую перспективу, нужно рассмотреть схему «Мо- дель — Представление — Контроллер» (MVC), впервые реализованную в Smalltalk (и применяемую в прочих языках объектно-ориентированного программирования). MVC часто применяется для наглядного объяснения

    Глава.10..Паттерны.проектирования
    208
    происхождения паттернов проектирования. Парадигма «Модель — Пред- ставление — Контроллер» применялась для создания пользовательских ин- терфейсов в Smalltalk. Smalltalk был, пожалуй, первым популярным объектно- ориентированным языком.
    SMALLTALK ____________________________________________________________________________
    Smalltalk.—.это.результат.сочетания.нескольких.идей,.которые.зародились.в.стенах.
    Xerox.PARC..Эти.идеи.в.том.числе.включали.в.себя,.помимо.прочих,.применение.
    мыши.и.графического.оконного.интерфейса..Smalltalk.—.это.прекрасный.язык,.
    который.заложил.фундамент.для.дальнейшего.появления.объектно-ориентиро- ванных.языков..Иногда.разработчики.отмечают,.что.C++.на.самом.деле.не.объект- но-ориентированный,.в.то.время.как.Smalltalk.им.является..Хотя.C++.был.очень.
    популярен.на.заре.объектно-ориентированного.проектирования,.Smalltalk.всегда.
    имел.свой.узкий.круг.приверженцев..Java.же.—.это.язык,.охватывающий.и.разра- ботчиков.на.C++.
    Понятие паттернов проектирования распределяет роли компонентов MVC следующим образом:
    Модель отвечает за функционирование самого приложения, представле- ние отвечает за графическое отображение, а контроллер — за то, как ин- терфейс реагирует на ввод данных пользователем.
    Проблема предыдущих парадигм в том, что модель, представление и контроллер раньше были одной сущностью. Предположим, что какой-либо единый объект содержит все три компонента. В парадигме MVC у каждого из трех компонентов будут собственные интерфейсы, отделенные от интерфейсов других. Поэтому если требуется изменить интерфейс пользователя, то придется вносить изме- нения только в представление. На рис. 10.1 показана схема MVC при проекти- ровании.
    Рис. 10.1..Парадигма.«Модель.—.Представление.—.Контроллер»

    209
    Типы.паттернов.проектирования.. .
    Помните, многое из того, что мы изучили в области объектно-ориентированной разработки, сталкивается с проблемой интерфейсов и реализации. Насколько это возможно, мы стараемся отделить интерфейс от реализации. В той же мере мы стараемся отделять интерфейсы друг от друга. Например, мы не хотим со- четания нескольких интерфейсов, которые не имеют никакого отношения друг к другу (или к решению рассматриваемой проблемы). Парадигма MVC была одной из первых в таком разделении интерфейсов.
    Паттерн MVC четко определяет интерфейсы между отдельными компонентами, которые относятся к одной из основных распространенных задач в программи- ровании — созданию пользовательских интерфейсов, их связи с бизнес-логикой и данными.
    Если происходит разделение пользовательских интерфейсов, бизнес-логики и данных по паттерну MVC, получится гибкая и устойчивая система. Допустим, пользовательский интерфейс находится на клиентской машине, бизнес-логи- ка — на сервере приложения, а данные — на сервере для них. Разработка при- ложения таким способом позволит изменить графический интерфейс без вся- кого вмешательства в бизнес-логику и данные. Подобным образом, если нужно изменить бизнес-логику и посчитать то или иное поле по-другому, можно внести в нее изменения, не затрагивая интерфейс. И наконец, если нужно за- менить базу данных и хранить данные другим способом, можно сменить способ хранения данных на сервере без вмешательства как в интерфейс, так и в бизнес- логику. Это несомненно предполагает неизменность интерфейсов между тремя составляющими.
    ПРИМЕР MVC _________________________________________________________________________
    В.качестве.примера.можно.привести.окно.со.списком.в.пользовательском.интер- фейсе..Представьте.графический.интерфейс,.который.включает.в.себя.список.теле- фонных.номеров..Само.окно.—.это.представление,.список.номеров.—.это.модель,.
    а.контроллер.представляет.собой.логику,.соединяющую.окно.и.список.
    1   ...   17   18   19   20   21   22   23   24   25


    написать администратору сайта