Главная » Просмотр файлов » Дж. Рамбо, М. Блаха - UML 2.0 - Объектно-ориентированное моделирование и разработка

Дж. Рамбо, М. Блаха - UML 2.0 - Объектно-ориентированное моделирование и разработка (1158633), страница 93

Файл №1158633 Дж. Рамбо, М. Блаха - UML 2.0 - Объектно-ориентированное моделирование и разработка (Дж. Рамбо, М. Блаха - UML 2.0 - Объектно-ориентированное моделирование и разработка) 93 страницаДж. Рамбо, М. Блаха - UML 2.0 - Объектно-ориентированное моделирование и разработка (1158633) страница 932019-09-18СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

Суперкласс называется базовым классом (Ьазе), а подкласс — порожденным (денчед) классом. Непосредс)пвенный базовый класс (д(гесс Ьазе) — это прямой предок порожденного класса, а косвенный базовый класс ()пд)гесс Ьазе) — более удаленный предок. В С++ в отличие от )ача полиморфизм не является автоматическим. Класс может смешивать методы, разрешение которых осуществляется автоматически во время выполнения программы, со всеми прочими методами.

Чтобы разрешить полиморфизм, метод нужно объявить как и)тиа)'. Все прочие методы будут вызываться в соответствии с типом ссылки на объект, а не в соответствии с фактическим типом порожденного класса, даже если в порожденном классе метод перекрывается. с1азз Не11о ( // рнЫ1с: чобб иеппоб1() ( сопС « "Ье11о1п" у ) ч1гсча1 чоьб иесьоб2() ( сочс « "Ье11о1п") ) ); с1азз ОообЬуе : рпЬ11с Не11о ( // рпЫьс: чоьб тесьоб1() ( сост « "Чообьуе1п")) чоьб иеосъб2() (сочС « "НообЬуе1п'Ч ) )) 1пс ваап () ( Сообьуе Не11оа Ь = ш // тот ве обьект, но ссылка базового типа С. С Щ()) О.

1П 2(); Ь. СЬ и()) Ь. СЬ 2(); ) В результате на экран будет выведен следующий текст: дообЬуе // иепйоб1 Нообьуе О иегьобз Ьещо О Сдоб) Чообьуе // иегйоб2 не виртуальный, вызывается из подкласса виртуальный, вызывается из подкласса не виртуальный, вызывается из базового класса виртуальный, вызывается из базового класса с1а*з Бач1пчайссоппо: рпЫьс Ассоспп (... ) При закрытом наследовании все методы базового класса становятся закрытыми.

Такое наследование подразумевает, что базовый класс используется для упрощения реализации порожденного класса, но при этом порожденный класс не С++ не позволяет запретить перекрытие методов, однако в иерархии, где часть методов перекрывается, а часть — нет, отсутствие модификатора о)гтиа! может указывать на желание автора сохранить базовый метод в неизменности. Спецификация доступа в С++ включена в синтаксис описания наследования. Порожденный класс может иметь тип доступа риЫ)с, ргогесгес( или рноаге.

Открытое наследование подразумевает, что все открытые методы базового класса остаются открытыми и в порожденном классе. 388 Глава 18 ° Объектно-ориентированные языки является частным случаем базового класса. На практике лучше инкапсулировать базовый тип в качестве члена порожденного класса )с использованием делегирования — см. раздел 15.9.3). Защищенное наследование подразумевает, что открытые методы базового класса доступны только потомкам данного класса.

Реально это используется редко. Абстрактные классы получаются при включении по крайней мере одного чисто виртуального метода, при объявлении которого используется синтаксис инициализации нулем: оо)(г/по = О. Такие классы не могут иметь экземпляров, а порожденные от них классы являются абстрактными до тех пор, пока не реализуют все унаследованные чисто виртуальные методы.

С++ поддерживает множественное наследование, На практике оптимальная комбинация родительских классов представляет собой смесь конкретных типов и абстрактных классов, описывающих требования к поведению. Последние являются чем-то вроде интерфейсов )ауа, благодаря чему вы получаете возможность определять основные реализации методов там, где это удобно. с1азв Ассоипс ( // не абстрактный риЫгс: /* предположим, что реализация метода Ровс может быть разной для равных типов счетов.

Базовая реализация — предлагаемый по умолчанию вариант */ чггсиа1 чо1б Ровс(11оас аюоипг] ( .. . ) 11оас Ва1апсе() ( гесигп Ьа1апсе; ) рг1часе: 11оас Ьа1апсе; с1азз 1псегезсэеаг1пэдссг ( // абстрактный класс риЬ1гс: ч1ггиа1 11оас са1с1пгегезг() = 0; // чисто виртуальный метод 11оас васе() ( гесигп гасе; ) рг1чаге: 11оас гасе1 ): с1азз Бачгпэвдссоипг : риЬ11с Ассоипс, риЫгс 1псегевсэеаг1пэдсст ( риЫгс: чггсиа1 11оас Са1с1псегезс() ( расчет причитаююихся процентов 18.3.5.

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

18.3. Реализация структуры 389 Односторонние ассоциации Односторонние ассоциации сокращают взаимные зависимости между классами. Когда один класс ссылается на другой, последний должен быть виден и доступен исходному. Ссылаю)цийся класс должен поддерживать ассоциацию своими силами. Обычно он использует интерфейс того класса, на который ссылается. Насколько возможно сократить зависимости, настолько облегчается обслуживание системы и повышается возможность повторного использования.

Например, если бы нам не нужно было получать совокупность сотрудников компании на рис. 17.7, достаточно было бы указателя из класса Регзоп на класс Сотрапу. В языке)ача класс Репоп может просто содержать поле типа Сотрипу. рпь1гс с1азз Сопрапу ( . . . ) риътьс с1авв Регзоп ( рг1часе Соврапу епр1оуег) Язык С++ позволяет реализовать атрибуты-ссылки двумя способами. Чаще всего используется указатель, что позволяет изменять ссылку. Если предположить, что человек может менять работодателей, мы получим следующий код на С++. (Этот код допускает отсутствие работодателя — значение лиЫ, — что не согласуется с кратностью, указанной на рис. 17.7. Допустимые значения кратности должны обеспечиваться методами, изменяющими значение данного аргумента.) с1авв Соерапу ( .

. . ) с1авв Регвоп ( Сопрапу* еер1оуег) Ссылка на класс подразумевает постоянную связь, в результате которой содержащий эту связь объект зависит от объекта-атрибута. Ссылки должны быть связаны в момент инициализации. Они не могут быть нулевыми и не могут изменять свое значение. Таким образом, в данном случае язык гарантирует наличие объекта ссылки. Если предположить, что счет (Ассоипг) создается в конкретном банке (Валя) и не может быть передан в другой банк и никакой счет не может существовать без банка, получится следующий код: с1азв Вапь ( .

. . ) с1азв Ассоипс ( в кз ьапк! Это требование языка С++ делает необходимым существование экземпляра класса Валя перед порождением экземпляра класса Ассе)глс (см. раздел 18А.1). Частичное ограничение этого рода может быть получено выдача, если объявить атрибут объектного типа как г)ла) что гарантирует невозможность другого объекта присваивания переменной-ссылке. Тем не менее требование существования таким образом закодировано быть не может. 390 Глава 18 ° Объектно-ориентированные языки При использовании атрибутов-ссылок для реализации ассоциаций следует быть осторожным, чтобы не допустить непредвиденного изменения участвующих в ассоциации объектов. Объект, содержащий атрибут-ссылку, может послужить «черным ходом» к другому объекту, на который он ссылается.

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

Двусторонние ассоциации Двусторонние ассоциации требуют приложения усилий на обоих полюсах связи. Ассоциацию типа «один-к-одному» можно реализовать посредством взаимных ссылок двух объектов или посредством отдельного объекта-ассоциации. Ассоциация типа «один-ко-многим» требует одной ссылки на одном полюсе и совокупности ссылок на другом полюсе (или объекта-ассоциации).

Например, клиент может иметь несколько счетов, и мы хотим иметь возможность прослеживать соответствующую ассоциацию в обоих направлениях. И выдача, и в С++ имеются типы объектных совокупностей, которые можно использовать для реализации связи на полюсе с кратностью «много», рнь1гс с1азз Ассонпс рггнасе Снзгоюег снзсоюег; г'/ полюс с кратностью 1 гюрогг Зача.нг11.* УГ лля обрашення к классу Назьзег рпЬ1 с с1азз Снзсоюег Гу совокупность ссылок на счета рггчаге назьзег ассоопгз = пен назьзег ы; Классы-ассоциации Класс-ассоциация позволяет повысить независимость объектов благодаря устранению прямых ссылок на связанные классы, однако при этом падает эффективность работы системы и повышается сложность реализации ассоциаций.

Объект ассоциации представляет собой множество кортежей, каждый из которых содержит одно значение из каждого из участвуюших в ассоциации классов. Объект бинарной ассоциации может быть реализован в виде двух объектов- словарей, каждый из которых осушествляет отображение в одном направлении. В библиотеках ~ауа и С++ предусмотрена поддержка отображения объектов. Чтобы инкапсулировать связи и сделать работу с ними интуитивно понятной, отображение можно упаковать во вспомогательный класс, который будет служить диспетчером при создании или использовании участвуюших в ассоциации объектов.

18.4. Реализация функциональности 391 Выбор реализации Если модель не содержит указаний относительно выбора метода реализации ассоциаций, вы можете сделать этот выбор самостоятельно, опираясь иа масштаб и архитектуру системы, среду разработки приложения и природу этого приложения. Если вы ие хотите модифицировать сушествуюшие классы, создайте класс-ассоциацию. С помощью таких классов лучше всего реализуются ассоциации типа «один-ко-миогим», в случае если объектов у полюса с кратностью «миого» может быть действительно много. Для простых ассоциаций удобно использовать атрибуты-ссылки.

Односторонние ассоциации более эффективны и безопасны. Инкапсуляция ссылок требует особого внимания. 18.4. Реализация функциональности Закончив реализацию структуры модели, вы можете переходить к реализации функциональности. Для каждого класса нужно указать методы вместе с их сигнатурой (иазваиие метода, параметры, тип результата). Модель классов подразумевает существование множества методов. Очевидно, что вы должны иметь возможность создавать и уничтожать объекты и связи, а также обращаться к значениям атрибутов.

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

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

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