Дж. Рамбо, М. Блаха - UML 2.0 - Объектно-ориентированное моделирование и разработка (1158633), страница 10
Текст из файла (страница 10)
Если предметом моделирования являются объекты, то почему вообще заходит речь о классах? Все дело в необходимости абстрагирования. Группируя объекты в классы, мы производим абстрагирование в рамках задачи. Именно благодаря абстракциям моделирование оказывается столь мощным инструментом, позволяющим проводить обобщения от нескольких конкретных случаев к множеству подобных альтернатив. Общие определения (такие как название класса и названия атрибутов) хранятся отдельно для каждого класса, а не для каждого экземпляра.
44 Глава 3 ° Моделирование классов Операции могут быть написаны один раз для целого класса, благодаря чему все объекты класса получают возможность повторно использовать написанный код. Например, все эллипсы имеют общие процедуры прорисовки, вычисления площади и проверки на наличие пересечения с некоторой прямой. У многоугольников будет свой набор процедур. Даже в особых случаях (например, для окружностей и квадратов) могут использоваться универсальные процедуры, хотя специальные алгоритмы могут быть и эффективнее.
3.1.3. Диаграммы классов В начале этой главы мы обсудили некоторые основные концепции моделирования, а именно обьекгл и класс. Мы рассказывали о них словами и приводили примеры. Такой подход не дает достаточной четкости и непригоден для описания сложных приложений. Нам нужно средство описания моделей, которое было бы согласованным, точным и простым в использовании. Модели структуры бывают двух типов: диаграммы классов и диаграммы объектов.
Диаграммы классов позволяют описать модель классов и их отношений (а значит, и возможные объекты) при помощи графической системы обозначений. Диаграммы классов полезны как для абстрактного моделирования, так и для проектирования конкретных программ. Они точны, просты для понимания и хорошо зарекомендовали себя на практике. На протяжении всей книги мы будем пользоваться диаграммами классов для отражения структуры приложений. Периодически мы будем использовать и диаграммы объектов.
На таких диаграммах изображаются отдельные объекты и отношения между ними. Диаграммы объектов полезны для документирования тестовых ситуаций и обсуждения примеров. Диаграмма классов описывает бесконечное множество диаграмм объектов. На рис. 3.1 показан класс (слева) и его экземпляры (справа). Объекты /ое5иигй (Джосмит), Магу5йагр (МэриШарп) и безымянная личность являются экземплярами класса Ретзоп (Человек). В языке ()М1.
для обозначения объекта используется прямоугольник, внутри которого ставится имя объекта, двоеточие и имя класса, к которому относится этот объект. И имя объекта, и имя класса подчеркиваются. Мы используем дополнительное соглашение, которое состоит в том, что имена объектов и классов выделяются полужирным шрифтом. ~~~Яш) Объекты Рис. 3.1. Объекты и классы — предмет модели классов Для обозначения класса в ()М1. тоже используется прямоугольник.
Мы указываем имя класса полужирным шрифтом, располагая его посередине прямоугольника. Имя класса мы всегда будем начинать с заглавной буквы. Эти соглашения используются для ссылок на объекты, классы и другие конструкции. Могут быть приняты альтернативные соглашения, например, о допустимости пробелов или знаков подчеркивания в названиях классов или объектов (/ое 5т1гй, 3.1. Концепции объекта и класса 45 /ое 5ппй). Соглашение об использовании заглавных букв между строчных попу- лярно в литературе, посвя1ценной объектно-ориентированным технологиям, но не является требованием языка ()М1.. 3.1.4.
Значения и атрибуты Значение (ча1це) — это элемент данных. Значения можно определить, изучив примеры, приведенные в документации по поставленной задаче. Атрибут (аггг1Ьцге)— это именованное свойство класса, описываюшее значение, которое может иметь каждый объект класса. Атрибуты — это прилагательные.
Они получаются абстрагированием типичных значений. Можно провести следуюшую аналогию: объект относится к классу так, как значение относится к атрибуту. В моделях классов преобладают структурные конструкции (то есть классы и отношения между ними, о которых речь пойдет дальше). Атрибуты имеют не столь важное значение и служат для уточнения характеристик классов и отношений. Атрибутами объектов класса Регзоп (Человек) являются пате (имя), Ь)ггЫаге (датарождения) и гее18Ьг (вес).
Атрибутами объектов класса Саг (Машина) являются со1ог (цвет), тоае1геаг (годвыпуска) и гиефЬг (вес). У каждого конкретного объекта атрибут принимает свое конкретное значение. Например, у объекта уоеЯт11Ь атрибут Ь(ггЫаге может иметь значение «21 октября 1983». Другими словами, Джо Смит родился 23 октября 1983 года. У разных объектов один и тот же атрибут может иметь как разные, так и одинаковые значения. Имя атрибута уникально в рамках класса (но не обязательно уникально во множестве всех классов). Поэтому у классов Регзоп и Саг может быть атрибут с одним и тем же названием — гее1дЬА Не следует путать значения с объектами. Атрибут должен описывать значения, а не объекты.
В отличие от объектов значения не обладают индивилуальностью. Например, все экземпляры числа 17 неразличимы между собой. Точно так же неразличимы экземпляры строкового значения «Канада». С другой стороны, страна, которая называется Канада, является объектом, у которого атрибут «название» имеет значение «Канада».
На рис. 3.2 показана система обозначений атрибутов. Класс Ретоп (Человек) имеет атрибуты пате (имя) и Ь(ггЫаге (датарождения). Мате — это строка, а Ь1ггЫаге — дата. У одного из объектов класса Регзоп атрибут пате имеет значение «Джо Смит», а Ь1ггЫаге имеет значение «21 октября 1983». У другого объекта того же класса атрибут пате имеет значение «Мэри Шарп», а атрибут Ь(ггЫаге имеет значение «16 марта 1950». Рвгвоп пвтв: випв Ьаек1а1в: бв1в Клаве е атрибутами Объваты ео значениями Рис.
3.2. Атрибуты обеспечивают детализацию классов 46 Глава 3 ° Моделирование классов Согласно системе обозначений ПМЕ, атрибуты указываются во втором (сверху) отделе прямоугольника, обозначающего класс. После каждого атрибута могут быть указаны необязательные сведения о нем (например, тип и значение по умолчанию). Перед значением по умолчанию ставится знак равенства.
Мы указываем название атрибута обычным шрифтом (не полужирным) и первую букву названия не делаем заглавной. Во втором отделе прямоугольника объекта могут быть указаны значения атрибутов. В этом случае после названия атрибута ставится знак равенства, после которого записывается значение этого атрибута. Значения атрибутов мы выравниваем по левому краю и не выделяем их полужирным шрифтом. Иногда среда реализации может требовать наличия у объекта уникального идентификатора. Идентификаторы всегда неявным образом присутствуют в модели классов. Их не следует указывать явно (рис. 3.3). Большинство объектноориентированных языков генерируют идентификаторы для ссылок на объекты автоматически.
Так же легко определить идентификаторы и для баз данных. Идентификаторы являются артефактом вычислительной системы и не имеют внутреннего смысла. Неправильно Правильно Рис. З.З. Не следует указывать идентификаторы объектов явным образом Не следует путать внутренние идентификаторы с атрибутами. Внутренние идентификаторы вводятся исключительно для удобства реализации и не имеют никакого смысла в контексте приложения. Такие атрибуты, как индивидуальный номер налогоплательщика, серийный номер и телефонный номер, не являются внутренними идентификаторами, поскольку они имеют значение в реальном мире.
Их можно назвать полноправными атрибутами. 3.1.5. Операции и методы Операция — это функция или процедура, которая может быть применена к объектам класса. Операциями класса Сотрапу (Компания) могут быть лЬе (нанять), йге (уволить) и рауЖийепс) (выплатитьДивиденды). Операциями класса %троса (Окно) могут быть орел (открыть), с(озе (закрыть), ЬЫе (скрыть) и гесйр(ау (перерисовать). Все объекты одного класса имеют обгций список операций.
Каждая операция в качестве неявного аргумента принимает свой целевой объект. Поведение операции зависит от класса целевого объекта. Объект всегда знает свой собственный класс, а потому он всегда знает и правильную реализацию операции. Одна и та же операция может быть применена к разным классам. Такая операция называется полиморфной: в разных классах она может принимать разные 3.1. Концепции объекта и класса 4У формы. Методом (шейоо) называется реализация операции в конкретном классе. Например, класс Р!!е (Файл) может иметь операцию рппг (печать). Печать АЯСП- файлов, двоичных файлов и цифровых изображений может осуществляться разными методами.
Все эти методы с логической точки зрения выполняют одно и то же действие: печать файла. Поэтому они и являются реализациями одной и той же операции рппг. При этом каждый метод может быть реализован своим собственным кодом. У операции могут быть и другие аргументы, кроме целевого объекта. Эти аргументы могут быть как значениями, так и другими объектами. Выбор метода зависит только от класса целевого объекта, но не от классов аргументов, которые являются объектами, сколько бы их ни было. В некоторых объектно-ориентированных языках, в частности в СЕОЯ, выбор метода может определяться произвольным числом аргументов, но такая универсальность значительно усложняет семантику модели.