Отношения классов — от UML к коду / Хабр

Отношения классов — от UML к коду / Хабр Любовь
uml, java

Отношения классов — от UML к коду

Диаграмма классов Используя UML, вы можете настроить отношения между классами и их случай. По любой причине; например, вам нужно смоделировать поля приложения. Однако. как отношения отражено в программном коде? В этом коротком исследовании сделана попытка ответить на этот вопрос — показать эти отношения в коде. Сначала давайте уточним, как они соотносятся друг с другом. отношения между классами В UML. Используя различные источники, удалось создать следующую структурную диаграмму, отображающую разновидности отношений :

Отношения классов — от UML к коду / Хабр

Рисунок 1 — Взаимосвязи между классами

Корреляции имеют навигацию: в две стороны или в одну сторону, указывая направление связи. Это означает, что каждый тип корреляции имеет еще два варианта, которые не показаны на диаграмме.

1. обобщение

Таким образом, нашей целью является построение UML-диаграммы классов (класс классов) на объективный код.

Возьмем в качестве области действия отдел кадров предприятия. Начнем создавать эту модель. В нашем примере мы будем использовать язык Java.

Отношения обобщения являются генетическими. Это отношение Это хорошо изучено во всех руководствах по соответствующим языкам ООП. в языке Java, класса другим.

Отношения классов — от UML к коду / Хабр

Рисунок 2 — Отношения между поколениями.

Класс ‘человек’ является более абстрактным, а класс ‘сотрудник’ — более специализированным. Класс ‘Employee’ наследует свойства и методы ‘Man’.

Давайте создадим код для этой диаграммы.

Публичный класс man< protected String name; protected String surname; public void setName(String newName)< name = newName; >public string getName (String)< return name; >public void setsurname (Строка фамилии)< name = newSurname; >public string getsurname()< return surname; >> // наследуем класс Публичный класс man public class employee extends man< private String position; // создаем и конструктор public Employee(String n, String s, String p)< name = n; surname = s; position = p; >public void setposition (String NewProfession)< position = newProfession; >public string getposition()< return position; >> 
2. ассоциация

Ассоциация указывает отношения между метками объектов. класса .

2. 1 бинарный

Отношения классов — от UML к коду / Хабр

В модель добавили класс «idcard» представляет собой карточку распознавания сотрудника (в сложенном виде). Каждый сотрудник может соответствовать только одной idcard, и сила корреляции составляет 1 к 1. Рисунок 3 — Бинарная корреляция

Public class employee extends man< private String position; private IdCard iCard; public Employee(String n, String s, String p)< name = n; surname = s; position = p; >public void setposition (строка newposition)< position = newPosition; >public string getposition()< return position; >public void setidcard (idcard c)< iCard = c; >public idcard getIdcard()< return iCard; >>public class idcard< private Date dateExpire; private int number; public IdCard(int n)< number = n; >public void setnumber (int newnumber)< number = newNumber; >public int getNumber()< return number; >public void setDateXpire (newdatexpire)< dateExpire = newDateExpire; >public date getDateXpire()< return dateExpire; >> 

В программе создаются и связываются объекты.

idcard card = new idcard (123); card. setDateExpire (new SimpledateFormat ("yyyyyyyyyyymm-dd"). parse ("2015-12-31"); sysengineer. setIdcard (card. ); System. out. println ( sysengineer. getName() + "Работает в должности" + sysengineer. getPosition()); System. out. println ( "Учетные данные " + new SimpledateFormat ("yyyy-mm-dd"); действителен для формата (sysengineer. getIdcard(); getDateXpire()). 

В классе сотрудника есть поле карточки, которое имеет тип idcard, поэтому же класс Существует способ присвоить этому полю карточку с ценой и получить getIdcard. Из одного случая объекта employee можно узнать о связанном с ним объекте idCard. Поэтому навигация (линейные стрелки) направлена от сотрудника к IDCard.

2. 2 Взаимосвязь n-архива

Отношения классов — от UML к коду / Хабр

Предположим, что организации необходимо назначить сотрудникам комнаты. Добавьте новый объект. класс Комната. Каждый объект сотрудника может соответствовать многим комнатам. Сила многих корреляций. Переход от комнаты сотрудника. Рисунок 4-n -ранняя корреляция

Теперь давайте зафиксируем это в коде. Создадим новый класс Room:

public class room< private int number; public Room(int n)< number = n; >public void setnumber (int newnumber)< number = newNumber; >public int getNumber()< return number; >> 

Добавим в класс Поля и методы для сотрудников, работающих в комнате:

. Private set room = new Hashset();. public void setroom (room newroom)< room.add(newRoom); >public set getroom().< return room; >public void deleteroom (комната R)< room.remove(r); >. 
public static void main (string [] args)< Employee sysEngineer = new Employee("John", "Connor", "Manager"); IdCard card = new IdCard(123); card.setDateExpire(new SimpleDateFormat("yyyy-MM-dd").parse("2015-12-31")); sysEngineer.setIdCard(card); Room room101 = new Room(101); Room room321 = new Room(321); sysEngineer.setRoom(room101); sysEngineer.setRoom(room321); System.out.println(sysEngineer.getName() +" работает в должности "+ sysEngineer.getPosition()); System.out.println("Удостовирение действует до " + sysEngineer.getIdCard().getDateExpire()); System.out.println("Может находиться в помещеньях:"); Iterator iter = sysEngineer.getRoom().iterator(); while(iter.hasNext())< System.out.println( ((Room) iter.next()).getNumber()); >> 
2. 3 Концентрация

Отношения классов — от UML к коду / Хабр

Введем в модель класс Департаменты (отделы) — Наш бизнес организован по секциям. В каждом отделе может работать один или несколько человек. Раздел содержит одного или более сотрудников и поэтому может быть собран. Могут быть сотрудники, которые не входят ни в одну из секций, например, бизнес-менеджеры. Рисунок 5 — Концентрация.

Публичный класс section.< private String name; private Set employees = new HashSet(); public Department(String n)< name = n; >public void setName (StringNewName)< name = newName; >public string getName (String)< return name; >public void addemployee (newemploye Employee)< employees.add(newEmployee); // связываем сотрудника с этим отделом newEmployee.setDepartment(this); >public Set Getemployees ()< return employees; >public void removemploye (сотрудник e)< employees.remove(e); >> 

Итак, наш класс Помимо переименования производителей и отделов, существуют и другие способы добавления новых сотрудников в отдел, удаления сотрудников и получения всех сотрудников, принадлежащих к отделу. Навигация осуществляется в двух направлениях, поскольку они не показаны на диаграмме. Из объекта «Отдел», где вы можете узнать о сотрудниках, и объекта «Сотрудник» вы можете увидеть, какие части сотрудника принадлежат отделу.

Вы должны легко узнать, какие части сотрудника могут быть добавлены, чтобы вы могли в класс Поля сотрудника и методы для присвоения и получения частей.

. Частный сектор? .public void setDepartment (отдел D)< department = d; >Публичный отдел getDepartment ()
 Отдел ProgrammersDepartment = новый отдел ("Программисты"); programmersdepartment. addemploye (sysengineer); system. out. println ("См. раздел") 
2. 3. 1 Конфигурация

Предположим, что одним из требований нашей системы является хранение данных о предыдущей должности, которую он занимал в компании. Давайте введем новый параметр. класс ‘Past’. В дополнение к свойству ‘Name’ добавим свойство ‘Department’, которое будет ассоциироваться с ним. с классом «Department».

Отношения классов — от UML к коду / Хабр

Поскольку данные о прошлом являются частью данных о сотруднике, они связаны друг с другом, и в то же время данные о прошлом не могут существовать без объекта ‘Employee’. Удаление объекта ‘Employee’ должно привести к удалению объекта ‘Pastposition’. Рисунок 6 — Конфигурация.

Частный класс Past.< private String name; private Department department; public PastPosition(String position, Department dep)< name = position; department = dep; >public void setName (StringNewName)< name = newName; >public string getName (String)< return name; >public void setDDepartment (Раздел D)< department = d; >public отдел getDepartment()< return department; >> 

В класс Сотрудники добавляют свойства и методы для обработки исторических данных.

. private Set Pastposition = new Hashset();. public void setpastposition (pastposition p)< pastPosition.add(p); >public set getPastposition ();.< return pastPosition; >public void deletepastposition (pastposition p)< pastPosition.remove(p); >. 
// меняем позицию sysengineer. setposition ("сторож") iTrator iter = sysengineer. getPastposition(). itrator(); while (iter. hasnext())
3. зависимости

Отношения классов — от UML к коду / Хабр

Чтобы организовать взаимодействие с пользователем, введите класс «Меню». Введем метод «Showemployees», который выводит список сотрудников и должностей. Параметром этого метода является таблица объектов под названием «сотрудники». Поэтому любые изменения, сделанные в класс «Сотрудники» можно также изменить в класса «Меню». Рисунок 7 — Зависимости.

Заметим, что класс Меню» не имеет никакого отношения к сектору приложения, но представляет «Систему». класс большое приложение. Класс «Меню»:

Public class menu.< private static int i=0; public static void showEmployees(Employee[] employees)< System.out.println("Список сотрудников:"); for (i=0; i> > > 
// другой сотрудник директор = новый сотрудник ('Федор', 'Дубов', 'Директор'). Menu menu = new menu (). Сотрудник Сотрудник[] = новый Сотрудник [10]. Сотрудник [0] = системный инженер. Сотрудник [1] = директор. Menu, showemployees (сотрудники), 
4. реализация

Как и в случае с реализацией и генетикой, в языке Java есть явные выражения. утверждения интерфейса и возможность для некоторых людей реализовать их. классом .

Для демонстрации отношения ‘Внедрение’ создает интерфейс ‘подразделения’. Если представить, что организация может быть разделена не только на секции, но и, например, на институты, филиалы и т.д., то интерфейс ‘Unit’ представляет собой наиболее абстрактную единицу деления. Интерфейс ‘Unit’ представляет собой наиболее абстрактную единицу подразделения. Поскольку в каждом подразделении работает много сотрудников, то способ получения количества работающих связан с каждым класса Реализация интерфейса ‘Unit’.

Отношения классов — от UML к коду / Хабр

Рисунок 8 — Применение.

Публичный интерфейс подразделений

Реализация в классе «Department»:

Публичный класс отдел реализует подразделение
System. out. println("Отдел "+sysengineer. getDepartment(). getName() + "emplowed") 

Как вы можете видеть, реализация метода «getPersonCount для класса Section» с методом «Getemployees», возвращающим коллекцию элементов «employee».

Встречи.

Язык моделирования UML имеет набор отношений моделей. классов Однако даже продвинутые языки ООП, такие как Java, имеют только две явные конструкции, отражающие отношения: расширения и интерфейсы/реализации. В результате моделирования получилась следующая схема

Отношения классов — от UML к коду / Хабр

Рис. 8 — Диаграмма классов

Библиография.

1) Г. Бух, Д. Рамбо, А. Якобсон. руководство пользователя UML (Руководство пользователя UML).

3) Эккель Б. Философия Java. Библиотека разработчика. -СПб: Питер, 2001.

(4) Орлов С. Технология машиностроения: учебник. -СПБ: Питер, 2002. -464λ

(5) Мухортов В., Рылов В. ю. Объектно-ориентированное программирование, анализ и проектирование. Учебник. -НОВОСИБИРСК, 2002.

Оцените статью