Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Java_L1.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
37.55 Кб
Скачать

1.3. Типи відношень між класами

Будь-яка програма, написана об’єкто-зорієнтованою мовою, це набір взаємно пов’язаних між собою класів. Ці класи повинні знати один про одного, щоб взаємодіяти між собою і разом виконати поставлену задачу.

Наведемо найпростіші і найчастіше використовувані зв’язки між класами в рамках об’єктної моделі:

  • Агрегація (Aggregation)

  • Асоціація (Association)

  • Успадкування (Inheritance)

  • Метакласи (Metaclass)

1.3.1 Агрегація

Відношення між класами типу “містить” або “складається з” називається агрегацією або включенням. Наприклад, якщо акваріум наповнений водою і в ньому плавають рибки, то можна сказати, що акваріум агрегує в собі воду і рибок.

Таке відношення включення або агрегації (aggregation) зображується лінією з ромбикомна боці того класу, який є власником або контейнером. Необов’язкова назва відношення записується посередині лінії.

В прикладі відношення “contain” – двонаправлене. Об’єкт класу Aquarium`’ містить кілька об’єктів класуFish. Кожна рибка “знає”, в якому саме акваріумі вона живе. Факт участі класу у відношенні зображується за допомогою ролі. В прикладі бачимо роль “home” класуAquarium (акваріум – дім для рибок), а також роль ”inhabitants” класуFish(рибки – жильці акваріума). Назва ролі збігається з назвою відповідного поля в класі. Зображення такого поля на діаграмі лишнє, якщо вже зображено ім’я ролі. Тобто в даному випадку класAquarium буде мати властивість (поле)inhabitants, а класFish – властивість home.

Кількість об’єктів, які беруть участь у відношенні, записується поряд з іменем ролі. Запис ”0..n” означає ”від нуля до безмежності”. Прийняті також позначення

  • “1..n” – від одиниці до безмежності;

  • “0” – нуль;

  • “1” – один;

  • “n” – фіксована кількість;

  • “0..1” – нуль або один.

Код,який описує розглянуту модель і явище агрегації може виглядати, наприклад, так:

// визначення класуFish

public class Fish {

// визначення поля home (посилання на об’єктAquarium)

private Aquarium home;

public Fish() {

}

}

// визначення класуAquarium

public class Aquarium {

// визначення поля inhabitants(масив посилань на об’єктиFish)

private Fish inhabitants [];

public Aquarium () {

}

}

1.3.2. Асоціація

Якщо об’єкти одного класу посилаються на один або більше об’єктів другого класу, але ні в той, ні в другий бік відношення між об’єктами не має характеру “володіння” або конвеєризації, то таке відношення називають асоціацією (association). Відношення асоціації зображується так же, як і відношення агрегації, але лінія, яка пов’язує класи – проста, без ромбика

Як приклад розглянемо програміста і його комп’ютер. Між цими об’єктами нема агрегації. Так, завжди можна встановити за якими комп’ютерами працює який-небудь програміст, а також які люди користуються окремо взятим комп’ютером. В розглянутому прикладі є асоціація багато-до-багатьох.

У даному випадку між екземплярами класів Programmer і Computer в обидва боки використовується відношення ”0..n”, оскільки програміст теоретично може не користуватися комп’ютером (якщо він теоретик або на пенсії). У свою чергу комп’ютер може ніким не використовуватися (якщо він новий і ще не установлений).

Код, який відповідає розглянутому прикладу, буде, наприклад, такий:

public class Programmer{

privateComputer computers [];

public Programmer() {

}

}

public class Computer {

private Programmer programmers [];

public Computer () {

}

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]