Главная » Просмотр файлов » Гради Буч - Объектно-ориентированный анализ и проектирование с примерами приложений на С++

Гради Буч - Объектно-ориентированный анализ и проектирование с примерами приложений на С++ (1158635), страница 44

Файл №1158635 Гради Буч - Объектно-ориентированный анализ и проектирование с примерами приложений на С++ (Гради Буч - Объектно-ориентированный анализ и проектирование с примерами приложений на С++) 44 страницаГради Буч - Объектно-ориентированный анализ и проектирование с примерами приложений на С++ (1158635) страница 442019-09-18СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 44)

Кроме того, мы видим, что класс GrainCrop (посев зерновых)использует класс GrainYieldPredictor (предсказатель урожая зерновых)как часть своей реализации. Это обычно означает, что некоторый метод классаGrainCrop использует услуги, предоставляемые классомGrainYieldPredictor.Кроме уже рассмотренных в этом примере случаев, обычнаяассоциация так же может быть украшена символами доступа. Метасвязь (связьмежду инстанци-рованным классом и его метаклассом) не может получитьтаких украшений.Символы ограничения доступа можно применять к вложенности вовсех ее формах. На обозначении класса мы можем указать доступ к атрибутам,операциям или вложенным классам, добавив символ ограничения доступа вкачестве префикса к имени. Например, на рис.

5-12 показано, что класс Cropимеет один открытый атрибут scientificName (ботаническое название),один защищенный - yield (урожай), и один закрытый - nutrientValue(количество удобрения). Такие же обозначения используются для вложенныхклассов или категорий классов. По умолчанию все вложенные классы икатегории являются открытыми, но мы можем указать ограниченный доступсоответствующей меткой.Типы отношении.

В некоторых языках встречаются настольковсепроникающие типы отношений, с настолько фундаментальной семантикой,что было бы оправдано введение новых символов. В C++, например, имеетсятри таких конструкции:переменная (или функция) класса;•staticсовместно используемый базовый класс в•virtualромбовиднойструктуре наследования;•friendкласс, которому даны права доступа к закрытым изащищенным элементам другого класса.Логично использовать для них такое же украшение в видетреугольного значка, как и для абстрактного класса, но с символами S,V или Fсоответственно.Рассмотрим пример на рис.

5-13, который представляет другой ракурсклассов, показанных на предыдущем рисунке. Мы видим, что базовый классOrganicItem (органический компонент) содержит один экземпляр классаItemDictionary (словарь компонентов) и что этот экземпляр содержитсясамим классом, а не его экземплярами (то есть он является общим для всехэкземпляров). В общем случае мы указываем обозначение static на одном изконцов ассоциации или на конце связи агрегации.Рассматривая класс GrainCrop, мы видим, что структуранаследования приобретает ромбовидную форму (связи наследования,разветвившись, сходятся). По умолчанию, в C++ ромбовидная формаструктуры наследования ведет к тому, что в классах-листьях дублируютсяструктуры базового, дважды унаследованного класса. Чтобы класс GrainСropполучил единственную копию дважды унаследованных структур классаOrganicItem, мы должны применить виртуальное наследование, какпоказано на рисунке.

Мы можем добавлять украшение виртуальной связитолько к наследованию.Значок дружественности можно присоединить к любому типу связи,расположив значок ближе к серверу, подразумевая, что сервер считает клиентасвоим другом. Например, на рис. 5-13 класс PlanAnalyst дружит с классомCrop, а, следовательно, имеет доступ к его закрытыми и защищеннымэлементам, включая оба атрибута yield и scientificName.Физическое содержание.

Как показано в главе 3, отношениеагрегации является специальным случаем ассоциации. Агрегация обозначаетиерархию "целое/часть" и предполагает, что по агрегату можно найти егочасти. Иерархия "целое/часть" не означает обязательного физическогосодержания: профсоюз имеет членов, но это не означает, что он владеет ими.С другой стороны, отдельная запись о посевеРис. 5-14. Физическое содержаниеименно физически содержит в себе соответствующую информацию, такую,как имя посева, урожай и график подкормки.Агрегация обычно выявляется при анализе и проектировании;уточнение ее как физического содержания является детализирующим,тактическим решением.

Однако, распознать этот случай важно, во-первых, дляправильного определения конструкторов и деструкторов классов, входящих вагрегацию, и, во-вторых, для генерации и последовательного исправлениякода.Физическое содержание отмечается на диаграмме украшением наконце линии, обозначающей агрегацию; отсутствие этого украшения означает,что решение о физическом содержании не определено. В гибридных языкахмы различаем два типа содержания:•по значению целое физически содержит часть•по ссылкецелое физически содержит указатель или ссылку начасть.В чисто объектно-ориентированных языках, в особенности в Smalltalk,физическое содержание бывает только по ссылке.Чтобы отличить физическое присутствие объекта от ссылки на него,мы используем закрашенный квадратик для обозначения агрегации позначению и пустой квадратик - для агрегации по ссылке. Как будетобсуждаться позже, этот стиль украшений согласуется с соответствующейсемантикой на диаграммах объектов.Рассмотрим пример, приведенный на рис.

5-14. Мы видим, чтоэкземпляры класса CropHistory (история посева) физически содержатнесколько экземпляров классов NutrientSchedule (график внесенияудобрений) и СlimateEvent (климатическое событие). Физическоесодержание частей агрегации по значению означает, что их создание илиуничтожение происходит при создании или уничтожении самого агрегата.Таким образом, агрегация по значению гарантирует, что время жизни агрегатасовпадает с временем жизни его частей.

В противоположность этому, каждыйэкземпляр класса CropHistory обладает только ссылкой или указателем наодин экземпляр класса Crop. Это означает, что времена жизни этих двухобъектов независимы, хотя и здесь один является физической частью другого.Еще один случай - отношение агрегации между классами CropEncyclopedia(энциклопедия посевов) и CropHistory.

В данном случае мы вообще неупоминаем физическое содержание. Диаграмма говорит о том, что эти двакласса состоят в отношении "целое/часть", и что по экземпляруCropEncyclopedia можно найти соответствующий экземплярCropHistory, но физическое содержание тут ни при чем. Вместо этого можетбыть разработан другой механизм, реализующий эту ассоциацию.

Например,объект класса CropEncyclopedia запрашивает базу данных, и получаетссылку на подходящий экземпляр CropHistory.Роли и ключи. В предыдущей главе мы указали на важность описанияразличных ролей, играемых объектами в их взаимодействии друг с другом; вследующей главе мы изучим, как идентификация ролей помогает провестипроцесс анализа.Коротко говоря, роль абстракции - это то, чем она является длявнешнего мира в данный момент. Роль обозначает потребность илиспособность, в силу которых один класс ассоциируется с другим.

Текстовоеукрашение, описывающее роль класса, ставится рядом с любой ассоциацией,ближе к выполняющему роль классу, как это видно на рис. 5-15. На этомрисунке классы PlanAnalyst (анализатор планов) и Nutritionist (агрохимик)оба являются поставщиками информации для объекта классаCropEncyclopedia (они оба добавляют информацию в энциклопедию), аобъекты класса PlanAnalyst являются также и пользователями (онипросматривают материал из энциклопедии). В любом случае, роль клиентаопределяет индивидуальное поведение и протокол, который он использует.Обратим внимание также на рефлексивную ассоциацию класса PlanAnalyst:мы видим, что несколько экземпляров этого класса могут сотрудничать друг сдругом и при этом они используют особый протокол, отличающийся от ихповедения в ассоциации, например, с классом CropEncyclopedia.Рис.

5-15. Роли и ключиНа этом примере показана также ассоциация между классамиCropEncyclopedia и Crop, но с другим типом украшения, котороепредставляет ключ (изображается как идентификатор в квадратных скобках).Ключ - это атрибут, значение которого уникально идентифицирует объект. Вэтом примере класс CropEncyclopedia использует атрибутscientificName, как ключ для поиска требуемой записи. Вообще говоря,ключ должен быть атрибутом объекта, который является частью агрегата, иставится на дальнем конце связи-ассоциации.

Возможно использованиенескольких ключей, но значения ключей должны быть уникальны.Рис. 5-16. Значок ограниченияОграничения. Как говорилось в главе 3, ограничение - это выражениенекоторого семантического условия, которое должно сохраняться. Иначеговоря, ограничение - инвариант класса или связи, который долженсохраняться, если система находится в стабильном состоянии. Подчеркнем - встабильном состоянии, потому что возможны такие переходные явления, прикоторых меняется состояние системы в целом и система находится вовнутренне рассогласованном состоянии, так что невозможно соблюсти всеналоженные ограничения. Соблюдение ограничений гарантируется только встабильном состоянии системы.Мы используем для ограничений украшения, похожие на те, чтоиспользовались нами для обозначения ролей и ключей: помещаемзаключенное в фигурные скобки выражение ограничения рядом с классом илисвязью, к которым оно прилагается.

Ограничение присоединяется котдельным классам, к ассоциации в целом или к ее участникам.На рис. 5-16 мы видим, что для класса EnviromentalControllerналожено ограничение на мощность, постулирующее, что в системе имеетсяне более 7 экземпляров этого класса. При отсутствии ограничения намощность класс может иметь сколько угодно экземпляров. Обозначение дляабстрактного класса, введенное ранее, является специальным случаемограничения (нуль экземпляров), но так как это явление очень частовстречается в иерархиях классов, оно получило собственный тип украшения(треугольник с буквой А).Класс Heater (нагреватель) имеет ограничение другого типа. Врисунок включено требование гистерезиса в работе нагревателя: он не можетбыть включен, если с момента его последнего выключения прошло меньшепяти минут. Мы прилагаем это ограничение к классу Heater, считая, чтоконтроль за его соблюдением возложен на экземпляры класса.На этой диаграмме изображены еще два типа ограничений:ограничение на ассоциации.

Характеристики

Список файлов книги

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6455
Авторов
на СтудИзбе
305
Средний доход
с одного платного файла
Обучение Подробнее