Σχέσεις μεταξύ Κλάσεων


Σκοπός

Σκοπός των συσχετίσεων είναι να αναπαριστούν την αλληλεπίδραση μεταξύ των κλάσεων και των αντικειμένων. Απεικονίζονται διαγραμματικά με μία γραμμή μεταξύ των κλάσεων που αλληλεπιδρούν.


Είδη

Τα είδη στα οποία διακρίνονται οι συσχετίσεις είναι τα ακόλουθα πέντε:
Εξάρτησης ή Χρήσης (Dependency ή Uses)
Σύνδεσης (Association)
Συναρμολόγησης ή Συγκρότησης (Aggregation)
Σύνθεσης (Composition)
Γενίκευσης-Ειδίκευσης (Generalisation-Specification)



Εξάρτησης ή Χρήσης (Dependency ή Uses)


Η συσχέτιση της εξάρτησης αναπαριστά μια προσωρινή επικοινωνία μεταξύ 2 αντικειμένων. Ενα αντικείμενο της κλάσης Α δέχεται παραμετρικά σε κάποια μέθοδό του ένα αντικείμενο της κλάσης Β, ώστε να χρησιμοποιήσει κάποια λειτουργία του (μέθοδο). 
Δεν απαιτείται επομένως κάποια συγκεκριμένη σχέση μεταξύ των δύο αντικειμένων, διότι δεν εξυπηρετεί τίποτε το να διατηρήσουμε κάποια γνώση σχετικά με την εν λόγω επικοινωνία.

Υλοποίηση στην java

Δεν απαιτείται αναφορά του Β αντικειμένου στα πεδία της κλάσης Α.
Το αντικείμενο της κλάσης Β περνάει παραμετρικά σε κάποια μέθοδο του αντικειμένου της κλάσης Α.

Παράδειγμα 

Το Αυτοκίνητο θέλει να βάλει καύσιμα auto.setKaysima(…) και σταματά σε Βενζινάδικο (pk) για να γεμίσει το ρεζερβουάρ του με καύσιμα pk.gemizeiKaysima(auto).

class Autokinito {
private String arKykloforias;

Autokinito(String arKykloforias) {
this.arKykloforias = arKykloforias;
}

void setKaysima(PratirioKaysimwn pk, int litra) {
pk.gemizeiKaysima(this, litra);    /// το this σημαίνει ότι το αυτοκίνητο στέλνει τον
         //  εαυτό του στο πρατήριο καυσίμων
}
public String getArKykloforias()  {
return arKykloforias;
}
}

class PratirioKaysimwn  {
private String thesi;

PratirioKaysimwn(String thesi) {
this.thesi = thesi;
}

void gemizeiKaysima(Autokinito auto) {
System.out.print("To Pratirivn kaysimwn " + thesi);
auto.gemisma(50);    
}
}



Διάγραμμα 





Σύνδεση (Association)



Η συσχέτιση της Σύνδεσης αναπαριστά μια αμφίδρομη (προαιρετικά) επικοινωνία μεταξύ 2 αντικειμένων, για την οποία θέλουμε να διατηρηθεί η γνώση.


Υλοποίηση στην java

Απαιτείται αναφορά του Β αντικειμένου σε πεδίο της κλάσης Α (προαιρετικά και το αντίστροφο).

Κριτήρια

1) Η ανάγκη διατήρησης γνώσης μεταξύ δύο αντικειμένων για συσχέτιση χρονικού διαστήματος, από χιλιοστά του δευτερολέπτου μέχρι χρόνια. Καλείται επίσης και σχέση «ανάγκης γνώσης». 
2) Η κλάση Α περιλαμβάνει πεδίο-αναφορά της κλάσης Β και αντίστροφα (προαιρετικά)

Παράδειγμα

Η σχέση Αυτοκινήτου - Ιδιοκτήτη
1) Η κα. Κλεάρχου είναι ιδιοκτήτρια του Αυτοκινήτου ΝΖΡ-2667. 
2) Το Αυτοκίνητο ΝΖΡ-2667 ανήκει στην κα Κλεάρχου .  


class Atomo {
            private String onoma;
            private Autokinito exeiAuto;

            public Atomo(String onoma) {
                 this.onoma = onoma;
            }
            public String getOnoma() {
                return onoma;
            }

            void setAutokinito(Autokinito auto) {
                 this.exeiAuto = auto;   
            }
            
}

class Autokinito {
           
            private String arKykloforias;
            private Atomo anikeiSe; // Idioktitis
           
            Autokinito(String arKykloforias) {
               this.arKykloforias = arKykloforias;
            }

            void setIdioktitis(Atomo at) {
               this.anikeiSe =at;   
            }
           
            public String getArKykloforias()  {
               return arKykloforias;
            }
           
            
}



Διάγραμμα 




Συσχετίσεις «Ολου-Μέρους» (Whole-Part associations)

Συναρμολόγηση ή Συγκρότηση (Aggregation)

Η συσχέτιση της Συναρμολόγησης είναι είδος της Σύνδεσης, έχει ωστόσο μια επιπλέον σημασία, δηλώνει ότι ένα αντικείμενο Β αποτελεί συστατικό (Μέρος) ενός αντικειμένου της κλάσης Α (Όλο). Μια τέτοιου είδους συσχέτιση αναπαριστά κυρίως την ομαδοποίηση ή ένταξη αντικειμένων-μερών σε ένα άλλο αντικείμενο, το Ολο.
Η επικοινωνία μεταξύ του Ολου και του Μέρους στην συναρμολόγηση μπορεί προαιρετικά να είναι και αμφίδρομη.

 Υλοποίηση στην java

Απαιτείται ένας πίνακας-αναφορά στην κλάση Α (Ολο) των αντικειμένων της κλάσης Β (Μέρος).

Κριτήρια - Κανόνες

 Απαντά στο ερώτημα: Είναι μέρος  του/της (ομαδοποίηση)
 Η διατήρηση της γνώσης της συσχέτισης μεταξύ δύο αντικειμένων για κάποιο χρονικό διάστημα, από χιλιοστά του δευτερολέπτου μέχρι χρόνια. Καλείται επίσης και σχέση «ανάγκης γνώσης».
 Η ανάγκη δημιουργίας αντικειμένου της κλάσης Β από αντικείμενο της κλάσης Α
Η κλάση Α περιλαμβάνει πεδίο πίνακα-αναφορών της κλάσης Β.

 Παράδειγμα

Το Ξενοδοχείο «Ακρόπολις» απασχολεί έναν αριθμό Υπαλλήλων (προσωπικό).
Ενα Ατομο (αντικείμενο) είναι Υπάλληλος 


Κώδικας

class Atomo {
private String onoma;
private String tilephono;

public Atomo(String onoma, String tilephono) {
this.onoma = onoma;
this.tilephono = tilephono;
}
public void setKinito(String tilephono) {
this.tilephono = tilephono;
}

public String toString()  {
return (onoma + " thl. " + tilephono);
}
}


class Ypallilos {
private Atomo atomo;
private String eidikotita;

public Ypallilos(Atomo atomo, String eidikotita) {
this.atomo = atomo;
this.eidikotita = eidikotita;
}

public String toString() {
return ("ypallilos: " + atomo + "   Eidkotita: " + eidikotita);
}
}


import java.util.Vector;

class Xenodoxeio {
private String epwnymia;
private Vector <Ypallilow> proswpiko;  // πίνακας-αναφορά

public Xenodoxeio(String epwnymia) {
this.epwnymia = epwnymia;
              //Αρχικοποιούμε το vector
                proswpiko = new Vector<Ypallilos>();
}

public void addYpallilos(Ypallilos yp) {
// AGGREGAION: προσθέτουμε τους Υπαλλήλους
proswpiko.add(yp);
}

}



Διάγραμμα 




Σύνθεση (Composition)


Η συσχέτιση της Σύνθεσης ανήκει και αυτή στην κατηγορία «Ολου-Μέρους», και αποτελεί ειδική περίπτωση της Συναρμολόγησης, επιβάλλοντας περαιτέρω περιορισμούς. Στη Σύνθεση το Ολο κατέχει αποκλειστικά τα Μέρη του, γι’ αυτό χαρακτηρίζεται και ως ισχυρή συσχέτιση.
Η επικοινωνία μεταξύ του Ολου και του Μέρους είναι μονόδρομη. Η επικοινωνία με τα μέρη δεν είναι εφικτή παρά μόνο μέσω του Ολου.

Υλοποίηση στην java

Απαιτείται πίνακα-αναφορά αντικειμένων του Β στα πεδία της κλάσης Α. Ολα τα αντικείμενα, του Ολου και των Μερών δημιουργούνται ταυτόχρονα. Τα αντικείμενα των μερών δημιουργούνται μέσα στον δημιουργό (constructor) του Α.

Κριτήρια - Κανόνες

·         Απαντά στο ερώτημα: Είναι μέρος  του/της
·         Το Μέρος ανήκει αποκλειστικά στο Ολο (ιδιοκτησία).
·         Δεν επιτρέπεται η συμμετοχή του Μέρους σε άλλες ομάδες αντικειμένων.
·         Το Ολο γνωρίζει τα Μέρη του και επομένως μπορεί να επικοινωνεί μαζί τους, ενώ τα Μέρη δεν γνωρίζουν το Ολο στο οποίο ανήκουν, άρα δεν επικοινωνούν (μονόδρομη επικοινωνία).
·         Η διάρκεια ζωής του Μέρους είναι άρρηκτα συνδεδεμένη με εκείνη του Ολου. Υπάρχει δηλαδή εξάρτηση δημιουργίας-καταστροφής μεταξύ Ολου και Μέρους.
·         Μερικές ιδιότητες μεταδίδονται από το Ολο στο Μέρος, όπως αυτή της τοποθεσίας.
·         Λειτουργίες που εφαρμόζονται στο Ολο μεταδίδονται και στα Μέρη του, όπως η καταστροφή, η μετακίνηση, η εγγραφή.
·         Η επικοινωνία με το Μέρος γίνεται μόνο μέσω του Ολου.

Παράδειγμα

Το Ξενοδοχείο «Ακρόπολις» διαθέτει έναν αριθμό δωματίων.

UML απεικόνισημε γεμάτο ρόμβο  


Κώδικας

class Dwmatio {
            private String kodikos;
            Dwmatio(String kodikos) {
              this.kodikos = kodikos;
            }
            public String toString() {
          return ("dwmatio me kodiko: " + kodikos);
            }
}

import java.util.Vector;
class Xenodoxeio {
            private String epwnymia;
            private Vector<Dwmatio> dwmatia;           // anafora se pinaka antikeimeno


            public Xenodoxeio(String epwnymia) {
              this.epwnymia = epwnymia;
        //Arxikopoioume ta vector
        dwmatia = new Vector<Dwmatio>();
  //COMPOSITION:Dimiourgountai ta dwmatia tautoxrona me thn dimiourgia tou Xenodoxeiou
               Dwmatio a1 = new Dwmatio("Diklino A1");
             Dwmatio s1 = new Dwmatio("Sudio S1");
             Dwmatio d1 = new Dwmatio("Diamerisma D1");

            dwmatia.add(a1);
                 dwmatia.add(s1);
                 dwmatia.add(d1);
            }

          

Διάγραμμα 







Γενίκευση - Ειδίκευση (Generalization - Specification)


Η συσχέτιση της Γενίκευσης-Ειδίκευσης, σε αντίθεση με τις προηγούμενες βασίζεται στις κλάσεις (class-based). Απώτερος σκοπός είναι η επίτευξη μεγαλύτερου βαθμού επαναχρησιμοποίησης. Συνεπώς, μέλη (πεδία, μέθοδοι, και συσχετίσεις) που δηλώνονται σε μια κλάση (υπερκλάση), κληρονομούνται από τις υποκλάσεις της μέσω του μηχανισμού της Κληρονομικότητας, οι οποίες έτσι εκμεταλλεύονται πλήρως την κληρονομούμενη λειτουργικότητα της υπερκλάσης.

Κριτήρια - Κανόνες

·         Απαντά στην ερώτηση: η κλάση Β είναι είδος της κλάσης Α;
·         Κληρονομούνται δίχως εξαίρεση το 100% των μελών (πεδία, μέθοδοι, και συσχετίσεις) της υπερκλάσης. Σε περίπτωση διαφορετικής υλοποίησης μιας κληρονομούμενης μεθόδου, τότε αυτή επαναϋλοποιείται (υπέρβαση - overriding) στην υποκλάση. Δεν επιτρέπεται ωστόσο κατάχρηση της επαναϋλοποίησης με κενή από κώδικα μέθοδο, η οποία ουσιαστικά ακυρώνει την λειτουργικότητα της υποκλάσης.

Παράδειγμα


Το Επιβατικό IX αυτοκίνητο είναι είδος Οχήματος

Κώδικας

abstract class Oxima {
           
            private String arKykloforias;

            private String marka;
                     
            Oxima(String arKykloforias, String marka) {
                        this.arKykloforias = arKykloforias;
                        this.marka = marka;
            }

            public String getArKykloforias()  {
                        return arKykloforias;
            }
           
            public String getMarka()  {
                        return marka;
            }
               
}



class IX extends Oxima {
           
            private String eidos;
            private int arThesewn;
           
            IX(String arKykloforias, String marka, String eidos, int arThesewn) {
                        super(arKykloforias, marka);
                        this.eidos = eidos;
                        this.arThesewn = arThesewn;
            }

           
}

Διάγραμμα





Comments

Πες μας τι σκέφτεσαι:

Δημοσίευση σχολίου