Sobes.tech
Junior

Ποια είναι η διαφορά μεταξύ σύνθεσης και συσσώρευσης;

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 διάγραμμα Γεμάτος ρόμβος στην πλευρά του όλου Κενός ρόμβος στην πλευρά του όλου