Ποια είναι η διαφορά μεταξύ σύνθεσης και συσσώρευσης;
sobes.tech AI
Απάντηση από AI
Σύνθεση και συσσώρευση είναι σχέσεις "μέρος-όλο" μεταξύ αντικειμένων.
-
Σύνθεση: Αυστηρή σχέση όπου το μέρος δεν μπορεί να υπάρχει χωρίς το όλο. Η διαγραφή του όλου διαγράφει και τα μέρη. Ο κύκλος ζωής του εξαρτώμενου μέρους καθορίζεται πλήρως από το όλο. Παράδειγμα: Δωμάτια (μέρη) σε ένα Σπίτι (όλο). Χωρίς το Σπίτι, τα δωμάτια δεν υπάρχουν.
// Παράδειγμα σύνθεσης: class Room { private String name; public Room(String name) { this.name = name; } // ... μέθοδοι του Room } class House { private List<Room> rooms = new ArrayList<>(); // Μέρη που δημιουργούνται και διαχειρίζονται από το όλο public House() { rooms.add(new Room("Living Room")); // Δημιουργία μέρους μέσα στο όλο rooms.add(new Room("Bedroom")); } // ... μέθοδοι του House } -
Συσσώρευση: Ασθενέστερη σχέση όπου το μέρος μπορεί να υπάρχει ανεξάρτητα από το όλο. Η διαγραφή του όλου δεν οδηγεί απαραίτητα στη διαγραφή των μερών. Τα μέρη μπορούν να σχετίζονται με πολλά διαφορετικά αντικείμενα. Παράδειγμα: Αυτοκίνητο (όλο) και Ρόδες (μέρη). Οι ρόδες μπορούν να υπάρχουν ξεχωριστά από το αυτοκίνητο και να χρησιμοποιούνται σε άλλο.
// Παράδειγμα συσσώρευσης: class Wheel { private int size; public Wheel(int size) { this.size = size; } // ... μέθοδοι του Wheel } class Car { private List<Wheel> wheels = new ArrayList<>(); // Το όλο περιέχει αναφορές στα μέρη public Car(List<Wheel> wheels) { this.wheels = wheels; // Λήψη μερών από έξω } // ... μέθοδοι του Car } // Παράδειγμα δημιουργίας και χρήσης: List<Wheel> myWheels = new ArrayList<>(); myWheels.add(new Wheel(16)); myWheels.add(new Wheel(16)); // ... Car myCar = new Car(myWheels); // Συσσώρευση: οι ρόδες μπορούν να υπάρχουν πριν και μετά το αυτοκίνητο
Οι βασικές διαφορές στον πίνακα:
| Κριτήριο | Σύνθεση | Συσσώρευση |
|---|---|---|
| Εξάρτηση | Αυστηρή: το μέρος εξαρτάται από το όλο | Ασθενής: το μέρος μπορεί να υπάρχει ανεξάρτητα |
| Κύκλος ζωής | Το μέρος διαχειρίζεται από το όλο | Το μέρος δεν διαχειρίζεται απαραίτητα από το όλο |
| Διαγραφή όλου | Οδηγεί στη διαγραφή των μερών | Δεν οδηγεί απαραίτητα στη διαγραφή των μερών |
| Πολλαπλές σχέσεις | Το μέρος ανήκει μόνο σε ένα όλο | Το μέρος μπορεί να σχετίζεται με πολλά όλο |
| UML διάγραμμα | Γεμάτος ρόμβος στην πλευρά του όλου | Κενός ρόμβος στην πλευρά του όλου |