โ† Kembali ke Konsep OOP
๐Ÿงฉ
Relasi

Aggregation (Agregasi)

Relasi "has-a" di mana container menyimpan referensi ke objek yang bisa ada tanpa container tersebut; relasi whole-part tanpa kepemilikan.

Masalahnya

Beberapa objek secara logis menjadi bagian dari sebuah grup, tetapi tidak boleh ikut terhapus saat grupnya dihapus. Menghapus Playlist tidak seharusnya menghapus Song di dalamnya.

Cara Kerja

  • โ€บ"Part" bisa ada tanpa "whole" dan bisa dipakai bersama oleh beberapa whole
  • โ€บDirepresentasikan sebagai kumpulan referensi, bukan instance yang dimiliki
  • โ€บMenghapus container tidak ikut menghapus bagian-bagiannya
  • โ€บBentuk kepemilikan yang lebih lemah dibanding composition

Kapan Digunakan

โœ“Playlist berisi Song yang juga ada di luar playlist
โœ“Department berisi Employee yang bisa pindah ke department lain
โœ“Team yang mereferensikan Player yang tetap ada tanpa team tersebut

Contoh di Dunia Nyata

๐ŸŽ
iOS

Array berisi objek model bersama yang direferensikan oleh beberapa view controller

๐Ÿค–
Android

Entitas Playlist yang mereferensikan ID Song yang disimpan di database Room

๐ŸŒ
Web

Keranjang belanja yang menyimpan referensi ke objek Product dari katalog

Contoh Kode

Swift
class Song {
    let title: String
    init(title: String) { self.title = title }
}

class Playlist {
    let name: String
    private(set) var songs: [Song] = []

    init(name: String) { self.name = name }

    func add(_ song: Song) {
        songs.append(song)
    }
}

let bohemianRhapsody = Song(title: "Bohemian Rhapsody")
let playlist = Playlist(name: "Road Trip")
playlist.add(bohemianRhapsody)
// bohemianRhapsody still exists even if `playlist` is deallocated