OO Design Principles (part II) Ανάπτυξη Λογισμικού (Software Development) www.cs.uoi.gr/~pvassil/courses/sw_dev/ ΠΛΥ 308.

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
GB ( ) 5 1 ( ) ( ) ( /cm 2 ) 0.2 /30min·φ90 (5 /m 3 ) 0.4 /30min·φ90 (10 /m 3 ) /30min·φ90 (25 /m 3 )
Advertisements

Γραφήματα & Επίπεδα Γραφήματα
Συλλογές, Στοίβες και Ουρές Σε πολλές εφαρμογές μας αρκεί η αναπαράσταση ενός δυναμικού συνόλου με μια δομή δεδομένων η οποία δεν υποστηρίζει την αναζήτηση.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Μέθοδοι που επιστρέφουν αντικείμενα Copy Constructor Deep and Shallow Copies.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πολυμορφισμός – Αφηρημένες κλάσεις Interfaces (διεπαφές)
Ανάπτυξη Λογισμικού (Software Development)
ΜοντελοποίησηΈργα ΜαθήματαΑξιολόγηση Αναστοχασμος Μαθήματα.
POINTERS, AGGREGATION, COMPOSITION. POINTERS TO OBJECTS.
Το υλικό του Υπολογιστή
της Μαρίας-Ζωής Φουντοπούλου
Βασικά διαγράμματα σε UML
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
OO Design Principles Ανάπτυξη Λογισμικού (Software Development) ΠΛΥ 308.
ΘΕΩΡΙΑ ΔΙΑΛΕΞΗ 4 Αριθμητικές εκφράσεις και πράξεις Εντολές ανάθεσης
Κεφάλαιο 6 Threads. 2 Στον παραδοσιακό προγραμματισμό όταν ένα πρόγραμμα εκτελείται ονομάζεται process (διεργασία) και οι εντολές του εκτελούνται σειριακά.
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Εισαγωγή στον Προγραμματισμό, Αντώνιος Συμβώνης, ΣΕΜΦΕ, ΕΜΠ, Slide 1 Εβδομάδα 3: Υλοποίηση μεθόδων.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πίνακες Κλάσεις και Αντικείμενα.
Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 1 Week 4: Exceptions Εβδομάδα 4: Εξαιρέσεις [Exceptions]
Page  1 Ο.Παλιάτσου Γαλλική Επανάσταση 1 ο Γυμνάσιο Φιλιππιάδας.
Κώστας Διαμαντάρας Τμήμα Πληροφορικής ΤΕΙ Θεσσαλονίκης 2011 Συστολικοί επεξεργαστές.
© GfK 2012 | Title of presentation | DD. Month
Δυαδικά Δένδρα Αναζήτησης, Δένδρα AVL
Εισαγωγή στον Προγραμματισμό, Αντώνιος Συμβώνης, ΣΕΜΦΕ, ΕΜΠ, Slide 1 Εβδομάδα 7: Συμβολοσειρές.
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Στατικές μέθοδοι και μεταβλητές Εσωτερικές κλάσεις.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Σύνθεση αντικειμένων Παράδειγμα: Τμήμα πανεπιστημίου.
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Προγραμματισμός ΙΙ Διάλεξη #7: Περισσότερες Δομές Ελέγχου Δρ. Νικ. Λιόλιος.
OO Design Principles Ανάπτυξη Λογισμικού (Software Development) ΠΛΥ 308.
Αποκεντρωμένη Διοίκηση Μακεδονίας Θράκης ∆ιαχείριση έργων επίβλεψης µε σύγχρονα µέσα και επικοινωνία C2G, B2G, G2G Γενική Δ/νση Εσωτερικής Λειτουργίας.
Βάσεις Δεδομένων II Διαχείριση Δοσοληψιών Πάνος Βασιλειάδης Σεπτέμβρης 2002
Προγραμματισμός ΙΙ Διάλεξη #6: Απλές Δομές Ελέγχου Δρ. Νικ. Λιόλιος.
Ισορροπημένα Δένδρα TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Μπορούμε να επιτύχουμε χρόνο εκτέλεσης για.
Δομές Αναζήτησης TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Χειριζόμαστε ένα σύνολο στοιχείων όπου το κάθε.
1 Α. Βαφειάδης Αναβάθμισης Προγράμματος Σπουδών Τμήματος Πληροφορικής Τ.Ε.Ι Θεσσαλονίκης Μάθημα Προηγμένες Αρχιτεκτονικές Υπολογιστών Κεφαλαίο Τρίτο Συστήματα.
Δομές Δεδομένων 1 Στοίβα. Δομές Δεδομένων 2 Στοίβα (stack)  Δομή τύπου LIFO: Last In - First Out (τελευταία εισαγωγή – πρώτη εξαγωγή)  Περιορισμένος.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Εισαγωγή στη Java II.
Τεχνολογία ΛογισμικούSlide 1 Αλγεβρική Εξειδίκευση u Καθορισμός τύπων αφαίρεσης σε όρους σχέσεων μεταξύ τύπων λειτουργιών.
Τμήμα Διοίκησης Τεχνολογίας - 9/2/ Μάνος Ρουμελιώτης Πανεπιστήμιο Μακεδονίας Αρχαία Ελληνική Τεχνολογία Ο Μηχανισμός των.
Μοντέλα Συστημάτων Παρουσιάσεις των συστημάτων των οποίων οι απαιτήσεις αναλύονται.
Προγραμματισμός ΙΙ Διάλεξη #5: Εντολές Ανάθεσης Εντολές Συνθήκης Δρ. Νικ. Λιόλιος.
Εισαγωγή στον Προγραμματισμό, Αντώνιος Συμβώνης, ΣΕΜΦΕ, ΕΜΠ, Slide 1 Εβδομάδα 11: Εκτέλεση Java χωρίς το BlueJ.
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Κληρονομικότητα.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές.
Προχωρημένα Θέματα Τεχνολογίας και Εφαρμογών Βάσεων Δεδομένων Διαχείριση Συναλλαγών Πάνος Βασιλειάδης Μάρτιος 2014
ΜΑΘΗΜΑ ΝΟΣΗΛΕΥΤΙΚΗ ΜΕΤΑΓΓΙΣΗ ΑΙΜΑΤΟΣ - ΑΙΜΟΔΟΣΙΑ
1 Εισαγωγή στη Java Χρήσιμες Διευθύνσεις Χαρακτηριστικά της Java Εργαλεία της Java Εργαλεία της Java Μεταγλώττιση στοιχειωδών εφαρμογών.
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1 Σχεδιασμός Σχεσιακών Σχημάτων.
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1 Σχεσιακό Μοντέλο.
Περίπτωση χρήσης: Process sale Από την ΠΧ στον κώδικα.
Δομές Δεδομένων - Ισοζυγισμένα Δυαδικά Δένδρα (balanced binary trees)
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Τάξεις και Αφαίρεση Δεδομένων.
+19 Δεκέμβριος 2014 Δείκτης > +20 Δείκτης 0 έως +20 Δείκτης 0 έως -20 Δείκτης < -20 Συνολικά της ΕΕ: +5 Δείκτης > +20 Δείκτης 0 έως +20 Δείκτης 0 έως -20.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Copy Constructor Deep and Shallow Copies.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πολυμορφισμός – Αφηρημένες κλάσεις Interfaces (διεπαφές)
ΟΣΣ Δεκεμβρίου 2004 Σχεδιασμός Λογισμικού Γλώσσες Προγραμματισμού ΙΙ ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ.
Τμήμα Πληροφορικής και Τηλεπικοινωνιών
Threads Στον παραδοσιακό προγραμματισμό όταν ένα πρόγραμμα εκτελείται ονομάζεται process (διεργασία) και οι εντολές του εκτελούνται σειριακά η μία μετά.
Κωδικός Θ: ΤΠ4003, Κωδικός Ε: ΤΠ4103 (ΜΕΥ/Υ) Ώρες (Θ - ΑΠ - Ε): Προαπαιτούμενα: ΤΠ2003,2103.
ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ
Software Engineering for Web Applications
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Κλάσεις και αντικείμενα
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Υπο-τύποι και πολυμορφισμός
Κληρονομικότητα [inheritance]
Μεταγράφημα παρουσίασης:

OO Design Principles (part II) Ανάπτυξη Λογισμικού (Software Development) ΠΛΥ 308

FACTORIES The simplest possible factory 2

abstract coupling 3

Πού «πονά» το abstract coupling Ενώ το abstract coupling έχει το καλό ότι ενώνει μια κλάση «χρήστη» ΜΟΝΟ με ένα γονικό interface (ή abstract class) πάσχει στο ότι ΔΕΝΜΠΟΡΕΙ ΝΑ ΕΦΑΡΜΟΣΤΕΙ ΣΤΗΝ ΚΑΤΑΣΚΕΥΗ ΤΩΝ ΑΝΤΙΚΕΙΜΕΝΩΝ!! Ενώ στη χρήση δηλ., μας αρκεί μια μεταβλητή τύπου AbstractMamaClass, όταν κάνουμε new πρέπει να αναφερθούμε σε μια concrete κλάση 4

Πού «πονά» το abstract coupling … και μάλιστα, κάθε φορά πρέπει να ξέρουμε ποια κλάση θα επιλέξουμε για το αντικείμενο τύπου AbstractMamaClass που θα φτιάξουμε … με αποτέλεσμα, τελικά, o client code να έχει coupling με (πιθανώς) ΟΛΕΣ τις υποκλάσεις της AbstractMamaClass … άρα, μόλις χάσαμε το πλεονέκτημα που κερδίσαμε με το abstract coupling. Πώς θα το αποκτήσουμε πίσω? 5

Πού προκύπτει η hard-coded σχέση με ΟΛΕΣ τις υποκλάσεις public class SimpleBookstoreEngine { public static void main(String args[]){ ItemManager amazon = new ItemManager(); Book bookRef; bookRef = new Book("Discours de la methode", "Rene Descartes", 1637, 50.00, 0); amazon.addItem(bookRef); … CD cdRef; cdRef = new CD("Piece of Mind", 10.0,"Iron Maiden",4.0); amazon.addItem(cdRef); … amazon.reportAllItems(); } 6

Φάρμακο: Factory Η λύση είναι να εισάγουμε μια κλάση, η οποία να επωμίζεται το κόστος της κατασκευής των αντικειμένων. Ονομάζουμε μια τέτοια κλάση “Factory” Η κλάση αυτή έχει τις εξής ιδιότητες: – Μαζί με την αφαιρετική μαμά κλάση, είναι οι μόνες που ξέρει ο client – Έχει μία ή περισσότερες μεθόδους για να κατασκευάζει αντικείμενα από τις concrete subclasses – Ξέρει ΟΛΕΣ τις υποκλάσεις 7

Πώς ήταν ο κώδικας αρχικά Οι εξαρτήσεις αυτές είναι μόνο από το new μέσα στον client Η εξάρτηση αυτή είναι από τη χρήση μιας μεταβλητής τύπου ItemManager από τον client + της εκτέλεσης μιας μεθόδου γι’ αυτήν 8

Αν έχετε manager, μία λύση είναι να βάλετε εκεί το factory 9

Κέρδη && ζημίες Ο client εξαρτάται ΜΟΝΟ από τον ItemManager Ο ItemManager απέκτησε μία μέθοδο γέννησης για κάθε υποκλάση  ΠΡΟΣΟΧΗ: μπορούσαμε να βάλουμε ΜΟΝΟ ΜΙΑ (1) μέθοδο γέννησης (CreateItem) που να έχει όλα τα πεδία απ’ όλες τις υποκλάσεις + ένα αναγνωριστικό για το ποιας κλάση θέλουμε να φτιάξουμε αντικείμενο. ΑΠΟΦΥΓΕΤΕ ΤΟ!!  10

Όχι εξάρτηση από τις υποκλάσεις public class SimpleBookstoreEngine { public static void main(String args[]){ ItemManager amazon = new ItemManager(); //Book bookRef; amazon.createBook("Discours de la methode", 50.00, "Rene Descartes", 1637, 0); //CD cdRef; amazon.createCD("Piece of Mind", 10.0,"Iron Maiden",4.0); amazon.reportAllItems(); } /* what you should NOT do: * amazon.createItem(1,"Discours de la methode", 50.00, "",0, "Rene Descartes", 1637, 0); */ 11

Κέρδη && ζημίες Είναι μεγάλο πλεονέκτημα ο client να είναι ελεύθερος από τις υποκλάσεις Μπορούμε να ζήσουμε με τη λύση αυτή (για το τίμημα μιας μεθόδου ανά υποκλάση) αν όποιος φτιάχνει το manager φτιάχνει και την ιεραρχία των υλοποιήσεων της Item Still, we can do better than that 12

Πριν προχωρήσουμε… Αποφύγετε τη μία και μόνη μέθοδο που θα διαλέγει τι είδους αντικείμενο θα κατασκευαστεί Είναι πολύ δύσκολο να ξέρεις ποιο πεδίο είναι τι Είναι πολύ επικίνδυνη στη συντήρηση Είναι υποχρεωτικό να συντηρείται σε κάθε αλλαγή σε υποκλάση Είναι στριφνή στον έλεγχο … 13

Το τυπικό factory: έχει μια dedicated class για τη γέννηση των αντικειμένων 14

Πώς γεννιούνται τα αντικείμενα? Αν οι υποκλάσεις έχουν διαφορετική δομή στους constructors τους, τότε η πιο απλή λύση είναι να έχετε από μία μέθοδο για κάθε υποκλάση Αν οι constructors είναι ίδιοι, τότε μπορείτε να έχετε μία (1) μέθοδο για όλους, με μία παράμετρο, η οποία να καθορίζει ποιας υποκλάσης το αντικείμενο γεννιέται – Parameterized factory 15

Ένα παράδειγμα Έχουμε μια μηχανή που θέλει να δουλέψει με κάποια δεδομένα Εδώ: μια μηχανή που παίρνει για είσοδο ένα timeseries και θέλει να το σπάσει σε φάσεις (εδώ μια φάση καθόδου και μια ανόδου) 16

Architecture of the project 17

Ας δούμε ένα πακέτο μόνο: parsing Για να πάρουμε δεδομένα, συνήθως χρησιμοποιούμε ένα parser ο οποίος επεξεργάζεται ένα αρχείο εισόδου με τιμές και τις μετατρέπει σε ένα επιθυμητό αντικείμενο (ή συλλογή αντικειμένων) Εδώ, ας υποθέσουμε ότι έχουμε ένα parser for simple ASCII texts κι άλλον ένα που δίνει τιμές απ’ ευθείας στη μηχανή (γρήγορο hack to test the rest of the implementation) 18

Ένα παράδειγμα factory 19

Ένα παράδειγμα factory Factory does all the object creations Since constructors are of the same signature, we can pick via a single (1) factory method Client and engine are free from the subclasses; In fact client knows ONLY the MainEngine 20

Parameterized Factory: Simple as that package parsing; public class ParserFactory { public IParser createParser(String concreteClassName){ if (concreteClassName.equals("TestParser")){ return new TestParser(); } else if (concreteClassName.equals("SimpleTextParser")){ return new SimpleTextParser(); } System.out.println("If you got here, you passed a wrong argument to ParserFactory"); return null; } 21

Κέρδη && ζημίες Ο client και το Main Engine είναι ελεύθερα από την ιεραρχία των parsers Το coupling τους είναι: – 1 για τον client – 2 για το engine (no matter how many subclasses, it is always 2, one for the iface and one for the factory) Και χωρίς factory θα ήταν 2, αλλά αυτό θα ήταν ίσο με τον αριθμό των υποκλάσεων => για κάθε νέα υποκλάση θα αύξανε… 22

Κέρδη && ζημίες Για το κέρδος αυτό, πληρώσαμε: – Μια επιπλέον κλάση (το factory) – Coupling for the factory class = number of subclasses + 1 (for the interface) Έχουμε εισάγει δηλ., μια κλάση με όσο μεγαλύτερη εξάρτηση γίνεται από την ιεραρχία We are prepared to pay this price, if this is a dedicated, centralized, single point of maintenance – Με άλλα λόγια, ξέρουμε ότι όταν θα προκύψει νέα υποκλάση, θα πρέπει να συντηρήσουμε το Factory. – Όμως, είναι ένα (1) και μόνο, γνωστό, σημείο συντήρησης – a price worth paying, IMHO 23

Να βάζαμε τις μεθόδους στο engine? Μπα, αυτό δε κλιμακώνεται, ούτε καν για ένα μικρό engine… 24

H ίδια συνταγή 25

Για σας: πώς θα βελτιώνατε αυτό? 26

Παρένθεση Όπως μόλις είδατε, για ένα μεγάλο διάγραμμα, μπορώ να βγάλω υποσύνολα του Η ουσία είναι να καταλαβαίνουμε και να συνεννοούμαστε => μπορούμε να εστιάζουμε σε όποιο υποσύνολο θέλουμε αν αυτό εξυπηρετεί 27

TO PROBE FURTHER Factory – related patterns: Factory mainly (also factory method, abstract factory) Builder (for complicated factories) 28

Factory pattern.html pattern.html pattern.html pattern.html

Factory Method: a variant with client totally free from concrete (i.e., mutable) classes 30

Builder pattern pattern.html pattern.html 31