Professional Documents
Culture Documents
Διάλεξη
1. Εισαγωγή
2. UML – Διαγράμματα κλάσεων
3. UML – Διαγράμματα Περιπτώσεων
Χρήσης
UML – Διαγράμματα Δραστηριότητας
4. UML – Διαγράμματα Αλληλεπίδρασης
5. UML – Χάρτες Κατάστασης
6. Διαδικασίες Ανάπτυξης Λογισμικού
7. Η Καταγραφή των Απαιτήσεων
8. Παράδειγμα: Παραγωγή
περιπτώσεων χρήσης από τις
απαιτήσεις ενός πελάτη
9. Η Ανάλυση των Απαιτήσεων
10. Παράδειγμα: Ανάλυση απαιτήσεων
συστήματος καταχώρησης ονομάτων
χώρου
11. Η Σχεδίαση του Συστήματος
Παράδειγμα Σχεδίασης
12. Θέματα Σχεδίασης: Σύζευξη
13. Θέματα Σχεδίασης: Συνεκτικότητα
14. Προχωρημένα Θέματα Σχεδίασης
15. Ανασκόπηση – Βιβλιογραφία
Τεχνολογία Λογισμικού I
1η Διάλεξη
Εισαγωγή
Σύστημα
Λογισμικό Λογισμικού
(Συνεργασία και
ενσωμάτωση με
Χωρίς ιδιαίτερη υπάρχοντα συστήματα)
μεθοδολογία αποτυγχάνει
x3
Χωρίς ιδιαίτερη
Προϊόν μεθοδολογία αποτυγχάνει
Λογισμικού Προΐόν
(Γενίκευση, Δοκιμές,
Σύστηματος
Τεκμηρίωση, Συντήρηση) Λογισμικού
Αφαιρετική προσέγγιση
Είναι η περιγραφή ενός προβλήματος σε
κάποιο επίπεδο γενίκευσης το οποίο μας
επιτρέπει να εστιάσουμε στα σημαντικά
σημεία του προβλήματος χωρίς να μας
παρασύρουν οι λεπτομέρειες.
Για παράδειγμα η Τεχνολογία Λογισμικού
μας προτρέπει να βρίσκουμε κλάσεις από
αντικείμενα με κοινά χαρακτηριστικά και
να σχηματίζουμε ιεραρχίες
Άνθρωπος
Υπάλληλος
Τεχνικός Πωλητής
Επαναχρησιμοποίηση
Στόχο έχει να επισημάνει τα κοινά
στοιχεία που μπορεί να υπάρξουν σε
διαφορετικά προϊόντα λογισμικού και να
τα σχεδιάσει και να τα υλοποιήσει έτσι
ώστε είναι δυνατό να
ξαναχρησιμοποιηθούν αυτούσια σε
μελλοντικά προϊόντα
Τα επαναχρησιμοποιήσιμα συστατικά
αποτελούν σημαντικό κεφάλαιο μιας
επιχείρησης
16 Υποέργο 1 «Αυτεπιστασία του τμήματος Πληροφορικής και Επικοινωνιών»,
«Ενίσχυση Σπουδών Πληροφορικής στο ΤΕΙ Σερρών» Μέτρο 2.2, Γ' ΚΠΣ
Μετρήσεις
Σημαντικό κομμάτι της Τεχνολογίας
Λογισμικού ασχολείται με το να
μεταφράσει σε μετρήσιμα μεγέθη έννοιες
όπως “καλή σχεδίαση”, “ποιότητα” κτλ.
Με τον τρόπο αυτό γίνεται ευκολότερη η
σύγκριση και η εξαγωγή συμπερασμάτων
2η Διάλεξη
Διαγράμματα UML
Στατικά διαγράμματα
Διάγραμμα Κλάσεων
Διάγραμμα Περιπτώσεων Χρήσης
Διάγραμμα παράταξης (δε θα καλυφθεί)
Δυναμικά Διαγράμματα
Διαγράμματα αλληλεπίδρασης
Διαγράμματα ακολουθίας
Διαγράμματα συνεργασίας
Διαγράμματα δραστηριότητας
Χάρτες καταστάσεων
5 Υποέργο 1 «Αυτεπιστασία του τμήματος Πληροφορικής και Επικοινωνιών»,
«Ενίσχυση Σπουδών Πληροφορικής στο ΤΕΙ Σερρών» Μέτρο 2.2, Γ' ΚΠΣ
Διαγράμματα κλάσεων
Αναπαριστούν τις κλάσεις ενός
λογισμικού και τις συσχετίσεις μεταξύ
τους
Δείχνουν επίσης τις ιδιότητες και τις
μεθόδους μιας κλάσης αλλά και τους
περιορισμούς που υπάρχουν στον τρόπο
που συνδέονται μεταξύ τους
Δίνουν μια στατική όψη ενός συστήματος
}
1 -homeAddress
class Address
{ Address
... Ένα Person σχετίζεται με ένα
αντικείμενο Address. Το βελάκι
} δηλώνει τη φορά της συσχέτισης
…
}
Σε UML 1
1..*
class member
{
Member
Team memberOf;
…
}
Κληρονομικότητα
class Person
{
private:
Person
string name;
-name : string
... -surname : string
Σε UML +Person(in name : string, in surname : string)
} +getName() : string
class Employee : public Person { +setName(in name : string)
+getSurname() : string
+setSurname(in surname : string)
public:
float getSalary();
Employee
void setSalary(float salary);
-salary : float
private: +getSalary() : float
Στη γλώσσα της UML η +setSalary(in salary : float)
float salary; κληρονομικότητα
ονομάζεται “γενίκευση”
};
Σύνθεση/Συσσωμάτωση
Είναι συμβολισμοί χρήσιμοι σε
περιπτώσεις που θέλουμε να δείξουμε
κάποιες λεπτομέρειες. Μπορούν να
αντικατασταθούν από μια απλή
συσχέτιση.
Η σύνθεση μπορεί να χρησιμοποιηθεί αν
θέλουμε να τονίσουμε ότι η διαγραφή
μιας κλάσης συνεπάγεται και τη διαγραφή
της άλλης
Πχ αν διαγράψουμε την κλάση χέρι πρέπει
να διαγράψουμε και την κλάση δάχτυλο
13 Υποέργο 1 «Αυτεπιστασία του τμήματος Πληροφορικής και Επικοινωνιών»,
«Ενίσχυση Σπουδών Πληροφορικής στο ΤΕΙ Σερρών» Μέτρο 2.2, Γ' ΚΠΣ
Σύνθεση και συσσωμάτωση
Εξάρτηση
Εξάρτηση υπάρχει
αν μια κλάση
χρησιμοποιεί μια
άλλη κλάση σαν B
a
se
Cl
ass F
a
ct
or
yCl
ass
παράμετρο ή σαν
επιστρεφόμενη τιμή
+
g
et
I
nst
anc
e
()
:Ba
s
eC
l
ass
σε κάποια
συνάρτησή της
Πελάτης
Πωλητής
Ραντεβού
Διευθυντής
3η Διάλεξη
UML – Διαγράμματα
Περιπτώσεων
Χρήσης/Δραστηριότητας
Παράδειγμα
Περιπτώσεων Χρήσης ATM
«extends»
Επέκταση: Η προσθήκη λειτουργικότητας σε μία βασική περίπτωση
χρήσης (η οποία δεν γνωρίζει για αυτή)
Παράδειγμα περιγραφής
Ανάληψη μετρητών
Σύντομη περιγραφή: Ανάληψη μετρητών από το ΑΤΜ
Προαπαιτούμενα: Ο πελάτης έχει εισάγει σωστά την κάρτα του και το PIN του
Κύρια ροή γεγονότων
1. Το σύστημα δίνει στο χρήστη τη δυνατότητα να επιλέξει ποσό ανάληψης
2. Ο χρήστης επιλέγει ποσό
3. Το σύστημα δίνει το ανάλογο ποσό μαζί με απόδειξη με το υπόλοιπο του λογαριασμού
Εναλλακτική ροή
α. 3.1Δεν υπάρχουν αρκετά χρήματα στο λογαριασμό και ενημερώνεται ο χρήστης
β. 3.1 Το ΑΤΜ δεν έχει τα απαραίτητα χαρτονομίσματα και ενημερώνει το χρήστη
Αποτέλεσμα
Ο χρήστης έχει παραλάβει το ποσό και το υπόλοιπό του έχει μειωθεί αντίστοιχα
Διαγράμματα δραστηριότητας
Τα διαγράμματα δραστηριότητας
αποτελούν συνδυασμό τεχνικών όπως
Petri Nets, SDL και activity diagrams
Βασικό τους σύμβολο είναι μια
«κατάσταση δραστηριότητας» ή απλώς
δραστηριότητα
Περιγράφουν την ακολουθία των
δραστηριοτήτων και παρέχει υποστήριξη
τόσο για υπο-συνθήκη όσο και
παράλληλη συμπεριφορά
11 Υποέργο «Αυτεπιστασία του τμήματος Πληροφορικής και Επικοινωνιών»,
«Ενίσχυση Σπουδών Πληροφορικής στο ΤΕΙ Σερρών» Μέτρο , Γ' ΚΠΣ
Διχάλα
Παράδειγμα
Έναρξη
Παραλαβή
παραγγελίας
Διακλάδωση
Συμπλήρωση Αποστολή
παραγγελίας τιμολογίου
[Βιαστική]
[Αλλιώς]
Πληρωμή
Κανονική
Άμεση Παράδοση
Παράδοση
Συγχώνευση Ένωση
Κλείσιμο
Παραγγελίας
Τέλος
Διάγραμμα δραστηριότητας
Μια διακλάδωση έχει μια μόνο εισερχόμενη μετάβαση
και πολλές φρουρούμενες εξερχόμενες
Μια συγχώνευση έχει πολλές εισερχόμενες και μία μόνο
έξοδο
Μια διχάλα έχει μια εισερχόμενη μετάβαση και πολλές
εξερχόμενες. Όταν συμβαίνει η εισερχόμενη μετάβαση
ακολουθούνται παράλληλα όλες οι εξερχόμενες
Μια ένωση σημαίνει το συγχρονισμό κάποιων
παράλληλων διαδικασιών. Η εξερχόμενη μετάβαση
ακολουθείται μόνο όταν συμβούν όλες οι εισερχόμενες
Συμπλήρωση Αποστολή
παραγγελίας τιμολογίου
Πληρωμή
Κανονική
Άμεση Παράδοση
Παράδοση
Κλείσιμο
Παραγγελίας
Παράδειγμα
Τμήμα Διεκπεραίωσης Τμήμα εξυπηρέτησης Τμήμα Οικονομικών
Παραλαβή
παραγγελίας
Συμπλήρωση Αποστολή
παραγγελίας τιμολογίου
Πληρωμή
Πληρωμή
Κλείσιμο
Παραγγελίας
Που δε χρησιμοποιούνται τα
διαγράμματα δραστηριότητας
UML – Διαγράμματα
αλληλεπίδρασης
Διαγράμματα αλληλεπίδρασης
Τα διαγράμματα αλληλεπίδρασης είναι
μοντέλα που περιγράφουν κάποιες
ομάδες αντικειμένων
Μπορούν να χρησιμοποιηθούν για να
δείξουν ένα σχέδιο για μια συγκεκριμένη
λειτουργία ενός προγράμματος
Είναι δυναμικά διαγράμματα γιατί
δείχνουν πως μεταλλάσσεται το σύστημά
μας
2 Υποέργο 1 «Αυτεπιστασία του τμήματος Πληροφορικής και Επικοινωνιών»,
«Ενίσχυση Σπουδών Πληροφορικής στο ΤΕΙ Σερρών» Μέτρο 2.2, Γ' ΚΠΣ
Διαγράμματα αλληλεπίδρασης
Αναπαριστούν συνήθως πώς διάφορα
αντικείμενα ενός συστήματος
αλληλεπιδρούν προκειμένου να
ολοκληρώσουν μια λειτουργία ενός
συστήματος
Διαγράμματα αλληλεπίδρασης
Τα διαγράμματα αλληλεπίδρασης είναι
δύο ειδών
Διαγράμματα ακολουθίας (sequence
diagrams)
Διαγράμματα συνεργασίας (collaboration
diagrams)
Παράδειγμα
Μπορείτε να χρησιμοποιήσετε για την
αναπαράσταση της ροής αυτών των
γεγονότων το ακόλουθο διάγραμμα
ακολουθίας
Σε αυτό το διάγραμμα κάθε
παραλληλόγραμμο αφορά και ένα
αντικείμενο
αυτόκληση
μήνυμα
Γραμμή ζωής
(lifeline)
επανάληψη Δημιουργία
Σχόλια Χρησιμοποιήστε τη
διακεκομμένη γραμμή όταν δεν έχετε
Όταν νέο
Παράδειγμα να τονίσετε κάτι σημαντικό για
το αντικείμενο στο συγκεκριμένο
χρονικό διάστημα
JimsOrder
δημιουργείται
μιασυναλλαγή
...δημιουργεί έναν νέο :Συντονιστής
συντονιστήγιατη Συναλλαγής
διαχείρισητω ν
ελέγχω ν
Έ ναςσυντονιστής νέο
Έναςπ ρώτος
δημιουργεί μιασειρά
απ όΕλεγκτές,έναγια Ελεγκτης:
κάθεείδοςελέγχου νέο Ένας
Δεύτερος
Ελεγκτής:
Ανέναςέλεγχος
αποτύχει τότεο
Συντονιστήςτερματίζει
αποτυχία
όλουςτουςάλλους
πουεκτελούνται ακόμα
τερμάτισετους
Επιστροφή ελεγκτές
γίνεΆκυρη τερμάτισε
...και λέει στη
Συναλλαγήπ ω ςείναι
άκυρη
Εντολή να
διαγραφεί το
αντικείμενο
Αυτοδιαγραφή Υποέργο «Αυτεπιστασία του τμήματος Πληροφορικής και Επικοινωνιών»,
10
«Ενίσχυση Σπουδών Πληροφορικής στο ΤΕΙ Σερρών» Μέτρο , Γ' ΚΠΣ
Διαγράμματα ακολουθίας
Στα διαγράμματα ακολουθίας
προσπαθήστε να δείξετε μία
συγκεκριμένη περίπτωση φορά
Αν υπάρχουν πολλές εναλλακτικές ροές
κάντε και πολλά διαγράμματα
Διαγράμματα συνεργασίας
Σε ένα διάγραμμα συνεργασίας τα
αντικείμενα απεικονίζονται ως εικονίδια
Όπως και σε ένα διάγραμμα ακολουθίας
τα βέλη απεικονίζουν αποστολές
μηνυμάτων στο πλαίσιο της
αναπαράστασης μιας συγκεκριμένης
λειτουργίας
Επεξήγηση διαγράμματος
Το αντικείμενο JimsOrderForm στέλνει ένα μήνυμα
ετοίμασε() στο αντικείμενο JimsOrder
Για κάθε στοιχείο παραγγελίας, το αντικείμενο
JimsOrder στέλνει ένα μήνυμα ετοίμασεΠροϊον()
στο αντικείμενο JimsOrderItem
To αντικείμενο JimsOrderItem στέλνει ένα μήνυμα
έλεγξεΑποθήκη() στο αντικείμενο JimsStockITem
και αποθηκεύει το αποτέλεσμα στη μεταβλητή
ΥπάρχειΣτοΣτοκ
Το αντικείμενο JimsStockITem στέλνει ένα μήνυμα
στον εαυτό του χρειάζεταιΠαραγγελία() και
αποθηκεύει το αποτέλεσμα στη μεταβλητή
χρειάζεταιΠαραγγελία
Αν η μεταβλητή χρειάζεταιΠαραγγελία είναι
αληθής τότε το αντικείμενο AthensStock στέλνει ένα
μήνυμα νέο στο αντικείμενο ΝewOrderItem ...
14 Υποέργο 1 «Αυτεπιστασία του τμήματος Πληροφορικής και Επικοινωνιών»,
«Ενίσχυση Σπουδών Πληροφορικής στο ΤΕΙ Σερρών» Μέτρο 2.2, Γ' ΚΠΣ
Διαγράμματα συνεργασίας
Στα διαγράμματα συνεργασίας η αρίθμηση των
μηνυμάτων δείχνει την ακολουθία τους
Αυτό μπορεί να κάνει πιο δύσκολη την
παρακολούθηση της ακολουθίας σε σχέση με
την παράθεση των μηνυμάτων από πάνω προς
τα κάτω
Όμως μπορείτε να δείξετε πιο εύκολα πως
συνδέονται τα αντικείμενα μεταξύ τους
Διαγράμματα αλληλεπίδρασης
Η μέθοδος ονομασίας των αντικειμένων
που εμφανίζεται στα διαγράμματα
αλληλεπίδρασης ακολουθεί τη μορφή:
– Όνομα αντικειμένου: όνομα κλάσης
Πολλές φορές μπορεί να αναγράψουμε
μόνο το ένα από τα δύο, δηλ.
– Όνομα αντικειμένου:
– :Όνομα κλάσης ή Όνομα κλάσης
Ασύγχρονα
Απλά
Σύγχρονα με άμεση
επιστροφή
19 Υποέργο 1 «Αυτεπιστασία του τμήματος Πληροφορικής και Επικοινωνιών»,
«Ενίσχυση Σπουδών Πληροφορικής στο ΤΕΙ Σερρών» Μέτρο 2.2, Γ' ΚΠΣ
Πότε χρησιμοποιούνται τα
διαγράμματα αλληλεπίδρασης
Χάρτες καταστάσεων
(Statecharts)
Χάρτες καταστάσεων
(Statecharts)
Σε ένα χάρτη καταστάσεων συμβαίνουν κάποιες
ενέργειες οι οποίες αλλάζουν την κατάσταση
του συστήματος και τις δραστηριότητες που
μπορούν να εκτελεστούν
Συνήθως η τριπλέτα Συμβάν[Συνθήκη]/Ενέργεια
σημαίνει ότι αν συμβεί το “Συμβάν” και η
“Συνθήκη” είναι αληθής τότε εκτελείται η
“Ενέργεια” και ολοκληρώνεται η μετάβαση από
μια κατάσταση σε μια άλλη.
Ενόσω το σύστημα είναι σε μια κατάσταση
μπορεί να ολοκληρώσει διάφορες δραστηριότητες
Παράδειγμα
Μετάβαση
Δραστηριότητα
Προϋπόθεση αυτομετάβαση
Αναμονή Παραδόθηκε
Στοιχείο παραλήφθηκε
[κάποια στοιχεία δεν υπάρχουν στην αποθήκη]
Παράδειγμα
Έστω ότι έχουμε μία κλάση που αφορά
ένα πρωτόκολλο εισόδου (Login Protocol)
Σε αυτό το πρωτόκολλο αφού πάρουμε
εντολή στέλνουμε ένα αίτημα Login
περιμένουμε μια απάντηση OK.
(LoginSent)
Αν η απάντηση είναι θετική θεωρούμε ότι
η είσοδος είναι πετυχημένη (LoginDone)
Αν η απάντηση είναι αρνητική θεωρούμε
ότι η είσοδος είναι αποτυχημένη
(LoginRejected)
8 Υποέργο 1 «Αυτεπιστασία του τμήματος Πληροφορικής και Επικοινωνιών»,
«Ενίσχυση Σπουδών Πληροφορικής στο ΤΕΙ Σερρών» Μέτρο 2.2, Γ' ΚΠΣ
Παράδειγμα
Αν αργήσουμε να πάρουμε απάντηση για
πάνω από 30sec τότε έχουμε ένα
Timeout και ξαναπροσπαθούμε για το
πολύ 3 φορές.
Την 3η φορά θεωρούμε ότι αποτύχαμε
στην είσοδο (LoginFailed)
Επίσης ακυρώνουμε την ενέργεια
οποτεδήποτε η συνθήκη cancelIsPressed
γίνει αληθής οπότε και ακυρώνουμε την
είσοδο (LoginCancelled)
9 Υποέργο 1 «Αυτεπιστασία του τμήματος Πληροφορικής και Επικοινωνιών»,
«Ενίσχυση Σπουδών Πληροφορικής στο ΤΕΙ Σερρών» Μέτρο 2.2, Γ' ΚΠΣ
Αναπαράσταση με StateCharts
Διαφορές
Signal Event-Call Event
Ένα Call Event είναι συνήθως η κλήση
μιας συνάρτησης
Ένα Signal Event είναι συνήθως η λήψη
ενός ασύγχρονου σήματος από ένα άλλο
αντικείμενο (π.χ. ButtonClicked)
Υπερκαταστάσεις
Όταν από πολλές καταστάσεις υπάρχει η
ίδια μετάβαση στην ίδια κατάσταση τότε
μπορούμε να χρησιμοποιήσουμε την
έννοια της υπερκατάστασης
Ενεργός
Αναμονή
Στοιχείο παραλήφθηκε
[κάποια στοιχεία δεν υπάρχουν στην αποθήκη]
Παραδόθηκε
Ακύρωση
Ταυτοχρονισμός
Υπάρχουν επίσης πολλά προβλήματα τα
οποία εμπεριέχουν την έννοια της
παραλληλίας
Για παράδειγμα όσο γίνεται ο έλεγχος για
μια παραγγελία στην αποθήκη,
ταυτόχρονα γίνεται έλεγχος για την
πληρωμή της παραγγελίας
Αναμονή
Έλεγχος Διεκπεραίωση
Παραδόθηκε
Έγκριση Εγκρίθηκε
Απορρίφθηκε
Διαδικασίες ανάπτυξης
λογισμικού
7η Διάλεξη
Καταγραφή απαιτήσεων
Προσοχή
Πολλοί κάνουν το λάθος και προσπαθούν
να ανακαλύψουν ενέργειες όταν
διαβάζουν μια περιγραφή ενός
προβλήματος
Αυτός ήταν ο τρόπος δημιουργίας
προγραμμάτων στο διαδικασιακό
προγραμματισμό (procedural
programming)
Λύση
Λανθασμένη λύση
Υπάρχει η κλάση μαθητής, η κλάση
εγγραφή και η κλάση διαγραφή
Αυτή η προσέγγιση είναι λάθος!
Έτσι θα σκεφτόσασταν αν φτιάχνατε
συναρτήσεις στη C αλλά όχι στον
αντικειμενοστραφή προγραμματισμό!
Ορθότερη λύση
Υπάρχει η κλάση μαθητής και η κλάση
μάθημα
15 Υποέργο 1 «Αυτεπιστασία του τμήματος Πληροφορικής και Επικοινωνιών»,
«Ενίσχυση Σπουδών Πληροφορικής στο ΤΕΙ Σερρών» Μέτρο 2.2, Γ' ΚΠΣ
Χαρακτηριστικά (attributes)
Κάθε κλάση έχει κάποια χαρακτηριστικά ή
ιδιότητες
Για παράδειγμα μια κλάση «Τραπεζικός
Λογαριασμός» θα έχει ως χαρακτηριστικό
ένα «Αριθμό Λογαριασμού»
Για παράδειγμα η «Πιστωτική κάρτα» έχει
ως χαρακτηριστικά (αριθμό, τύπο και PIN)
Μέθοδοι
Συνήθως στα αντικείμενα μιας κλάσης
μπορούν να γίνουν και κάποιες ενέργειες.
Για παράδειγμα στα αντικείμενα της
κλάσης Πιστωτική Κάρτα θα μπορούσε
να γίνει η ενέργεια «Χρέωση» ή
«Συναλλαγή»
Παράδειγμα
Φτιάξτε ένα σύστημα που να το χρησιμοποιούν οι
μαθητές για να αξιολογούν τα βιβλία τους. Οι
προϊστάμενοι του ΤΕΙ ή οι γραμματείς τους θα μπορούν
να εισάγουν νέα βιβλία για αξιολόγηση και να βλέπουν
τις αξιολογήσεις που έχουν γίνει. Οι εκδότες θα πρέπει
να μπορούν να εισέρχονται στο σύστημα και να
βλέπουν τις αξιολογήσεις που έχουν γίνει. Τέλος ένας
ειδικός χρήστης θα μπορεί να δημιουργεί νέους χρήστες
(πχ προϊσταμένους, εκδότες κτλ).
Συσχετίσεις
Μια συσχέτιση απλά τονίζει συνήθως ότι
μια κλάση έχει ως χαρακτηριστικό, κάτι
που από μόνο του είναι και αυτό μια
κλάση.
Για παράδειγμα ένας πελάτης έχει μια
διεύθυνση. Και ο «πελάτης» είναι κλάση
και η διεύθυνση είναι «κλάση». Επειδή η
κλάση πελάτης περιέχει ως
χαρακτηριστικό την κλάση «Διεύθυνση»
μπορούμε να πούμε ότι η κλάση πελάτης
σχετίζεται με την κλάση διεύθυνση
21 Υποέργο 1 «Αυτεπιστασία του τμήματος Πληροφορικής και Επικοινωνιών»,
«Ενίσχυση Σπουδών Πληροφορικής στο ΤΕΙ Σερρών» Μέτρο 2.2, Γ' ΚΠΣ
Ένα ακόμα παράδειγμα
Ένα ηλεκτρονικό κατάστημα έχει πελάτες
είτε εταιρείες είτε ιδιώτες.
Οι εταιρείες έχουν έκπτωση στα προϊόντα
που αγοράζουν ενώ οι ιδιώτες όχι. Οι
ιδιώτες μπορούν να ζητούν δώρα από το
κατάστημα αν κάνουν πολλές αγορές
Κάθε εταιρεία δηλώνει τη διεύθυνση, την
επωνυμία και το ΑΦΜ της
Κάθε ιδιώτης δηλώνει μόνο τη διεύθυνση
και την επωνυμία του
22 Υποέργο 1 «Αυτεπιστασία του τμήματος Πληροφορικής και Επικοινωνιών»,
«Ενίσχυση Σπουδών Πληροφορικής στο ΤΕΙ Σερρών» Μέτρο 2.2, Γ' ΚΠΣ
(συνέχεια)
Υπάρχει η κλάση προϊόν, η κλάση
πελάτης, η κλάση εταιρεία και η κλάση
ιδιώτης
Οι τρεις τελευταίες όμως έχουν πολλά
κοινά μεταξύ τους!
Στον αντικειμενοστραφή προγραμματισμό
προσπαθούμε να βρούμε τέτοιες κλάσεις
που έχουν κοινά στοιχεία
8η Διάλεξη
Πώς προχωράτε;
Κάνετε έρευνα για να εξοικειωθείτε με το
σύστημα το οποίο θέλετε να αναπτύξετε
Προσπαθείτε να καταλάβετε το πεδίο
εφαρμογής του συστήματός σας
Μετά από έρευνα ανακαλύπτετε ότι ήδη
υπάρχουν πολλά τέτοια συστήματα στην
αγορά και αξιολογείτε τα καλύτερα
προσπαθώντας να κατανοήσετε τι κάνουν
αυτά τα συστήματα και τι λειτουργίες
προσφέρουν. Έτσι παρατηρείτε ότι...
3 Υποέργο 1 «Αυτεπιστασία του τμήματος Πληροφορικής και Επικοινωνιών»,
«Ενίσχυση Σπουδών Πληροφορικής στο ΤΕΙ Σερρών» Μέτρο 2.2, Γ' ΚΠΣ
Βήμα 1
Περιγραφή
Βήμα 2 Γλωσσάρι
Όνομα χώρου
Αντιστοιχεί σε μια IP διεύθυνση (π.χ. teiser.gr)
Υπεύθυνος
Ένα άτομο το οποίο έχει κάποια αρμοδιότητα
πάνω σε ένα όνομα χώρου. Μπορεί να είναι ο
ιδιοκτήτης, ο τεχνικός υπεύθυνος, ο υπεύθυνος
διαχείρισης ή ο υπεύθυνος χρέωσης
Εξυπηρετητής ονοματοδοσίας
Ένας εξυπηρετητής που γνωρίζει την IP διεύθυνση
ενός ονόματος (name server)
Προφίλ/Πελάτης
Μια τετράδα υπευθύνων και εξυπηρετητών
Δε γίνεται διάκριση
ανάμεσα στους υπευθύνους
Έκδοση 2
Έχουμε δώσει ονόματα
στις συσχετίσεις
Γίνεται διάκριση.
Μια έννοια μπορεί να έχει διαφορετικού
τύπου συσχετίσεις με μια άλλη
Ένας χαρακτήρας
Μια περίπτωση χρήσης
μπορεί να περιλάβει
κάποιες
υποπεριπτώσεις
Ο τίτλος μιας
περίπτωσης χρήσης
9η Διάλεξη
Κλάση ανάλυσης
Αποτελεί μια γενικευμένη έννοια η οποία
κατά τη φάση της σχεδίασης θα
αντιστοιχηθεί σε μία ή περισσότερες από
μια κλάσεις
Δεν περιέχει μεθόδους. Το πως
συμπεριφέρεται ορίζεται ουσιαστικά από
τις υποχρεώσεις της
Έχει χαρακτηριστικά (τα οποία αργότερα
μπορεί να γίνουν κλάσεις)
Σχετίζεται με άλλες κλάσεις
9 Υποέργο 1 «Αυτεπιστασία του τμήματος Πληροφορικής και Επικοινωνιών»,
«Ενίσχυση Σπουδών Πληροφορικής στο ΤΕΙ Σερρών» Μέτρο 2.2, Γ' ΚΠΣ
Για να βρείτε τις κλάσεις
ανάλυσης
Δείτε κάθε περίπτωση χρήσης και
φανταστείτε ότι έχετε μόνο τρία είδη κλάσεων
στη διάθεσή σας
Κλάσεις ορίου: Είναι υπεύθυνες για να
στέλνουν δεδομένα σε χαρακτήρες ή να
παίρνουν δεδομένα από αυτούς.
Κλάσεις οντότητας ή δεδομένων: Είναι
υπεύθυνες για να αποθηκεύουν δεδομένα.
Κλάσεις ελέγχου: Κάνουν ελέγχους, ορίζουν
με ποια σειρά πρέπει να γίνουν διάφορες
ενέργειες και «συνδέουν» τις ενέργειες των
κλάσεων ορίου με τις κλάσεις οντότητας.
10 Υποέργο 1 «Αυτεπιστασία του τμήματος Πληροφορικής και Επικοινωνιών»,
«Ενίσχυση Σπουδών Πληροφορικής στο ΤΕΙ Σερρών» Μέτρο 2.2, Γ' ΚΠΣ
Τάξη ανάλυσης
(Analysis Class)
Ευθύνες
Χαρακτηριστικά
Σχέσεις
Ειδικές απαιτήσεις
Ανακαλύπτοντας τάξεις
οντοτήτων
Βήμα 3
Βρείτε τις συσχετίσεις των κλάσεων
Αφού ολοκληρώσετε τα διαγράμματα
συνεργασίας για κάθε περίπτωση χρήσης
δείτε από τις κλάσεις που έχετε ορίσει αν
μπορείτε να βρείτε σχέσεις γενίκευσης ή
εξάρτησης. Δείτε αν μπορείτε να
επαναχρησιμοποιήσετε κάποια κλάση.
Ίσως σας βοηθήσει για κάθε κλάση να
φτιάξετε μια καρτέλα στην οποία φαίνεται
το όνομα της κλάσης, τι κάνει και με
ποιους συνεργάζεται
10η Διάλεξη
Απαιτήσεις
Διαγράμματα δραστηριότητας
Βήμα 1
Έχουμε 3 κλάσεις οντοτήτων/δεδομένων
1 που αποθηκεύει τα στοιχεία του προφίλ
1 που αποθηκεύει τα στοιχεία της αίτησης
1 που αποθηκεύει τα στοιχεία του
λογαριασμού
Έχουμε 1 κλάση ελέγχου
Είναι ο “τροχονόμος” που ορίζει τη σειρά με
την οποία γίνονται οι ενέργειες και ελέγχει για
τυχόν λάθη
Παρουσιάζεται
μόνο για ευκολία
Κάποια στιγμή
αυτή θα
υλοποιηθεί από
μια φόρμα
Θα
υλοποιηθεί
με ένα
πρωτόκολλο
επικοινωνία
ς
Μια τέτοια
καρτέλα
ApplyForm
ονομάζεται Class
Responsibility
-domainName : .
-profileName : . Collaborator card
+submit() : .
(CRC)
Class ApplyForm
Superclass(es)
Subclasses
Ευθύνη Συνεργάτες
O χρήστης μπορεί να δώσει OK, να επιλέξει User
προφιλ και όνομα χώρου
Εμφάνισε όλα τα προφιλ για να επιλέξει ο Profile
χρήστης
Μόλις ο χρήστης πατήσει OK στέλνονται το ProcessApply
όνομα χώρου και το επιλεγμένο προφιλ
Πώς θα μπορούσατε να
προχωρήσετε;
Παράδειγμα Σχεδίασης
ApplyForm
-domainName : JTextField
-profileName : JComboBox
-buttonOK : JButton
+OKButton_Clicked() : .
+Profil_Selected()
Σχεδίαση
Θέματα Σχεδίασης/Σύζευξη
Θέματα σχεδίασης
Η ποιότητα μιας σχεδίασης κρίνεται τις
πιο πολλές φορές από την ανεξαρτησία
των κλάσεων που έχουμε δημιουργήσει
Κλάσεις που είναι ανεξάρτητες μεταξύ
τους επαναχρησιμοποιούνται πιο εύκολα,
έχουν λιγότερα λάθη και κατανοούνται
πιο εύκολα
Σύζευξη
Μη συζευγμένα -
καμία εξάρτηση
Σύζευξη περιεχομένου
Σύζευξη ελέγχου
Σύζευξη αντιγράφου
Σύζευξη περιεχομένου
Όταν το ένα συστατικό α αλλάζει το
περιεχόμενο ενός άλλου συστατικού β
Παράδειγμα 1
Μια συνάρτηση Α αλλάζει μια εντολή
που βρίσκεται σε μια συνάρτηση Β.
Συνήθως αυτό είναι δυνατόν μόνο σε
assembly
Παράδειγμα 2
Μια συνάρτηση Α περιέχει μια εντολή
goto σε μια συνάρτηση Β
6 Υποέργο 1 «Αυτεπιστασία του τμήματος Πληροφορικής και Επικοινωνιών»,
«Ενίσχυση Σπουδών Πληροφορικής στο ΤΕΙ Σερρών» Μέτρο 2.2, Γ' ΚΠΣ
Γιατί είναι κακή;
Σχεδόν οποιαδήποτε αλλαγή στο Β,
ακόμα και αλλαγή του compiler που
χρησιμοποιείται προϋποθέτει αλλαγή και
στο Α.
Αδύνατον να χρησιμοποιηθεί το Α χωρίς
να χρησιμοποιηθεί και το Β
Σύζευξη ελέγχου
Όταν το ένα συστατικό περνά
παραμέτρους στο άλλο που ελέγχουν τη
συμπεριφορά του μέσω flags
Σύζευξη αντιγράφου
Σύζευξη αντιγράφου έχουμε όταν ένα
συστατικό Α καλεί ένα συστατικό Β και
περνά μια ολόκληρη δομή σε αυτό σαν
παράμετρο και επιπλέον το Β χρειάζεται
να ξέρει μόνο συγκεκριμένα πεδία από
αυτή τη δομή
Σύζευξη δεδομένων
Όταν το ένα συστατικό περνά δεδομένα
στο άλλο
Είναι η καλύτερη σύζευξη που μπορείτε
να πετύχετε
displayTimeOfArrival (flightNumber);
computeProduct (firstNumber, secondNumber);
getJobWithHighestPriority (jobQueue);
Συζεύξεις
Ένα από τα πλεονεκτήματα των
αντικειμενοστραφών συστημάτων είναι
ότι παρουσιάζουν μικρή σύζευξη καθώς
κάθε κλάση μπορεί και περιορίζει τις
πράξεις που γίνονται στα δεδομένα της
αλλά και περιέχει τους ορισμούς των
πράξεων αυτών
Σχεδίαση
συστημάτων/Συνεκτικότητα
Συνεκτικότητα
Αναφέρεται στην εσωτερική συνοχή ενός
συστατικού
Όσο πιο συνεκτικό είναι ένα συστατικό
τόσο περισσότερο σχετίζονται μεταξύ
τους τα εσωτερικά του μέρη και
εξυπηρετούν καλύτερα το συνολικό
σκοπό του
Ένα συστατικό με μεγάλη συνοχή δεν
έχει παραπανίσια κομμάτια!
2 Υποέργο 1 «Αυτεπιστασία του τμήματος Πληροφορικής και Επικοινωνιών»,
«Ενίσχυση Σπουδών Πληροφορικής στο ΤΕΙ Σερρών» Μέτρο 2.2, Γ' ΚΠΣ
Είδη συνεκτικότητας
Συμπτωματική συνεκτικότητα
Όταν τα μέρη δε σχετίζονται μεταξύ τους
Παράδειγμα:
function doItAll(char *par1,int par2)
printNextLine();
ReverseString(par1)
par2 += 7;
return par2
Συνήθως προκύπτει από εντολές του τύπου
“Γράψτε μια συνάρτηση που αποτελείται
από 10-20 εντολές”
Λογική συνεκτικότητα
Όταν διάφορα λογικά σχετιζόμενες συναρτήσεις
ή δεδομένα τοποθετούνται στο ίδιο συστατικό
Για παράδειγμα έχετε μια συνάρτηση η οποία
γράφει δεδομένα σε συσκευές. Επιλέγετε τη
συσκευή στην οποία θα γράψει περνώντας μια
παράμετρο: Αν περαστεί το 1 γράφει σε δίσκο,
αν περαστεί το 2 γράφει στη μνήμη κτλ
Συνήθως συνάρτηση αυτή θα παίρνει και άλλες
παραμέτρους που θα τους χρησιμοποιεί
ανάλογα με τον κωδικό που περάσατε
Παράδειγμα
Το συστατικό στα δεξιά
περιέχει κώδικα που
διαχειρίζεται όλες τις
εγγραφές/αναγνώσεις.
Βάζετε μια καινούργια
συσκευή. (πχ. Ένα νέο
δίσκο). Πρέπει να αλλάξετε τα
κομμάτια 1,2,3,4,7,8.
Τι θα γίνει όμως με τις
συσκευές που ήδη
χρησιμοποιούσαν αυτόν τον
κώδικα;
8 Υποέργο 1 «Αυτεπιστασία του τμήματος Πληροφορικής και Επικοινωνιών»,
«Ενίσχυση Σπουδών Πληροφορικής στο ΤΕΙ Σερρών» Μέτρο 2.2, Γ' ΚΠΣ
Γιατί είναι κακή;
Οι διεπαφές δεν είναι ξεκάθαρες
Δεν είναι ξεκάθαρο που βρίσκεται και τι
κάνει κάθε κομμάτι
Η επαναχρησιμοποίηση είναι δύσκολη
Χρονική συνεκτικότητα
Όταν τα μέρη σχετίζονται με βάση το
χρονισμό τους
Παράδειγμα.
Ένα συστατικό που κάνει αρχικοποίηση
class initialize {
Αρχικοποίησε μεταβλητές προγράμματος
Άδειασε τον πίνακα Sales
Διάβασε την πρώτη εγγραφή από τον πίνακα Transactions
Εμφάνισε μήνυμα στην οθόνη
Διαδικασιακή συνεκτικότητα
Διαφορετικές λειτουργίες ομαδοποιούνται σε ένα
συστατικό επειδή πρέπει να εκτελεστούν με
συγκεκριμένη σειρά
Συνήθως οι λειτουργίες δεν έχουν κάποιο κοινό
δεδομένο, αλλά απλά όταν ολοκληρώνεται η μία
περνάει τον έλεγχο στην άλλη
Για παράδειγμα:
function makeRepairs() {
read part number
update repair record on master file
}
Παράδειγμα
Προχωρημένα θέματα
σχεδίασης
Μοτίβα σχεδίασης
Οι σχεδιαστές έχουν διαπιστώσει ότι
συγκεκριμένα μοτίβα (patterns) εμφανίζονται
διαρκώς κατά τη σχεδίαση προγραμμάτων
Για αυτό έχουν αναπτύξει συγκεκριμένες λύσεις
οι οποίες μπορούν να εφαρμοστούν όποτε
αναγνωρίζεται ότι το πρόβλημα εντάσσεται σε
ένα από τα γνωστά μοτίβα ανάπτυξης
Μοτίβα Σχεδίασης
Υπάρχουν πολλά μοτίβα σχεδίασης αλλά
αρχικά ορίσθηκαν 23 βασικά
Κάθε μοτίβο έχει τουλάχιστον
Ένα όνομα
Ένα σκοπό για τον οποίο δημιουργήθηκε
Μια περιγραφή του προβλήματος το
οποίο προσπαθεί να λύσει
Παράδειγμα
Γράφετε κώδικα και για Windows και για
Unix.
Πρέπει να γράψετε μια κλάση η οποία
είναι υπεύθυνη για τη δημιουργία μιας
σύνδεσης TCP
Όμως η κλάση αυτή πρέπει να υλοποιεί
διαφορετικά τη σύνδεση, αν πρόκειται για
την υλοποίηση σε Windows και
διαφορετικά αν πρόκειται για την
υλοποίηση σε Unix
6 Υποέργο 1 «Αυτεπιστασία του τμήματος Πληροφορικής και Επικοινωνιών»,
«Ενίσχυση Σπουδών Πληροφορικής στο ΤΕΙ Σερρών» Μέτρο 2.2, Γ' ΚΠΣ
Χωρίς το Factory Pattern
Ορίζετε δύο κλάσεις
WindowsTcpConnection
UnixTcpConnection
// κ.τ.λ.
// κ.τ.λ.
vector<UnixTcpConnection> unixTcpConnections;
vector<WindowsTcpConnection> windowsTcpConnections;
if (platform == "Unix") {
UnixTcpConnection connection;
unixTcpConnections.add(connection);
connection.connect();
} else if (platform == "Windows") {
WindowsTcpConnection connection;
windowsTcpConnections.add(connection);
connection.connect();
}
// κ.τ.λ.
Με το Factory Pattern
Χρησιμοποιώντας την κληρονομικότητα
και τον πολυμορφισμό μπορούμε να
καταφύγουμε σε μια λύση η οποία είναι
αρκετά πιο κομψή
Ορίζετε κλάσεις όπως στο ακόλουθο
διάγραμμα
TCP
Conne
ction
+
conn e ct():b o ol
+
send (ind ata:s trin
g):v
oid
+
receiv e():s trin
g
+
clo
se ():v oid
TCP
Conne
ctionFa
ctory
+
getIn
sta
nce
():T
C P
Con
nec
tio
n
U
nix
T C
PConne
ction
W
indows
T C
PConne
ction +
conn e ct():b o ol
+
conn e ct():b o ol +
send (ind ata:s trin
g):v
oid
+
send (ind ata :strin
g):v
oid +
receiv e():s trin
g
+
receiv e():s trin
g +
clo
se ():v oid
+
clo
se ():v oid
Με το FactoryPattern
H κλάση TcpConnection είναι abstract, δεν
περιέχει υλοποίηση δηλαδή των μεθόδων
connect(), send(), receive(), close().
Ορίζει ουσιαστικά τη διεπαφή
επικοινωνίας με τις κλάσεις
WindowsTcpConnection,
UnixTcpConnection
Με το FactoryPattern
Και πώς χρησιμοποιείται; Απλά:
TcpConnection connection =
TcpConnectionFactory::getInstance("Windows");
connection.connect();
Factory Pattern
Σκοπός
Ορίζει μια διεπαφή για τη δημιουργία
αντικειμένων αλλά αφήνει τις υποκλάσεις
να αποφασίσουν τι είδους αντικείμενο θα
φτιάξουν
Που μπορεί να χρησιμοποιηθεί
Όταν χρειάζεται να δημιουργήσετε
αντικείμενα κλάσεων που έχουν την ίδια
διεπαφή (αλλά διαφορετική υλοποίηση)
και δε γνωρίζετε τη συγκεκριμένη στιγμή τι
είδους αντικείμενα θα χρειαστείτε
20 Υποέργο 1 «Αυτεπιστασία του τμήματος Πληροφορικής και Επικοινωνιών»,
«Ενίσχυση Σπουδών Πληροφορικής στο ΤΕΙ Σερρών» Μέτρο 2.2, Γ' ΚΠΣ
Μοτίβα σχεδίασης
Τα περισσότερα μοτίβα σχεδίασης
στηρίζονται σε έξυπνη χρήση
Της κληρονομικότητας
Του πολυμορφισμού
Της περιεκτικότητας
15η Διάλεξη
Ανασκόπηση/Βιβλιογραφία
Ανασκόπηση
Τα διαγράμματα περιπτώσεων χρήσης
μπορούν να χρησιμοποιηθούν στην
καταγραφή των απαιτήσεων ενός λογισμικού
Η ροή μιας περίπτωσης χρήσης μπορεί να
αναπαρασταθεί εύκολα με ένα διάγραμμα
δραστηριότητας
Τα διαγράμματα κλάσεων μπορούν να
χρησιμοποιηθούν σε διάφορες φάσεις της
ανάπτυξης από την καταγραφή των
απαιτήσεων ως τη σχεδίαση
3 Υποέργο 1 «Αυτεπιστασία του τμήματος Πληροφορικής και Επικοινωνιών»,
«Ενίσχυση Σπουδών Πληροφορικής στο ΤΕΙ Σερρών» Μέτρο 2.2, Γ' ΚΠΣ
Ανασκόπηση
Τα διαγράμματα αλληλεπίδρασης
(ακολουθίας και συνεργασίας) μπορούν να
χρησιμοποιηθούν στην ανάλυση αλλά και τη
σχεδίαση
Τέλος οι χάρτες κατάστασης μπορούν να
χρησιμοποιηθούν κατά τη σχεδίαση του
λογισμικού
Ανασκόπηση
Η ανάπτυξη ενός λογισμικού, προτού την
υλοποίηση περνά συνήθως από
Τη φάση καταγραφής των απαιτήσεων
Την ανάλυση
Και τη σχεδίαση
Ανασκόπηση
Στην ανάλυση των απαιτήσεων
προσπαθούμε να κάνουμε μια αφηρημένη
σχεδίαση χωρίς να βασιστούμε σε
λεπτομέρειες μιας γλώσσας υλοποίησης
Στο σκοπό αυτό βοηθά να
χρησιμοποιήσουμε τις κλάσεις ανάλυσης
(ορίου, ελέγχου και οντότητας)
Βιβλιογραφία
Οι διαφάνειες σε αυτές τις διαλέξεις
βασίστηκαν στις παρακάτω πηγές
Shari Lawrence Pfleeger, Software Engineering, Theory and
Practice (Ελληνική έκδοση)
Martin Fowler, Kendall Scott, Εισαγωγή στη UML, Κλειδάριθμος
Craig Larman, Applying UML and Patterns, Prentice Hall PTR
Ian Sommervile, Software Engineering, Addison Wesley
Roger Pressman, Software Engineering, A Practioner’s Approach,
Higher Education
Jacobson, Rumbaugh, Booch, The Unified Software Development
Process, Addison Wesley