Πρότυπα Σχεδίασης (Design Patterns)

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Graphical User Interfaces (GUI) SWING.
Advertisements

ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Συλλογές, Στοίβες και Ουρές Σε πολλές εφαρμογές μας αρκεί η αναπαράσταση ενός δυναμικού συνόλου με μια δομή δεδομένων η οποία δεν υποστηρίζει την αναζήτηση.
Στοιχειώδεις Δομές Δεδομένων TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Τύποι δεδομένων στη Java • Ακέραιοι.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πολυμορφισμός – Αφηρημένες κλάσεις Interfaces (διεπαφές)
Διαδικασία ανάπτυξης Προσδιορισμός απαιτήσεων Αρχιτεκτονικός Σχεδιασμός Λεπτομερής Σχεδιασμός Κωδικοποίηση Έλεγχος Παράδοση Συστήματος Λειτουργία - Συντήρηση.
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΕΠΙΚΟΙΝΩΝΙΑ ΑΝΘΡΩΠΟΥ – ΜΗΧΑΝΗΣ Εαρινό Εξάμηνο 2007 Παρουσίαση Εργαλείου Ανάπτυξης JBuilder Τσουρού Σταυρούλα, ΑΜ 708 Μαδεμλής Ιωάννης, ΑΜ 669.
Κεφάλαιο 6 Threads. 2 Στον παραδοσιακό προγραμματισμό όταν ένα πρόγραμμα εκτελείται ονομάζεται process (διεργασία) και οι εντολές του εκτελούνται σειριακά.
Εισαγωγή στον Προγραμματισμό, Αντώνιος Συμβώνης, ΣΕΜΦΕ, ΕΜΠ, Slide 1 Εβδομάδα 9: Διανύσματα και λίστες.
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Ανάπτυξη επιχειρησιακών εφαρμογών Πρότυπα σχεδίασης, πλαίσια και ενδιάμεσο λογισμικό Ανδρέας Παπασαλούρος Τμήμα Μαθηματικών
 Αυδίκου Χριστίνα  Γιουμούκης Παναγιώτης  Κιντσάκης Θάνος  Πάπιστας Γιάννης.
1 HMMY Τεχνολογία Λογισμικού Διδάσκων Κώστας Κοντογιάννης Αναπλ. Καθηγητής, Ε.Μ.Π.
Μηχανική Λογισμικού ΙΙ
Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 1 Week 6: Java Collections Εβδομάδα 6: Συλλογές δεδομένων στην Java.
Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 1 Week 4: Exceptions Εβδομάδα 4: Εξαιρέσεις [Exceptions]
Αξιολόγηση της επίδρασης της χρήσης προτύπων σχεδίασης στις τιμές των μετρικών αντικειμενοστρεφούς σχεδίασης. Εφαρμογή σε εργαλείο σχεδίασης λογισμικού.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Συλλογές.
Επανάληψη βασικών αρχών του αντικειμενοστρεφούς προγραμματισμού
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Στατικές μέθοδοι και μεταβλητές Εσωτερικές κλάσεις.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Σύνθεση αντικειμένων Παράδειγμα: Τμήμα πανεπιστημίου.
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Μεθοδολογίες Προγραμματισμού ΙΙ Σχεδιαστικά Πρότυπα (1) Παναγιώτης Σφέτσος, PhD
Τι είναι Ανάλυση Τι είναι Συστήματα Πληροφορικής
Λιόντος Ιωάννης - Χημικός
Διαδικασία ανάπτυξης Προσδιορισμός απαιτήσεων
Πρότυπα Σχεδίασης Design Patterns Μεταπτυχιακό Πρόγραμμα Σπουδών, Τμ. Εφ. Πληροφορικής.
Πρότυπα Σχεδίασης Design Patterns
HMMY Τεχνολογία Λογισμικού Διδάσκων Κώστας Κοντογιάννης Αναπλ. Καθηγητής, Ε.Μ.Π.
Εθνικόν και Καποδιστριακόν Πανεπιστήμιον Αθηνών Μάθημα «Οργάνωση και Διοίκηση Επιχειρήσεων» Παρασκευή 12 Μαρτίου Στοιχεία Διοίκησης Επιχειρήσεων.
Εισαγωγή στον αντικειμενοστραφή προγραμματισμό Κλάσεις και αντικείμενα Κλάσεις και αντικείμενα Κατασκευαστές κλάσεων (constructors) Κατασκευαστές κλάσεων.
1 HMMY Τεχνολογία Λογισμικού Διδάσκων Κώστας Κοντογιάννης Αναπλ. Καθηγητής, Ε.Μ.Π.
1 Εισαγωγή στη Java Χρήσιμες Διευθύνσεις Χαρακτηριστικά της Java Εργαλεία της Java Εργαλεία της Java Μεταγλώττιση στοιχειωδών εφαρμογών.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Γενικευμένες κλάσεις Συλλογές.
Περίπτωση χρήσης: Process sale Από την ΠΧ στον κώδικα.
Εισαγωγή στον αντικειμενοστραφή προγραμματισμό
Templates Standard Template Library (STL) Exceptions Μεταπτυχιακό Πρόγραμμα Σπουδών, Τμήμα Εφαρμοσμένης Πληροφορικής.
1 HMMY Τεχνολογία Λογισμικού Διδάσκων Κώστας Κοντογιάννης Αναπλ. Καθηγητής, Ε.Μ.Π.
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Πολυμορφισμός.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πολυμορφισμός – Αφηρημένες κλάσεις Interfaces (διεπαφές)
Τμήμα Πληροφορικής και Τηλεπικοινωνιών
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές.
Threads Στον παραδοσιακό προγραμματισμό όταν ένα πρόγραμμα εκτελείται ονομάζεται process (διεργασία) και οι εντολές του εκτελούνται σειριακά η μία μετά.
1 Κεφάλαιο 2 Εισαγωγή στον αντικειμενοστραφή προγραμματισμό.
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 9: Κληρονομικότητα. Διδάσκων: Νικόλαος Θ Λιόλιος, Καθηγητής. Τμήμα.
Τ Ε Χ Ν Ο Λ Ο Γ Ι Κ Ο Ε Κ Π Α Ι Δ Ε Υ Τ Ι Κ Ο Ι Δ Ρ Υ Μ Α Σ Ε Ρ Ρ Ω Ν Σ Χ Ο Λ Η Τ Ε Χ Ν Ο Λ Ο Γ Ι Κ Ω Ν Ε Φ Α Ρ Μ Ο Γ Ω Ν Τ Μ Η Μ Α Π Λ Η Ρ Ο Φ Ο Ρ Ι Κ.
Πρότυπα Σχεδίασης Design Patterns Μεταπτυχιακό Πρόγραμμα Σπουδών, Τμ. Εφ. Πληροφορικής.
Εισαγωγή στη Java (Μέρος B’) Για όσους γνωρίζουν C++ Βασίλης Στούμπος
Τεχνολογία ΛογισμικούSlide 1 Τεχνολογία Απαιτήσεων u Καθορίζει τι θέλει ο πελάτης από ένα σύστημα λογισμικού.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πολυμορφισμός – Αφηρημένες κλάσεις Interfaces (διεπαφές) Ένα μεγάλο παράδειγμα.
Υλοποίηση εφαρμογών σε προγραμματιστικά περιβάλλοντα Κεφάλαιο 7.
Εισαγωγή στη C# Μαρίνος Θεμιστοκλέους Ανδρούτσου 150 Γραφείο 206 Τηλ Ώρες Γραφείου: Τετάρτη 5-6 μμ.
ΥΠΟΛΟΓΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ ΓΙΑ ΣΥΣΤΗΜΑΤΑ ΜΕΤΑΔΟΣΗΣ ΠΛΗΡΟΦΟΡΙΑΣ Αντικειμενοστραφής προγραμματισμός Web Site: ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ.
Κατανεμημένα Συστήματα
Software Engineering for Web Applications
Κλάσεις και αντικείμενα
Wrapper Classes, Abstract Classes and Interfaces
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΣΥΣΤΗΜΑ ΠΟΙΟΤΗΤΑΣ ΛΟΓΙΣΜΙΚΟΥ (QUALITY SYSTEM)
Εισαγωγή στον Προγ/μό Υπολογιστών
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Swing II Εβδομάδα Νο. 6.
ΥΛΟΠΟΙΗΣΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΑ ΠΕΡΙΒΑΛΛΟΝΤΑ
ΕΙΣΑΓΩΓΗ ΣΤΗ UML ΕΙΣΑΓΩΓΗ ΣΤΗ UML.
Wrapper Classes, Abstract Classes and Interfaces
Εξαιρέσεις [Exceptions]
Μεταγράφημα παρουσίασης:

Πρότυπα Σχεδίασης (Design Patterns) Ανδρέας Παπασαλούρος andpapas@aegean.gr 12 Ιανουαρίου 2010

Περίγραμμα Γενικά Σχεδιαστικά Πρότυπα Βιβλιογραφία - Αναφορές Κατασκευαστικά (Creational) Δομικά (Structural) Συμπεριφορικά (Behavioral) Βιβλιογραφία - Αναφορές Ιανουάριος 2010

Χαρακτηριστικά προτύπων Ένα πρότυπο αναφέρεται σε ένα συγκεκριμένο σχεδιαστικό πρόβλημα σε ένα σχεδιαστικό περιβάλλον και παρουσιάζει μια λύση του Τα πρότυπα καταγράφουν υπάρχουσα, καλά τεκμηριωμένη σχεδιαστική εμπειρία Τα πρότυπα προσδιορίζουν και προδιαγράφουν αφηρημένες λύσεις που βρίσκονται πάνω από το επίπεδο συγκεκριμένων κλάσεων ή συνθετημάτων Τα πρότυπα παρέχουν ένα κοινό λεξιλόγιο και μια βάση για την κατανόηση σχεδιαστικών αρχών Ένα πρότυπο είναι ένα μέσο για την τεκμηρίωση αρχιτεκτονικών λογισμικού Τα πρότυπα επιτρέπουν τη δημιουργία λογισμικού με συγκεκριμένες ιδιότητες πολύπλοκων και ετερογενών αρχιτεκτονικών λογισμικού Τα πρότυπα βοηθούν στη διαχείριση της πολυπλοκότητας του λογισμικού Ιανουάριος 2010

Πρότυπα σχεδίασης: Ορισμός Ένα πρότυπο περιγράφει ένα πρόβλημα που εμφανίζεται ξανά και ξανά σε συγκεκριμένα περιβάλλοντα και παρουσιάζει ένα καλά τεκμηριωμένο γενικό σχήμα για τη λύση του. Αυτό το σχήμα περιγράφεται από τα συστατικά (components) που το αποτελούν, τις αρμοδιότητες και σχέσεις τους και τους τρόπους με τους οποίους συνεργάζονται [Buschmann96] Ιανουάριος 2010

Συνέπειες Επαναχρησιμοποίηση κώδικα Επαναχρησιμοποίηση σχεδίων Διαχείριση αλλαγών Αύξηση του μεγέθους των προγραμμάτων Αυξημένη πολυπλοκότητα Ιανουάριος 2010

Περιγραφή προτύπων σχεδίασης Όνομα Σκοπός Πρόβλημα (έναυσμα) Λύση (εφαρμογή) Δομή Λειτουργία/Συμπεριφορά Συμμετέχοντες Υλοποίηση / Κώδικας Γνωστές Χρήσεις Συσχετιζόμενα πρότυπα Ιανουάριος 2010

Σχεδίαστικά Πρότυπα Κατασκευαστικά Δομικά Συμπεριφορικά Ιανουάριος 2010

Δομικά Πρότυπα Τα δομικά πρότυπα αφορούν στον τρόπο με τον οποίο κλάσεις και αντικείμενα συντίθενται ώστε να σχηματίσουν μεγαλύτερες δομές Adapter. Μετατροπή μιας διεπαφής μιας κλάσης σε μια διεπαφή που αναμένουν οι πελάτες της Bridge. Αποσύζευξη μιας αφαίρεσης από την υλοποίησή της ώστε και οι δύο να μεταβάλλονται ανεξάρτητα. Composite. Σύνθεση αντικειμένων σε δενδρικές δομές. Decorator. Επισύναψη πρόσθετων αρμοδιοτήτων σε αντικείμενα δυναμικά. Ιανουάριος 2010

Δομικά πρότυπα Façade. Παροχή υψηλού επιπέδου ενιαίας διεπαφής για τη χρήση ενός υποσυστήματος. Flyweight. Διαμοιρασμός στιγμιοτύπων για τη διαχείριση μεγάλου όγκου δεδομένων. Proxy. Παροχή υποκαταστάτου ενός αντικειμένου για τον έλεγχο πρόσβασης σε αυτό. Ιανουάριος 2010

Facade (πρόσοψη) Πρόβλημα: Λύση H χρήση ενός υποσυστήματος του λογισμικού εισάγει υψηλή σύζευξη με τους πελάτες του υποσυστήματος Λύση Η δημιουργία απλής ενιαίας διεπαφής. Ιανουάριος 2010

Ιανουάριος 2010

Composite (Σύνθετο) Πρόβλημα Ο χειρισμός σύνθετων δομών από αντικείμενα με τον ίδιο τρόπο όπως και τα ατομικά αντικείμενα Λύση Ο ορισμός ατομικών και σύνθετων κλάσεων που υλοποιούν την ίδια διεπαφή. Ο χειρισμός των σύνθετων και ατομικών αντικειμένων γίνεται με τον ίδιο τρόπο μέσω του πολυμορφισμού. Ιανουάριος 2010

Δομή Composite Ιανουάριος 2010

Composite για τον χειρισμό σύνθετων σχημάτων Ιανουάριος 2010

Κώδικας: Shape public interface Shape { public void move(); public void draw(); } Ιανουάριος 2010

Κώδικας: LeafShape abstract public class LeafShape implements Shape { public abstract void move(); public abstract void draw(); } Ιανουάριος 2010

Κώδικας: RectangleImpl public class RectangleImpl extends LeafShape implements Shape { public void draw() {/*...*/} public void move() {/* ... */} } Ιανουάριος 2010

Κώδικας: CompositeShape public class CompositeShape implements Shape { List<Shape> Shape shapes= new ArrayList<Shape>(); public void add(Shape sh) { shapes.add(sh);} public void remove(Shape sh) { shapes.remove(sh);} public void move() { for (Shape shape: shapes) shape.move(); } public void draw() { for (Shape shape: shapes) shape.draw(); Ιανουάριος 2010

Παράδειγμα: Adapter Σκοπός Εφαρμογή Η μετατροπή της διεπαφής μιας κλάσης σε μια άλλη, επιθυμητή από τους πελάτες της Εφαρμογή Όταν είναι επιθυμητή η χρήση μιας κλάσης και η διεπαφή της δεν το επιτρέπει Όταν ζητείται η δημιουργία μιας επαναχρησιμοποιήσιμης κλάσης Ιανουάριος 2010

Adapter: Δομή Class adapter Object adapter Target anotherRequest() Client Target <<Interface>> request() Adaptee Adapter Target <<Interface>> request() Client Adapter Adaptee anotherRequest() adaptee adaptee.anotherRequest() Object adapter Τα δύο διαγράμματα αντιστοιχούν σε class adaptor και object adaptor Ιανουάριος 2010

Παράδειγμα Class Adapter Ιανουάριος 2010

Adapter: Προγραμματιστικό παράδειγμα interface Rectangle { void scale(float factor); //other methods } class Client { void myMethod(Rectangle r){ … r.scale(2.); Ιανουάριος 2010

Adapter: Προγραμματιστικό παράδειγμα class NonScalableRectangle { void setWidth(float width){…} void setHeight(float height){…} } class ScalableRectangle extends NonScalableRectangle implements Rectangle { void scale(float factor) setWidth(factor * getWidth()); setHeight(factor * getHeight()); Ιανουάριος 2010

Adapter Συνέπειες Άλλες Ονομασίες Συσχετιζόμενα πρότυπα Στην περίπτωση του class Adapter δεν είναι δυνατή η προσαρμογή στις υποκλάσεις του Adaptee. Αντίθετα αυτό είναι δυνατό στην περίπτωση του object Adapter Άλλες Ονομασίες Wrapper Συσχετιζόμενα πρότυπα Bridge, Decorator, Proxy Ιανουάριος 2010

Κατασκευαστικά Πρότυπα Μορφήματα που σχετίζονται με τη δημιουργία αντικειμένων (instantiation) Abstract Factory. Η παροχή μιας διεπαφής για τη δημιουργία οικογενειών συσχετιζόμενων ή εξαρτώμενων αντικειμένων Builder. Ο διαχωρισμός της κατασκευής ενός πολύπλοκου αντικειμένου από την αναπαράστασή του ώστε η ίδια κατασκευή να μπορεί να δώσει διαφορετικές αναπαραστάσεις. Ιανουάριος 2010

Κατασκευαστικά πρότυπα Κατασκευαστικά πρότυπα Factory Method. Ο καθορισμός μιας διεπαφής για τη δημιουργία ενός αντικειμένου με τις υποκλάσεις να αποφασίζουν για το ποια κλάση θα χρησιμοποιηθεί για τη δημιουργία του αντικειμένου Prototype. Πρωτότυπο για τη δημιουργία αντικειμένων με αντιγραφή. Singleton. Εξασφάλιση ότι μια κλάση έχει μόνο ένα στιγμιότυπο . Ιανουάριος 2010

Singleton (Μοναδιαίο) Πρόβλημα Πρέπει να επιβληθεί ένα μόνο στιγμιότυπο μιας κλάσης. Οι πελάτες χρειάζονται ένα καθολικό σημείο πρόσβασης στο στιγμιότυπο. Λύση Απαγόρευση δημιουργίας στιγμιοτύπων στους πελάτες της κλάσης (με χρήση κατασκευαστή). Το στιγμιότυπο παρέχεται μέσω στατικής μεθόδου. Ιανουάριος 2010

Singleton: Μια υλοποίηση public class Singleton { private static Singleton instance = null; /* Άρνηση πρόσβασης στον κατασκευαστή */ private Singleton() {} public static Singleton getInstance() { if (instance == null) instance = new Singleton(); return instance; } Ιανουάριος 2010

Singleton: Παράδειγμα public class DBConnection { private static DBConnection connection = null; /* Άρνηση πρόσβασης στον κατασκευαστή */ private DBConnection() {} public static DBConnection getInstance() { if (connection == null) connection = new DBConnection(); return connection; } Ιανουάριος 2010

Singleton Συνέπειες Σχετικά πρότυπα Υψηλή σύζευξη Μείωση ελεγξιμότητας Facade Πρότυπα Factorry Ιανουάριος 2010

Concrete Factory Πρόβλημα Η δημιουργία αντικειμένων συνοδεύεται από πολύπλοκη λογική. Θέλουμε να κρύψουμε από τους πελάτες μιας διεπαφής τις συγκεκριμένες κλάσεις υλοποίησης. Λύση Δημιουργία μιας κλάσης εργοστασίου με αποκλειστική αρμοδιότητα τη δημιουργία αντικειμένων. Ιανουάριος 2010

Δομή Concrete Factory Ιανουάριος 2010

Concrete Factory για τη δημιουργία σχημάτων Ιανουάριος 2010

H κλάση ShapeFactory public class ShapeFactory { public Circle makeCircle() { return new CircleImpl(); } public Rectangle makeRectangle() { return new RectangleImpl() Ιανουάριος 2010

Παράδειγμα πελάτη (Client) public class ConcreteFactoryRunner { public static void main(String args[]) { ShapeFactory factory = new ShapeFactory(); Circle circle = factory.makeCircle(); Rectangle rectangle = factory.makeRectangle(); circle.move(); Shape shape = circle; shape.move(); // ... } Ιανουάριος 2010

Abstract Factory (Αφηρημένο εργοστάσιο) Πρόβλημα Η δημιουργία οικογενειών αντικειμένων που υλοποιούν κοινές διεπαφές Λύση Η δημιουργία μιας αφηρημένης κλάσης (ή διεπαφής) που παρέχει τη διεπαφή για τον ορισμό των συγκεκριμένων εργοστασίων. Κάθε συγκεκριμένο εργοστάσιο δημιουργεί τις οικογένειες των αντικειμένων. Ιανουάριος 2010

Δομή του προτύπου AbstractFactory Ιανουάριος 2010

Abstract Factory για τη δημιουργία σχημάτων Ιανουάριος 2010

public abstract class ShapeFactory { public static ShapeFactory instance; public abstract Shape makeCircle(); public abstract Shape makeRectangle(); public static ShapeFactory getFactory() { if (instance == null) { if (System.getProperty(“OS”,”Linux”) instance = new LinuxShapeFactory(); else instance = new WindowsShapeFactory(); } return instance; Ιανουάριος 2010

Παράδειγμα πελάτη (Client) public class AbstractFactoryRunner { public static void main(String args[]) { System.setProperty(“OS”,”Linux”); ShapeFactory factory = ShapeFactory.getFactory(); Shape circle = factory.makeCircle(); Shape rectangle = factory.makeRectangle(; circle.move(); rectangle.move() } Ιανουάριος 2010

Factory Method Σκοπός Εφαρμογή Καθορισμός μιας διαπροσωπείας για την κατασκευή ενός αντικειμένου Εφαρμογή Όταν μια κλάση δε γνωρίζει εκ των προτέρων τις κλάσεις των αντικειμένων που πρόκειται να δημιουργήσει Όταν μια κλάση αφήνει τις υποκλάσεις της να καθορίσουν τα αντικείμενα που δημιουργεί Όταν κάποιες κλάσεις αναθέτουν την ευθύνη για τη δημιουργία αντικείμένων σε υποκλάσεις άλλων κλάσεων και ο χρήστης θέλει να γνωρίζει σε ποια υποκλάση έχει ανατεθεί η ευθύνη Ιανουάριος 2010

Factory Method: Δομή Ιανουάριος 2010

Factory Method: Προγραμματιστικό Παράδειγμα abstract class RaceCreator { abstract Frame createFrame(); abstract Wheel createWheel(); // return a complete bicycle without needing // any arguments Bicycle completeBicycle() { Frame frame = createFrame(); Wheel frontWheel = createWheel(); Wheel rearWheel = createWheel(); return new Bicycle(frame, frontWheel, rearWheel); } RaceCreator createRace() { Bicycle bike1 = completeBicycle(); Bicycle bike2 = completeBicycle(); //... Ιανουάριος 2010

Factory Method Οι μέθοδοι create… ονομάζονται factory methods //French race class TourDeFrance extends RaceCreator { Frame createFrame() {return new RacingFrame();} Wheel createWheel() {return new Wheel700c();} } //Cyclocross race class Cyclocross extends RaceCreator { Frame createFrame() { return new MountainFrame();} Wheel createWheel() {return new Wheel26inch(); } Οι μέθοδοι create… ονομάζονται factory methods Οι μέθοδοι createRace και completeBicycle μπορούν να επαναχρησιμοποιηθούν χωρίς αλλαγές Ιανουάριος 2010

Factory Method Συνέπειες Γνωστές Χρήσεις Άλλες ονομασίες To Factory Method ελαχιστοποιεί την ανάγκη για τη σύζευξη κλάσεων σχετικών με την εφαρμογή στο πρόγραμμά μας. Το πρόγραμμα αναφέρεται μόνο στη διεπαφή Product (στο παράδειγμα: Bicycle). Ένα μειονέκτημα του Factory Method είναι η ανάγκη για δημιουργία υποκλάσεων του Creator σε κάθε περίπτωση δημιουργίας κάποιου Product Γνωστές Χρήσεις Το σύστημα Orbix ORB της IONA χρησιμοποιεί αυτό το πρότυπο για τη δημιουργία ενός κατάλληλου τύπου proxy κατά την αναφορά ενός αντικειμένου σε ένα άλλο απομακρυσμένο Άλλες ονομασίες Virtual Constructor Σχετικά πρότυπα Abstract Factory Prototype Ιανουάριος 2010

Συμπεριφορικά πρότυπα Τα μορφήματα συμπεριφοράς (behavioral patterns) αφορούν σε αλγορίθμους και στην ανάθεση λειτουργιών σε αντικείμενα Ιανουάριος 2010

Συμπεριφορικά πρότυπα Chain of responsibility. Παροχή περισσότερων από ενός αντικειμένων για τον χειρισμό ενός αιτήματος. Command. Ενθυλάκωση ενός αιτήματος ως αντικειμένου. Interpreter. Αναπαράσταση της γραμματικής μιας γλώσσας ναγια τη δημιουργία διερμηνέα της γλώσσας. Iterator. Πρόσβαση στα στοιχεία μιας συλλογής ώστε αυτή να είναι ανεξάρτητη από τη συλλογή. Ιανουάριος 2010

Συμπεριφορικά πρότυπα Mediator. Ο καθορισμός ενός αντικειμένου που ενθυλακώνει τον τρόπο επικοινωνίας αντικειμένων. Memento. Η καταγραφή της εσωτερικής κατάστασης αντικειμένου ώστε αυτή να ανακαλείται αργότερα. Observer. Δημιουργία μιας σχέσης ένα προς πολλά μεταξύ αντικειμένων έτσι όταν ένα αλλάζει, όλα τα αντικείμενα που εξαρτώνται από αυτό να ειδοποιούνται και να αλλάζουν αυτόματα. Ιανουάριος 2010

Συμπεριφορικά πρότυπα State. Ορισμός διαφορετικών κλάσεων για διαφορετικές καταστάσεις ενός αντικειμένου. Strategy. Ο καθορισμός μιας οικογένειας αλγορίθμων ώστε να είναι εναλλάξιμοι. Template Method. Καθορισμός του σκελετού ενός αλγορίθμου με την διαφοροποίηση κάποιων βημάτων σε υποκλάσεις. Visitor. Ορισμός μιας λειτουργίας χωρίς να αλλάξουν οι κλάσεις των αντικειμένων στις οποίες ορίζεται. Ιανουάριος 2010

Strategy (Στρατηγική) Πρόβλημα Η λύση διαφορετικών αλγορίθμων που υλοποιούν διαφορετικές, εναλλάξιμες, πολιτικές επίλυσης ενός προβλήματος Λύση Κάθε αλγόριθμος υλοποιείται με σε μια διαφορετική κλάση. Οι διαφορετικές κλάσεις έχουν κοινή διεπαφή. Ιανουάριος 2010

Δομή του προτύπου Strategy Ιανουάριος 2010

Αλγόριθμοι ταξινόμησης μέσω του προτύπου Strategy Ιανουάριος 2010

Observer Σκοπός Δημιουργία μιας σχέσης ένα προς πολλά μεταξύ αντικειμένων έτσι όταν ένα αλλάζει, όλα τα αντικείμενα που εξαρτώνται από αυτό να ειδοποιούνται και να αλλάζουν αυτόματα. Επιτρέπει το συγχρονισμό αλληλεπιδρώντων αντικειμένων μέσω ενός μηχανισμού διάδοσης των αλλαγών Ιανουάριος 2010

Observer Πρόβλημα Λύση Η ενημέρωση των αντικειμένων για την αλλαγή της κατάστασης ενός από αυτά Λύση Ένα αντικείμενο (subject) καταγράφει και ενημερώνει τα υπόλοιπα που ενδιαφέρονται για την κατάστασή του (observers) Ιανουάριος 2010

Observer: Δομή for all o in observers { Subject <<Interface>> o.update() attach() observers Observer } detach() * * update() notify() ConcreteSubject ConcreteObserver subjectState subject observerState getState() update() setState() observerState = subject.getState() Ιανουάριος 2010

Observer: Λειτουργία Ιανουάριος 2010 s : ConcreteSubject o1 : ConcreteObserver o2 : ConcreteObserver setState() notify() update() getState() Ιανουάριος 2010

Observer: Παράδειγμα Ιανουάριος 2010

Observer Ιανουάριος 2010

Observer: Παράδειγμα abstract class GraphMode { //Mode of mouse functions int mode; //The list of the observers Vector modeListeners = new Vector(); void notify() for (Enumeration e = modeListeners.elements();e.hasMoreElements();) { ModeListener listener= (ModeListener) e.nextElement(); listener.update(); } void addModeListener(ModeListener listener) modeListeners.add(listener); Ιανουάριος 2010

Observer : Παράδειγμα class ConcreteCanvasMode extends CanvasMode { void setMode(int mode) { this.mode = mode; notifyListeners(); } int getMode() return this.mode; Ιανουάριος 2010

Observer: Παράδειγμα public interface ModeListener { void update(); } public class GraphFrame extends JFrame implements ModeListener GraphCanvas canvas; ConcreteCanvasMode mode; public GraphFrame() canvas=new GraphCanvas(); mode=GraphCanvas.getMode(); mode.addModeListener(this); public void update() int mode = canvas.getMode(); Ιανουάριος 2010

Observer Συνέπειες Γνωστές Χρήσεις Άλλες ονομασίες Χαλαρή σύζευξη μεταξύ Subject και Observer Υποστήριξη της επικοινωνίας Μη αναμενόμενες ανανεώσεις (αρνητική) Γνωστές Χρήσεις Ενδεικτικά: Java Observable core API class, User interface frameworks: Java Swing, GEF (Eclipse), MVC (Smalltalk) Άλλες ονομασίες Dependents, Publish-Subscribe Ιανουάριος 2010

Iterator Σκοπός Παρέχει έναν τρόπο για την προσπέλαση μιας συλλογής αντικειμένων ακολουθιακά και ανεξάρτητα από την εσωτερική δομή της συλλογής. Ιανουάριος 2010

Iterator: Δομή Ιανουάριος 2010

Iterator: Προγραμματιστικό Παράδειγμα public class Stack { private Vector items; public Enumeration enumerator() { return new StackEnum(); } class StackEnum implements Enumeration { int currentItem = items.size() - 1; public boolean hasMoreElements() { return (currentItem >= 0); public Object nextElement() { if (!hasMoreElements()) throw new NoSuchElementException(); else return items.elementAt(currentItem--); Ιανουάριος 2010

Iterator: Δομή Ιανουάριος 2010

Iterator Συνέπειες Γνωστές Χρήσεις Άλλες Ονομασίες Enumeration Interface (Java), ObjectWindows Άλλες Ονομασίες Cursor Συσχετιζόμενα μορφήματα Composite, Factory Method, Memento Ιανουάριος 2010

Iterator: Πλεονεκτήματα και μειονεκτήματα Κώδικας επεκτάσιμος Κώδικας επαναχρησιμοποιήσιμος Η Σχεδίαση προβλέπει τις αλλαγές (design for change) Μειονεκτήματα Μειωμένη απόδοση Αύξηση του αριθμού των κλάσεων και του μεγέθους του κώδικα Δυσκολία στην εκμάθηση Ιανουάριος 2010

Σχετικές έννοιες Εργαλειοθήκη (toolkit) Πλαίσιο (framework) Παράδειγμα: C++ I/O stream library Πλαίσιο (framework) Παράδειγμα: ΕΤ++, XUnit, Java Swing, … Ιδίωμα (Idiom) C++: Handle/body, Java: Enumeration Τυποποιημένες λύσεις σε προγραμματιστικά προβλήματα συσχετισμένες με συγκεκριμένες γλώσσες προγραμματισμού λέγονται Ιδιώματα (idioms). A toolkit is a set of related and reusable classes designed to provide useful, general-purpose functonality. They are the object-oriented equivalent of subroutine libraries. A framework is a set of cooperating classes that make up a reusable design for a specific class of software Ιανουάριος 2010

Πρότυπα εξαρτημένα από το πεδίο εφαρμογής (domain specific) Επιχειρησιακή μοντελοποίηση (business patterns) Προσδιορισμός Απαιτήσεων - Ανάλυση (Analysis Patterns) Κατανεμημένα συστήματα (distribution systems patterns) Διεπαφές Χρήστη (User Interface Patterns) Σχεδιασμός Υπερμέσων (Hypermedia Design Patterns) Ηλεκτρονική μάθηση (e-Learning Patterns) ... Ιανουάριος 2010

Βιβλιογραφία - Αναφορές F. Buschmann, R. Meunier, H. Rohnert, P.Sommerlad and M. Stal. Pattern-Oriented Software Architecture: A System of Patterns. Wiley 1996. M. Cline.The Pros and Cons of Adopting and Applying Design Patterns in the Real World. Communications of the ACM, Vol. 39, No 10, Oct 1996. E. Gamma, R. Helm, R. Johnson and J. Vlissides. Design Patterns: Elements of reusable object-oriented software. Addison Wesley 1994. G. Larman. Applying UML and Patterns, 2nd Edition. Prentice Hall 2002. http://ocw.mit.edu/ http://hillside.net/patterns/ Ιανουάριος 2010