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

Σχετικά έγγραφα
Τεχνολογία Λογισμικού

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

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

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

Δομές Δεδομένων - Εργαστήριο 2. Λίστες

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

Διάλεξη Εισαγωγή στη Java, Μέρος Γ

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

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

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

Εκφωνήσεις ασκήσεων εργαστηρίου 2 (java threads)

(C) 2010 Pearson Education, Inc. All rights reserved.

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

06α Αρχιτεκτονικά πρότυπα στον Παγκόσμιο Ιστό

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

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

H κλάση ArrayList. Γιώργος Θάνος. Γραφείο Γ. Γκλαβάνη 37. Αντικει ενοστραφής Προγρα. ος όροφος

Οδηγίες Αγοράς Ηλεκτρονικού Βιβλίου Instructions for Buying an ebook

10α Έλεγχος και επαλήθευση λογισμικού

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

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

Κατανεμημένα Συστήματα. Javascript LCR example

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Τ.Ε.Ι. Μεσολογγίου, Τµήµα τηλεπικοινωνιακών Συστημάτων & Δικτύων

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

Προγραμματισμός ΙΙ (Java) 10. Πολυνηματικές εφαρμογές

Το παρακάτω πρόγραμμα ορίζει δυο κλάσεις την SimpleThread και την TwoThreadsTest:

άσκηση Hide UI Elements 7.2 Try and Catch

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

Ορισµός Νήµα (thread) είναι µια ακολουθιακή ροή ελέγχου (δηλ. κάτι που έχει αρχή, ακολουθία εντολών και τέλος) σ ένα

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

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

ΕΠΛ 012. JavaScripts

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 133: ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΕΡΓΑΣΤΗΡΙΟ 3 Javadoc Tutorial

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

4 Συλλογές Αντικειμένων

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

Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

Εργαστήριο 02: Προγραμματισμός με Γενικούς Τύπους (JAVA Generics) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι

Στο εστιατόριο «ToDokimasesPrinToBgaleisStonKosmo?» έξω από τους δακτυλίους του Κρόνου, οι παραγγελίες γίνονται ηλεκτρονικά.

Wrapper Classes, Abstract Classes and Interfaces

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

AVL-trees C++ implementation

Inverse trigonometric functions & General Solution of Trigonometric Equations

Βασίλης Χριστοφίδης Επαναληπτική Εξέταση (3 ώρες) Ηµεροµηνία: 21 Σεπτεµβρίου 2012

Συστήματα Διαχείρισης Βάσεων Δεδομένων

Διάλεξη Εισαγωγή στη Java, Μέρος B

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

Week 7: Java Collection Classes

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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ & ΑΛΓΟΡΙΘΜΟΙ ΕΡΓΑΣΤΗΡΙΟ

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 6/12/07

ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ ΒΑΛΕΝΤΙΝΑ ΠΑΠΑΔΟΠΟΥΛΟΥ Α.Μ.: 09/061. Υπεύθυνος Καθηγητής: Σάββας Μακρίδης

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

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

SOAP API. Table of Contents

ιαδικτυακές Εφαρµογές

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

Εργαστήριο Ανάπτυξης Εφαρμογών Βάσεων Δεδομένων. Εξάμηνο 7 ο

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

ΤΕΙ Σερρών Σχολή Τεχνολογικών Εφαρμογών Τμήμα Πληροφορικής & Επικοινωνιών. Επώνυμο Όνομα: Α.Μ. : Εξάμηνο : Αίθουσα

07 Σχεδιασμός λογισμικού

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


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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Δομές Δεδομένων - Εργαστήριο 5. Ουρές Προτεραιότητας

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

Βασικές Έννοιες Δοµών Δεδοµένων

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

ΑΦAΙΡΕΤΙΚΟΣ (ή ΑΦΗΡΗΜΕΝΟΣ) ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT) - σύνολο δεδομένων (data, objects) - σύνολο πράξεων στα δεδομένα

Dynamic types, Lambda calculus machines Section and Practice Problems Apr 21 22, 2016

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

ιαδικτυακές Εφαρµογές Πραγµατικού Χρόνου µε Java

PayByBank RESTful API GUIDE

6. Εξαιρέσεις στη γλώσσα Java

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

Εγκατάσταση λογισμικού και αναβάθμιση συσκευής Device software installation and software upgrade

Δίκτυα Δακτυλίου. Token Ring - Polling

Προγραμματισμός ΙΙ (Java) 10. Πολυνηματικές εφαρμογές Τεκμηρίωση κώδικα

Υπολογιστικά Συστήματα

ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Στατικές μέθοδοι και μεταβλητές Εσωτερικές κλάσεις

Διάλεξη 05: Αφηρημένοι Τύποι Δεδομένων

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5. Αφηρημένοι Τύποι Δεδομένων / Στοίβες και Ουρές

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

JAVASCRIPT 1. Διδάσκοντες: Π. Αγγελάτος, Δ. Ζήνδρος Επιμέλεια διαφανειών: Π. Αγγελάτος Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

ΕΡΓΑΣΤΗΡΙΟ 5 ΣΗΜΕΙΩΣΕΙΣ

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

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

Εργαστήριο Οργάνωσης Η/Υ. Δαδαλιάρης Αντώνιος

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

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

The Simply Typed Lambda Calculus

Transcript:

12 Πρότυπα σχεδίασης συμπεριφοράς Τεχνολογία Λογισμικού Σχολή Hλεκτρολόγων Mηχανικών & Mηχανικών Yπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Χειμερινό εξάμηνο 2017 18 Δρ. Κώστας Σαΐδης saiko@di.uoa.gr

Πρότυπα σχεδίασης συμπεριφοράς Πρότυπα σχετικά με τη συμπεριφορά / επικοινωνία των αντικειμένων 2

Περιεχόμενα 1. Visitor 2. Chain of responsibility 3. Command 4. Mediator 5. Memento 6. Strategy 7. Null Object 3

Επίσης 8. Iterator / Iterable 9. Observer / Observable 10. Callback / Future / Promise 4

Visitor Σκοπός: Να διαχωρίσει τον αλγόριθμο από τη δομή δεδομένων. Η "λογική" της επίσκεψης στα στοιχεία της δομής traversal διαχωρίζεται από τη δομή αυτή καθ' αυτή. Το έχουμε δει ξανά στην εισαγωγή για τα πρότυπα σχεδίασης 5

Chain of responsibility Σκοπός: Να περάσει ένα αίτημα μέσω μιας αλυσίδας αντικειμένων 6

Client Request Processing element Processing element Processing element Processing element 7

Παράδειγμα Το παράδειγμα του Composite προτύπου από το προηγούμενο μάθημα χρησιμοποιεί το Chain of responsibility 8

Πραγματικό παράδειγμα Servlet filters 9

Command Σκοπός: Να "ενθυλακώσει" ένα αίτημα ως αντικείμενο, διαχωρίζοντας τον αποστολέα από τον παραλήπτη 10

Παράδειγμα java.lang.runnable java.util.concurrent.callable 11

Mediator Σκοπός: Να δημιουργήσουμε έναν "ενδιάμεσο" που "γνωρίζει" πώς αλληλεπιδρούν διάφορα αντικείμενα Χρήσιμο για σχέσεις N N 12

Client Producer Mediator Consumer +notify() +store() +retrive() +notify() 13

Memento Σκοπός: Να "εξωτερικεύσουμε" με ασφαλή τρόπο την εσωτερική κατάσταση ενός αντικειμένου ώστε να μπορούμε να την επαναφέρουμε αργότερα. Για την υλοποίηση λειτουργιών undo ή rollback 14

Παράδειγμα class Memento { private final String state; public Memento(String state) { this.state = state; public String getstate() { return state; 15

class Originator { private String state;...//more fields that "depend" on the state private void setstate(string state) { this.state = state; //change fields depending on the state public Memento save() { return new Memento(state); public void restore(memento m) { setstate(m.getstate()); 16

Strategy Σκοπός: Να αναπαραστήσουμε μια οικογένεια αλγορίθμων με ομοιόμορφο τρόπο ώστε να τους εναλλάσσουμε 17

Παράδειγμα class Client { String id //... BillingStrategy billingplan interface BillingStrategy { //Fundamental billing functions class EnterprisePlan implements BillingStrategy { //Billing details of the enterprise plan class SimplePlan implements BillingStrategy { //Billing details of the simple plan 18

Null object Σκοπός: Να υλοποιήσουμε με ομοιόμορφο τρόπο το NO OP do nothing Αποφεύγουμε τους ελέγχους για null διατηρώντας τη λογική του αλγορίθμου απλή και καθαρή 19

Παράδειγμα Ένα ενδεχόμενο FreePlan στην περίπτωση του BillingStrategy παραδείγματος μπορεί να υλοποιηθεί ως Null object μια υλοποίηση του BillingStrategy με μεθόδους που δεν κάνουν τίποτα! 20

Iterator / Iterable Σκοπός: Να μοντελοποιήσουμε την επανάληψη ή τη δυνατότητα αυτής 21

Iterator java.util.iterator interface Iterator<E> { boolean hasnext(); E next(); void remove(); //we don't care about this in the class Χρήση while(iterator.hasnext()) { Element e = iterator.next(); //do something with e 22

Iterable java.lang.iterable interface Iterable<E> { Iterator<E> iterator(); 23

Pull paradigm Ο χρήστης/client του Iterable κάνει pull για την επόμενη τιμή καλεί τις hasnext/next 24

Observer / Observable Σκοπός: Να ενημερωνόμαστε για τις αλλαγές στην κατάσταση ενός αντικειμένου Σχέση 1 Ν 1 observable, πολλοί observers 25

Observable Subject java.util.observable class Observable { void addobserver(observer o); void deleteobserver(observer o); boolean haschanged(); void notifyobservers(); void notifyobservers(object arg); 26

Observer java.util.observer interface Observer { void update(observable o, Object arg); 27

Push paradigm Ο χρήστης/client του Observable ενημερώνεται για την επόμενη τιμή το Observable κάνει push Publish/Subscribe 28

Παράδειγμα Το knockout.js υποστηρίζει το Observer/Observable 29

Callback Σκοπός: Να εκτελέσουμε ένα κομμάτι κώδικα αφού έχει ολοκληρωθεί ένας υπολογισμός σύγχρονα ή ασύγχρονα 30

Παράδειγμα interface Callback { void call() Θα μπορούσε να είναι και Runnable ή Callable 31

abstract class Task { abstract void execute() void executeand(callback callback) { execute() callback.call() 32

Πραγματικό παράδειγμα Τα Javascript callbacks π.χ. σε μια AJAX κλήση 33

Callback hell getdata = function(param, callback){ $.get('http://example.com/get/'+param, function(responsetext){ callback(responsetext); ); getdata(0, function(a){ getdata(a, function(b){ getdata(b, function(c){ getdata(c, function(d){ getdata(d, function(e){ //... ); ); ); ); ); 34

Future / Promise Σκοπός: Να διαχειριστούμε το αποτέλεσμα ενός υπολογισμού a value that will eventually become available με ομοιόμορφο τρόπο, ανεξάρτητα του αν ο υπολογισμός γίνεται σύγχρονα ή ασύγχρονα 35

Τρεις καταστάστεις Pending not yet available Fulfilled with an optional value Rejected due to an error or a timeout, with an optional value Εκτέλεση Thread pool ή Event loop 36

Διαφορές ανά γλώσσα ή framework Future, Promise, Deferred, Delay 37

Συνήθως Future Μια read only αναφορά σε μια τιμή που δεν έχει ακόμα υπολογιστεί o χρήστης του Future δεν έχει έλεγχο στην τιμή που θα προκύψει. Promise CompletableFuture Μια single assignment μεταβλητή για την τιμή του Future o χρήστης του Promise μπορεί να θέσει άπαξ την τιμή που θα προκύψει. 38

Promise = a future with a public set method 39

Future στη Java Package java.util.concurrent interface ExecutorService { Future<V> submit(callable<v> callable) Το ExecutorService είναι συνήθως κάποιο ThreadPool 40

interface Future<V> { //Attempts to cancel execution of this computation. boolean cancel(boolean mayinterruptifrunning); //Waits if necessary for the computation to complete, //and then retrieves its result. V get(); //Waits if necessary for at most the given time for //the computation to complete, and then retrieves //its result, if available. V get(long timeout, TimeUnit unit) //Returns true if this computation was cancelled before it //completed normally. boolean iscancelled() //Returns true if this computation completed. boolean isdone() 41

Παράδειγμα class Bulk { private ExecutorService executor = //a thread pool private List<Future> futures = [] void add(final Job job) { Future f = executor.submit(new Callable<Void>() { @Override Void call() throws Exception { job.execute(); ); futures.add(f); void execute() { for(future f: futures) { f.get(); //wait for all futures to complete 42

Χρήση Bulk bulk = new Bulk(); bulk.add(job1); bulk.add(job2); bulk.add(job3); bulk.add(job4); bulk.add(job5); bulk.add(job6); bulk.execute(); 43

Promise στην Javascript ES6 var handlerfunction = function(resolve, reject) { //resolve is the function to call in case //of successful completion //reject is the function to call in case of //failure ; var promise = new Promise(handlerFunction); promise. then(somefunction). //gets the resolved value catch(errorfunction); //gets the rejected value 44

Με το νέο συντακτικό var promise = new Promise((resolve, reject) => { try { //perform a task (usually asynchronous) resolve(task.result); catch(e) { reject(e); ); 45

Πραγματικό παράδειγμα JQuery.ajax... returns a promise 46