Tabla de Contenidos
Агрегирането е вид асоцииране между класове, което може да се извърши в различни обектно-ориентирани езици за програмиране, като Java. Това е процес, който позволява кодът да се използва повторно бързо и ефективно, което прави програмите много по-лесни за писане и по-ефективно изпълнение.
Най-общо казано, агрегирането е препратка към клас в друг клас. Това създава това, което се нарича HAS-A връзка между съдържащия клас и съдържащия клас. Тези връзки се характеризират с това, че са еднопосочни, тъй като предполагат, че единият от класовете съдържа другия; това предотвратява обратното да се случи.
Например, можем да кажем, че една компания, която може да се разглежда от програмна гледна точка като обектен клас, има набор от служители; те от своя страна също могат да се разглеждат като обекти със свои собствени атрибути. В този случай съдържащият клас е компанията, докато съдържащият клас са служителите. Тази връзка има смисъл само в тази посока, тоест от компанията към служителя. Връзката в обратната посока няма смисъл, тъй като би било все едно да кажем, че служителят съдържа компанията. Фактът, че това няма смисъл, показва, че това е еднопосочна връзка.
Агрегиране в класови диаграми
В Unified Modeling Language (UML), който е вид универсален визуален език, създаден за проектиране на сложни софтуерни системи, класовите диаграми се използват за описание на структурата и характеристиките на дадена система. В тези диаграми всеки клас и неговите взаимоотношения с останалите са представени с помощта на геометрични фигури. В случай на агрегиране, тази връзка е представена от кух диамант от страната на съдържащия клас, който е свързан чрез прав сегмент със съдържащия клас. Например:
Това е връзка на агрегиране, показваща, че класът Well съдържа класа Duck.
Как се реализира агрегацията в Java?
Реализацията на агрегация в Java е относително проста. Това е просто въпрос на създаване на два класа и след това препращане към първия клас във втория.
В допълнение към установяването на връзка „имам“ или „трябва“, агрегирането на Java се характеризира със слаба връзка между контейнерния обект и съдържанието. Това означава, че унищожаването на едното не означава унищожаване на другото. За да се разбере този тип връзка, връзката между учител и неговите ученици може да се вземе като пример. В този случай изчезването или смъртта на учителя не води до изчезване или смърт на неговите ученици.
Обратният случай би била връзката между човешкото същество и неговото сърце. Няма съмнение, че сърцето се съдържа в човешкото същество, но тази връзка е различна от тази на агрегацията. Това е така, защото в този случай и двете зависят една от друга. Унищожаването на човешкото същество унищожава и сърцето, тъй като за да функционира, то се нуждае от хранителните вещества и кислорода, които тялото осигурява. От друга страна, разрушаването на сърцето унищожава и човека, тъй като без сърце не можем да живеем (с изключение на случаите на трансплантации или други методи за изкуствено поддържане на живота).
Пример за агрегиране
Следният код илюстрира прилагането на агрегиране като форма на асоцииране между два класа, използващи Java. Примерът е за програма, която да следи кои служители на фирма имат собствен автомобил и кои не, както и кои имат велосипеди и кои не.
Тъй като търсим да установим връзка, която показва, че служителят „има“ кола и/или че служителят „има“ велосипед, това е агрегираща връзка между класа, към който ще принадлежи служителят (която ще наречем Служител , по очевидни причини) и два допълнителни класа, един за кола и един за велосипед.
Първото нещо, което трябва да направите в тези случаи е да създадете съответните класове. В този случай има три класа: един за колата, един за велосипеда и един за служителя. Следващата фигура показва кода за създаване на тези класове, които се наричат Car, Bicycle и Employee.
В горния код можете също да видите, че всеки клас има определени атрибути, свързани с него. В случая на автомобила той има като атрибути модела, цвета и регистрационните номера, всички свързани с автомобила. Същото се случва и с велосипеда, който се свързва с регистрационен номер и модел.
Когато разгледаме класа Employee, забелязваме, че този клас има атрибутите monbreemp , което представлява името на служителя, и empid, което представлява идентификационния номер на служителя; след това препраща към класовете Car и Bike, създавайки агрегирането на асоциацията между тези класове. Накрая се създава досие на служител заедно с неговата кола и велосипед.
Обърнете внимание, че в този пример препратката към класовете Car и Bike в класа Employee прави възможен достъп до атрибутите bike и car от класа Employee.
Резултатът от тази програма ще бъде:
________Подробности за служител________
Име на служител: Xavier
Идентификационен номер на служител: 210921
________Подробности за колата на служителя________
Модел автомобил: Корола
Цвят на автомобила: зелен
Регистрационен номер на автомобил: XFZ-043
________Подробности за велосипеда на служителите________
Модел на велосипеда: MERIDA
Велосипедни табели: LAA-11B
Препратки
- Агрегиране в програмирането на Java . (2020 г.). ICHI.PRO. https://ichi.pro/es/agregacion-en-programacion-java-144087060492693
- Barquinero, JMM (2019). Агрегиране срещу композиция в класови диаграми. UML. | Блог на SEAS . Блог на SEAS. https://www.seas.es/blog/informatica/agregacion-vs-composicion-en-diagramas-de-clases-uml/
- Софтуерно наставничество. (2019 г.). OOP8 – Обектно ориентирано програмиране в Java – UML диаграми и ООП – Упражнения [Видео]. Youtube. https://www.youtube.com/watch?v=-Gy7Rf_wOeY