Σχεδιαστικά Μορφήµατα (Design Patterns)

Σχετικά έγγραφα
Σχεδιαστικά Μορφήµατα (Design Patterns)

Μοτίβα Σχεδίασης (Design Patterns)

ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ Αξιολόγηση των Σχεδιαστικών Προτύπων και της Ποιότητας του Λογισμικού μέσω Μετρικών, στις Περιπτώσεις Προσθήκης Λειτουργικότητας και

14 Πρότυπα Σχεδίασης συνέχεια

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

Ειδικά θέματα τεχνολογίας λογισμικού

Στόχοι της Πτυχιακής

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

Bridge (Γέφυρα) Πρότυπα Σχεδίασης

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

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

Εισαγωγή στη γλώσσα µοντελοποίησης UML

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

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

14η ιάλεξη. Προχωρημένα θέματα σχεδίασης

Ε ΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ

11β Δομικά πρότυπα σχεδίασης

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

Η ΜΕΤΑΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ ΕΞΕΙΔΙΚΕΥΣΗΣ. Υ7ΐοβάλλεται στην


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

Wrapper Classes, Abstract Classes and Interfaces

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

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

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

Τι είναι η λογική αρχιτεκτονική

Κληρονομικότητα. Παύλος Εφραιμίδης pefraimi <at> ee.duth.gr. Java Κληρονομικότητα 1

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

Αρχιτεκτονική Λογισμικού

Week. 6: Java Collections

Γλώσσες προγραµµατισµού. Ανάπτυξη Συστηµάτων Λογισµικού

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

ΣΧΕ ΙΑΣΗ ΑΝΤΙΚΕΙΜΕΝΩΝ ΜΕ ΑΡΜΟ ΙΟΤΗΤΕΣ. Ορισµός σχεδιαστικών προτύπων Εφαρµογή των 9 GRASP προτύπων

Outline. 4 Object-Oriented Programming

Εισαγωγή στη γλώσσα µοντελοποίησης UML

Δοµές Δεδοµένων. 6η Διάλεξη Αναδροµικές Εξισώσεις και Αφηρηµένοι Τύποι Δεδοµένων. Ε. Μαρκάκης

Τεχνολογίες Υλοποίησης Αλγορίθµων

Κατανεµηµένος Προγραµµατισµός & Προγραµµατισµός στο ιαδίκτυο

Εισαγωγή. Τμήμα Μηχανικών Σχεδίασης Προϊόντων και Συστημάτων, ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ. Παναγιώτης Κουτσαμπάσης

Εισαγωγή στη γλώσσα µοντελοποίησης UML

08 Αντικειμενοστραφής ανάλυση και σχεδιασμός

Παύλος Εφραιµίδης. Java. Κληρονοµικότητα

ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ

Ατοµική ιπλωµατική Εργασία

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

Εμπειρική μελέτη χρήσης αντικειμενοστραφών προτύπων σχεδίασης σε λογισμικό ανοικτού κώδικα

. Μεθοδολογία Προγραμματισμού. Μοτίβα σχεδίασης (Design Patterns) Νικόλαος Πεταλίδης. Εισαγωγή Εαρινό Εξάμηνο 2014

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

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

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5

Εισαγωγή στη Σχεδίαση Λογισμικού

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

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

1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι

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

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

Εισαγωγή στη γλώσσα µοντελοποίησης UML

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

Τα διαγράµµατα πακέτων

Προγράμματα με δομή Κληρονομικότητας

11α Κατασκευαστικά πρότυπα σχεδίασης

Aρχές Σπονδυλωτού Προγραµµατισµού σε Kατανεµηµένα Συστήµατα. Kεφάλαιο Tέσσερα - Πρότυπα, Yποδοµές και Aρχιτεκτονικές

Σχεδιασµός βασισµένος σε συνιστώσες

Δομές Δεδομένων & Ανάλυση Αλγορίθμων. 3ο Εξάμηνο. Ουρά (Queue) Υλοποίηση της με τη βοήθεια πίνακα.

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

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

ΑΠΛΗ ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ

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

Ελληνικό Ανοικτό Πανεπιστήµιο. Βασικές έννοιες αντικειµενοστρεφούς τεχνολογίας. ρ. Πάνος Φιτσιλής

Πρότυπα Σχεδίασης. Πρότυπα Σχεδίασης. Πρότυπα Σχεδίασης. Πρότυπα Σχεδίασης

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

Καρακασίδης Αλέξανδρος Καστίδου Γεωργία Παπαφώτη Μαρία Πέτσιος Κων/νος Στέφανος Σαλτέας Καλογεράς Παναγιώτης. Threads in Java ΝΗΜΑΤΑ ΣΤΗ JAVA

Τι είναι η Spring. Η Spring είναι ένα ελεύθερο (open source) περιβάλλον εργασίας για εφαρμογές Java. Μπορεί να περιγραφεί ως:

Περίληψη ιπλωµατικής Εργασίας

HY252. Περιγραφή Εργασίας. Graphic Editor

28 Πολυπρακτορικά Συστήµατα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΜΑΚΕΔΟΝΙΑΣ ΜΕΤΑΠΤΥΧΙΑΚΟ ΠΡΟΓΡΑΜΜΑ ΤΜΗΜΑΤΟΣ ΕΦΑΡΜΟΣΜΕΝΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗ ΣΥΣΤΗΜΑΤΑ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ

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

Δομές Δεδομένων & Αλγόριθμοι

04 Αντικειμενοστραφής ανάλυση και σχεδιασμός

Επιτεύγµατα των Λ.Σ.

Φροντιστήριο 5. Ημερομηνία: 01/12/2006 Θεματική Ενότητα: Μοντελοποίηση Συμπεριφοράς Θέμα: Διαγράμματα αλληλεπίδρασης και καταστάσεων

Θέματα εξετάσεων. Τύπος: B

ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ ΤΗΣ ΠΟΙΟΤΗΤΑΣ ΤΟΥ ΕΠΙΛΕΓΜΕΝΟΥ ΚΩΔΙΚΑ» Πτυχιακή εργασία του φοιτητή Γκορτζή Αντωνίου

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

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

12 Πρότυπα σχεδίασης συμπεριφοράς

Εισαγωγή Η VHDL υποστηρίζει τους εξής τρείς βασικούς και διαφορετικούς τρόπους περιγραφής

EPL 603 TOPICS IN SOFTWARE ENGINEERING. Lab 5: Component Adaptation Environment (COPE)

Αρχιτεκτονικές κατανεμημένων συστημάτων. I. Sommerville 2006 Βασικές αρχές Τεχνολογίας Λογισμικού, 8η αγγ. έκδοση Κεφ. 12

Δομές Δεδομένων. Λουκάς Γεωργιάδης.

Διαφορές single-processor αρχιτεκτονικών και SoCs

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

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

Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού

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

Δομές Δεδομένων (Data Structures)

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

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

Transcript:

Εθνικό Μετσόβιο Πολυτεχνείο Σχολή ΗMMY Σχεδιαστικά Μορφήµατα (Design Patterns) Ανδρέας Παπασαλούρος andpapas@softlab.ntua.gr Περίγραµµα Γενικά Αρχιτεκτονικά µορφήµατα Σχεδιαστικά Μορφήµατα ηµιουργίας (Creational) οµής (Structural) Συµπεριφοράς (Behavioral) Βιβλιογραφία - Αναφορές εκέµβριος 2003 1 εκέµβριος 2003 2 Χαρακτηριστικά µορφηµάτων Ένα µόρφηµα αναφέρεται σε ένα συγκεκριµένο σχεδιαστικό πρόβληµα σε ένα σχεδιαστικό περιβάλλον και παρουσιάζει µια λύση του Τα µορφήµατα καταγράφουν υπάρχουσα, καλά τεκµηριωµένη σχεδιαστική εµπειρία Τα µορφήµατα προσδιορίζουν και προδιαγράφουν αφηρηµένες λύσεις που βρίσκονται πάνω από το επίπεδο συγκεκριµένων κλάσεων ή συνθετηµάτων Τα µορφήµατα παρέχουν ένα κοινό λεξιλόγιο και µια βάση για την κατανόηση σχεδιαστικών αρχών Ένα µόρφηµα είναι ένα µέσο για την τεκµηρίωση αρχιτεκτονικών λογισµικού Τα µορφήµατα επιτρέπουν τη δηµιουργία λογισµικού µε συγκεκριµένες ιδιότητες πολύπλοκων και ετερογενών αρχιτεκτονικών λογισµικού Τα µορφήµατα βοηθούν στη διαχείριση της πολυπλοκότητας του λογισµικού Μορφήµατα: Ορισµός Ένα µόρφηµα περιγράφει ένα πρόβληµα που εµφανίζεται ξανά και ξανά σε συγκεκριµένα περιβάλλοντα και παρουσιάζει ένα καλά τεκµηριωµένο γενικό σχήµα για τη λύση του. Αυτό το σχήµα περιγράφεται από τα συνθετήµατα (components) που το αποτελούν, τις αρµοδιότητες και σχέσεις τους και τους τρόπους µε τους οποίους συνεργάζονται [Buschmann96] εκέµβριος 2003 3 εκέµβριος 2003 4 Ένα παράδειγµα: Observer Σκοπός ηµιουργία µιας σχέσης ένα προς πολλά µεταξύ αντικειµένων έτσι όταν ένα αλλάζει, όλα τα αντικείµενα που εξαρτώνται από αυτό να ειδοποιούνται και να αλλάζουν αυτόµατα. Επιτρέπει το συγχρονισµό αλληλεπιδρώντων αντικειµένων µέσω ενός µηχανισµού διάδοσης των αλλαγών Observer Περιβάλλον Ένα σύνολο από αλληλεπιδρώντα αντικείµενα Πρόβληµα Η ενηµέρωση των αντικειµένων για την αλλαγή της κατάστασης ενός από αυτά Λύση Ένα αντικείµενο (subject) καταγράφει και ενηµερώνει τα υπόλοιπα που ενδιαφέρονται για την κατάστασή του (observers) εκέµβριος 2003 5 εκέµβριος 2003 6 1

Observer: οµή Observer: Λειτουργία s : ConcreteSubject o1 : ConcreteObserver o2 : ConcreteObserver for all o in observers o. Subject attach() detach() notify() observers * Observer notify() setstate() ConcreteSubject subjectstate getstate() setstate() subject ConcreteObserver observerstate getstate() observerstate = subject.getstate() getstate() εκέµβριος 2003 7 εκέµβριος 2003 8 Observer: Παράδειγµα Observer <<Abstract>> CanvasMode addmodelistener() notifylisteners() observers * ModeListener ConcreteCanvasMode mode getmode() setmode() mode GraphFrame εκέµβριος 2003 9 εκέµβριος 2003 10 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.; void addmodelistener(modelistener listener) modelisteners.add(listener); εκέµβριος 2003 11 Observer : Παράδειγµα class ConcreteCanvasMode extends CanvasMode void setmode(int mode) this.mode = mode; notifylisteners(); int getmode() return this.mode; εκέµβριος 2003 12 2

Observer: Παράδειγµα public interface ModeListener void ; public class GraphFrame extends JFrame implements ModeListener GraphCanvas canvas; ConcreteCanvasMode mode; public GraphFrame() canvas=new GraphCanvas(); mode=graphcanvas.getmode(); mode.addmodelistener(this); public void int mode = canvas.getmode(); εκέµβριος 2003 13 Observer Συνέπειες Χαλαρή σύζευξη µεταξύ Subject και Observer Υποστήριξη της επικοινωνίας Μη αναµενόµενες ανανεώσεις (αρνητική) Γνωστές Χρήσεις MVC (Smalltalk) Άλλες ονοµασίες Dependents, Publish-Subscribe εκέµβριος 2003 14 Αρχιτεκτονικά µορφήµατα Ένα αρχιτεκτονικό µόρφηµα είναι ένα θεµελιώδες, δοµικό σχήµα οργάνωσης ενός συστήµατος λογισµικού. Παρέχει ένα σύνολο προκαθορισµένων υποσυστηµάτων, καθορίζει τις αρµοδιότητές τους και τους κανόνες και οδηγίες για την οργάνωση των σχέσεων µεταξύ τους Αρχιτεκτονικά Μορφήµατα: Layers Περιβάλλον Ένα µεγάλο σύστηµα που απαιτεί αποσύνθεση Πρόβληµα Η σχεδίαση ενός συστήµατος το οποίο παρέχει λειτουργίες υψηλού και χαµηλού επιπέδου και οι τελευταίες βασίζονται στις προηγούµενες Λύση Οργάνωση του συστήµατος σε ένα αριθµό στρωµάτων. Κάθε στρώµα χρησιµοποιεί υπηρεσίες του αµέσως κατώτερού του εκέµβριος 2003 15 εκέµβριος 2003 16 Layers: οµή Αρχιτεκτονικά µορφήµατα Layer N Application-specific layer Layers Ελαχιστοποίηση των εξαρτήσεων µεταξύ των αρχιτεκτονικών συνθετηµάτων µετηνκάθετηδόµησή τους σε n στρώµατα µε ένα ή και περισσότερα συνθετήµατα στο κάθε στρώµα. Layer N-1... Layer 1 Application-general layer Middleware layer System-software layer From Mud to Structure Pipes and Filters Blackboard Ελαχιστοποίηση των εξαρτήσεων µεταξύ συνθετηµάτων µε την οριζόντια δόµησή τους έτσι ώστε το κάθε συνθέτηµα ναεκτελείµια µερική επεξεργασία των δεδοµένωνκαιναταδίνειστο επόµενο για περεταίρω επεξεργασία. Το αρχιτεκτονικό µόρφηµα Blackboard είναι χρήσιµο σε προβλήµατα για τα οποία δεν υπάρχουν ντετερµινιστικές στρατηγικές επίλυσης. Στο Blackboard πολλά εξειδικευµένα υποσυστήµατα συνθέτουν τη γνώση τους για να δοµήσουν µια πιθανώς µερική ή προσεγγιστική λύση. εκέµβριος 2003 17 εκέµβριος 2003 18 3

Αρχιτεκτονικά µορφήµατα Αρχιτεκτονικά µορφήµατα Adaptable Systems Microkernel Reflection Το αρχιτεκτονικό µόρφηµα Microkernel εφαρµόζεται συστήµατα λογισµικού που πρέπει να έχουν τη δυνατότητα να προσαρµόζονται σε µεταβαλλόµενες απαιτήσεις. ιαχωρίζει έναν ελάχιστο πυρήνα λειτουργικότητας από την εκτεταµένη λειτουργικότητα και τα τµήµατα τα σχετικά µε τουςπελάτες. Ο microkernel επίσης λειτουργεί ως υποδοχή για τη σύνδεση των επεκτάσεων αυτών και τον συντονισµό των αλληλεπιδράσεών τους. Το αρχιτεκτονικό µόρφηµα Reflection παρέχει ένα µηχανισµό γιατη δυναµική αλλαγή της δοµής και συµπεριφοράς συστηµάτων λογισµικού. Υποστηρίζει την τροποποίηση θεµελιωδών όψεων όπως δοµές τύπων και µηχανισµούςκλήσηςσυναρτήσεων. Σε αυτό το µόρφηµα, µια εφαρµογή διαιρείται σε δύο µέρη. Ένα µετα-επίπεδο παρέχει πληροφορίες για επιλεγµένα χαρακτηριστικά του συστήµατος και δίνει στο σύστηµα γνώση για τον εαυτό του. Ένα βασικό επίπεδο περιέχει τη λογική της εφαρµογής. Η υλοποίησή του βασίζεται στο µετα-επίπεδο. Αλλαγές στην πληροφορία στο µέτα-επίπεδο επηρεάζουν τη συµπεριφορά στο βασικό επίπεδο. Distributed Systems Broker Το αρχιτεκτονικό µόρφηµα Broker µπορεί να χρησιµοποιηθεί για την κατασκευή κατανεµηµένων συστηµάτων λογισµικού µε αποσυζευγµένες συνιστώσες οι οποίες αλληλεπιδρούν µέσω αποµακρυσµένων κλήσεων υπηρεσιών. Μια συνιστώσα broker είναι υπεύθυνη για τον συντονισµό της επικοινωνίας, όπως την προώθηση αιτήσεων, όπως και την µετάδοση αποτελεσµάτων και εξαιρέσεων. εκέµβριος 2003 19 εκέµβριος 2003 20 Αρχιτεκτονικά Μορφήµατα Μορφήµατα Σχεδίασης Interactive Systems Model-View- Controller (MVC) Presentation- Abstraction- Control (PAC) Το αρχιτεκτονικό µόρφηµα Model-View-Controller (MVC) διαµερίζει µια διαδραστική εφαρµογή σε τρεις συνιστώσες. Το µοντέλο (model) περιέχει τη βασική λειτουργικότητα και τα δεδοµένα. Οι όψεις (views) και οι ελεγκτές (controllers) από κοινού συνιστούν τη διαπροσωπεία χρήστη. Ένας µηχανισµός αλλαγής-διάδοσης εξασφαλίζει τη συνέπεια µεταξύ της διαπροσωπείας χρήστη και του µοντέλου. Το αρχιτεκτονικό µόρφηµα Presentation-Abstraction-Control (PAC) ορίζει µια δοµή για διαδραστικά συστήµατα λογισµικού µε τηµορφή µιας ιεραρχίας συνεργαζόµενων πρακτόρων (agents). Κάθε πράκτορας είναι υπεύθυνος για ένα συγκεκριµένο τµήµα τηςλειτουργικότηταςτης εφαρµογής και αποτελείται από τρεις συνιστώσες: παρουσίαση (presentation), αφαίρεση (abstraction) και έλεγχος (control). Αυτή η υποδιαίρεση διαχωρίζει την πλευρά της αλληλεπίδρασης ανθρώπουυπολογιστή του πράκτορα από τον λειτουργικό του πυρήνα και από την επικοινωνία του µε άλλουςπράκτορες. ηµιουργίας οµής Συµπεριφοράς εκέµβριος 2003 21 εκέµβριος 2003 22 Mορφήµατα ηµιουργίας Μορφήµατα που σχετίζονται µε τη δηµιουργία αντικειµένων (instantiation) Abstract Factory Builder Factory Method Prototype Singleton Factory Method Σκοπός Καθορισµός µιας διαπροσωπείας για τη δηµιουργία ενός αντικειµένου Εφαρµογή Όταν µια κλάση δε γνωρίζει εκ των προτέρων τις κλάσεις των αντικειµένων που πρόκειται να δηµιουργήσει Όταν µια κλάση αφήνει τις υποκλάσεις της να καθορίσουν τα αντικείµενα που δηµιουργεί Όταν κάποιες κλάσεις αναθέτουν την ευθύνη για τη δηµιουργία αντικείµένων σε υποκλάσεις άλλων κλάσεων και ο χρήστης θέλει να γνωρίζει σε ποια υποκλάση έχει ανατεθεί η ευθύνη εκέµβριος 2003 23 εκέµβριος 2003 24 4

Factory Method: οµή Product ConcreteProduct Creator FactoryMethod() ConcreteCreator FactoryMethod() product=factorymethod() return new ConcreteProduct εκέµβριος 2003 25 Factory Method: Προγραµµατιστικό Παράδειγµα abstract class Race 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); Race createrace() Bicycle bike1 = completebicycle(); Bicycle bike2 = completebicycle(); //... εκέµβριος 2003 26 Factory Method //French race class TourDeFrance extends Race Frame createframe() return new RacingFrame(); Wheel createwheel() return new Wheel700c(); //Cyclocross race class Cyclocross extends Race Frame createframe() return new MountainFrame(); Wheel createwheel() return new Wheel26inch(); Οι µέθοδοι create ονοµάζονται factory methods Factory Method Συνέπειες To Factory Method ελαχιστοποιεί την ανάγκη για τη σύζευξη κλάσεων σχετικών µε την εφαρµογή στο πρόγραµµά µας. Το πρόγραµµα αναφέρεται µόνο στη διαπροσωπεία Product (στο παράδειγµα: Bicycle). Ένα µειονέκτηµα του Factory Method είναι η ανάγκη για δηµιουργία υποκλάσεων του Creator σε κάθε περίπτωση δηµιουργίας κάποιου Product Γνωστές Χρήσεις Το σύστηµα Orbix ORB της IONA χρησιµοποιεί αυτό το µόρφηµα για τη δηµιουργία ενός κατάλληλου τύπου proxy κατά την αναφορά ενός αντικειµένου σε ένα άλλο αποµακρυσµένο Άλλες ονοµασίες Virtual Constructor Συσχετιζόµενα µορφήµατα Abstract Factory Prototype εκέµβριος 2003 27 εκέµβριος 2003 28 Μορφήµατα οµής Τα µορφήµατα δοµής αφορούν στον τρόπο µε τον οποίο κλάσεις και αντικείµενα συντίθενται ώστε να σχηµατίσουν µεγαλύτερες δοµές Bridge Composite Decorator Façade Flyweight Proxy Σκοπός Η µετατροπή της διαπροσωπείας µιας κλάσης σε µια άλλη, επιθυµητή από τους πελάτες της Εφαρµογή Όταν είναι επιθυµητή η χρήση µιας κλάσης και η διαπροσωπεία της δεν το επιτρέπει Όταν ζητείται η δηµιουργία µιας επαναχρησιµοποιήσιµης κλάσης εκέµβριος 2003 29 εκέµβριος 2003 30 5

: οµή Target request() Adaptee anotherrequest() request() anotherrequest() Rectangle scale() NonScalablleRectangle setwidth() setheight() Target request() adaptee Adaptee anotherrequest() ScalableRectangle scale() request() adaptee.anotherrequest() εκέµβριος 2003 31 εκέµβριος 2003 32 : Προγραµµατιστικό παράδειγµα interface Rectangle void scale(float factor); //other methods class void mymethod(rectangle r) r.scale(2.); : Προγραµµατιστικό παράδειγµα 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()); εκέµβριος 2003 33 εκέµβριος 2003 34 Συνέπειες Στην περίπτωση του class δεν είναι δυνατή η προσαρµογή στις υποκλάσεις του Adaptee. Αντίθετα αυτό είναι δυνατό στην περίπτωση του object Γνωστές χρήσεις GraphicsBlock, SmallTalk, Next AppKit Άλλες Ονοµασίες Wrapper Συσχετιζόµενα µορφήµατα Bridge, Decorator, Proxy Μορφήµατα Συµπεριφοράς Τα µορφήµατα συµπεριφοράς (behavioral patterns) αφορούν σε αλγορίθµους και στην ανάθεση λειτουργιών σε αντικείµενα εκέµβριος 2003 35 εκέµβριος 2003 36 6

Μορφήµατα Συµπεριφοράς Chain of responsibility Command Interpreter Iterator Mediator Memento Observer State Strategy Template Method Visitor Iterator Σκοπός Παρέχει έναν τρόπο για την προσπέλαση µιας συλλογής αντικειµένων ακολουθιακά και ανεξάρτητα από την εσωτερική δοµή της συλλογής. εκέµβριος 2003 37 εκέµβριος 2003 38 Iterator: οµή Aggregate createiterator() ConcreteAggregate createoperation() return new ConcreteIteration(this) Iterator first() next() isdone() currentitem() ConcreteIterator εκέµβριος 2003 39 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--); εκέµβριος 2003 40 Iterator: οµή Iterator Συνέπειες Stack enumeration() Enumerator hasmoreelements() nextelement() StuckEnum Γνωστές Χρήσεις Enumeration Interface (Java), ObjectWindows Άλλες Ονοµασίες Cursor Συσχετιζόµενα µορφήµατα Composite, Factory Method, Memento εκέµβριος 2003 41 εκέµβριος 2003 42 7

Iterator: Πλεονεκτήµατα και µειονεκτήµατα Πλεονεκτήµατα Κώδικας επεκτάσιµος Κώδικας επαναχρησιµοποιήσιµος Η Σχεδίαση προβλέπει τις αλλαγές (design for change) Μειονεκτήµατα Μειωµένη απόδοση Αύξηση του αριθµού των κλάσεων και του µεγέθους του κώδικα υσκολία στην εκµάθηση Σχετικές έννοιες Εργαλειοθήκη (toolkit) Παράδειγµα: C++ I/O stream library Πλαίσιο (framework) Παράδειγµα: ΕΤ++ Ιδίωµα (Idiom) C++: Handle/body, Java: Enumeration εκέµβριος 2003 43 εκέµβριος 2003 44 Μορφήµατα εξαρτηµένα από το πεδίο εφαρµογής (domain specific) Επιχειρησιακή µοντελοποίηση (business patterns) Προσδιορισµός Απαιτήσεων - Ανάλυση (Analysis Patterns) ιαπροσωπείες Χρήστη (User Interface Patterns) Σχεδιασµός Υπερµέσων (Hypermedia Design Patterns) Ηλεκτρονική µάθηση (e-learning Patterns)... Βιβλιογραφία - Αναφορές 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/ εκέµβριος 2003 45 εκέµβριος 2003 46 8