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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

The challenges of non-stable predicates

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

Περιγραφή Μαθήματος ΠΕΡΙΓΡΑΦΗ ΜΑΘΗΜΑΤΟΣ. Γεώργιος Παπαϊωάννου ( )

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

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

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

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

Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΔΕΝΤΡΑ (TREES) B C D E F G H I J K L M

Section 8.3 Trigonometric Equations

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

Assalamu `alaikum wr. wb.

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

Finite Field Problems: Solutions

Physical DB Design. B-Trees Index files can become quite large for large main files Indices on index files are possible.

ΕΠΛ131 Αρχές Προγραμματισμού

derivation of the Laplacian from rectangular to spherical coordinates

Test Data Management in Practice

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

Capacitors - Capacitance, Charge and Potential Difference

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 19/5/2007

Case 1: Original version of a bill available in only one language.

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 6/5/2006

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

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

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

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

The Simply Typed Lambda Calculus

Δείκτες σε συναρτήσεις. Προγραμματισμός II 1

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

Matrices and Determinants

VBA ΣΤΟ WORD. 1. Συχνά, όταν ήθελα να δώσω ένα φυλλάδιο εργασίας με ασκήσεις στους μαθητές έκανα το εξής: Version ΗΜΙΤΕΛΗΣ!!!!

CYTA Cloud Server Set Up Instructions

department listing department name αχχουντσ ϕανε βαλικτ δδσϕηασδδη σδηφγ ασκϕηλκ τεχηνιχαλ αλαν ϕουν διξ τεχηνιχαλ ϕοην µαριανι

EE512: Error Control Coding

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 24/3/2007

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

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

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

DESIGN OF MACHINERY SOLUTION MANUAL h in h 4 0.

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

C.S. 430 Assignment 6, Sample Solutions

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

b. Use the parametrization from (a) to compute the area of S a as S a ds. Be sure to substitute for ds!

Inverse trigonometric functions & General Solution of Trigonometric Equations

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

ΤΕΧΝΟΛΟΓΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΣΧΟΛΗ ΜΗΧΑΝΙΚΗΣ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ. Πτυχιακή εργασία

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Διαδιεργασιακή Επικοινωνία Εργαστηριακές Ασκήσεις

ΜΕΤΑΠΤΥΧΙΑΚΗ ΔΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ «ΘΕΜΑ»

Block Ciphers Modes. Ramki Thurimella

AVL-trees C++ implementation

Εργαστήριο 7: Ο αλγόριθμος ταξινόμησης Radix Sort

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

ΚΥΠΡΙΑΚΟΣ ΣΥΝΔΕΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY 21 ος ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ Δεύτερος Γύρος - 30 Μαρτίου 2011

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

Approximation of distance between locations on earth given by latitude and longitude

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

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

HOMEWORK 4 = G. In order to plot the stress versus the stretch we define a normalized stretch:

υαδικά δέντρα αναζήτησης

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Ψηφιακή Οικονομία. Διάλεξη 10η: Basics of Game Theory part 2 Mαρίνα Μπιτσάκη Τμήμα Επιστήμης Υπολογιστών

Example Sheet 3 Solutions

Instruction Execution Times

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

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

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

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

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

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

Door Hinge replacement (Rear Left Door)

ΜΑΡΙΟΛΑΚΟΣ Η., ΦΟΥΝΤΟΥΛΗΣ Ι., ΣΠΥΡΙΔΩΝΟΣ Ε., ΑΝΔΡΕΑΔΑΚΗΣ Ε., ΚΑΠΟΥΡΑΝΗ, Ε.

Galatia SIL Keyboard Information

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

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

On a four-dimensional hyperbolic manifold with finite volume

Υπερφόρτωση Μεθόδων και Πέρασμα Ορισμάτων

Transcript:

14 Πρότυπα Σχεδίασης συνέχεια Τεχνολογία Λογισμικού Τμήμα Πληροφορικής & Τηλεπικοινωνιών, ΕΚΠΑ Εαρινό εξάμηνο 2016 17 Δρ. Κώστας Σαΐδης saiko@di.uoa.gr

Καλές πρακτικές δόμησης του κώδικα 2

Πρότυπο σχεδίασης Design pattern Μια καλή πρακτική για την αντιμετώπιση ενός σχεδιαστικού προβλήματος στο λογισμικό. 3

Προσοχή Ένας τρόπος δόμησης/διάρθωσης του κώδικα για την επίλυση ενός συγκεκριμένου προβλήματος όχι κώδικας καθ' αυτός. Η υπερβολική χρήση των προτύπων επιφέρει περισσότερα προβλήματα απ' όσα λύνει αύξηση πολυπλοκότητας. 4

Λίστα αναγνωσμάτων 7. Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, "Design Patterns: Elements of Reusable Object Oriented Software", Addison Wesley, 1994, 0 201 63361 2. 5

Κύρια είδη προτύπων Αρχιτεκτονικά architectural MVC, MVVM, κ.ά Κατασκευαστικά creational Factory, Builder, Object Pool, Singleton, κ.ά Δομικά structural Adapter/Wrapper, Bridge, Decorator, Facade, Proxy, κ.ά Συμπεριφοράς behavioral Chain of responsibility, Command, Iterator, Mediator, Observer, Strategy, Template method, Visitor, κ.ά 6

Στο προηγούμενο μάθημα Iterator και Iterable MVC και MVVM Observer και Observable + Reactive 7

Σήμερα Factory, Singleton, Strategy, Decorator Ομιλία Builder Object Pool Visitor 8

Builder Τεχνική που επιτρέπει την εύκολη δημιουργία σύνθετων αντικειμένων που απαιτούν πολλές παραμέτρους. Αντί για constructor overloading. Επιλογή του χρήστη ποια θα θέσει και ποια όχι. 9

Παράδειγμα Something s = new BuilderOfSomething(). setanoption(1). setanother("x"). setaflag(false). build(); 10

Η υλοποίηση class BuilderOfSomething { Something s; BuilderOfSomething() { s = new Something(); BuilderOfSomething setanoption(int option) { s.setint(option); return this; //allows chaining of calls BuilderOfSomething setanother(string option) { s.setstring(option); return this;... 11

Πραγματικό Παράδειγμα Guava Cache cache = CacheBuilder.newBuilder(). maximumsize(maxcachesize). expireafterwrite(timeoutinminutes + 1, TimeUnit.MINUTES). removallistener(new RemovalListener<String, X>() { @Override void onremoval(removalnotification<string, X> n) {... ). build(new CacheLoader<String, X>() { @Override X load(string key) throws RuntimeException {.. ) 12

Object Pool Borrow & return. Εκ των προτέρων κατασκευή αντικειμένων που επαναχρησιμοποιούνται αντί να κατασκευάζονται και να καταστρέφονται σε κάθε χρήση. Thread Pools, Connection Pools, κτλ. 13

Πραγματικό Παράδειγμα Java 5+ Executors java.util.concurrent.executors static ExecutorService newcachedthreadpool() static ExecutorService newfixedthreadpool() 14

Από το Javadoc newfixedthreadpool Creates a thread pool that reuses a fixed number of threads operating off a shared unbounded queue. At any point, at most nthreads threads will be active processing tasks. If additional tasks are submitted when all threads are active, they will wait in the queue until a thread is available. If any thread terminates due to a failure during execution prior to shutdown, a new one will take its place if needed to execute subsequent tasks. The threads in the pool will exist until it is explicitly shutdown. 15

newcachedthreadpool Creates a thread pool that creates new threads as needed, but will reuse previously constructed threads when they are available. These pools will typically improve the performance of programs that execute many short lived asynchronous tasks. Calls to execute will reuse previously constructed threads if available. If no existing thread is available, a new thread will be created and added to the pool. Threads that have not been used for sixty seconds are terminated and removed from the cache. Thus, a pool that remains idle for long enough will not consume any resources. 16

Visitor Διαχωρισμός του αλγορίθμου από τη δομή δεδομένων. Η "λογική" της επίσκεψης στα στοιχεία της δομής traversal διαχωρίζεται από τη δομή αυτή καθ' αυτή. 17

Παράδειγμα interface TreeVisitor { void visit(treenode node); interface TreeNode { TreeNode getleft(); TreeNode getright(); int getvalue(); void accept(treevisitor visitor); class SimpleTreeNode implements TreeNode {... public void accept(treevisitor vistor) { visitor.visit(this); 18

Υλοποίση class PreOrderTreeVisitor implements TreeVisitor { public void visit(treenode node) { int value = node.getvalue(); //do something with the node's value... //then traverse from left to right (pre order) TreeNode left = node.getleft(); if (left!= null) left.accept(this); TreeNode right = node.getright(); if (right!= null) right.accept(this); 19

Πραγματικό Παράδειγμα Java 7+ FileVisitor java.nio.files static Path walkfiletree( Path start, FileVisitor<? super Path> visitor ) throws IOException 20

java.nio.file.filevisitor interface FileVisitor<T> { FileVisitResult postvisitdirectory(t dir,...) FileVisitResult previsitdirectory(t dir,...) FileVisitResult visitfile(t file,...) FileVisitResult visitfilefailed(t file,...) 21