Co wiesz o kompozycji klas w programowaniu?
sobes.tech AI
Odpowiedź od AI
Kompozycja to relacja "zawiera" lub "część całości", w której jedna klasa (kompozyt) zawiera odwołanie do innej klasy (składnik) lub jej instancji. Cykl życia składnika jest zwykle ściśle związany z cyklem życia kompozytu. To silne powiązanie, w którym składnik nie może istnieć bez kompozytu.
Zalety kompozycji:
- Elastyczność: Łatwiej zmieniać zachowanie, modyfikując składniki.
- Zmniejszenie zależności: Klasy są od siebie mniej zależne w porównaniu z dziedziczeniem.
- Ponowne użycie: Te same składniki można używać w różnych kompozytach.
Przykład: Klasa Samochód może zawierać odwołanie do klasy Silnik. Jeśli Samochód zostanie zniszczony, to i Silnik (w tym kontekście) przestaje istnieć.
class Silnik {
// właściwości i metody silnika
}
class Samochód {
private Silnik silnik; // kompozycja
public Samochód() {
this.silnik = new Silnik(); // tworzenie składnika wewnątrz kompozytu
}
// inne właściwości i metody samochodu
}
Różnica od agregacji: W agregacji składniki mogą istnieć niezależnie od kompozytu (słabe powiązanie). Przykład: Klasa Uniwersytet zawiera odwołania do instancji klasy Student. Studenci mogą istnieć poza uniwersytetem.
W rozwoju Android kompozycja jest aktywnie wykorzystywana, np. przy tworzeniu widoków (ViewGroup zawiera View), przy pracy z zależnościami przez Dagger/Hilt. To podejście jest preferowane w porównaniu z wielokrotnym dziedziczeniem (które w Java/Kotlin nie istnieje dla klas) i często jest bardziej elastyczne niż pojedyncze dziedziczenie.
class UserRepository(private val apiService: ApiService) {
// UserRepository "używa" ApiService (kompozycja/agregacja)
fun fetchUser(userId: String) {
// apiService.getUser(userId)
}
}