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

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

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

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

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

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

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

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

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

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 9 : ΕΞΑΙΡΕΣΕΙΣ ΚΑΙ Ο ΧΕΙΡΙΣΜΟΣ ΤΟΥΣ

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

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

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

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


Ειδικά Θέματα Προγραμματισμού

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

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ. Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής

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

Wrapper Classes, Abstract Classes and Interfaces

Διασυνδέσεις / Διεπαφές. Παναγιώτης Σφέτσος, PhD

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

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

Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής T.E.I. ΘΕΣΣΑΛΟΝΙΚΗΣ

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

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

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

Προγραμματισμός ΙΙ (Java) 4. Διαχείριση εξαιρέσεων

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

Εισαγωγή στη γλώσσα προγραμματισμού JAVA. Δομές Δεδομένων Διδάσκων: Π.Α. Μήτκας Τομέας Ηλεκτρονικής και Υπολογιστών

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

Κεφάλαιο 1. Νήματα (Threads). Time Sharing

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

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

Βασικά της γλώσσας JAVA

(2) Thread Thread. Runnable. ( ) Java. Sample91. Thread Thread ) Thread. Runnable. run() / run() Runnnale ( ) MyRun implements Runnable Runnable

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

02α Διαχείριση Έργων Λογισμικού

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

ΚΑΤΑΝΕΜΗΜΕΝΟ ΣΥΣΤΗΜΑ ΔΙΑΧΕΙΡΙΣΗΣ ΣΥΣΚΕΥΩΝ ΑΣΗΜΑΚΟΠΟΥΛΟΣ ΣΩΤΗΡΗΣ ΑΜ : 3021

Εισαγωγή στη γλώσσα προγραμματισμού Java 69

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

Πρόγραµµα 9.1 Πέρασµα δεδοµένων στην µνήµη

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

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

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

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

ΕΠΛ233 ΠΛΗΡΟΦΟΡΙΑ ΤΥΠΟΥ. Type Information. Μ. Δικαιάκος

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

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

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

Ειδικά Θέματα Προγραμματισμού

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#

Οντοκεντρικός Προγραμματισμός

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

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

05β Η ιδεατή μηχανή της Java

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

public class ArrayStack implements Stack {

. Μεθοδολογία Προγραμματισμού. Abstract Κλάσεις και Interfaces. Νικόλαος Πεταλίδης. Εισαγωγή Εαρινό Εξάμηνο 2014

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

Εξαιρέσεις στην Java EXCEPTIONS IN JAVA

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

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

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

ΕΞΑΙΡΕΣΕΙΣ. Εξαιρέσεις προκαλούνται. από το σύστηµα. από το πρόγραµµα

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

9:00-10:00 π.μ. (60 λεπτά) Παρασκευή, 14 Οκτωβρίου, 2016

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

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

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

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

Σύνθεση και Κληρονομικότητα

Oι βασικές πράξεις (λειτουργίες) που ορίζονται για τον τύπο στοίβα αναφέρονται παρακάτω:

Κλάσεις. Τροποποιητές, ιασυνδέσεις, Πακέτα. Τροποποιητές ελέγχου προσπέλασης µεταβλητών και µεθόδων

ΕΙΣΟ ΟΣ-ΕΞΟ ΟΣ Ε ΟΜΕΝΩΝ

Αρχεία και Ρεύματα. Αρχεία

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

Κλάσεις. Κατηγορίες Αντικειµένων. Κλάσεις. Φυσικά Αντικείµενα. Χώρος = Οµάδα Φυσικών Αντικειµένων. Πρόγραµµα = Οµάδα

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών

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

ΗΥ252 Πρόοδος 24 Νοεμβρίου 2012 Σελίδα 2 από 8

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

Υπερφόρτωση (Overloading) Υπέρβαση (Overriding) - Upcasting Downcasting Final classes, methods

Σύνθεση και Κληρονομικότητα

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα;

Οντοκεντρικός Προγραμματισμός

Μάθημα 2 [10/11/2015]

Διάλεξη 15: Αναδρομή (Recursion) Διδάσκων: Παναγιώτης Ανδρέου

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Υλοποίηση Δυαδικού Σωρού σε γλώσσα Java. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Εξαιρέσεις (Exceptions) Λάθη (Errors) Χειρισμός των Εξαιρέσεων (Exception Handling) Assertions

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

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

Καλές επιτυχίες παιδιά στα υπόλοιπα μαθήματά σας και καλές γιορτές!!!!

Περιγραφή της εργασίας

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

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

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

Ευφυείς Τεχνολογίες ----Πράκτορες

Transcript:

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

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

Περιεχόμενα 1. Adapter Wrapper 2. Bridge 3. Composite 4. Decorator 5. Facade 6. Proxy 3

Adapter Wrapper Σκοπός: Να κάνει μια κλάση συμβατή με κάποιο interface που αναμένει ένας χρήστης της Μια υπάρχουσα κλάση γίνεται συμβατή με ένα νέο interface 4

Παράδειγμα java.lang.runnable public interface Runnable { public void run() java.util.concurrent.callable public interface Callable<V> { public V call() throws Exception 5

public class RunnableAsCallable implements Callable<Void> { private final Runnable runnable; public RunnableAsCallable(Runnable runnable) { this.runnable = runnable; @Override public Void call() throws Exception{ runnable.run(); return null; 6

Συζήτηση Μηχανισμός για να κάνουμε δύο ξεχωριστά συστατικά με διαφορετικό σχεδιασμό να λειτουργήσουν μαζί, αφού έχουν υλοποιηθεί. "Ντύνουμε" ένα interface με τα ρούχα ένός άλλου. 7

Bridge Σκοπός: Να διαχωρίσουμε την αφαίρεση interface από την υλοποίηση class, ώστε να χρησιμοποιούνται ανεξάρτητα. 8

Παράδειγμα Δύο βασικές έννοιες Thread scheduler Platform 9

Παράδειγμα Subclassing ThreadScheduler PreemptiveThreadScheduler TimeSlicedThreadScheduler UnixPTS WindowsPTS UnixTSTS WindowsTSTS 10

Παράδειγμα Subclassing ThreadShceduler PreemptiveThreadScheduler TimeSlicedThreadScheduler UnixPTS WindowsPTS UnixTSTS WindowsTSTS JVM_PTS JVM_TSTS 11

Παράδειγμα Bridge ThreadScheduler PreemptiveThreadScheduler ThreadScheduler_Implementation TimeSlicedThreadScheduler UnixPTS WindowsPTS JVM_PTS 12

Συζήτηση Έμφαση στη σύνθεση και όχι στην κληρονομικότητα Χρήση δύο ιεραρχιών κληρονομικότητας: μία "δημόσια" και μία "ιδιωτική" Οι "δημόσιες" αφαιρέσεις χρησιμοποιούν τις "ιδιωτικές" υλοποιήσεις Οι δύο ιεραρχίες μπορούν να εξελιχθούν ανεξάρτητα μεταξύ τους 13

Composite Σκοπός: Να επιτρέψουμε σε μια κλάση χρήστη να χειρίζεται απλά και σύνθετα αντικείμενα με ομοιόμορφο τρόπο 14

Παράδειγμα interface Resolver { File resolve(string text) throws NotFoundException; class LocalFileResolver implements Resolver {... class URLResolver implements Resolver {... 15

class CompositeResolver implements Resolver { private final Resolver[] resolvers; CompositeResolver(Resolver... r) { this.resolvers = r; File resolve(text) throws NotFoundException { File f = null; for(resolver: resolvers) { try { f = resolver.resolve(text); catch(notfoundexception nfe) {.. if (f == null) { throw new NotFoundException(text); else { return f; 16

Decorator Σκοπός: Να προσθέσουμε επιλεκτικές και προαιρετικές δυνατότητες σε ένα αντικείμενο χωρίς κληρονομικότητα 17

Παράδειγμα Τέσσερις βασικές έννοιες Window Horizontal Scrollbar Vertical Scrollbar Border 18

Παράδειγμα Subclassing Window +draw() Window_With_Vertical_Scrollbar Window_With_Border Window_With_Horizontal_Scrollbar Window_With_Vertical_and_Horizontal_Scrollbar Window_With_Vertical_and_Horizontal_Scrollbar_and_Border 19

Παράδειγμα Decorator «interface» LCD +draw() Window Decorator +draw() +draw() Border VerticalSB HorizontalSB 20

Widget w = new BorderDecorator( new HorizontalScrollBarDecorator( new VerticalScrollBarDecorator( new Window("Title") ) ) ); w.draw(); 21

Συζήτηση Παρέχει μια πιο ευέλικτη εναλλακτική για την προσθήκη λειτουργικότητας σε μια κλάση σε σχέση με το subclassing κληρονομικότητα Recursive wrapping 22

Πραγματικό παράδειγμα Java IO OutputStream os = new BufferedOutputStream( new FileOutputStream("/path/to/file") ); 23

Facade Σκοπός: Να παρασχεθεί ένα απλό interface σε ένα σύνθετο υποσύστημα. 24

Παράδειγμα class VideoManagerFacade { File convert(string filename, String format) { VideoFile file = new VideoFile(fileName); Codec srccodec = CodecFactory.of(file); Codec destcodec; if (format.equals("ogg")) { destcodec = new OggCompressionCodec(); else { destcodec = new MPEG4CompressionCodec(); VideoFile buffer = BitrateReader.read(file, srccodec); VideoFile tmp = BitrateReader.convert(buffer, destcodec); File result = (new AudioMixer()).fix(tmp); return result; 25

Proxy Σκοπός: Να προσφέρει έναν ενδιάμεσο για ένα άλλο αντικείμενο, ελέγχοντας την πρόσβαση σε αυτό 26

Εφαρμογές Οκνηρή αρχικοποίηση virtual proxy Έλεγχος πρόσβασης access proxy Εκτέλεση απομακρυσμένων υπηρεσιών remote proxy Χρήση ενδιάμεσης μνήμη caching Καταγραφή ενεργειών logging proxy 27

Παράδειγμα class Router { void setup() { route("/index.html", new PublicResource()) route("/cart.html", new ProtectedResource()) void service(httprequest req, HttpResponse res) { MVCResource res = getresourcefor(req) LoggingProxy proxy = new LoggingProxy(res) proxy.doservice(req, res) 28

class LoggingProxy extends MVCResource { private static final Logger log =... private final MVCResource resource; LoggingProxy(MVCResource resource) { this.resource = resource; User createuser(httprequest req) { return res.createuser void doservice(httprequest req, HttpResponse res) { log.log("starting service of $resource") long t = System.currentTimeMillis() try { resource.doservice(req, res) finally { t = System.currentTimeMillis() t log.log("ending service of $resource (duration $t ms)") 29