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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

Wrapper Classes, Abstract Classes and Interfaces

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

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

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

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

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

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

Outline. 4 Object-Oriented Programming

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

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

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

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

Week. 6: Java Collections

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Περιεχόμενα και Διάρθρωση. Interaction Diagrams

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Αλεξάνδρειο Τεχνολογικό Εκπαιδευτικό Ίδρυµα Θεσσαλονίκης Σχολή Τεχνολογικών Εφαρµογών Τµήµα Πληροφορικής

Μεθοδολογία επαναχρησιμοποίησης κώδικα βασισμένη σε πρότυπα σχεδίασης

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

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

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

Transcript:

Εθνικό Μετσόβιο Πολυτεχνείο Σχολή ΗMMY Σχεδιαστικά Μορφήµατα (Design Patterns) Ανδρέας Παπασαλούρος andpapas@softlab.ntua.gr εκέµβριος 2003 1

Περίγραµµα Γενικά Αρχιτεκτονικά µορφήµατα Σχεδιαστικά Μορφήµατα ηµιουργίας (Creational) οµής (Structural) Συµπεριφοράς (Behavioral) Βιβλιογραφία - Αναφορές εκέµβριος 2003 2

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

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

Ένα παράδειγµα: Observer Σκοπός ηµιουργία µιας σχέσης ένα προς πολλά µεταξύ αντικειµένων έτσι όταν ένα αλλάζει, όλα τα αντικείµενα που εξαρτώνται από αυτό να ειδοποιούνται και να αλλάζουν αυτόµατα. Επιτρέπει το συγχρονισµό αλληλεπιδρώντων αντικειµένων µέσω ενός µηχανισµού διάδοσης των αλλαγών εκέµβριος 2003 5

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

Observer: οµή for all o in observers { o.update() Subject attach() detach() notify() observers * <<Interface>> Observer update() ConcreteSubject subjectstate getstate() setstate() subject ConcreteObserver observerstate update() observerstate = subject.getstate() εκέµβριος 2003 7

Observer: Λειτουργία s : ConcreteSubject o1 : ConcreteObserver o2 : ConcreteObserver setstate() notify() update() getstate() update() getstate() εκέµβριος 2003 8

Observer: Παράδειγµα εκέµβριος 2003 9

Observer <<Abstract>> CanvasMode addmodelistener() notifylisteners() observers * <<Interface>> ModeListener ConcreteCanvasMode mode getmode() setmode() mode GraphFrame update() εκέµβριος 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.update(); 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

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(); εκέµβριος 2003 13

Observer Συνέπειες Χαλαρή σύζευξη µεταξύ Subject και Observer Υποστήριξη της επικοινωνίας Μη αναµενόµενες ανανεώσεις (αρνητική) Γνωστές Χρήσεις MVC (Smalltalk) Άλλες ονοµασίες Dependents, Publish-Subscribe εκέµβριος 2003 14

Αρχιτεκτονικά µορφήµατα Ένα αρχιτεκτονικό µόρφηµα είναι ένα θεµελιώδες, δοµικό σχήµα οργάνωσης ενός συστήµατος λογισµικού. Παρέχει ένα σύνολο προκαθορισµένων υποσυστηµάτων, καθορίζει τις αρµοδιότητές τους και τους κανόνες και οδηγίες για την οργάνωση των σχέσεων µεταξύ τους εκέµβριος 2003 15

Αρχιτεκτονικά Μορφήµατα: Layers Περιβάλλον Ένα µεγάλο σύστηµα που απαιτεί αποσύνθεση Πρόβληµα Η σχεδίαση ενός συστήµατος το οποίο παρέχει λειτουργίες υψηλού και χαµηλού επιπέδου και οι τελευταίες βασίζονται στις προηγούµενες Λύση Οργάνωση του συστήµατος σε ένα αριθµό στρωµάτων. Κάθε στρώµα χρησιµοποιεί υπηρεσίες του αµέσως κατώτερού του εκέµβριος 2003 16

Layers: οµή Application-specific layer Layer N Application-general layer Layer N-1... Middleware layer Layer 1 System-software layer εκέµβριος 2003 17

Αρχιτεκτονικά µορφήµατα Layers Ελαχιστοποίηση των εξαρτήσεων µεταξύ των αρχιτεκτονικών συνθετηµάτων µε τηνκάθετηδόµησή τους σε n στρώµατα µε ένα ή και περισσότερα συνθετήµατα στο κάθε στρώµα. From Mud to Structure Pipes and Filters Blackboard Ελαχιστοποίηση των εξαρτήσεων µεταξύ συνθετηµάτων µε την οριζόντια δόµησή τους έτσι ώστε το κάθε συνθέτηµαναεκτελείµια µερική επεξεργασία των δεδοµένωνκαιναταδίνειστο επόµενο για περεταίρω επεξεργασία. Το αρχιτεκτονικό µόρφηµα Blackboard είναι χρήσιµο σε προβλήµατα για τα οποία δεν υπάρχουν ντετερµινιστικές στρατηγικές επίλυσης. Στο Blackboard πολλά εξειδικευµένα υποσυστήµατα συνθέτουν τη γνώση τους για να δοµήσουν µια πιθανώς µερικήήπροσεγγιστικήλύση. εκέµβριος 2003 18

Αρχιτεκτονικά µορφήµατα Adaptable Systems Microkernel Reflection Το αρχιτεκτονικό µόρφηµα Microkernel εφαρµόζεται συστήµατα λογισµικού που πρέπει να έχουν τη δυνατότητα να προσαρµόζονται σε µεταβαλλόµενες απαιτήσεις. ιαχωρίζει έναν ελάχιστο πυρήνα λειτουργικότητας από την εκτεταµένη λειτουργικότητα και τα τµήµατα τα σχετικά µε τους πελάτες. Ο microkernel επίσης λειτουργεί ως υποδοχή για τη σύνδεση των επεκτάσεων αυτών και τον συντονισµότων αλληλεπιδράσεών τους. Το αρχιτεκτονικό µόρφηµα Reflection παρέχει ένα µηχανισµό γιατη δυναµική αλλαγή της δοµής και συµπεριφοράς συστηµάτων λογισµικού. Υποστηρίζει την τροποποίηση θεµελιωδών όψεων όπως δοµές τύπων και µηχανισµούς κλήσης συναρτήσεων. Σε αυτό το µόρφηµα, µια εφαρµογή διαιρείται σε δύο µέρη. Ένα µετα-επίπεδο παρέχει πληροφορίες για επιλεγµέναχαρακτηριστικάτουσυστήµατος και δίνει στο σύστηµαγνώση για τον εαυτό του. Ένα βασικό επίπεδο περιέχει τη λογική της εφαρµογής. Η υλοποίησή του βασίζεται στο µετα-επίπεδο. Αλλαγές στην πληροφορία στο µέτα-επίπεδο επηρεάζουν τη συµπεριφορά στο βασικό επίπεδο. εκέµβριος 2003 19

Αρχιτεκτονικά µορφήµατα Distributed Systems Broker Το αρχιτεκτονικό µόρφηµα Broker µπορεί να χρησιµοποιηθεί για την κατασκευή κατανεµηµένων συστηµάτων λογισµικού µε αποσυζευγµένες συνιστώσες οι οποίες αλληλεπιδρούν µέσω αποµακρυσµένων κλήσεων υπηρεσιών. Μια συνιστώσα broker είναι υπεύθυνη για τον συντονισµό της επικοινωνίας, όπως την προώθηση αιτήσεων, όπως και την µετάδοση αποτελεσµάτων και εξαιρέσεων. εκέµβριος 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 εκέµβριος 2003 23

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

Factory Method: οµή Product Creator FactoryMethod() product=factorymethod() ConcreteProduct ConcreteCreator 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 εκέµβριος 2003 27

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

Μορφήµατα οµής Τα µορφήµατα δοµής αφορούν στον τρόπο µε τον οποίο κλάσεις και αντικείµενα συντίθενται ώστε να σχηµατίσουν µεγαλύτερες δοµές Adapter Bridge Composite Decorator Façade Flyweight Proxy εκέµβριος 2003 29

Adapter Σκοπός Η µετατροπή της διαπροσωπείας µιας κλάσης σε µια άλλη, επιθυµητή από τους πελάτες της Εφαρµογή Όταν είναι επιθυµητή η χρήση µιας κλάσης και η διαπροσωπεία της δεν το επιτρέπει Όταν ζητείται η δηµιουργία µιας επαναχρησιµοποιήσιµης κλάσης εκέµβριος 2003 30

Adapter: οµή Client <<Interface>> Target request() Adaptee anotherrequest() Adapter request() anotherrequest() Client <<Interface>> Target request() adaptee Adaptee anotherrequest() Adapter request() adaptee.anotherrequest() εκέµβριος 2003 31

Adapter Client Rectangle scale() NonScalablleRectangle setwidth() setheight() ScalableRectangle scale() εκέµβριος 2003 32

Adapter: Προγραµµατιστικό παράδειγµα interface Rectangle { void scale(float factor); //other methods class Client { void mymethod(rectangle r){ r.scale(2.); εκέµβριος 2003 33

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()); εκέµβριος 2003 34

Adapter Συνέπειες Στην περίπτωση του class Adapter δεν είναι δυνατή η προσαρµογή στις υποκλάσεις του Adaptee. Αντίθετα αυτό είναι δυνατό στην περίπτωση του object Adapter Γνωστές χρήσεις GraphicsBlock, SmallTalk, Next AppKit Άλλες Ονοµασίες Wrapper Συσχετιζόµενα µορφήµατα Bridge, Decorator, Proxy εκέµβριος 2003 35

Μορφήµατα Συµπεριφοράς Τα µορφήµατα συµπεριφοράς (behavioral patterns) αφορούν σε αλγορίθµους και στην ανάθεση λειτουργιών σε αντικείµενα εκέµβριος 2003 36

Μορφήµατα Συµπεριφοράς Chain of responsibility Command Interpreter Iterator Mediator Memento Observer State Strategy Template Method Visitor εκέµβριος 2003 37

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

Iterator: οµή Aggregate createiterator() Client Iterator first() next() isdone() currentitem() ConcreteAggregate createoperation() ConcreteIterator return new ConcreteIteration(this) εκέµβριος 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: οµή Client Stack enumeration() <<Interface>> Enumerator hasmoreelements() nextelement() StuckEnum εκέµβριος 2003 41

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

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

Σχετικές έννοιες Εργαλειοθήκη (toolkit) Παράδειγµα: C++ I/O stream library Πλαίσιο (framework) Παράδειγµα: ΕΤ++ Ιδίωµα (Idiom) C++: Handle/body, Java: Enumeration εκέµβριος 2003 44

Μορφήµατα εξαρτηµένα από το πεδίο εφαρµογής (domain specific) Επιχειρησιακή µοντελοποίηση (business patterns) Προσδιορισµός Απαιτήσεων - Ανάλυση (Analysis Patterns) ιαπροσωπείες Χρήστη (User Interface Patterns) Σχεδιασµός Υπερµέσων (Hypermedia Design Patterns) Ηλεκτρονική µάθηση (e-learning Patterns)... εκέµβριος 2003 45

Βιβλιογραφία - Αναφορές 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 46