Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Медведев_С++_CLI_C#_Java_J#.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
5 Мб
Скачать
☆

7.2 Диаграмма классов

Исключительное место при разработке диаграмм модели создаваемой системы занимает диаграмма классов.

Диаграмма классов (class diagram) состоит из взаимосвязанных классов. Каждый класс на диаграмме изображён в виде прямоугольника, состоящего из трёх частей, включающих соответственно имя класса, его данные и его функции (и операции).

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

Перед разработкой классов необходимо подробнейшим образом вникнуть в решаемую проблему, выделить основные понятия и термины, проанализировать их и сделать обобщения различного уровня. Обобщённые или абстрактные однотипные сущности представляются в виде классов. Из каждого класса можно создать конкретные экземпляры - объекты, отличающиеся значениями данных и своим поведением. Разработка диаграммы классов - работа, требующая и пунктуальности и творчества. Ведь можно создать классы либо слишком крупными или мелкими, что повлечёт к наличию в системе небольшого числа сложных объектов, либо к появлению очень большого числа мелких. В первом случае будет не только трудно отладить громоздкие классы, но и будет сложно обеспечить связь между объектами из-за громоздкого интерфейса. Во втором случае могут возникнуть трудности с управлением армадой многоликих объектов, хотя отладка их простых классов не представит трудности. У профессионала-программиста со временем появляется опыт, и эти проблемы исчезают.

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

Поскольку главный объект и связанный с ним класс являются владельцем информации, назовём этот класс CInf (CInf- Class Information). Для общения с пользователем включим в этот класс интерфейсные функции:

  • Enter ( ), которая вводит исходные данные о компьютере и магазине;

  • Show ( ), которая выводит все введённые данные, и

  • Clear ( ), которая удаляет всю введённую информацию.

В соответствии с заданием информация о каждом купленном компьютере должна размещаться в отдельном элементе списка. Пусть каждый элемент списка будет объектом класса, например, CData. Теперь можно уточнить данные класса CInf. Так как объект класса CInf - владелец списка, то в его классе должны присутствовать указатели (ссылки), указывающие на начало и конец списка:

- pFirst, который указывает на начало списка (объект класса CData), и

- pLast, который указывает на конец списка (объект класса CData или nullptr).

Наступило время изобразить нашу диаграмму классов первого этапа разработки. Она представлена на рис. 7.2.1.

Рис. 7.2.1. Диаграмма классов Inf-приложения первого этапа

На диаграмме связь между классами определяет, что класс CInf является владельцем объектов класса CData, то есть создаёт эти объекты, управляет ими и уничтожает их.

Уточним класс CData. Объекты этого класса являются элементами списка, и каждый из них должен содержать обязательное поле - ссылку на другой элемент. Назовём эту ссылку класса CData как pNext и сделаем её открытой, поскольку к ней непосредственно будет осуществляться ссылка из других объектов.

Кроме этого каждый элемент списка должен содержать информацию об изготовителе и годе изготовления компьютера, об адресе магазина и стоимости компьютера. Поместим соответствующие данные в класс CData. Интерфейсные функции Enter() и Show() класса CData позволят использовать закрытые переменные этого класса. На рис. 7.2.2 представлена уточнённая диаграмма классов.

Итак, класс CData имеет закрытые переменные place (адрес магазина), cost (стоимость), producer (изготовитель) и уеаг (год). Также этот класс содержит открытый указатель pNext для связывания соседних элементов списка и открытые интерфейсные функции Enter() и Show(), которые позволят владельцу записывать и просматривать скрытую информацию.

Рис. 7.2.2. Диаграмма классов Inf-приложения второго этапа

Давайте на последнем третьем этапе скорректируем полученную диаграмму классов, разбив класс CData на два класса: CComputer и CShop. Класс CComputer является владельцем информации о компьютере, а класс CShop- о магазине.

Поскольку для управляемого кода запрещено множественное наследование, то класс CData не может наследовать одновременно классы CShop и CComputer. Поэтому класс CData будет наследовать только класс CShop, а класс CComputer будет представлен объектом с ссылкой pComp.

Окончательная диаграмма классов нашей программы представлена на рис. 7.2.3. Из неё наглядно видно, что в объекте класса CData всё, что возможно, спрятано и оставлен открытый доступ только для связи его с другими объектами, а также для наполнения объекта данными и выборки из него информации посредством интерфейсных функций.

Рис. 7.2.3. Диаграмма классов Inf-приложения третьего этапа