Τεχνολογία Λογισμικού

Σχετικά έγγραφα
Ανάλυση Πληροφοριακών Συστημάτων. Εαρινό Εξάμηνο Lec08 09/04/2019 Διδάσκων: Γεώργιος Χρ. Μακρής

Τεχνολογία Λογισμικού & Ανάλυση Συστημάτων

Τεχνολογία Λογισμικού & Ανάλυση Συστημάτων

Διαγράμματα Κλάσεων στη Σχεδίαση

Μοντελοποίηση Συστημάτων. Διαγράμματα Κλάσεων ClassDiagrams

Διαγράμματα UML στην Ανάλυση. Μέρος Β Διαγράμματα Κλάσεων Διαγράμματα Αντικειμένων

Τεχνολογία Λογισμικού & Ανάλυση Συστημάτων 21/11/2016. Δρ. Ανδριάνα Πρέντζα Αναπληρώτρια Καθηγήτρια.

Ανάλυση Πληροφοριακών Συστημάτων. «Βασικές Έννοιες Αντικειμενοστρεφούς Προγραμματισμού Διαγράμματα κλάσεων» Βασίλειος Καρακόιδας

ΑΝΑΛΥΣΗ ΑΠΑΙΤΗΣΕΩΝ ανάλυση απαιτήσεων Σε αυτό το μάθημα θα ασχοληθούμε με : Δημιουργία μοντέλων

public void printstatement() { System.out.println("Employee: " + name + " with salary: " + salary);

3 Αλληλεπίδραση Αντικειμένων

Διάγραμμα Κλάσεων. Class Diagram

08 Η γλώσσα UML I. Τεχνολογία Λογισμικού. Σχολή Hλεκτρολόγων Mηχανικών & Mηχανικών Yπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο. Χειμερινό εξάμηνο

Περιεχόμενο του μαθήματος

Πληροφοριακά Συστήματα Διοίκησης Ενότητα 5: Διαγράμματα Κλάσης (1ο Μέρος)

Αντικειμενοστρεφής Προγραμματισμός

Τεχνολογία Λογισμικού. Ενότητα 1: Εισαγωγή στην UML Καθηγητής Εφαρμογών Ηλίας Γουνόπουλος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

ΠΟΛΥΜΟΡΦΙΣΜΟΣ. 4.1 Κληρονομικότητα και Αρχή της Υποκατάστασης

Τεχνολογία Λογισμικού & Ανάλυση Συστημάτων

Εργαστήριο Τεχνολογίας Λογισμικού και Ανάλυσης Συστημάτων - 4 ο Εργαστήριο -

Αρχές Τεχνολογίας Λογισμικού Εργαστήριο

Διαγράμματα UML στην Ανάλυση. Μέρος Γ Διαγράμματα Επικοινωνίας Διαγράμματα Ακολουθίας Διαγράμματα Μηχανής Καταστάσεων

Από τη UML στον Κώδικα. Μέρος Α

Τα διαγράµµατα κλάσεων

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ

Κληρονομικότητα. Κληρονομικότητα (inheritance) είναι ο τρόπος µε τον οποίο μία τάξη μπορεί να κληρονομήσει ιδιότητες και συμπεριφορά από άλλες τάξεις.

Η γλώσσα μοντελοποίησης UML. Βασικές αρχές Τεχνολογίας Λογισμικού, 8η αγγ. έκδοση

Πληροφοριακά Συστήματα Διοίκησης Ενότητα 1: Βασικές Αρχές Αντικειμενοστραφούς Σχεδίασης Συστημάτων και Εφαρμογών (1ο Μέρος)

(Διαφάνειες Νίκου Βιδάκη)

ΔΟΜΙΚΗ ΜΟΝΤΕΛΟΠΟΙΗΣΗ ΚΑΙ ΜΟΝΤΕΛΟΠΟΙΗΣΗ ΣΥΜΠΕΡΙΦΟΡΑΣ (9)

Κλάσεις και αντικείμενα #include <iostream.h<

Η γλώσσα μοντελοποίησης UML. I. Sommerville 2006 Βασικές αρχές Τεχνολογίας Λογισμικού, 8η αγγ. έκδοση Κεφ. 7

Τεχνολογία Λογισμικού

Μοντελοποίηση Πεδίου

09 Η γλώσσα UML I. Τεχνολογία Λογισμικού. Τμήμα Πληροφορικής & Τηλεπικοινωνιών Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών. Εαρινό εξάμηνο

Διαχείριση Πληροφοριακών Συστημάτων

Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #13

Αντικειμενοστρεφής Προγραμματισμός

Διαγράμματα UML για την τεκμηρίωση της Αρχιτεκτονικής

Κλάσεις και Αντικείµενα

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΑΝΑΛΥΣΗ ΥΛΟΠΟΙΗΣΗ ΣΤΟΙΧΕΙΩΝ ΑΝΑΛΥΣΗΣ UML ΜΕ JAVA. Ιωάννης Σταμέλος Βάιος Κολοφωτιάς Πληροφορική

Το πρόγραμμα HelloWorld.java. HelloWorld. Κλάσεις και Αντικείμενα (2) Ορισμός μιας Κλάσης (1) Παύλος Εφραιμίδης pefraimi <at> ee.duth.

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα

Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #12

Abstract classes, Interfaces ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA


UML. Γενικά χαρακτηριστικά Στοιχεία µοντέλων Συσχετίσεις. Παραδείγματα

Μέθοδοι. Υποσυστήµατα και πακέτα. Μοντέλα αντικειµενοστραφούς σχεδίασης. Αντικειµενοστραφής Σχεδίαση. Στα πρώτα στάδια της ανάλυσης

ΣΥΣΧΕΤΙΣΕΙΣ ΚΛΑΣΕΩΝ (Class relationships)

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2

ΠΑΡΑΔΕΙΓΜΑΤΑ USE CASE DIAGRAMS CLASS DIAGRAMS

Ανάλυση Περιπτώσεων Χρήσης

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

UML: Unified modelling language

. Μεθοδολογία Προγραμματισμού. Abstract Κλάσεις και Interfaces. Νικόλαος Πεταλίδης. Εισαγωγή Εαρινό Εξάμηνο 2014

Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1

ΑΡΦΕ ΑΝΣΙΚΕΙΜΕΝΟΣΡΕΥΟΤ ΠΡΟΓΡΑΜΜΑΣΙΜΟΤ. Ιωάννης Φατζηλυγερούδης Αναπληρωτής Καθηγητής Τμήμα Μηχ/κών Η/Υ και Πληροφορικής Πανεπιστήμιο Πατρών

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack

(Απλή) Κληρονομικότητα

Αντικειμενοστρέφεια. Henri Matisse, Harmony in Red, Κωστής Σαγώνας Νίκος Παπασπύρου

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Κλάσεις. Κατηγορίες Αντικειµένων. Κλάσεις. Φυσικά Αντικείµενα. Χώρος = Οµάδα Φυσικών Αντικειµένων. Πρόγραµµα = Οµάδα

Σύνθεση και Κληρονομικότητα

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΑΝΑΛΥΣΗ Εισαγωγή. Ιωάννης Σταμέλος Βάιος Κολοφωτιάς Πληροφορική

Τεχνολογία Λογισμικού

Από τη UML στον Κώδικα. Μέρος Β

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές

Κεφάλαιο 2ο. Κατανοώντας την αντικειμενοστρέφεια

Εργαστήριο Τεχνολογίας Λογισμικού και Ανάλυσης Συστημάτων

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΑΝΑΛΥΣΗ Διαγράμματα Κλάσεων. Ιωάννης Σταμέλος Βάιος Κολοφωτιάς Πληροφορική

Wrapper Classes, Abstract Classes and Interfaces

02 Αντικειμενοστρεφής Προγραμματισμός

Περιεχόμενο του μαθήματος

09 Η γλώσσα UML II. Τεχνολογία Λογισμικού. Σχολή Hλεκτρολόγων Mηχανικών & Mηχανικών Yπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο. Χειμερινό εξάμηνο

Ανάπτυξη & Σχεδίαση Λογισμικού (ΗΥ420)

Κατασκευαστές. Μέθοδοι Κατασκευής (Constructors).

Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java

Αντικειμενοστραφής Προγραμματισμός

Κωδικός: <Κωδ.Αρ.Εγγράφου/ΚωδικόΌνομαΈργου/Αρ. Έκδοσης> <Company Name> <Όνομα - Κωδικό Όνομα Έργου> Έγγραφο Περιγραφής Σχεδίου Λογισμικού

Αντικειµενοστραφής Προγραµµατισµός

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

class object Database Database Item Item [sub-typing and polymorphism] MusicCD Video MusicCD Video

Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡ/ΣΜΟΣ C++

ΕΚΦΩΝΗΣΗ ΥΠΟΧΡΕΩΤΙΚΗΣ ΕΡΓΑΣΙΑΣ σε UML

Τεχνολογία Λογισμικού & Ανάλυση Συστημάτων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι

Εργαστήριο Τεχνολογίας Λογισμικού και Ανάλυσης Συστημάτων - 8 ο & 9 ο Εργαστήριο -

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές)

Οντοκεντρικός Προγραμματισμός

Εισαγωγή στον Προγραμματισμό με C++

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

2.1 Αντικειµενοστρεφής προγραµµατισµός

Εισαγωγή στην αντικειµενοστρεφή τεχνολογία

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6

Οντοκεντρικός Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

Transcript:

Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων Τεχνολογία Λογισμικού 30/10/2017 Δρ. Ανδριάνα Πρέντζα Αναπληρώτρια Καθηγήτρια aprentza@unipi.gr

Class Diagrams Διαγράμματα Κλάσεων

Διαγράμματα UML Διάγραμμα περιπτώσεων χρήσης (use case diagram) Διάγραμμα κλάσεων (class diagram) Διάγραμμα αντικειμένων (object diagram) Διάγραμμα καταστάσεων (state diagram) Διάγραμμα δραστηριοτήτων (activity diagram) Διαγράμματα αλληλεπίδρασης (interaction diagrams) Διάγραμμα ακολουθίας (sequence diagram) Διάγραμμα επικοινωνίας (communication diagram) Διαγράμματα υλοποίησης (physical diagrams) Διάγραμμα συστατικών (component diagram) Διάγραμμα ανάπτυξης (deployment diagram)

Άξονες Μοντελοποίησης Λειτουργικότητα functionality Τι κάνει το σύστημα; Ποιες λειτουργίες υποστηρίζει; Ανάλυση απαιτήσεων Περιγραφές από κείμενο Στατικά διαγράμματα Πώς είναι οργανωμένα τα συστατικά του τμήματα; Δυναμική συμπεριφορά Πώς ανταποκρίνεται και από ποιες καταστάσεις περνάει; Δομή structure Συμπεριφορά behaviour

Κατηγοριοποίηση Διαγραμμάτων UML 2.0

Μοντελοποίηση με τη γλώσσα UML Περιγραφή Λειτουργίας από την πλευρά του χρήστη Στατική δομή Δυναμικά χαρακτηριστικά - Συμπεριφορά Μοντελοποίηση Απαιτήσεων Μοντελοποίηση στατικής δομής του συστήματος Μοντελοποίηση δυναμικών χαρακτηριστικών του συστήματος Μοντελοποίηση της συμπεριφοράς συγκεκριμένων αντικειμένων Μοντελοποίηση των βημάτων εκτέλεσης μιας διαδικασίας Σενάρια, Διαγράμματα περιπτώσεων χρήσης (Scenaria, Use Case Diagrams) Διαγράμματα Κλάσεων (Class Diagrams) Διαγράμματα Αντικειμένων (Object Diagrams) Διαγράμματα Συστατικών (Component Diagrams) Διαγράμματα Ανάπτυξης (Deployment Diagrams) Διαγράμματα Ακολουθίας (Sequence Diagrams) Διαγράμματα Επικοινωνίας (Collaboration Diagrams Communication Diagrams στη UML 2.0) Διαγράμματα Κατάστασης (State Machine Diagrams) Διαγράμματα Δραστηριότητας (Activity Diagrams)

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

Γιατί να μοντελοποιήσουμε τη δομή??? Για να μειώσουμε το «σημασιολογικό χάσμα» μεταξύ του πραγματικού κόσμου και του κόσμου του λογισμικού. Για να παραστήσουμε πράγματα, ιδέες και έννοιες που είναι σημαντικές για το πεδίο εφαρμογής. Για να ορίσουμε ένα κοινό λεξιλόγιο για τους αναλυτές και τους χρήστες.

Μοντελοποίηση στην Ανάλυση και Σχεδίαση ΠΣ Υψηλού επιπέδου επιχειρηματικές ανάγκες καταγεγραμμένες στην Πρόταση Συστήματος Καθορισμός Απαιτήσεων Αναλυτική Καταγραφή συγκεκριμένων απαιτήσεων Μοντελοποίηση του Συστήματος Λειτουργικότητα / Δομή / Συμπεριφορά (Functionality/Structure/Behavior

Εισαγωγή Τα διαγράμματα περιπτώσεων χρήσης είναι διαγράμματα καταγραφής προδιαγραφών! Τα διαγράμματα κλάσεων όμως, καταγράφουν τις κλάσεις που ανήκουν σε ένα σύστημα τύπους αντικειμένων και τις στατικές συσχετίσεις που υπάρχουν μεταξύ τους! ΜΗΝ ΞΕΧΝΑΤΕ: Τα αντικείμενα αποτελούν στιγμιότυπα κλάσεων. Η κλάση είναι ένας τύπος από τον οποίο δημιουργούνται κατά τη διάρκεια της εκτέλεσης του προγράμματος, αντικείμενα που ανήκουν στον τύπο αυτόν. Δηλ. μία κλάση περιγράφει ένα σύνολο αντικειμένων με: Όμοιες ιδιότητες (similar properties/attributes) Κοινή συμπεριφορά (common behavior/operations) Κοινές συσχετίσεις με άλλα αντικείμενα (common associations to other objects)

Διάγραμμα Κλάσεων Αναπαριστά τη στατική δομή του συστήματος σε επίπεδο κλάσεων (class structure) και τα περιεχόμενά τους (contents). Αναπαριστά τις σχέσεις μεταξύ των κλάσεων με τη χρήση σχέσεων, όπως είναι η συσχέτιση (association), η σχέση εξειδίκευσης (specialization), η σχέση γενίκευσης (generalization) και άλλες. Ένα σύστημα τυπικά έχει πολλά διαγράμματα κλάσεων. Μια κλάση μπορεί να συμμετέχει σε πολλά διαγράμματα κλάσεων.

Τι Προσφέρει το Διάγραμμα Κλάσεων Δίνει μια στατική όψη των στοιχείων που αποτελούν το σύστημα. Όπως το σχέδιο με τα εξαρτήματα μιας μηχανής δείχνει πώς συναρμολογούνται, αλλά όχι πώς συμπεριφέρονται όταν η μηχανή τεθεί σε λειτουργία. Περιλαμβάνει ιδιότητες, λειτουργίες (μεθόδους), συσχετίσεις μεταξύ κλάσεων.

Διάγραμμα Κλάσεων (1) Σε ένα διάγραμμα κλάσεων, τα ονόματα των κλάσεων πρέπει να είναι περιγραφικά και να ονομάζονται σύμφωνα με τις επιχειρησιακές οντότητες. ΠΡΟΣΟΧΗ πάντα χρησιμοποιούμε ουσιαστικό (ή φράση που περιέχει ουσιαστικό) για την ονομασία της κλάσης! Σε ενικό αριθμό! Οι σχέσεις μεταξύ των κλάσεων μπορεί να μην είναι εμφανείς από την αρχή της ανάλυσης του συστήματος. Επαναληπτική δραστηριότητα! Σε κάθε επανάληψη διευκρινίζονται περισσότερο οι κλάσεις και οι σχέσεις μεταξύ τους

Διάγραμμα Κλάσεων (2) Αρχικά, περιλαμβάνει τις βασικές κλάσεις του συστήματος. Έπειτα, εμπλουτίζεται με νέες κλάσεις που προκύπτουν κατά την ανάλυση του συστήματος. Στη συνέχεια, προστίθενται κλάσεις και διεπαφές που σχετίζονται με τον τρόπο υλοποίησης του συστήματος (π.χ. κλάσεις για τη σύνδεση με μια βάση δεδομένων, μια διεπαφή για τη σύνδεση με ένα άλλο σύστημα).

Διάγραμμα Κλάσεων (3) Κατά την ανάπτυξη ενός συστήματος (παραγωγή κώδικα), οι αλλαγές που προκύπτουν στις κλάσεις, στις διεπαφές, στα χαρακτηριστικά και στις λειτουργίες των κλάσεων ΠΡΕΠΕΙ πρώτα να αναπαρίστανται στα μοντέλα των κλάσεων και ύστερα αυτές οι αλλαγές να πραγματοποιούνται στον κώδικα του συστήματος. Έτσι, πετυχαίνουμε: Σωστή και πλήρης τεκμηρίωση συστήματος (system specification) Σωστά και πλήρη παραδοτέα συστήματος (system deliverables) Διάγραμμα κλάσεων: κατάλληλο σημείο αναφοράς για όλους που εμπλέκονται στην ανάλυση, σχεδιασμό και ανάπτυξη συστήματος Πιο εύκολη συντήρηση συστήματος

Οπτική γωνία σχεδίασης Διαγραμμάτων Κλάσεων Ανάλυση προδιαγραφών: ΟΔΗΓΕΙ ΣΕ γνώση για το πεδίο του προβλήματος του συστήματος. Διάγραμμα κλάσεων: μοντέλο του πεδίου προβλήματος (problem domain model). Καταγραφή κλάσεων ως έννοιες του πεδίου του προβλήματος Μπορεί οι κλάσεις αυτές να μην υπάρχουν στο λογισμικό που θα κατασκευαστεί (έστω και αν, κατά πάσα πιθανότητα, οι περισσότερες από αυτές θα υπάρχουν) Για κάθε κλάση του μοντέλου αυτού ενδεχομένως, να αναγραφούν κάποιες υψηλού επιπέδου υποχρεώσεις (σαν λειτουργίες τους) ΟΧΙ απαραίτητο οι λειτουργίες αυτές να εμφανισθούν στο διάγραμμα κλάσεων του λογισμικού ως μέθοδοι των αντίστοιχων κλάσεων ΕΠΟΜΕΝΩΣ, αρχικά μοντελοποίηση προβλήματος και όχι λύσης

Προοπτικές Διαγράμματος Κλάσεων Εννοιολογική (Conceptual) Ανεξάρτητη υλοποίησης, μοντέλο πεδίου (domain model) Προδιαγραφής (Specification) Αφορά κυρίως στις διεπαφές λογισμικού (interfaces of the software), και δεν αντανακλά την υλοποίηση Υλοποίησης (Implementation) Εδώ μοντελοποιούμε τις συγκεκριμένες κλάσεις υλοποίησης (implementation classes)

Παραδοσιακή αναπαράσταση

ΟΟ αναπαράσταση

Κλάση, ιδιότητες και λειτουργίες Κλάσεις: ενσωματώνουν δεδομένα + λειτουργίες που επενεργούν στα δεδομένα αυτά Όνομα κλάσης Υποχρεωτικό Ορθογώνιο Παραλληλόγραμμο με τρία διαμερίσματα Account - balance: Money + withdraw(amount: Money) + deposit(amount: Money) Ιδιότητες Λειτουργίες Από ποια οπτική γωνία σχεδίασης??? κλάση λογισμικού ή έννοια του πεδίου του προβλήματος Οι λειτουργίες??? μέθοδοι ή υποχρεώσεις υψηλού επιπέδου

Ιδιότητες (γνωρίσματα) Υποχρεωτικό Ορθογώνιο Παραλληλόγραμμο με τρία διαμερίσματα Account - balance: Money + withdraw(amount: Money) + deposit(amount: Money) Όνομα κλάσης Ιδιότητες Λειτουργίες Εννοιoλογική: Ιδιότητα Π.χ. Ο «λογαριασμός» (account) έχει «υπόλοιπο» (balance) Προδιαγραφής Π.χ. Ένα αντικείμενο «λογαριασμός» (account) μπορεί να πει ή να θέσει το «υπόλοιπο» (balance) του Υλοποίησης Π.χ. Ενα αντικείμενο «λογαριασμός» (account) έχει ένα πεδίο «υπόλοιπο» (balance)

Κλάση, ιδιότητες και λειτουργίες Συνήθως: Iδιότητες ιδιωτικές (private) χαρακτηριστικά μιας κλάσης που δεν είναι προσπελάσιμα από άλλες κλάσεις. Ιδιότητες δημόσιες (public) χαρακτηριστικά μιας κλάσης που είναι προσπελάσιμα από άλλες κλάσεις. Οι μέθοδοι, ουσιαστικά, αποτελούν τη διεπαφή (interface) ανάμεσα στην κλάση και το υπόλοιπο σύστημα. Ιδιωτικές??? Δηλαδή??? Τα αντικείμενα άλλων κλάσεων δεν έχουν τη δυνατότητα να προσπελάσουν απευθείας τις ιδιότητες μίας κλάσης, αλλά χρησιμοποιούν για αυτό τις μεθόδους της κλάσης.

Δομή αντικειμένου Στατικό μέρος (private) Δεδομένα (Μεταβλητές) Δυναμικό μέρος (public) Διαδικασίες (Μέθοδοι)

Κλάση, ιδιότητες και λειτουργίες Μια κλάση «Φοιτητής» (Student) αναπαριστά την οντότητα του φοιτητή σε ένα σύστημα. Η κλάση «Φοιτητής» ενσωματώνει πληροφορίες για το φοιτητή, όπως το μοναδικό κωδικό του φοιτητή, το όνομα του φοιτητή κ.α., τα οποία αποτελούν τα χαρακτηριστικά/ιδιότητες της κλάσης «Φοιτητής». Η κλάση «Φοιτητής» έχει επίσης κάποια λειτουργικότητα, η οποία αναπαρίσταται με λειτουργίες, όπως είναι οι λειτουργίες: getstudentname(), getstudentid() κ.α.

Κλάση, ιδιότητες και λειτουργίες Student -StudentId -StudentName -StudentAddress +getstudentid () +getstudentname () +getstudentaddress ()

Αναπαράσταση κλάσεων - παράδειγμα Ελέφαντας Χρώμα: string Αριθμός χαυλιοδόντων: integer Τοποθεσία: string Βάρος: real Ύψος: real κίνηση_προς (τοποθεσία) πλύσιμο (ημερομηνία) λήψη_τροφής ( ποσότητα, ημερομηνία, ώρα)

Αναπαράσταση κλάσεων - παράδειγμα Μάθημα Κωδικός μαθήματος Θεματική ενότητα Τίτλος Διδάσκων Προσθήκη Μαθήματος () Διαγραφή Μαθήματος () Μεταβολή στοιχείων Μαθήματος () Ανάθεση Μαθήματος ()

Αναπαράσταση κλάσεων - παράδειγμα Καθηγητής Αρ. Ταυτότητας Όνομα Επώνυμο Διεύθυνση Τηλέφωνο Προσθήκη Καθηγητή () Διαγραφή Καθηγητή () Μεταβολή στοιχείων Καθηγητή ()

Κλάση, ιδιότητες και λειτουργίες Αρχή απόκρυψης των δεδομένων (information hiding principle) ενθυλάκωση (encapsulation) Πλεονεκτήματα: Αλλαγή, κατά βούληση, της εσωτερικής παράστασης των δεδομένων, χωρίς να επηρεάσει τους χρήστες των αντικειμένων της κλάσης (άλλα αντικείμενα που αλληλεπιδρούν με αυτήν) εφόσον η δημόσια διασύνδεση και η σημασιολογία της παραμένουν ίδιες. Εφαρμογή πολιτικών ελέγχου από τις μεθόδους της κλάσης για την προσπέλαση της κλάσης. Παράδειγμα έλεγχος έγκυρων παραμέτρων κλήσης (π.χ. το ποσό που ζητείται για ανάληψη δεν είναι αρνητικό) και εκτέλεση κώδικα μόνο στην περίπτωση αυτή.

Προσδιοριστές πρόσβασης / Ετικέτες ορατότητας (visibility tags) " " : ιδιωτική πρόσβαση (by owing class) "+" : δημόσια πρόσβαση (by all used) "#" : προστατευμένη πρόσβαση (by owing class and its subclasses) η ιδιότητα ή λειτουργία είναι προσπελάσιμη από την κλάση και τις τυχόν υποκλάσεις της "~" : πρόσβαση σε επίπεδο πακέτου η ιδιότητα ή λειτουργία είναι προσπελάσιμη από την κλάση στην οποία δηλώνεται και τις άλλες κλάσεις που βρίσκονται στο ίδιο πακέτο με αυτήν.

Συντακτικό για τη δήλωση ιδιοτήτων (properties) στη UML (1) Προσδιοριστής_πρόσβασης όνομα_ιδιότητας: Τύπος [πολλαπλότητα διάταξη] = Αρχική_τιμή {συμβολοσειρά ιδιοτήτων} Προσδιοριστής_πρόσβασης: +,-,#, ή ~ Τύπος: τύπος δεδομένων (π.χ. String, int, boolean, char, real, πίνακας) Πολλαπλότητα: διάστημα τιμών με κάτω και πάνω όριο (π.χ. 1..5) ή συγκεκριμένη αριθμητική τιμή (π.χ. 1). Αν πάνω όριο αστερίσκος άπειρες τιμές (π.χ. 1...*) Αν μόνο * 0 ή περισσότερα. Διάταξη: μπορεί να μην υπάρχει ή λέξη unordered οπότε θεωρείται πως δεν υπάρχει διάταξη ή λέξη ordered, οπότε υπάρχει διάταξη Η διάταξη αφορά την περίπτωση που έχουμε πολλαπλότητα μεγαλύτερη από 1.

Συντακτικό για τη δήλωση ιδιοτήτων (properties) στη UML (2) Προσδιοριστής_πρόσβασης όνομα_ιδιότητας: Τύπος [πολλαπλότητα διάταξη] = Αρχική_τιμή {συμβολοσειρά ιδιοτήτων} Όταν έχουμε πολλές τιμές (π.χ. έναν πίνακα τιμών), η διάταξη σημαίνει πως έχει σημασία η σειρά των τιμών (ποια είναι πρώτη, ποια δεύτερη κ.λπ.). Επομένως, στην υλοποίηση της συγκεκριμένης κλάσης με γλώσσα προγραμματισμού ΠΡΕΠΕΙ να χρησιμοποιηθεί συλλογή που σέβεται τη διάταξη (π.χ. λίστα), και όχι κάποια που δεν εγγυάται τη διάταξη (π.χ. σύνολο). Αρχική_τιμή: η τιμή που αποδίδεται στη συγκεκριμένη ιδιότητα (με την οποία "αρχικοποιείται") μετά τη δημιουργία ενός αντικειμένου της κλάσης. Η τιμή θα πρέπει να ανήκει στον τύπο της ιδιότητας. Συμβολοσειρά ιδιοτήτων: περιέχει ιδιότητες για τη συγκεκριμένη δήλωση. Μια ιδιότητα που χρησιμοποιείται συχνά είναι η {frozen}, που χαρακτηρίζει μία ιδιότητα ως αμετάβλητη, δηλαδή αφού πάρει κάποια τιμή για πρώτη φορά, στη συνέχεια δεν μεταβάλλεται.

Παραδείγματα (1) Προσδιοριστής_πρόσβασης όνομα-ιδιότητας: Τύπος [πολλαπλότητα διάταξη] = Αρχική_τιμή {συμβολοσειρά ιδιοτήτων} 1. Διατήρηση συλλογής με τα ονόματα των φοιτητών ενός τμήματος με αλφαβητική σειρά: - students : string[* ordered] Πολλαπλότητα * επειδή υπάρχουν πολλοί φοιτητές. Διάταξη ordered επειδή η συγκεκριμένη συλλογή τιμών είναι διατεταγμένη.

Παραδείγματα (2) Προσδιοριστής_πρόσβασης όνομα-ιδιότητας: Τύπος [πολλαπλότητα διάταξη] = Αρχική_τιμή {συμβολοσειρά ιδιοτήτων} 2. Δήλωση σταθεράς για το επιτόκιο καταθέσεων τράπεζας το επιτόκιο είναι πραγματικός αριθμός και, αφού πάρει κάποια τιμή, η τιμή αυτή διατηρείται (δηλαδή είναι σταθερά). Έστω, ότι το αρχικό επιτόκιο είναι 3,5% - interestrate : double = 0.035 {frozen} Χρήση αρχικής τιμής και συμβολοσειράς ιδιοτήτων {frozen} για να υποδηλώσουμε ότι πρόκειται για σταθερά.

Συντακτικό για τη δήλωση λειτουργιών/μεθόδων στη UML (1) Προσδιοριστής_πρόσβασης όνομα (λίστα_παραμέτρων): Τύπος_επιστροφής {συμβολοσειρά ιδιοτήτων} Προσδιοριστής_πρόσβασης: +,-,#, ή ~ Όνομα: όνομα λειτουργίας, μία συμβολοσειρά... Λίστα_παραμέτρων: προσδιορίζει τις παραμέτρους της λειτουργίας, χωρισμένες με κόμμα. Μπορεί να είναι και κενή. Για κάθε παράμετρο, έχουμε direction, όνομα και τύπο: [in out inout] όνομα-παραμέτρου : τύπος = εξ ορισμού τιμή. in η παράμετρος εισάγεται στη λειτουργία, αλλά δεν μεταβάλλεται από αυτήν (default τιμή, αν δεν εμφανίζεται κάτι άλλο). out ΔΕΝ εισάγεται κάποια τιμή για την παράμετρο, αλλά επιστρέφεται τιμή από τη λειτουργία. inout ΚΑΙ εισάγεται τιμή στην παράμετρο, ΚΑΙ η λειτουργία μπορεί να μεταβάλλει την τιμή αυτή. Τύπος: τύπος της παραμέτρου και προαιρετικά, μπορούμε να δώσουμε και κάποια εξ ορισμού τιμή για την παράμετρο.

Συντακτικό για τη δήλωση λειτουργιών/μεθόδων στη UML (2) Προσδιοριστής_πρόσβασης όνομα (λίστα_παραμέτρων): Τύπος_επιστροφής {συμβολοσειρά ιδιοτήτων} Τύπος_επιστροφής: προσδιορίζει τον τύπο των δεδομένων που επιστρέφει η συνάρτηση (π.χ. int, boolean κ.λπ.), αν απαιτείται. Συμβολοσειρά ιδιοτήτων: προσδιορίζουμε κάποιες ιδιότητες για τη λειτουργία. Μια πολύ κοινή ιδιότητα είναι η {query} (ερώτημα) με την οποία προσδιορίζεται ότι η λειτουργία είναι ερώτημα, δηλαδή δεν μεταβάλλει την κατάσταση (state) του αντικειμένου όταν καλείται. Ο προσδιορισμός των ερωτημάτων είναι πολύ χρήσιμος στην πράξη, επειδή επισημαίνουν ποιες λειτουργίες δεν χρειάζεται να μας ανησυχούν σε περιπτώσεις πολλαπλών ταυτόχρονων προσπελάσεων (σε ταυτόχρονα συστήματα). Αφού τα ερωτήματα δεν μεταβάλλουν την κατάσταση ενός αντικειμένου, η ταυτόχρονη πρόσβαση σε αυτά δεν μπορεί να οδηγήσει σε ασυνέπειες στην κατάσταση του αντικειμένου.

Συντακτικό για τη δήλωση λειτουργιών/μεθόδων στη UML (3) Προσδιοριστής_πρόσβασης όνομα (λίστα_παραμέτρων): Τύπος_επιστροφής {συμβολοσειρά ιδιοτήτων} Συμβολοσειρά ιδιοτήτων: προσδιορίζουμε κάποιες ιδιότητες για τη λειτουργία. {abstract}: χρειάζεται ένα παιδί για την ολοκλήρωση της υλοποίησης {static}: συμπεριφέρεται ως global procedure Το όνομα, ο τύπος επιστροφής και οι παράμετροι μιας λειτουργίας αποτελούν την υπογραφή μιας λειτουργίας (signature of an operation).

Παραδείγματα (1) Προσδιοριστής_πρόσβασης όνομα (λίστα_παραμέτρων): Τύπος_επιστροφής {συμβολοσειρά ιδιοτήτων} 1. Λειτουργία για την ανάληψη μετρητών από ένα λογαριασμό: δέχεται το ποσό της ανάληψης ως παράμετρο, επιστρέφει ως αποτέλεσμα μία λογική τιμή (true ή false) ανάλογα με το αν η ανάληψη ήταν επιτυχής ή απέτυχε (π.χ. δεν επαρκεί το υπόλοιπο) + withdraw(in amount: Money) : boolean Παράμετρος: αναφερόμαστε σε τύπο δεδομένων που ονομάζεται Money. Έχει σίγουρα δηλωθεί σε άλλο σημείο του συστήματος. Παράμετρος in, διότι δεν μεταβάλλεται από τη λειτουργία Οι παράμετροι in υλοποιούνται στις γλώσσες προγραμματισμού με "κλήσεις με τιμές" (call by value).

Παραδείγματα (2) Προσδιοριστής_πρόσβασης όνομα (λίστα_παραμέτρων): Τύπος_επιστροφής {συμβολοσειρά ιδιοτήτων} 2. Λειτουργία που να επιστρέφει το τρέχον υπόλοιπο ενός τραπεζικού λογαριασμού + getbalance():money {query} Συμβολοσειρά ιδιοτήτων {query} σημαίνει πως η λειτουργία είναι ερώτημα, δεν μεταβάλλει την κατάσταση του αντικειμένου στο οποίο καλείται (δεν αλλάζει το υπόλοιπο).

Λειτουργίες και ιδιότητες με εμβέλεια κλάσης (1) Παράδειγμα: θέλουμε να μπορούμε να δημιουργήσουμε αντικείμενα Account, διαβάζοντας τα στοιχεία για τη δημιουργία κάθε τέτοιου αντικειμένου από μια βάση δεδομένων. +createaccount(accountld : String) : Account Παράμετρος εισόδου: AccountID (αναγνωριστικό λογαριασμού). Γίνεται προσπέλαση βάσης δεδομένων για τη δημιουργία αντικειμένου Account με τα στοιχεία που υπάρχουν αποθηκευμένα με αυτό το AccountlD, και επιστροφή αυτού του αντικειμένου.

Λειτουργίες και ιδιότητες με εμβέλεια κλάσης (2) Η λειτουργία αυτή δεν έχει σχέση με τα δεδομένα κάποιου συγκεκριμένου αντικειμένου. Βρίσκεται όμως στην κλάση «Account», επειδή η κλάση αυτή περιέχει τις πληροφορίες που είναι απαραίτητες για τη δημιουργία ενός λογαριασμού. ΑΡΑ, δήλωση λειτουργίας με εμβέλεια κλάσης (class scope) στην κλάση «Account». Οι λειτουργίες ή ιδιότητες με εμβέλεια κλάσης στις γλώσσες προγραμματισμού (π.χ. Java) συνήθως ονομάζονται static. Account Υπογράμμιση λειτουργίας με εμβέλεια κλάσης - balance: Money +create(accountid: String) : Account + withdraw(amount: Money) + deposit(amount: Money)

Λειτουργίες και ιδιότητες με εμβέλεια κλάσης (3) Βicycle public class Bicycle{ private int gear; private int speed; private int id; private static int numberofbicycles = 0; -gear: int -speed: int -id: int -numberofbicycles: int +getnumberofbicycles(): int +Bicycle(in startspeed:int, in startgear:int) } public Bicycle(int startspeed, int startgear){ gear = startgear; speed = startspeed; // increment number of Bicycles and assign ID number id = ++numberofbicycles; } public static int getnumberofbicycles() { return numberofbicycles; }

Συνδέσεις μεταξύ κλάσεων 1. Συσχετίσεις (associations) 2. Γενικεύσεις (generalizations) 3. Συναθροίσεις (aggregations) 4. Συνθέσεις (compositions) 5. Εξαρτήσεις (dependencies)

Συσχετίσεις κλάσεων Συσχέτιση (association) μεταξύ δύο κλάσεων: στατική σχέση μεταξύ των δύο κλάσεων. ΠΟΤΕ ΧΡΕΙΑΖΕΤΑΙ??? ΟΤΑΝ για τη λειτουργία μιας κλάσης απαιτείται η συνεργασία της με μία ή περισσότερες άλλες κλάσεις. Αν αυτή η συνεργασία απαιτείται να είναι: σε μόνιμη βάση, τότε χρησιμοποιούμε συσχέτιση παροδική (π.χ. όταν αντικείμενα της κλάσης «Α» είναι παράμετροι σε μια λειτουργία της κλάσης «Β»), τότε χρησιμοποιούμε εξάρτηση.

Συσχετίσεις κλάσεων (1) Ένας τραπεζικός λογαριασμός μπορεί να έχει έναν ή περισσότερους δικαιούχους που είναι στιγμιότυπα της κλάσης «Customer». ΤΟΤΕ, συσχέτιση μεταξύ των κλάσεων «Account» και «Customer». Account -accounts has -holders 1..* 1..* Customer Ευθεία γραμμή μεταξύ των κλάσεων για την αναπαράσταση της συσχέτισης

Συσχετίσεις κλάσεων (2) Προαιρετικά, μπορούμε να έχουμε σε μία συσχέτιση τα εξής στοιχεία: Όνομα συσχέτισης Ονόματα άκρων συσχέτισης Πολλαπλότητα (multiplicity) Πλοηγησιμότητα (navigability)

Όνομα συσχέτισης Λέξη που υποδηλώνει το νόημα της συσχέτισης. Το όνομα, όταν αναγράφεται, θα πρέπει να τοποθετείται στο μέσο του συνδέσμου, έτσι ώστε να μη συγχέεται με τα ονόματα που πιθανώς θα υπάρχουν στα άκρα των συσχετίσεων. Account -accounts has -holders 1..* 1..* Customer Η λέξη "has" ("έχει") πρέπει να διαβάζεται από την κλάση «Customer» προς την κλάση «Account»: ένας πελάτης έχει λογαριασμούς.

Ονόματα άκρων συσχέτισης (1) Σε κάθε άκρο συσχέτισης όνομα που υποδηλώνει το ρόλο της κλάσης στη συσχέτιση. Account -accounts has -holders 1..* 1..* Customer Στο άκρο της συσχέτισης που αφορά την κλάση «Customer»: όνομα "holders" ("δικαιούχοι"), επειδή η συσχέτιση αφορά τους πελάτες που είναι δικαιούχοι ενός λογαριασμού. Το όνομα του άκρου συσχέτισης προσδιορίζει το ρόλο μίας κλάσης στη συσχέτιση (κάποιες φορές αναφέρεται και ως όνομα ρόλου (role name)).

Ονόματα άκρων συσχέτισης (2) ΟΤΑΝ η ίδια κλάση συσχετίζεται με μία άλλη κλάση με δύο διαφορετικές συσχετίσεις. ΤΟΤΕ, όνομα άκρου συσχέτισης απαραίτητο για να υποδηλώσει ποιος είναι ο ρόλος της πρώτης συσχέτισης και ποιος της δεύτερης. 1 Department -teachers 1..* Teacher 1 -president 1 Κλάση «Department» για τμήμα εκπαιδευτικού ιδρύματος και κλάση «Teacher» για τους εκπαιδευτικούς του τμήματος. 1. Συσχέτιση που αφορά τους εκπαιδευτικούς του τμήματος (teachers) 2. Συσχέτιση που αφορά τον πρόεδρο του τμήματος (επίσης εκπαιδευτικός (president).

Πολλαπλότητα (1) Αφορά ένα άκρο μίας συσχέτισης. Είναι το πλήθος των αντικειμένων που μπορούν να μετέχουν σε μία συσχέτιση. Εκφράζονται με κάτω και πάνω όρια. 1, 1..1 *, 0..*, 0.. 1..* 0..1 11 2..4 2, 4 μία και μόνο μία, υποχρεωτική & μονότιμη συσχέτιση 0 ή περισσότερες, ΔΗΛ κανένας περιορισμός μία ή περισσότερες, υποχρεωτική & πλειότιμη συσχέτιση 0 ή 1, δηλαδή προαιρετική συσχέτιση κάποιος συγκεκριμένος αριθμός κάποια συγκεκριμένη περιοχή τιμών μη συνεχόμενες σειρές τιμών Παραδείγματα πιο γενικών περιορισμών: 1..11 (για ποδοσφαιρικές ομάδες) 3..4 (για τροχούς αυτοκινήτων)

Πολλαπλότητα (2) Account -accounts has -holders 1..* 1..* Customer Ένας λογαριασμός μπορεί να έχει έναν ή περισσότερους δικαιούχους (1..* στο άκρο holders) και ένας πελάτης μπορεί να έχει έναν ή περισσότερους λογαριασμούς (1..* στο άκρο accounts)

Πολλαπλότητα (3) Copy is a copy of 1..* 1 Book Κάθε copy συσχετίζεται μέσω της συσχέτισης is a copy of με ακριβώς ένα book. Για αυτό βάλαμε 1 στο άκρο της συσχέτισης που αφορά την κλάση Book. Από την άλλη πλευρά, μπορεί να υπάρχουν πολλά αντίγραφα ενός συγκεκριμένου βιβλίου στο σύστημά μας. Επομένως, η πολλαπλότητα στο άκρο της συσχέτισης που αφορά την κλάση Copy είναι 1..*

Παραδείγματα (4) Author uses Computer Ένας συγγραφέας (author) χρησιμοποιεί υπολογιστή (computer). Η κλάση author συνδέεται με την κλάση computer. Person owns 1..* * Ένας άνθρωπος (person) έχει πολλά (0 ως πολλά) αυτοκίνητα (car). Ένα αυτοκίνητο μπορεί να κατέχεται από πολλούς (1 ως πολλούς) ανθρώπους. Car

Πλοηγησιμότητα (1) Συμβολίζεται με ένα βέλος στο πέρας της συσχέτισης και υποδηλώνει πλοηγησιμότητα μόνο προς τη φορά του βέλους. Αφορά τη δυνατότητα που έχουμε από μία κλάση να ανακτήσουμε αντικείμενα της άλλης σε μία συσχέτιση. Είναι χρήσιμη μόνο για την προοπτική Προδιαγραφής και Υλοποίησης (δεν είναι χρήσιμη για την Εννοιoλογική προοπτική).

Πλοηγησιμότητα (2) Account -accounts has -holders 1..* 1..* Customer Εδώ, δεν υπάρχει πλοηγησιμότητα, ΑΡΑ έχουμε πλοηγησιμότητα και προς τις δύο κατευθύνσεις: έχοντας ένα αντικείμενο Account μπορούμε να βρούμε τους πελάτες που είναι δικαιούχοι του λογαριασμού και έχοντας ένα αντικείμενο Customer μπορούμε να βρούμε τους λογαριασμούς του. Η πλοηγησιμότητα και προς τις δύο κατευθύνσεις έχει την έννοια της αμοιβαιότητας: Αν το αντικείμενο-λογαριασμός Α συσχετίζεται με το αντικείμενοπελάτη C, τότε θα πρέπει και ο πελάτης C να συσχετίζεται με το λογαριασμό Α.

Πλοηγησιμότητα (3) Department -teachers 1..* Teacher -president 1 Εδώ, υπάρχει πλοηγησιμότητα μόνο από την κλάση «Department» προς την κλάση «Teacher»: έχοντας ένα αντικείμενο Department μπορούμε να βρούμε ποιοι διδάσκουν σε αυτό το τμήμα ή ποιος είναι ο πρόεδρός του, ΑΛΛΑ έχοντας ένα αντικείμενο Teacher δεν μπορούμε να βρούμε σε ποιο τμήμα διδάσκει.

Πλοηγησιμότητα (4) Η κλάση «Department» έχει την υποχρέωση να γνωρίζει τους εκπαιδευτικούς, αλλά ένας εκπαιδευτικός δεν έχει την αντίστοιχη υποχρέωση να γνωρίζει σε ποιο τμήμα διδάσκει! ΠΡΑΓΜΑ ΠΟΥ ΔΕΙΧΝΕΙ ότι, ο πραγματικός κόσμος και ο κόσμος του λογισμικού δεν είναι αναγκαστικά ταυτόσημοι. Στον πραγματικό κόσμο, ο εκπαιδευτικός γνωρίζει πάντα σε ποιο τμήμα διδάσκει. Στον κόσμο του λογισμικού, μπορεί να μην κριθεί απαραίτητο για τις λειτουργίες που θέλουμε να παρέχει το λογισμικό μας, η συσχέτιση να είναι δύο κατευθύνσεων.

Πλοηγησιμότητα (5) Order employment * 1 Customer Η κλάση «Order» έχει την υποχρέωση να λέει για ποιον πελάτη είναι, από πλευράς προδιαγραφών. Η κλάση «Order» περιλαμβάνει έναν pointer προς τον πελάτη (και όχι αντίστροφα) από πλευράς υλοποίησης. Order employment * 1 Customer Η κλάση «Πελάτης» έχει την υποχρέωση να λέει τις παραγγελίες του, από πλευράς προδιαγραφών. Η κλάση «Customer» περιλαμβάνει έναν pointer προς την παραγγελία από πλευράς υλοποίησης.

Πλοηγησιμότητα (6) Order employment * 1 Customer Και οι δύο κλάσεις έχουν την υποχρέωση να λένε για το άλλο άκρο, από πλευράς προδιαγραφών. Και οι δύο κλάσεις περιλαμβάνουν pointers προς το άλλο άκρο από πλευράς υλοποίησης.

Παραδείγματα (1) Person * Car Η κατευθυνόμενη σύνδεση λέει ότι ένας άνθρωπος (person) μπορεί να έχει πολλά αυτοκίνητα (car), ΑΛΛΑ δεν λέει τίποτα σχετικά με το πόσοι άνθρωποι μπορούν να έχουν ένα αυτοκίνητο.

Παραδείγματα (2) Insurance Company makes 1 * Insurance Contract * concerns 1..* Customer Μία ασφαλιστική εταιρεία (insurance company) έχει πολλά (0 ως πολλά) ασφαλιστικά συμβόλαια (insurance contracts). Ένας πελάτης (customer) μπορεί να έχει από 0 ως πολλά ασφαλιστικά συμβόλαια. Ένα συμβόλαιο σχετίζεται με μία ασφαλιστική εταιρεία. Ένα συμβόλαιο αφορά έναν ή περισσότερους πελάτες.

Συσχέτιση γενίκευσης / κληρονομικότητα Ειδική μορφή συσχέτισης, όπου μία γενική κλάση αποτελεί τη βάση για τη δήλωση μίας ή περισσοτέρων ειδικότερων, υπό κάποια έννοια, κλάσεων. Η γενική κλάση ονομάζεται υπερκλάση και οι ειδικές κλάσεις ονομάζονται υποκλάσεις. Η γενίκευση στις περισσότερες γλώσσες προγραμματισμού υλοποιείται με το μηχανισμό της κληρονομικότητας ή της επέκτασης. Η γενική κλάση παρέχει λειτουργίες, ιδιότητες, συσχετίσεις κ.λ.π. χρήσιμες σε όλες τις υποκλάσεις. Οι υποκλάσεις επεκτείνουν τη λειτουργικότητα της υπερκλάσης και παρέχουν επιπλέον λειτουργίες, όπου απαραίτητο ή εξειδικεύουν τη συμπεριφορά τους.

Συσχέτιση γενίκευσης (1) Animal Amhibian Mammal Reptile Dog Cat Cow Ο σκύλος, η γάτα, η αγελάδα «είναι ένα είδος» Θηλαστικού.

Συσχέτιση γενίκευσης (2) Vehicle Car Boat Sports car Passenger car Truck Sailing boat Motor boat Cargo ship Οι κλάσεις Vehicle, Car και Boat μπορούν να οριστούν ως αφαιρετικές κλάσεις. Μία αφαιρετική κλάση είναι αυτή που δεν έχει αντικείμενα, δεν μπορεί να έχει στιγμιότυπα.

Τι κληρονομείται Σε μια ιεραρχία κληρονομικότητας, όλα τα ιδιοχαρακτηριστικά και οι μέθοδοι κληρονομούνται από μια υπερκλάση σε όλες τις υποκλάσεις της. Στο διάγραμμα κλάσεων, προσδιορίζονται μόνο οι νέες ιδιότητες και οι νέες μέθοδοι που έχουν προστεθεί σε αυτές που κληρονομούνται. Παράδειγμα: Οι υπάλληλοι μπορεί να πληρώνονται με την ώρα ή να είναι μισθωτοί.

Προστατευμένες ιδιότητες Συνήθως, οι ιδιότητες προσδιορίζονται ως ιδιωτικές (private) για λόγους που επιβάλλει η ενθυλάκωση. Έτσι, οι ιδιότητες είναι ορατές στο εσωτερικό της κλάσης και όχι έξω από αυτή. Στα πλαίσια μιας ιεραρχίας κληρονομικότητας απαιτείται ασθενέστερος περιορισμός της ορατότητας. Για το λόγο αυτό, οι ιδιότητες προσδιορίζονται ως προστατευμένες (protected), δηλαδή ως ορατές στο εσωτερικό της κλάσης και σε όλες τις υποκλάσεις της.

Λάθος χρήση κληρονομικότητας Πρέπει πάντοτε να εφαρμόζεται και να ακολουθείται ο κανόνας είναι ένα είδος για την κληρονομικότητα. Τρία συνηθισμένα λάθη: Το τρίγωνο που απεικονίζει την κληρονομικότητα δείχνει προς λάθος κατεύθυνση. Γίνεται χρήση κληρονομικότητας, ενώ θα έπρεπε να γίνει χρήση άλλης σχέσης (συσσώρευσης). Χρήση κληρονομικότητας εκεί που δεν πρέπει, π.χ. κληρονομικότητα της κλάσης Άτομο (Person) από την κλάση Διεύθυνση (Address).

Συσχέτιση γενίκευσης (1) Person -name: String -age: int +setname(name : String) +getname() : String +setage(age : int) +getage() : int +tostring() : String Η κλάση «Person» επεκτείνεται για να δημιουργηθεί η υποκλάση «Student». Η κλάση «Student» κληρονομεί όλες τις ιδιότητες και τις λειτουργίες της από την υπερκλάση της. Student -fieldofstudy : String +setfieldofstudy(fieldofstudy : String) +getfieldofstudy() : String +tostring() : String Σύμβολο γενίκευσης: βέλος από την ειδική (απογονική) στη γενική κλάση (γονική)

Συσχέτιση γενίκευσης (2) Person -name: String -age: int +setname(name : String) +getname() : String +setage(age : int) +getage() : int +tostring() : String Προσθέτει επίσης, και μία λειτουργία (και την αντίστοιχη ιδιότητα) που επιτρέπει την ανάκτηση του πεδίου σπουδών του φοιτητή (fieldofstudy) Student -fieldofstudy : String +setfieldofstudy(fieldofstudy : String) +getfieldofstudy() : String +tostring() : String

Συσχέτιση γενίκευσης (3) Person -name: String -age: int +setname(name : String) +getname() : String +setage(age : int) +getage() : int +tostring() : String Η κλάση «Person» περιέχει λειτουργία που επιστρέφει κάποιες πληροφορίες με μορφή κειμένου (String) για ένα άτομο: tostring Η λειτουργία αυτή δηλώνεται και στην κλάση «Student». Student -fieldofstudy : String +setfieldofstudy(fieldofstudy : String) +getfieldofstudy() : String +tostring() : String

Συσχέτιση γενίκευσης (4) -name: String -age: int +setname(name : String) +getname() : String +setage(age : int) +getage() : int +tostring() : String Student Person Τι σημαίνει? Η λειτουργία στην κλάση «Student» υπερβαίνει (overrides) τη λειτουργία της κλάσης «Person» για τα αντικείμενα που είναι φοιτητές: όταν δηλαδή, καλούμε τη λειτουργία αυτή σε αντικείμενα «Person», τότε αν το αντικείμενο είναι όντως «Person» θα κληθεί η λειτουργία της υπερκλάσης, ενώ αν είναι «Student» θα κληθεί η λειτουργία της υποκλάσης. -fieldofstudy : String +setfieldofstudy(fieldofstudy : String) +getfieldofstudy() : String +tostring() : String

Συσχέτιση γενίκευσης (5) Κλάσεις «Person» και «Student» σε Java Η κλάση «Student» δηλώνεται ως υποκλάση της κλάσης «Person» με τη χρήση της φράσης extends στη δήλωσή της, Η κλάση «Student» υπερβαίνει τη μέθοδο tostring της υπερκλάσης της, δηλώνοντας τη μέθοδο tostring εκ νέου. public class Person { protected String name; // όνομα ατόμου private int age; // ηλικία ατόμου // Κατασκευαστής public Person() { }

Συσχέτιση γενίκευσης (6) public void setname(string name) { this.name = name; } // Μέθοδος που θέτει το όνομα public void setage{int age) { // Μέθοδος που θέτει την ηλικία this.age = age; } public String getnameo { // Μέθοδος ανάκτησης του ονόματος return name; } public int getage() {// Μέθοδος ανάκτησης ηλικίας return age; } // Μέθοδος επιστροφής πληροφοριών για το άτομο σε αλφαριθμητ. Μορφή public String tostring() { return "Είμαι ο " + name + " και είμαι" + age + " ετών. " ;

Συσχέτιση γενίκευσης (7) public class Student extends Person { private String fieldofstudy; // To Πεδίο σπουδών του φοιτητή // Μέθοδος ανάθεσης του πεδίου σπουδών public void setfieldofstudy (String fieldofstudy) { this.fieldofstudy = fieldofstudy; } // Μέθοδος ανάκτησης του πεδίου σπουδών public String getfield() { } return fieldofstudy; //Νέα δήλωση (υπέρβαση) της μεθόδου tostring ειδικά για τους φοιτητές public String tostring() { } return "Είμαι ο " + name + " και είμαι " + getage() + " ετών. + "Σπουδάζω " + fieldofstudy; }

Υπερκαλυπτόμενη γενίκευση Vehicle Car Boat Amphibian Η κλάση Amphibian μπορεί να κληρονομήσει χαρακτηριστικά και λειτουργίες από δύο υποκλάσεις, οι οποίες κληρονομούν από μία υπερκλάση.

Πλήρη γενίκευση Person (complete) Man Woman Σε μία πλήρη γενίκευση δεν επιτρέπεται να προστεθεί άλλη υποκλάση, όλες οι επιτρεπτές υποκλάσεις έχουν οριστεί. Το αντίθετο είναι μία ελλειπής γενίκευση, όπου επιπλέον υποκλάσεις επιτρέπεται να προστεθούν στο μέλλον. Συνήθως, οι σχέσεις γενίκευσης είναι ελλειπείς.

Συσσώρευση και σύνθεση Συσσώρευση (aggregation) και σύνθεση (composition): δύο ειδικές περιπτώσεις συσχετίσεων. Yποδηλώνουν τη συσχέτιση μίας κλάσης με κάποια άλλη κλάση που αποτελεί μέρος της. Συσχέτιση όλου και μερών

Συσσώρευση (Aggregation) Σε τι διαφέρει από συσχέτιση??? Δεν επιτρέπεται η κυκλική συσχέτιση του μέρους με το όλο, αλλά μόνο μία συσχέτιση από το όλο προς το μέρος. Μία κλάση αποτελεί συλλογή από άλλες κλάσεις: «Αποτελείται από» «Περιέχει» «Περιλαμβάνει» «Έχει» Παράδειγμα: PC monitor, keyboard, tower Συμβολίζεται με μια συσχέτιση από το όλο προς το μέρος, στην οποία τοποθετείται ένας άσπρος ρόμβος στην πλευρά του όλου (aggregating entity)

Συσσώρευση (Aggregation) Ο προσωπικός υπολογιστής (η κλάση «PC») αποτελείται από μία οθόνη (κλάση «Monitor»), ένα πληκτρολόγιο (κλάση «Keyboard») και μία κεντρική μονάδα (κλάση «Tower») Monitor PC Keyboard Tower

Συσσώρευση (Aggregation) Wheel Person * members Car * Club Η κλάση «Club» αποτελεί συσσώρευση της κλάσης «Person»

Σύνθεση (Composition) Σε τι διαφέρει από συσχέτιση??? Iσχυρή μορφή συσχέτισης μεταξύ των κλάσεων: το όλο περιέχει αποκλειστικά τα μέρη του, ΔΕΝ ΜΠΟΡΕΙ κάποιο άλλο όλο να περιέχει το ίδιο αντικείμενο το αντικείμενο-τμήμα ανήκει μόνο σε ένα αντικείμενο-όλο! υπάρχει μια σχέση ''ζωής και θανάτου" μεταξύ του όλου και των μερών του: τα μέρη δημιουργούνται και καταστρέφονται ταυτόχρονα με το όλο Συμβολίζεται με μια συσχέτιση από το όλο προς το μέρος, στην οποία τοποθετείται ένας μαύρος ρόμβος στην πλευρά του όλου (aggregating entity)

Συσσώρευση και σύνθεση Σε τι διαφέρουν μεταξύ τους??? Η συσσώρευση χρησιμοποιείται όταν οι επιμέρους κλάσεις έχουν διάρκεια ζωής ανεξάρτητη από τη σύνθετη κλάση! Μία ρόδα μπορεί να υπάρξει και ανεξάρτητα από ένα αυτοκίνητο! Η σύνθεση χρησιμοποιείται όταν οι επιμέρους κλάσεις έχουν διάρκεια ζωής που εξαρτάται και συμπίπτει με αυτή της σύνθετης κλάσης! Δηλαδή, διαγραφή του όλου συνεπάγεται διαγραφή των μερών του!

Σύνθεση (Composition) Ένα πολύγωνο (κλάση «Polygon») συσχετίζεται μέσω σύνθεσης με τα σημεία (κλάση «Point») που αποτελούν τις κορυφές του. Polygon corners 3..* Point

Σύνθεση (Composition) Γιατί σύνθεση??? Γιατί ακόμη και στην περίπτωση που δύο πολύγωνα έχουν τις ίδιες γωνίες, εξακολουθούν να είναι δύο διαφορετικά πολύγωνα!!! Polygon corners 3..* Point

Σύνθεση (Composition) Η μετακίνηση σε ένα πολύγωνο θα πρέπει να συνεπάγεται τη μεταβολή των δικών του σημείων, που είναι οι κορυφές του. ΟΧΙ, όμως και για κάποιο άλλο πολύγωνο το οποίο τυχαίνει να έχει κάποιες ή όλες τις κορυφές ίδιες!!! Polygon corners 3..* Point

Σύνθεση (Composition) Η διαγραφή ενός πολυγώνου συνεπάγεται τη διαγραφή των σημείων του, που είναι οι δικές του κορυφές. ΟΧΙ όμως και για άλλα πολύγωνα που τυχόν έχουν για τις γωνίες τους τις ίδιες τιμές με το πολύγωνο που διαγράφεται. Polygon corners 3..* Point

Παράδειγμα με συσσώρευση & σύνθεση

Παράδειγμα με σύνθεση Ένα κτίριο αποτελείται από ένα ή περισσότερα δωμάτια και ένα δωμάτιο μπορεί να αποτελείται από μερικά υποδωμάτια

Σύνθεση... Κανόνας του "part of Αν έχει νόημα να πούμε ότι κάτι είναι μέρος κάποιου άλλου, τότε πολύ πιθανή η σύνθεση! Ένα δωμάτιο είναι μέρος ενός κτιρίου! ΑΛΛΑ, μία διεύθυνση δεν είναι μέρος ενός ανθρώπου! If in doubt, leave it out!!!!

Συσσώρευση και σύνθεση Έστω ένα πολύγωνο που αποτελείται από 3 σημεία: p1, p2, p3. Ποιο όμως είναι; Πώς θα δηλώσουμε ότι η σειρά των σημείων έχει σημασία???? Polygon 3..* Point -X:int -Y: int

Συλλογές από πλειότιμα άκρα συσχετίσεων Πλειότιμο άκρο: το πάνω όριο της πολλαπλότητας του άκρου είναι > 1 (π.χ. *) Σημαίνει σύνολο, δηλαδή απουσία σειράς ή διπλοεμφανίσεων (duplicates) Μπορούμε να ορίσουμε τι θέλουμε: {set} : απουσία σειράς, απουσία διπλοεμφανίσεων {ordered set} : τα αντικείμενα έχουν σειρά, απουσία διπλοεμφανίσεων {bag}: επιτρέπονται διπλοεμφανίσεις (ή πολλές εμφανίσεις) αντικειμένων {list} ή {sequence}: τα αντικείμενα έχουν σειρά και μπορεί να υπάρχουν επαναλήψεις

Συλλογές από πλειότιμα άκρα συσχετίσεων {ordered set} : τα αντικείμενα έχουν σειρά, απουσία διπλοεμφανίσεων. Polygon 3..* {ordered set} Point -X:int -Y: int

Συλλογές από πλειότιμα άκρα συσχετίσεων Car 3..* {set} Wheels Triangle 3 {set} Point Polygon 3..* {ordered set} Point Rectangle 4 {ordered set} Point Text 1..* {list} Word

Αυτοπαθής συσχέτιση(reflexive association) Μία κλάση μπορεί να συσχετίζεται και με τον εαυτό της με μία αυτοπαθή συσχέτιση. Πώς??? Οι κλάσεις είναι αφαιρέσεις! Η κλάση «Employee» μπορεί να συσχετίζεται με τον εαυτό της μέσω του ρόλου manager/manages. Όταν μία κλάση συσχετίζεται με τον εαυτό της: ένα στιγμιότυπο της κλάσης συσχετίζεται με ένα άλλο στιγμιότυπο της ίδιας κλάσης. Employee firstname:string lastname:string -manages 0..* 1 -manager Ένα στιγμιότυπο της κλάσης «Employee» μπορεί να είναι ο manager ενός άλλου στιγμιότυπου της κλάσης «Employee». Πολλαπλότητα του ρόλου «manages»: 0..* ΑΡΑ, ένας Employee μπορεί να μην έχει άλλους Employees να κάνει manage.

Αυτοπαθής συσχέτιση(reflexive association) Node * * Ένα δίκτυο αποτελείται από πολλούς κόμβους (nodes) που συνδέονται μεταξύ τους -wife Person 1 1 -husband married to Ένας σύζυγος είναι παντρεμένος με τη σύζυγό του Εάν ένας άνθρωπος δεν είναι παντρεμένος, τότε η σχέση married to δεν μπορεί να εφαρμοστεί