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

  • Рис. 9.1.

  • «Стабильные сложные системы почти не поддаются декомпозиции»

  • «Стабильные сложные системы почти всегда состоят из подсистем лишь нескольких разных типов, упорядоченных в разных комбинациях»

  • «Стабильные сложные системы почти всегда развиваются из простых рабочих систем»

  • ЯВЛЯЕТСЯ ЛИ КОМПОЗИЦИЯ ФОРМОЙ АССОЦИАЦИИ ______________________________

  • Рис. 9.4.

  • АГРЕГАЦИЯ В ПРОТИВОПОСТАВЛЕНИИ С АССОЦИАЦИЕЙ ____________________________

  • Рис. 9.5.

  • ОДНОГО ПРАВИЛЬНОГО ОТВЕТА НЕТ _________________________________________________

  • Рис. 9.6.

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


    Скачать 5.43 Mb.
    НазваниеОбъектно ориентированный подход Мэтт Вайсфельд 5е международное издание ббк 32. 973. 2018
    АнкорОбъектно-ориентированный подход
    Дата31.03.2023
    Размер5.43 Mb.
    Формат файлаpdf
    Имя файлаОбъектно_ориентированный_подход.pdf
    ТипДокументы
    #1028905
    страница21 из 25
    1   ...   17   18   19   20   21   22   23   24   25
    190
    были рассмотрены преимущественно разные типы наследования, в этой главе мы углубимся в различные типы композиции и разберем, как объекты взаимо- действуют друг с другом.
    Рис. 9.1. Отношение.наследования
    Отношения композиции
    Мы уже видели ранее: композиция означает, что тот или иной элемент являет- ся частью некого целого. Отношение наследования выражается как отношение
    является экземпляром, а композиция — как отношение содержит как часть. Мы интуитивно знаем, что автомобиль содержит как часть руль (рис. 9.2).
    Композицию следует использовать потому, что она позволяет создавать систе- мы путем объединения менее сложных частей. Это распространенный среди людей подход к рассмотрению проблем. Исследования показывают, что даже наиболее способные из нас могут одновременно удержать в кратковременной памяти максимум семь порций данных. Поэтому нам нравится использовать

    191
    Поэтапное.создание. .
    абстрактные концепции. Мы не говорим, что у нас есть большое устройство с рулем, четырьмя покрышками, двигателем и т. д., мы говорим, что у нас есть автомобиль. Так нам легче изъясняться и сохранять ясность.
    Рис. 9.2. Отношение.композиции
    Композиция также помогает и другим образом, например, в том, чтобы сделать части взаимозаменяемыми. Если бы все рули были одинаковыми, то не имело бы значения, какой конкретно руль устанавливается в конкретном автомобиле.
    В сфере разработки программного обеспечения взаимозаменяемые части под- разумевают повторное использование.
    В главах 7 и 8 своей книги «Объектно-ориентированное проектирование на
    Java» Стивен Гилберт и Билл Маккарти приводят большое количество под- робных примеров ассоциаций и композиции. Я настоятельно рекомендую вам обратиться к этому материалу для более глубокого взгляда на соответствую- щие вопросы. А здесь мы рассмотрим некоторые существенные особенности этих концепций и исследуем несколько вариаций их примеров.
    Поэтапное создание
    Еще одно основное преимущество использования композиции состоит в том, что системы и подсистемы можно создавать независимо и, пожалуй, что более важно, тестировать и сопровождать независимо.
    Нет сомнения, что программные системы довольно сложны. Чтобы создать качественное программное обеспечение, вы должны придерживаться одного важнейшего правила, которое позволит вам добиться успеха: все нужно делать максимально простым. Чтобы большие программные системы работали долж- ным образом и были легки в сопровождении, их следует разделить на менее крупные, более управляемые части. Как это сделать? В 1962 году, в статье под названием «Архитектура сложности» (The Architecture of Complexity) лауреат
    Нобелевской премии Герберт Саймон (Herbert Simon) изложил следующие мысли относительно стабильных систем.

    Глава.9..Создание.объектов.и.объектно-ориентированное.проектирование
    192
    ‰
    «Стабильные сложные системы обычно представлены в форме иерархии,
    где любая система состоит из более простых подсистем, каждая из которых
    тоже состоит из более простых подсистем» — вам, возможно, уже знаком этот принцип, поскольку он лежит в основе функциональной декомпози- ции — метода, стоящего за процедурной разработкой программного обеспе- чения. При объектно-ориентированном проектировании аналогичные прин- ципы распространяются и на композицию — создание сложных объектов из более простых частей.
    ‰
    «Стабильные сложные системы почти не поддаются декомпозиции» — это означает, что вы можете идентифицировать части, образующие систему, и отличить взаимодействия между частями и внутри частей. В стабильных системах меньше связей между их частями, чем внутри их частей. Таким образом, модульная стереосистема с простыми связями между звуковыми колонками, плеером и усилителем по своей природе более стабильна, чем интегрированная система, декомпозиция которой не является легкой.
    ‰
    «Стабильные сложные системы почти всегда состоят из подсистем лишь
    нескольких разных типов, упорядоченных в разных комбинациях» — эти подсистемы, в свою очередь, обычно состоят из частей лишь нескольких разных типов.
    ‰
    «Стабильные сложные системы почти всегда развиваются из простых
    рабочих систем» — вместо того чтобы создавать новую систему «с нуля», то есть изобретать велосипед, в качестве ее основы следует использовать проверенные конструкции, которые ей предшествуют.
    Допустим, в нашем примере стереосистема (рис. 9.3) является полностью ин- тегрированной и не разделенной на образующие ее компоненты (то есть пред- ставляет собой систему в виде одного большого черного ящика). Что бы было, если бы CD-плеер сломался и стал непригодным к использованию? Вам при- шлось бы нести в ремонт всю систему целиком. Это оказалось бы сложнее и до- роже, кроме того, вы не смогли бы пользоваться другими компонентами.
    Эта концепция становится очень важной для языков программирования вроде
    Java и других, включенных во фреймворк .NET. Поскольку объекты загружа- ются динамически, разделение конструкции является очень важным. Например, если вы распределите Java-приложение и при этом понадобится воссоздать один из файлов классов (для устранения ошибок или сопровождения), то вам при- дется перераспределить только этот конкретный файл класса. Если бы весь код располагался в одном файле, то потребовалось бы перераспределять все при- ложение целиком.
    Допустим, система разделена на компоненты, а не является единым блоком.
    Если при этом сломается CD-плеер, то вы сможете отсоединить его и отнести в ремонт (заметьте, что все компоненты связаны соединительными шнурами).
    Это будет легче и дешевле, а также займет меньше времени, чем если бы вам

    193
    Поэтапное.создание. .
    CD-плеер
    Магнитофон
    Рис. 9.3. Поэтапное.создание,.тестирование.и.верификация.полной.системы пришлось возиться с единым, интегрированным блоком. Дополнительное пре- имущество состоит в том, что вы все равно сможете пользоваться остальной частью системы. Вы даже сможете купить новый CD-плеер, поскольку он яв- ляется компонентом. В то же время мастер сможет подключить ваш сломанный
    CD-плеер к своей ремонтной системе, чтобы проверить его и починить. В целом компонентный подход работает довольно хорошо. Композиция — это одна из основных стратегий, которые имеются в арсенале у вас как разработчика про- граммного обеспечения и позволяют бороться с его сложностью.
    Одно из основных преимуществ использования компонентов заключается в том, что вы можете задействовать компоненты, созданные другими разработчиками или даже сторонними поставщиками. Однако применение того или иного ком- понента из другого источника требует определенной степени доверия к нему.
    Сторонние компоненты должны происходить из надежного источника, и вы

    Глава.9..Создание.объектов.и.объектно-ориентированное.проектирование
    194
    должны быть уверены в том, что это программное обеспечение было протести- ровано, не говоря уже о том, что оно должно как следует выполнять заявленные функции. По-прежнему существует много таких людей, которые предпочитают создать свои собственные компоненты, нежели доверять тем, что были созданы другими.
    Типы композиции
    В целом существует два типа композиции — ассоциация и агрегация. В обоих случаях отношения представляют собой взаимодействия между объектами.
    В примере со стереосистемой, который только что использовался для объясне- ния одного из основных преимуществ композиции, была продемонстрирована ассоциация.
    ЯВЛЯЕТСЯ ЛИ КОМПОЗИЦИЯ ФОРМОЙ АССОЦИАЦИИ? ______________________________
    Композиция.—.это.еще.одна.область.в.объектно-ориентированных.технологиях,.где.
    имеет.место.вопрос.«что.было.раньше.—.курица.или.яйцо?».В.одних.учебниках.го- ворится,.что.композиция.является.формой.ассоциации,.а.в.других.—.что.ассоциация.
    является.формой.композиции..Так.или.иначе,.в.этой.книге.мы.считаем.наследование.
    и.композицию.двумя.основными.способами.создания.классов..Таким.образом,.в.этой.
    книге.ассоциация.считается.формой.композиции.
    Все формы композиции включают отношение «содержит как часть». Однако между ассоциациями и агрегациями имеются тонкие различия, которые зависят от того, как вы представляете себе части целого. В случае с агрегациями вы обычно видите только целое, а в случае с ассоциациями — части, которые об- разуют целое.
    Агрегации
    Пожалуй, наиболее интуитивно понятной формой композиции является агре- гация. Она означает, что сложный объект состоит из других объектов. Теле- визор представляет собой ясный и точный пример устройства, которое вы используете для развлечения. Глядя на свой телевизор, вы видите один теле- визор. Большую часть времени вы не думаете о том, что в состав телевизора входят микрочипы, экран, тюнер и т. д. Естественно, вы видите переключатель для включения/выключения телевизора и, конечно же, экран. Однако люди обычно не так представляют себе телевизоры. Когда вы приходите в магазин бытовой техники, продавец не говорит: «Позвольте показать вам эту агрегацию микрочипов, экрана, тюнера и т. д.» Он говорит: «Позвольте показать вам этот телевизор».

    195
    Типы.композиции. .
    Аналогичным образом, когда вы отправляетесь покупать автомобиль, вы не планируете выбирать все его отдельные компоненты. Вы не собираетесь решать, какие свечи зажигания или дверные ручки купить. Вы идете покупать автомо- биль. Разумеется, вы все же выберете некоторые его функции, но по большей части будете выбирать автомобиль как целое, сложный объект, состоящий из множества других сложных и простых объектов (рис. 9.4).
    Рис. 9.4. Иерархия.агрегаций.для.Car
    Ассоциации
    В то время как агрегации представляют отношения, при которых вы обычно видите целое, ассоциации представляют как целое, так и части. Как уже отме- чалось в примере со стереосистемой, разные компоненты располагаются по отдельности и подключаются к целому соединительными шнурами (которые связывают разные компоненты).

    Глава.9..Создание.объектов.и.объектно-ориентированное.проектирование
    196
    В качестве примера взгляните на компьютерную систему (рис. 9.5). Как вы по- нимаете, компьютерная система — это целое. Компонентами являются монитор, клавиатура, мышь и системный блок компьютера. Каждый из них — это отдель- ный объект, однако все вместе они образуют целую компьютерную систему.
    Системный блок использует клавиатуру, мышь и монитор, чтобы поручить им некоторую часть работы. Другими словами, системный блок компьютера нуж- дается в услугах мыши и при этом не способен предоставить такую услугу сам.
    Поэтому он запрашивает соответствующую услугу у отдельной мыши через определенный порт и кабель, соединяющий мышь с этим системным блоком компьютера.
    АГРЕГАЦИЯ В ПРОТИВОПОСТАВЛЕНИИ С АССОЦИАЦИЕЙ ____________________________
    Агрегация.—.это.сложный.объект,.состоящий.из.других.объектов..Ассоциация.
    .используется,.когда.одному.объекту.нужно,.чтобы.другой.объект.оказал.ему.ус- лугу.
    Рис. 9.5. Ассоциации.как.отдельная.услуга
    Использование ассоциаций в сочетании с агрегациями
    Во всех этих примерах вы, возможно, заметили одну вещь: разделительная ли- ния между тем, что такое ассоциация, и тем, что такое агрегация, часто оказы- вается размытой. Достаточно сказать, что многие из ваших наиболее интересных проектных решений будут сводиться к выбору того, использовать ассоциации или же агрегации.
    Например, образец компьютерной системы, приводившийся ранее для описания ассоциаций, также включает агрегацию. Несмотря на то что взаимодействие между системным блоком компьютера, монитором, клавиатурой и мышью яв- ляется ассоциацией, системный блок компьютера как таковой представляет собой агрегацию. Вы видите только системный блок компьютера, но на самом деле это сложная система, состоящая из других объектов, включая чипы, мате- ринскую плату, видеокарту и т. д.

    197
    Избегание.зависимостей. .
    Допустим, объект
    Employee состоит из объектов
    Address и
    Spouse
    . Вы, возможно, посчитаете, что объект
    Address является агрегацией (по сути, частью объекта
    Employee
    ), а объект
    Spouse
    — ассоциацией. В целях пояснения предположим, что оба —
    Employee и
    Spouse
    — представляют работников. Если соответствующий работник будет уволен, то
    Spouse все равно останется в системе, однако произой- дет нарушение ассоциации.
    Аналогичным образом, в примере со стереосистемой у ресивера имеется ассо- циация со звуковыми колонками, а также с CD-плеером. Кроме того, звуковые колонки и CD-плеер сами по себе являются агрегациями других объектов, как, например, силовые кабели.
    Хотя в примере с автомобилем двигатель, свечи зажигания и двери представ- ляют композицию, стереосистема также представляет отношение ассоциации.
    ОДНОГО ПРАВИЛЬНОГО ОТВЕТА НЕТ _________________________________________________
    Как.и.обычно,.нет.какого-то.одного.абсолютно.правильного.ответа,.когда.дело.ка- сается.принятия.проектного.решения..Проектирование.не.является.точной.наукой..
    Хотя.мы.можем.устанавливать.общие.правила,.чтобы.жить.по.ним,.они.не.являются.
    жесткими.
    Избегание зависимостей
    При использовании композиции желательно не делать объекты сильно завися- щими друг от друга. Один из способов сделать объекты сильно зависящими друг от друга заключается в смешении доменов. Объект в одном домене не должен смешиваться с объектом в другом домене за исключением определенных ситу- аций. Вернемся к примеру со стереосистемой, чтобы разобраться в этой концеп- ции.
    Если ресивер и CD-плеер будут «располагаться» в отдельных доменах, то сте- реосистему будет легче поддерживать в работоспособном состоянии. Например, если сломается такой компонент, как CD-плеер, то вы сможете отправить его в ремонт отдельно. В данном случае CD-плеер и MP3-плеер «обладают» от- дельными доменами. Это обеспечивает гибкость, например возможность купить
    CD- и MP3-плеер от разных производителей. Таким образом, если вы решите заменить CD-плеер устройством от другого производителя, то сможете это сделать.
    Иногда смешение доменов несет в себе определенное удобство. Хороший пример этого: существование комбинаций «телевизор/видеомагнитофон» и «телевизор/
    DVD-плеер». Стоит согласиться, что сочетание обоих устройств в одном моду- ле очень удобно. Но если вдруг телевизор выйдет из строя, то плеер уже не получится использовать, поскольку в этом случае он является частью одного и того же устройства.

    Глава.9..Создание.объектов.и.объектно-ориентированное.проектирование
    198
    Вам необходимо решить, что важнее при определенных обстоятельствах: удоб- ство или стабильность. Одного правильного ответа не существует. Все зависит от приложения и среды. В случае с комбинацией «телевизор/видеомагнитофон» мы решили, что удобство интегрированного блока значительно перевешивало риск его более низкой стабильности (рис. 9.6). Вспомните стереосистему на рис. 9.3, чтобы закрепить представление о том, что такое неинтегрированная система.
    Рис. 9.6. Удобство.в.противопоставлении.со.стабильностью
    СМЕШЕНИЕ ДОМЕНОВ _______________________________________________________________
    Важно.понять,.обеспечит.ли.смешение.доменов.удобство..Если.преимущества.об- ладания.комбинацией.«телевизор/видеомагнитофон».перевешивают.риск.и.потен- циальное.время.простоя.отдельных.компонентов,.то.смешение.доменов.может.
    оказаться.предпочтительным.выбором.при.проектировании.
    Кардинальность
    В книге «Объектно-ориентированное проектирование на Java» Гилберт и Мак- карти описывают кардинальность как количество объектов, участвующих в ас- социации, с указанием того, является это участие обязательным или необяза- тельным. Чтобы определить кардинальность, Гилберт и Маккарти ставят следующие вопросы.
    ‰
    Какие именно объекты будут взаимодействовать с какими именно другими объектами?
    ‰
    Сколько объектов будет принимать участие при каждом взаимодействии?
    ‰
    Взаимодействие будет обязательным или необязательным?

    199
    Кардинальность. .
    К примеру, взглянем на следующий образец. Мы создадим класс
    Employee
    , ко- торый будет наследовать от
    Person и иметь отношения с приведенными далее классами:
    ‰
    Division
    ;
    ‰
    JobDescription
    ;
    ‰
    Spouse
    ;
    ‰
    Child
    Что эти классы делают? Являются ли они необязательными? Сколько их тре- буется
    Employee
    ?
    ‰
    Division y
    Этот объект содержит информацию, касающуюся отдела, в котором тру- дится работник.
    y
    Каждый работник должен трудиться в отделе, поэтому отношение явля- ется обязательным.
    y
    Работник трудится в одном и только одном отделе.
    ‰
    JobDescription y
    Этот объект содержит сведения о служебных обязанностях, в том числе, скорее всего, такую информацию, как шкала заработной платы и диапазон уровня заработной платы.
    y
    У каждого работника должны иметься служебные обязанности, поэтому отношение является обязательным.
    y
    Работник может занимать разные должности в течение срока пребывания в компании. Таким образом, у работника может иметься большое коли- чество должностных обязанностей. Сведения о них могут быть сохранены как история, если произойдет смена должности работника, либо может получиться так, работник одновременно занимает две разные должности.
    Например, начальник отдела может принять на себя обязанности работ- ника, если тот уволится, а человек ему на замену еще не будет нанят.
    ‰
    Spouse y
    В этом упрощенном примере класс
    Spouse содержит только дату годов- щины.
    y
    Работник может состоять или не состоять в браке. Таким образом,
    Spouse является необязательным.
    y
    У работника может быть только один супруг.

    Глава.9..Создание.объектов.и.объектно-ориентированное.проектирование
    200
    ‰
    Child y
    В этом упрощенном примере класс
    Child содержит только строку
    FavoriteToy y
    У работника могут иметься или не иметься дети.
    y
    У работника может не быть детей либо иметься несметное количество детей (ого!). Вы могли бы принять проектное решение относительно верхнего предела количества детей, с которым сможет справиться си- стема.
    Чтобы можно было подытожить все это, в табл. 9.1 представлена кардинальность ассоциаций классов, которые мы только что рассмотрели.
    1   ...   17   18   19   20   21   22   23   24   25


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