Главная » Все файлы » Просмотр файлов из архивов » PDF-файлы » Дж. Арлоу, А. Нейштадт - UML 2 и Унифицированный процесс - Практический объектно-ориентированный анализ и проектирование

Дж. Арлоу, А. Нейштадт - UML 2 и Унифицированный процесс - Практический объектно-ориентированный анализ и проектирование, страница 46

PDF-файл Дж. Арлоу, А. Нейштадт - UML 2 и Унифицированный процесс - Практический объектно-ориентированный анализ и проектирование, страница 46 Объектно-ориентированный анализ и проектирование (53090): Книга - 7 семестрДж. Арлоу, А. Нейштадт - UML 2 и Унифицированный процесс - Практический объектно-ориентированный анализ и проектирование: Объектно-ориентированный ан2019-09-18СтудИзба

Описание файла

PDF-файл из архива "Дж. Арлоу, А. Нейштадт - UML 2 и Унифицированный процесс - Практический объектно-ориентированный анализ и проектирование", который расположен в категории "". Всё это находится в предмете "объектно-ориентированный анализ и проектирование" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Просмотр PDF-файла онлайн

Текст 46 страницы из PDF

Операция draw() для объектов класса Square будетотрисовывать квадраты, а для объектов класса Circle – круги. И реализации операции getArea() тоже будут разными. Для квадрата она будетвозвращать width*height, а для круга – π*r2. В этом суть полиморфизма:объекты разных классов имеют операции с одинаковой сигнатурой,но разными реализациями.Инкапсуляция, наследование и полиморфизм – это «три столпа» ОО.Полиморфизм позволяет разрабатывать более простые системы, которые проще изменять, потому что разные объекты в них интерпретируются одинаково.По сути, полиморфизм является важнейшим аспектом ОО, посколькупредоставляет возможность отправлять объектам разных классов оди+наковое сообщение и получать от них соответствующий ответ.

Инымисловами, если послать объектам класса Square сообщение draw(), они отрисуют квадрат, а если послать такое же сообщение объектам классаCircle, они отрисуют круг. Объекты кажутся разумными.10.4.1. Пример полиморфизмаЗдесь представлен пример полиморфизма в действии. Предположим,есть класс Canvas (холст), обслуживающий коллекцию классов Shape.Хотя это и несколько упрощенная картина, работа многих графических систем действительно подобна этому.

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

В данномShapeCanvas1*draw( g : Graphics )getArea() : intgetBoundingArea() : intSquaredraw( g : Graphics )getArea() : intCircledraw( g : Graphics )getArea() : intРис. 10.8. Диаграмма классов: полиморфизм в действии238Глава 10. Наследование и полиморфизмслучае есть два конкретных подкласса, Circle и Square. Таким образом,коллекция может содержать объекты Circle и/или объекты Square.С полиморфизмом объекты разных классов поразному отвечают наодно и то же сообщение.На рис.

10.9 представлена модель объектов, соответствующая диаграмме классов, изображенной на рис. 10.8. Эта модель объектов показывает, что у объекта :Canvas имеется коллекция из четырех объектов Shape: s1, s2, s3 и s4, где s1, s3 и s4 – объекты класса Circle, а s2 – объект класса Square. Что происходит, когда объект :Canvas посылает каждому объекту этой коллекции сообщение draw()? Каждый объект, чтои не удивительно, реагирует правильно: объекты Square отрисовываютквадраты, а объекты Circle – круги. Именно класс объекта определяет,что отрисовывает объект.

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

Например, есть три объекта классаSquare с разными значениями атрибутов width (ширина) и height (высота). Получив сообщение draw(), каждый из этих классов отрисует квадрат (т. е. значение или семантика операции остается неизменной), новсе квадраты будут разного размера в зависимости от значений атрибутов width и height.Вот еще один пример. Бизнесправила снятия денег и вычисления процентов отличаются в зависимости от типа банковского счета. Так, для1.draw( )2.draw( ):Canvass1:Circles2:Square3.draw( )s3:Circle4.draw( )s4:CircleРис. 10.9. Объект Canvas имеет коллекцию из 4+х объектов Shape23910.4.

Полиморфизмтекущих счетов обычно существуют ограничения по превышению кредита, и поэтому они могут иметь отрицательный баланс, в то времякак баланс депозитных счетов не может опускаться ниже нуля. Аналогично часто поразному вычисляются и начисляются на счет проценты. Один из простых способов моделирования этих банковских операций показан на рис. 10.10. Описывается абстрактный класс Account(счет). Затем предоставляются конкретные подклассы CheckingAccount(текущий счет) и DepositAccount (депозитный счет).

Абстрактный классопределяет абстрактные операции withdraw() (снять деньги) и calculateInterest() (вычислить процент), которые реализуются поразному каждым из конкретных подклассов.Конкретные операции тоже могут быть полиморфными, но это считаетсяплохим стилем.Обратите внимание, что мы также переопределили конкретную операцию deposit() (разместить), предоставив ей новую реализацию в классеShareAccount (паевой счет). Запомните, что для переопределения операции базового класса необходимо только предоставить подкласс с операцией, имеющей абсолютно аналогичную сигнатуру.

Мы сделали этодля ShareAccount, потому что бизнесправила размещения денег на паевом счете (ShareAccount) отличаются от правил для других типов счетов(Account). Например, могут быть правила, определяющие минимальный размер вклада. Тогда будет две реализации deposit(): одна в Account,а другая в ShareAccount. Это значит, что теперь deposit() является полиморфной операцией.

То есть конкретные операции, такие как deposit(),могут быть полиморфными!Необходимо быть очень осторожным при переопределении конкретных операций, потому что при этом происходит не просто предоставление реализации операции абстрактного суперкласса – в этом случае изменяется существующая реализация. Выяснить допустимость этогоможно, проверив спецификацию операции суперкласса и убедившись,Account1BankShareAccountwithdraw( amount )calculateInterest()deposit( amount )*withdraw( amount )calculateInterest()deposit( amount )CheckingAccountwithdraw( amount )calculateInterest()DepositAccountwithdraw( amount )calculateInterest()Рис.

10.10. Диаграмма классов для банковских операций240Глава 10. Наследование и полиморфизмчто при этом ее контракт не будет нарушен. Абстрактные операцииможно безопасно переопределять всегда, потому что они именно дляэтого и предназначены. Однако переопределение конкретных операций может иметь неожиданные последствия и представлять некоторую опасность. Часто операция подкласса просто выполняет какоетодополнительное действие и вызывает операцию суперкласса. Иначеговоря, она добавляет собственное поведение в операцию суперкласса.Это хороший способ повторного использования и расширения поведения конкретной операции суперкласса, поскольку, как правило, онбезопасен.Некоторые языки программирования обеспечивают возможность предотвратить переопределение конкретной операции суперкласса в подклассе.

В Java добавление ключевого слова final (финальный) в сигнатуру операции явно запрещает переопределение операции. На практике в Java считается хорошим стилем определять как final все операции,кроме тех, которые вы хотите явно определить как полиморфные.10.5. Дополнительные аспекты обобщенияВ данном разделе мы рассмотрим два углубленных аспекта обобщения: множества обобщения и множества всех типов. Понятие множеств обобщения может быть весьма полезным. А вот множества всехтипов используются крайне редко. Они включены в эту книгу главным образом для обеспечения полноты изложения.10.5.1.

Множества обобщенияПодклассы любого суперкласса можно организовать в одно или болеемножеств обобщения.Множества обобщения распределяют подклассы соответственно определенному правилу.Множества обобщения группируют подклассы соответственно определенному правилу или на основании специализации. Обсудим пример.На рис. 10.11 показано, что у класса Shape может быть множество подклассов.

Рассматривая эти подклассы, мы обнаруживаем здесь две совершенно разные группы фигур: двух и трехмерные.На диаграмме классов это разделение подклассов можно отобразитьпутем ассоциирования каждой группы фигур с разным множествомобобщения, как показано на рис. 10.12.К множествам обобщения могут применяться ограничения. Они определяют, являются ли множества:10.5. Дополнительные аспекты обобщения241ShapeРис. 10.11. Класс Shape имеет множество подклассов•{complete} (полный) – подклассы множества обобщения охватываютвсе возможные варианты. Например, множество обобщения gender(пол) класса Person (человек), содержащего два подкласса, Male(мужчина) и Female (женщина), можно было бы считать {complete},поскольку существует только два пола;•{incomplete} (неполный) – могут существовать подклассы, крометех, которые представлены в множестве обобщения.

Множествообобщения twoDShape явно {incomplete}, поскольку двухмерных фигур очень много;•{disjoint} (несовместный) – объект может быть экземпляром одногои только одного из членов набора множества обобщения. Это самыйраспространенный случай;•{overlapping} (перекрывающийся) – объект может быть экземпляромнескольких членов множества обобщения. Это довольно редкийслучай, поскольку подразумевает множественное наследованиеили множественную классификацию.множество обобщенияCubeSpherePyramidthreeDShapeимя множества обобщения(не обязательно)ShapetwoDShapeSquareCircleT riangleмножество обобщенияРис. 10.12. Множества обобщения на диаграмме классов242Глава 10.

Наследование и полиморфизмОграничения множеств обобщения могут комбинироваться, как показано в табл. 10.1.Таблица 10.1ОграничениеМножествополноЧлены множества могутиметь общие экземпляры{incomplete, disjoint} – применяетсяпо умолчаниюНетНет{complete, disjoint}ДаНет{incomplete, overlapping}НетДа{complete, overlapping}ДаДаРисунок 10.13 иллюстрирует применение ограничений множеств обобщения к примеру с классом Shape.Как видите, множества обобщения – это аналитическая концепция, которая позволяет разделять множества подклассов на группы. Когда дело доходит до реализации, ни один из широко используемых ОО языков программирования не поддерживает напрямую множества обобщения, и с точки зрения реализации эта концепция является избыточной.При реализации множества обобщения или игнорируются, или в качестве решения вводится новый уровень иерархии наследования, еслив этом есть какойто смысл.

Взглянув на аналитическую модель нарис. 10.13, можно предположить, что существуют какието атрибутыили операции, общие для всех twoDShape и всех threeDShape. Это дает основание для перевода множеств обобщения в новые классы иерархиинаследования, как показано на рис.

10.14.CubeSpherePyramidthreeDShape {disjoint, incomplete}ShapetwoDShape {disjoint, incomplete}SquareCircleTriangleРис. 10.13. Применение ограничений множеств обобщения10.5.2. Множества всех типовМножества всех типов (powertype) – это аналитическая концепция,которая в обычном повседневном моделировании встречается крайне10.5. Дополнительные аспекты обобщенияCubeSphere243Pyramid{disjoint, incomplete}ThreeDShapeShapeT woDShape{disjoint, incomplete}SquareCircleT riangleРис.

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