Πρότυπα Σχεδίασης. Πρότυπα Σχεδίασης. Πρότυπα Σχεδίασης. Πρότυπα Σχεδίασης
|
|
- Αθανάσιος Λιακόπουλος
- 7 χρόνια πριν
- Προβολές:
Transcript
1 Design Patterns Όλα ξεκίνησαν από.. την Αρχιτεκτονική!! Christopher Alexander, The Timeless Way of Building, Oxford University Press, New York, 1979: "Είναι η ποιότητα µία αντικειµενική ιδιότητα? " Αν αποδεχθεί κανείς ότι είναι δυνατό να αναγνωρίσει και να περιγράψει ένα σχέδιο καλής ποιότητας τότε: (Alexander): Τι υπάρχει σε ένα σχέδιο καλής ποιότητας το οποίο δεν υπάρχει σε ένα σχέδιο κακής ποιότητας? Ο Alexander µελετώντας πληθώρα αρχιτεκτονικών κατασκευασµάτων, παρατήρησε ότι οι καλές κατασκευές είχαν κοινά στοιχεία µεταξύ τους Τα κοινά στοιχεία συνήθως αφορούν κοινές λύσεις ή λύσεις σε κοινά προβλήµατα O Alexander κατανόησε ότι οι δοµές δεν µπορούσαν να διαχωριστούν από το πρόβληµα το οποίο προσπαθούν να επιλύσουν. Για το λόγο αυτό αναζήτησε διαφορετικές δοµές που σχεδιάστηκαν για να επιλύσουν το ίδιο πρόβληµα 1 2 Λύσεις στο πρόβληµα της οριοθέτησης και ανάδειξης µιας εισόδου: O Alexander όρισε την έννοια του προτύπου ως "Μία λύση ενός προβλήµατος µέσα σε συγκεκριµένο πλαίσιο" ( κάθε πρότυπο περιγράφει ένα πρόβληµα που εµφανίζεται συνέχεια στο περιβάλλον και στη συνέχεια περιγράφει τον πυρήνα της λύσης κατά τέτοιο τρόπο ώστε η λύση να µπορεί να εφαρµοστεί εκατοµµύρια φορές) κατά ανάλογο τρόπο µία αυλή, ορθά σχηµατισµένη, επιτρέπειστους ανθρώπους να τη ζήσουν. ένα Πρότυπο έχει πάντοτε ένα όνοµα και ένα σκοπό κυρίως, σεµίααυλή, οιάνθρωπο αναζητούν έναν ιδιωτικό εξωτερικό χώρογιανακάθονταικάτωαπότον ουρανό, να χαίρονται τον ήλιο. παρόλο που µπορεί να είναι µερικές φορές προφανές, είναι σηµαντικό να διατυπώνεται ρητά το πρόβληµα που επιλύεται Ο Alexander ονόµασε τα κοινά στοιχεία µεταξύ των σχεδίων υψηλής ποιότητας πρότυπα (patterns) 3 4
2 ανµίααυλήείναιστενήκαιδενέχει θέα προς τα έξω, οι άνθρωποι αισθάνονται άβολα και αποµακρύνονται χρειάζονται να βλέπουν προς κάτι µεγαλύτερο και µακρινό αν οι άνθρωποι περνούν από την αυλή καθηµερινά η αυλή γίνεται οικεία και ένα φυσικό µέρος και χρησιµοποιείται επισηµαίνονται δυσκολίες µε τηναπλήλύσηκαιστησυνέχεια δίνονται οδηγίες για την επίλυση του προβλήµατος που επισηµάνθηκε Ηαξίαενόςπροτύπουείναιότι µε µικρή εµπειρία µπορεί κανείς να αξιοποιήσει τη συσσωρευµένη εµπειρία άλλων αν υπάρχει κάποιος µεταβατικός χώρος µία βεράντα µε κάλυψη αλλά ανοικτή αυτό είναι ψυχολογικά στο ενδιάµεσοτουµέσακαιέξωκαικάνει απλούστερη και ευκολότερη την πρόσβαση στην αυλή µε έναρξη το πρότυπο προκύπτουν περαιτέρω δρόµοι για τη βελτίωση της σχεδίασης 5 6 Κάθε πρότυπο περιλαµβάνει: το όνοµα του προτύπου το σκοπό του προτύπου, το πρόβληµα που επιλύει τον τρόπο επίλυσης τους περιορισµούς που πρέπει να ληφθούν υπόψη Αρχές '90: Υπάρχουν προβλήµατα στο λογισµικό τα οποία επαναλαµβάνονται; Υπάρχει η δυνατότητα σχεδίασης λογισµικού µε πρότυπα; Οι Gamma, Helm, Johnson και Vlissides (Gang of Four) κατέληξανότι ηαπάντησηείναι "σαφώςναι". 7 8
3 Οι GoF κατήρτισαν έναν κατάλογο µε 23 πρότυπα σχεδίασης δίνοντας για το καθένα: Όνοµα και Κατηγορία Σκοπό (µία φράση) Συνώνυµα Κίνητρο (παράδειγµα προβλήµατος) Εφαρµοσιµότητα (χρησιµοποιείστε το πρότυπα όταν: ) οµή (διάγραµµα κλάσεων) Συµµετέχοντες Συνεργασία 9 Συνέπειες (επιτυγχανόµενα πλεονεκτήµατα) Υλοποίηση (language specific) Sample Code Γνωστές Χρήσεις (παραδείγµατα σε πραγµατικά συστήµατα) ΣχετιζόµεναΠρότυπα 10 Κατηγορίες Creational: Ασχολούνται µε τη διεργασία της δηµιουργίας αντικειµένων Structural: ιαπραγµατεύονται τη σύνθεση κλάσεων/αντικειµένων Behavioral: Χαρακτηρίζουν τους τρόπους µε τους οποίους οι κλάσεις αλληλεπιδρούν και κατανέµουν τις αρµοδιότητες Οι GoF προτείνουν τις ακόλουθες στρατηγικές Design to interfaces Favor composition over inheritance Find what varies and encapsulate it 11 12
4 Σχεδιαστικό Μοτίβο Iterator Iterator ιάγραµµακλάσης Σκοπός Προσπέλαση των στοιχείων µιας δοµής αντικειµένων χωρίς να χρειάζεται να γνωρίζει ο κώδικας πελάτης τις λεπτοµέρειες υλοποίησης της δοµής Εφαρµογή Όταν πρέπει να χρησιµοποιήσουµε διαφορετικούς τρόπους (αλγόριθµους) για τη προσπέλαση των στοιχείων της δοµής Όταν χρειαζόµαστε να έχουµε µια οµοιόµορφη διαπροσωπία για τη προσπέλαση των στοιχείων Ότανηδοµήήηλογικήπροσπέλασηςαλλάζεικαιο κώδικας πελάτης θα πρέπει να παραµείνει ο ίδιος Aggregate (Glyph) Client +createiterator() * * * * ConcreteAgregate +createiterator() 1 * Iterator +first() +next() +isdone() +currentitem() ConcreteIterator 13 { return ConcreteIterator(this); 14 Iterator Παράδειγµα (1) Iterator ΠαράδειγµαΠελάτη (2) import java.util.*; class IntSet { private Hashtable ht = new Hashtable(); public static class Iterator { private IntSet set; private Enumeration e; private Integer current; public Iterator( IntSet in ) { set = in; public void first() { e = set.ht.keys(); next(); public boolean isdone() { return current == null; public int currentitem() { return current.intvalue(); public void next() { try { current = (Integer) e.nextelement(); catch (NoSuchElementException e) { current = null; public void add( int in ) { ht.put( new Integer( in ), "null" ); public boolean ismember( int i ) { return ht.containskey(new Integer(i)); public Hashtable gethashtable() { return ht; public Iterator createiterator() { return new Iterator( this ); 15 class IteratorDemo { public static void main( String[] args ) { IntSet set = new IntSet();. // Κώδικας για εισαγωγή στοιχείων στη δοµή (σύνολο) // Clients ask the collection object to create many iterator objects IntSet.Iterator it1 = set.createiterator(); IntSet.Iterator it2 = set.createiterator(); // Clients use the first(), isdone(), next(), currentitem() protocol System.out.print( "\niterator: " ); for ( it1.first(), it2.first();! it1.isdone(); it1.next(), it2.next() ) System.out.print( it1.currentitem() + " " + it2.currentitem() + " " ); System.out.print( "\nenumeration: " ); for (Enumeration e = set.gethashtable().keys(); e.hasmoreelements(); ) System.out.print( e.nextelement() + " " ); System.out.println(); 16
5 Iterator -Σχόλια Επακόλουθα + Ευελιξία: η δοµή και ο κώδικας πελάτης γίνονται πιο ανεξάρτητες οντότητες + Χρήση πολλών διαφορετικών αλγόριθµων για τη προσπέλαση των στοιχείων (διαφορετικοί iterators) Επιπλέον κόστος επικοινωνίας µεταξύ της δοµής και του κώδικα πελάτη Υλοποίηση Εσωτερικοί ή εξωτερικοί iterators Γνωστές Χρήσεις InterViews ListItr Unidraw Iterator 17 Κατηγορία: Structural Σκοπός: Η µετατροπή της διασύνδεσης µιας κλάσης σε µία άλλη που αναµένει το πρόγραµµα πελάτης. Ο προσαρµογέας επιτρέπει τη συνεργασία κλάσεων, η οποία σε διαφορετική περίπτωση θα ήταν αδύνατη λόγω ασύµβατων διασυνδέσεων. Συνώνυµα: Wrapper 18 Συχνά ο κώδικας µιας κλάσης προσφέρεται για επαναχρησιµοποίηση, αλλά αυτή δεν είναι δυνατή λόγω του ότι τα προγράµµατα που επιθυµούν να χρησιµοποιήσουν τις λειτουργίες της, αναµένουν διαφορετικήδιασύνδεση. Έστω ότι µία κλάση Σχεδίασης είναι σε θέση να σχεδιάσει γραµµές, αλλάαπαιτείωςπαραµέτρουςτιςσυντεταγµένεςστηµορφή (x1, y1, x2, y2) ενώ τα προγράµµατα πελάτες είναι σε θέση να παρέχουν τις συντεταγµένεςστηµορφή (x1, x2, y1, y2). Συνήθως τα προγράµµατα πελάτες δεν είναι δυνατόν να τροποποιηθούν (καθώς βρίσκονται ήδη εγκατεστηµένα). Η κλάση Σχεδίασης είναι επιθυµητό να χρησιµοποιηθεί χωρίς τροποποίηση (καθώς οποιαδήποτε επέµβαση στον κώδικα µιας µεθόδου είναι δυνατόν να προκαλέσει σφάλµατα στις υπόλοιπες µεθόδους). Παράδειγµα: Εφαρµογή που χειρίζεται διάφορα σχήµατα (σηµεία, γραµµές, τετράγωνα) µε ενιαίο τρόπο, δηλαδή καλεί λειτουργίες επί των σχηµάτων, αδιαφορώνταςγιατοσυγκεκριµένοείδοςσχήµατος. Τέτοιες λειτουργίες είναι η εµφάνιση του σχήµατος, ο καθορισµός του χρώµατος, η διαγραφή από την οθόνη, ο καθορισµός θέσης, το γέµισµα µεχρώµακλπ. Με άλλα λόγια, όλα τα σχήµατα θα πρέπει να ενσωµατωθούν σε µία αφηρηµένηέννοιασχήµατοςπουθαπαρέχειόλεςαυτέςτιςλειτουργίες. Εδώ βρίσκει εφαρµογή το πρότυπο "Προσαρµογέας"
6 Προφανής αντιµετώπιση: Πολυµορφισµός: Μία αφηρηµένη κλάση ορίζει όλες τις λειτουργίες της διασύνδεσης, ενώ η υλοποίηση των λειτουργιών είναι διαφορετική για κάθε µία απότιςπαράγωγεςκλάσεις. Το πρόγραµµα πελάτης είναι σε θέση να χειρίζεται αντικείµενα της αφηρηµένης κλάσης διατηρώντας ένα δείκτη προς αυτή, ενώ κατά την εκτέλεση του προγράµµατος µεταβιβάζονται ως τιµές στον δείκτη οι διευθύνσεις συγκεκριµένων αντικειµένων των παράγωγων κλάσεων. Client Point Shape +setlocation() +setlinecolor() Line Square 21 Ζητείται η προσθήκη δυνατότητας σχεδίασης κύκλων: Πρέπει να προστεθεί µία νέα κλάση η οποία θα κληρονοµεί από την αφηρηµένη κλάση Shape υλοποιώντας την πολυµορφική συµπεριφορά των µεθόδων που δηλώνονται στη διασύνδεση. Στο σηµείο αυτό, θα πρέπει να γραφεί ο κώδικας για τις µεθόδους display, undisplayκαι fill. Επειδή η συγγραφή των µεθόδων αυτών είναι αρκετά περίπλοκη, αρχικά πραγµατοποιείται αναζήτηση εναλλακτικής λύσης, υπό τη µορφή κάποιας κλάσηςπουήδηυλοποιείκύκλουςκαιείναιδιαθέσιµη. Έστω ότι εντοπίζεται µία τέτοια κλάση µε το όνοµα OtherCircle, η οποία διαθέτει τις ίδιες λειτουργίες µε διαφορετικά ωστόσο ονόµατα µεθόδων. Η κλάση OtherCircle δεν µπορεί να ενταχθεί απευθείας στην ιεραρχία των κλάσεων αφενός λόγω της ασυµβατότητας των µεθόδων (ονοµάτων και ενδεχοµένως παραµέτρων), καθώς και διότι στον ορισµό της δεν κληρονοµεί 22 από την κλάση Shape. Hλύσηστοσηµείοαυτόείναιηδηµιουργίαµιαςνέαςκλάσης Circleηοποία όντως κληρονοµεί από την Shape (και κατά συνέπεια είναι συµβατή µε τις λειτουργίες της διασύνδεσης), και η οποία περιέχει ένα αντικείµενο της κλάσης OtherCircle. Κατά αυτόν τον τρόπο, η κλάση Circle µπορεί να µεταβιβάζει τις αιτήσεις που φθάνουνσεαυτή, στοαντικείµενο OtherCircleπουµπορείνατιςικανοποιήσει. Η υπάρχουσα κλάση OtherCircle εποµένως δεν τροποποιείται, αλλά προσαρµόζεται. ιάγραµµα Κλάσεων: Client Point Shape +setlocation() +setlinecolor() Line Square Circle OtherCircle +setlocation() +setitslocation() +displayit() +setlinecolor() 1 1 +setitslinecolor() +undisplayit() +fillit() 23 24
7 Η αφηρηµένη κλάση Shape ορίζει την αφαίρεση ενός σχήµατος ώστε να µπορεί να χρησιµοποιηθεί από προγράµµατα-πελάτες. ύο από τις µεθόδους (setlocation και setlinecolor) είναι υλοποιηµένες ενώ οι υπόλοιπες αφήνουν την υλοποίηση στις παράγωγες κλάσεις. (Η κλάση κληρονοµεί την JComponent της Javaέτσιώστεναµπορείνασχεδιαστείσεέναπαράθυρο). Shape.java public abstract class Shape extends JComponent { public void setlocation(int x, int y) { xtopleft = x; ytopleft = y; public void setlinecolor(color c) { linecolor = c; Square.java public class Square extends Shape { public Square() { rect = new Rectangle(xTopLeft, ytopleft, 100, 100); public void paint(graphics g) { super.paint(g); Graphics2D g2 = (Graphics2D)g; g2.setcolor(linecolor); rect.setlocation(xtopleft, ytopleft); g2.draw(rect); if(fillcolor!=null) { g2.setcolor(fillcolor); g2.fillrect(xtopleft, ytopleft, 100, 100); public void fill(color c) { fillcolor = c; public abstract void display(); public abstract void undisplay(); public abstract void fill(color c); protected int xtopleft = 0; protected int ytopleft = 0; protected Color linecolor; 25 public void display() { this.setvisible(true); public void undisplay() { this.setvisible(false); private Rectangle rect; private Color fillcolor = null; 26 Ένα πρόγραµµα πελάτης προσοµοιώνεται από τον ακόλουθο κώδικα. Στο αντικείµενο S1 της κλάσης Square µπορούννακληθούνόλεςοιµέθοδοιπουδηλώνονταιστηδιασύνδεσητης Shape. Client.java public class Client extends JFrame { public void draw(shape componenttodraw) { getcontentpane().add(componenttodraw); Υποθέτουµε ότι υπάρχει ήδη µία κλάση OtherCircle η οποία διαθέτει υλοποιηµένες όλες τις αντίστοιχες µεθόδους, µε διαφορετικές όµως υπογραφές, αποκλείοντας την απευθείας χρήση από έναν πελάτη ο οποίος γνωρίζει τη διασύνδεση της Shape. Για παράδειγµα, ένα πρόγραµµα πελάτης, µπορεί να σαρώνει µία λίστα από σχήµατα και να τα σχεδιάζει, καλώντας τις ίδιες µεθόδους (αυτές που δηλώνονται στη Shape) για όλα τα σχήµατα. Ο κώδικας της OtherCircle φαίνεται παρακάτω: public static void main(string[] args) { Client frame = new Client(); Square S1 = new Square(); S1.setLineColor(Color.BLUE); S1.setLocation(50, 70); frame.draw(s1); S1.fill(Color.ORANGE); S1.undisplay(); S1.display(); frame.setsize(400, 400); frame.setvisible(true); frame.setdefaultcloseoperation(jframe.exit_on_close); 27 28
8 OtherCircle.java import javax.swing.*; import java.awt.*; public class OtherCircle extends JComponent { OtherCircle.java // ιαφορετικά ονόµατα µεθόδων και ιδιοτήτων public void setitslinecolor(color c) { linecolor = c; public void paint(graphics g) { super.paint(g); Graphics2D g2 = (Graphics2D)g; g2.setcolor(linecolor); g2.drawoval(xupperleft, yupperleft, 100, 100); if(fillcolor!= null) { g2.setcolor(fillcolor); g2.filloval(xupperleft, yupperleft, 100, 100); //Αυτή η µέθοδος λαµβάνει τα ορίσµατα µε αντίστροφη σειρά public void setitslocation(int y, int x) { xupperleft = x; yupperleft = y; 29 public void fillit(color c) { fillcolor = c; public void displayit() { this.setvisible(true); public void undisplayit() { this.setvisible(false); private Color fillcolor = null; private int xupperleft = 0; private int yupperleft = 0; private Color linecolor; 30 Γιατηνπροσαρµογήµιαςτέτοιαςκλάσηςστηνυπάρχουσαδιασύνδεση, δηµιουργείταιµίακλάση "Προσαρµογέας" - η οποία κληρονοµεί τη Shape και -κατά τη δηµιουργία της δηµιουργεί µε τη σειρά της ένα αντικείµενο τηςπροσαρµοζόµενηςκλάσης OtherShape. Ηκλάση Circleπουέχειτορόλοτουπροσαρµογέα, υλοποιεί όλες τις µεθόδους αποστέλλοντας κατάλληλα µηνύµατα στο προσαρµοζόµενο αντικείµενο. 31 Γενική οµή Εφαρµογή θέλετε να χρησιµοποιήσετε µία υπάρχουσα κλάση, αλλά η διασύνδεσή της δεν συµβαδίζει µε τις ανάγκες σας. Ένας προσαρµογέας κλάσης (class adapter) χρησιµοποιεί πολλαπλή κληρονοµικότηταγιαναπροσαρµόσειµίαδιασύνδεσησεµίαάλλη. Πελάτης Στόχος +Αίτηση() Προσαρµογέας +Αίτηση() Προσαρµοζόµενος +ΕιδικήΑίτηση() ΕιδικήΑίτηση(); 32
9 Ένας προσαρµογέας αντικειµένου (object adapter) βασίζεται στη σύνθεσηαντικειµένωνκαιστηδιαβίβασηµηνυµάτων (delegation). Πελάτης Στόχος +Αίτηση() Προσαρµοζόµενος +ΕιδικήΑίτηση() Κατηγορία: Structural Σκοπός: Η σύνθεση αντικειµένων σε δενδροειδείς δοµές για την αναπαράσταση ιεραρχιών τµήµατος-όλου. Το πρότυπο σχεδίασης "Σύνθετο" επιτρέπει στα προγράµµατα πελάτες να διαχειρίζονται µε ενιαίο τρόπο τόσο τα ανεξάρτητα αντικείµενα όσο και συνθέσεις αντικειµένων Συνώνυµα: - Προσαρµογέας προσαρµοζόµενος +Αίτηση() Προσαρµοζόµενος -> ΕιδικήΑίτηση(); Πολύ συχνά, σε µία εφαρµογή, εκτός από µεµονωµένα αντικείµενα (π.χ. Τροχός, Μηχανή, Κάθισµα), υφίστανται και σύνθετα αντικείµενα πουπεριέχουνήπεριλαµβάνουνάλλααντικείµενα (π.χ. Αυτοκίνητο). Συνήθης αντιµετώπιση: χρήση µιας σχέσης περιεκτικότητας µεταξύ της κλάσης που αντιπροσωπεύει το όλον (περικλείουσα κλάση) και των κλάσεων που αντιπροσωπεύουν τα τµήµατα. Μειονέκτηµα: εν επιτρέπει τον οµοιόµορφο χειρισµό των αντικειµένωναπόέναπρόγραµµαπελάτη. Για παράδειγµα, µία άλλη εφαρµογή, θα πρέπει να διατηρεί δείκτες και προς αντικείµενα τύπου Τροχός, Μηχανή, Κάθισµα, αλλά και δείκτες προςαντικείµενατύπουαυτοκίνητο. Λαµβάνοντας υπόψη τους πρωταρχικούς στόχους του αντικειµενοστραφούς προγραµµατισµού, αν προστεθεί στο σύστηµα µία νέα σύνθετη κλάση (π.χ. Λεωφορείο), τότε ο κώδικας του προγράµµατος πελάτη, θα πρέπει να τροποποιηθεί για να είναι δυνατός οχειρισµόςτωννέωναντικειµένωντύπουλεωφορείο. Η αντιµετώπιση αυτού του προβλήµατος, επιτυγχάνεται µε κοµψό τρόποµετοπρότυποσχεδίασης "Σύνθετο"
10 Παράδειγµα: Οι εφαρµογές που σχεδιάζουν πολύπλοκα ψηφιακά κυκλώµατα VLSI αντιµετωπίζουν οποιαδήποτε οντότητα ως αντικείµενο. Κάθε αντικείµενο έχει ορισµένες λειτουργίες, µεταξύ αυτών η σχεδίασητου. Ορισµένα από τα αντικείµενα είναι πρωταρχικά και δεν αναλύονται περαιτέρω (π.χ. λογικές πύλες AND, OR, NOT), ενώ άλλα αντικείµενα είναι σύνθετα και αποτελούνται από πρωταρχικές πύλες (π.χ. ένας πλήρηςαθροιστής Full Adder). Παράδειγµα: Ο χρήστης είναι σε θέση να δηµιουργήσει οποιαδήποτε σύνθετη οντότητα και να την προσθέσει στην εφαρµογή. Η σχεδίαση ενός σύνθετου αντικειµένου ουσιαστικά συνίσταται στη σχεδίαση των επί µέρουςτµηµάτωντου. Για το λόγο αυτό, είναι επιθυµητή η ενιαία αντιµετώπιση όλων των αντικειµένων. Το πρότυπο σχεδίασης "Σύνθετο", επιτρέπει τον αναδροµικό ορισµό περιεκτικότητας, ώστε οι πελάτες να µην αντιλαµβάνονται τη διαφορά µεταξύπρωταρχικώνκαισύνθετωναντικειµένων Το σηµείο κλειδί στο πρότυπο σχεδίασης "Σύνθετο" είναι η ύπαρξη µιας αφηρηµένης κλάσης που αναπαριστά τόσο πρωταρχικές κλάσεις όσοκαιπερικλείουσεςκλάσεις. Client Component Για τη συγκεκριµένη εφαρµογή, η αφηρηµένη κλάση είναι η κλάση Εξάρτηµα. Θα πρέπει να σηµειωθεί, ότι η κλάση Εξάρτηµα που εισάγεται από το πρότυπο, δεν έχει αντιστοιχία µε οποιαδήποτε φυσική έννοια του πραγµατικού κόσµου. AND +draw() OR +draw() +draw() +add(component)() +remove(component)() NOT +draw() Circuit +draw() +add(graphic)() +remove(graphic)() components for all g in Component g.draw( ) 39 40
11 Θέτοντας τις λειτουργίες χειρισµού των αντικειµένων που εµπεριέχονται σε µία περικλείουσα κλάση (add, remove) στην κλάση Component, όλα τα αντικείµενα αντιµετωπίζονται µε τον ίδιο ακριβώς τρόπο, εξασφαλίζοντας διαφάνεια. Ωστόσο δηµιουργείται το εξής πρόβληµα: Για τις κλάσεις φύλλα (όπως οι AND, OR, NOT) είναι δυνατόν να κληθούν οι λειτουργίες add, remove οι οποίες δεν έχουν νόηµα. Εναλλακτικά, οι λειτουργίες αυτές είναι δυνατόν να δηλωθούν στην κλάση Circuit, ώστε οποιαδήποτε απόπειρα να προστεθούν ή να διαγραφούν αντικείµενα σε αντικείµενα τύπου AND, OR ή NOT να ανιχνευθείκατάτηµεταγλώττιση, εξασφαλίζονταςασφάλεια. Ωστόσο, στην περίπτωση αυτή, οι πρωταρχικές κλάσεις και οι σύνθετες κλάσεις έχουν διαφορετική διασύνδεση 41 class Component { public: Component(string text); virtual void draw() = 0; virtual void add(component*) {; virtual void remove(component*) {; protected: string identifier; ; Component::Component(string text) { identifier = text; //αµιγώς υπερβατική -> //δεν υλοποιούνται αντικείµενα 42 Μία πρωταρχική κλάση, όπως µία κλάση πύλης AND, δηλώνεται ως παράγωγη της κλάσης Component: class AND : public Component { public: AND(string text); virtual void draw(); ; void AND::draw() { cout << "AND " << identifier << " is being drawn" << endl; Η κλάση Circuit είναι µία περικλείουσα κλάση η οποία είναι δυνατόν να περιέχει αντικείµενα: - πρωταρχικών κλάσεων (π.χ. ένα κύκλωµα που αποτελείται από πύλες), - άλλων σύνθετων κλάσεων (π.χ. ένα κύκλωµα που αποτελείται από άλλα κυκλώµατα) - αντικείµενα και των δύο κατηγοριών (ένα κύκλωµα που αποτελείται από πύλεςκαιάλλακυκλώµατα). Για το λόγο αυτό, µία από τις ιδιότητες υλοποιεί έναν περιέχοντα (container), όπως ένα διάνυσµα (vector), ουρά (queue), διπλά συνδεδεµένη λίστα (list), στοίβα (stack) κ.ο.κ, που περιλαµβάνονται στην πρότυπη βιβλιοθήκη της C++ (STL): 43 44
12 class Circuit : public Component { public: Circuit(string text); virtual void draw(); virtual void add(component*); virtual void remove(component*); private: vector<component*> components; ; Η λειτουργία draw χρησιµοποιεί έναν επαναλήπτη (Iterator) για να διατρέξει όλα τα στοιχεία του διανύσµατος components, και να καλέσει µέσω αυτού τη λειτουργία draw του κάθε αντικειµένου που περιλαµβάνεται: void Circuit::draw() { cout <<"Circuit "<<identifier<< " is being drawn" << endl; std::vector<component*>::iterator i; for(i=components.begin(); i!=components.end(); i++) (*i)->draw(); Οι λειτουργίες add και remove εισάγουν και διαγράφουν αντικείµενα τύπου Component (άραάρα οτιδήποτε) από το διάνυσµα που είναι αποθηκευµένο στο µέλος δεδοµένων components: void Circuit::add(Component* comp) { components.push_back(comp); void Circuit::remove(Component* comp) { vector<component*>::iterator i; Με τη χρήση του ανωτέρου προτύπου είναι πλέον δυνατή η δηµιουργία οποιουδήποτε πρωταρχικού ή σύνθετου αντικειµένου και ο χειρισµός τους µε ενιαίοτρόπο: int main() { AND G1("Gate1"); AND G2("Gate2"); Circuit C1("Circuit1"); C1.add(&G1); C1.add(&G2); AND G3("Gate3"); for(i=components.begin(); i!=components.end(); i++) if((*i) == comp) break; components.erase(i); 47 Circuit C2("Circuit2"); C2.add(&G3); C2.add(&C1); G1.draw(); C2.draw(); return 0; //προσθήκη απλού στοιχείου //προσθήκη σύνθετου στοιχείου //κοινή διασύνδεση 48
13 Γενική οµή Εφαρµογή Το πρότυπο σχεδίασης "Σύνθετο" χρησιµοποιείται όταν: θέλετε τα προγράµµατα πελάτες να µπορούν να χειρίζονται µεµονωµένα αντικείµενα και σύνθετα αντικείµενα (συλλογές από άλλα αντικείµενα) µε τον ίδιο τρόπο Πελάτης Συστατικό +λειτουργία() +προσθήκη(συστατικό)() +διαγραφή(συστατικό)() Έστω ένα σύστηµα διαχείρισης βαθµολογιών, όπως παρουσιάζεται από τον κώδικα και το διάγραµµα κλάσεων. Σε αυτό το σύστηµα προσθέστε τις παρακάτω λειτουργίες: Φύλλο +λειτουργία() Σύνθετο +λειτουργία() +προσθήκη(συστατικό)() +διαγραφή(συστατικό)() συστατικά for all g in συστατικά g.λειτουργία( ) void Professor::addGrade(int student_id, Course c, Grade g) { // Let courseid be the id of the course under study c = teachedcourses.findcourse(courseid) // Let grade_ be the grade of the corresponding student g = Grade (grade_); institution.setgrade(student_id, c, g); void Institution::setGrade(int student_id, Course c, Grade g) { Student s = users.finduser(student_id); bool success = s.setgrade(c,g); if (success==true) users.alteruser(student_id,s); else; // message bool Student::setGrade(Course c, Grade g) { bool s = courses.findcourse(c.getid()); if (s == false) return false; else { courses.setgrade(c,g); return true; void courselist::setgrade(course c, Grade g) { Course c_ = new CourseWithEvaluation(c); c_.setgrade(g); altercourselist(c.getid(), c_); 51 52
14 Έστω ένα σύστηµα ταξιδιωτικού γραφείου, όπως παρουσιάζεται από το παρακάτω διάγραµµα κλάσεων. Σε αυτό το σύστηµα προσθέστε τις παρακάτω λειτουργίες: Ο Ταξιδιωτικός Πράκτορας θα µπορεί να παίρνει από το σύστηµα εκτυπώσεις σχετικά µε τους εγγεγραµµένους πελάτες σε κάθε πακέτο και λίστα µε τις προσφορές που έχουν δηµιουργηθεί µεµονωµένα από τους πελάτες. Λαµβάνοντας υπ όψη ότι οι ιδιότητες departure και destination περιλαµβάνουν πληροφορίες της ίδιας κατηγορίας, επιθυµητή είναι η δηµιουργία µιας νέας κλάσης Location (τοποθεσία). Ο ορισµός του µέσου µεταφοράς που χρησιµοποιήθηκε θα πρέπει να γίνετεµέσωτωνκλάσεων Transport, Airplane, Train, Ship, Bus. Θα πρέπει στο νέο σύστηµα να υπάρχουν πληροφορίες σχετικά µε τα ξενοδοχεία στον τόπο παραµονής και αυτόµατος υπολογισµός αξίας στη κλάση VacationPackage
15 Θεωρείστε µια κλάση η οποία περιλαµβάνει µια µέθοδο copy() που δηµιουργεί αντίγραφο ενός vector εξαιρώντας τα αντικείµενα για τα οποία δεν έχουµε δικαίωµα αντιγραφής. Για να επιτύχει η µέθοδος copy() θεωρεί ότι όλα τα αντικείµενα του vector έχουν υλοποίησει τη διασύνδεση iscopyable() η οποία επιστρέφει µια λογική τιµή. public interface Copyable { public boolean iscopyable(); Η µέθοδος copy() της κλασης VectorUtilities : public static Vector copy(vector vin) { Vector vout = new Vector(); Enumeration e = vin.elements(); while (e.hasmoreelements()) { Copyable c = (Copyable) e.nextelement(); if (c.iscopyable()) vout.addelemet(c); return vout; public class DocumentAdapter implements Copyable { private Document d; public DocumentAdapter(Document d) { document = d; public boolean iscopyable() { return d.isvalid(); 59
Πρότυπα Σχεδίασης. Design Patterns
Πρότυπα Σχεδίασης Design Patterns 1 Πρότυπα Σχεδίασης Όλα ξεκίνησαν από.. την Αρχιτεκτονική!! Christopher Alexander, The Timeless Way of Building, Oxford University Press, New York, 1979: "Είναι η ποιότητα
Διαβάστε περισσότεραΠΡΟΤΥΠΑ ΣΧΕΔΙΑΣΗΣ. 6.1 Εισαγωγή
ΠΡΟΤΥΠΑ ΣΧΕΔΙΑΣΗΣ 6.1 Εισαγωγή Τα προβλήματα που αντιμετωπίζει ένας προγραμματιστής κατά τη διάρκεια σχεδίασης και υλοποίησης ενός συστήματος λογισμικού, πολύ σπάνια εμφανίζονται για πρώτη φορά μόνο στο
Διαβάστε περισσότεραΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΑΝΑΛΥΣΗ Πρότυπα Σχεδίασης. Ιωάννης Σταμέλος Βάιος Κολοφωτιάς Πληροφορική
ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΑΝΑΛΥΣΗ Πρότυπα Σχεδίασης Ιωάννης Σταμέλος Βάιος Κολοφωτιάς Πληροφορική Θεσσαλονίκη, Σεπτέμβριος 2013 Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons.
Διαβάστε περισσότεραWrapper Classes, Abstract Classes and Interfaces
Wrapper Classes, Abstract Classes and Interfaces Εβδοµάδα 3: Κλάσεις συσκευαστές, αφηρηµένες κλάσεις και διαπροσωπείες Αντικείµενα και µη-αντικείµενα Η Java παρέχει τύπους αντικειµένων και απλούς τύπους
Διαβάστε περισσότεραΑντικειµενοστρεφής Προγραµµατισµός
16 η διάλεξη Π. Σταθοπούλου pstath@ece.upatras.gr ή pstath@upatras.gr Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Φροντιστήριο : ευτέρα 11πµ-12πµ ΗΛ4 Προηγούµενη ιάλεξη
Διαβάστε περισσότεραΕισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #13
Wrapper Classes, Abstract Classes and Interfaces Διάλεξη #13: Μεταβλητές/μέθοδοι κλάσης, αφηρημένες κλάσεις και διαπροσωπείες Μεταβλητές /πεδία κλάσης [class variables] Τα αντικείμενα ανήκουν σε κλάσεις
Διαβάστε περισσότεραpublic void printstatement() { System.out.println("Employee: " + name + " with salary: " + salary);
Κληρονομικότητα Η κληρονομικότητα (inheritance) αποτελεί έναν από τους χαρακτηριστικότερους μηχανισμούς των αντικειμενοστρεφών γλωσσών προγραμματισμού. Επιτρέπει την δημιουργία μιας νέας κλάσης απορροφώντας
Διαβάστε περισσότερα2.1 Αντικειµενοστρεφής προγραµµατισµός
2.1 Αντικειµενοστρεφής προγραµµατισµός Στον αντικειµενοστρεφή προγραµµατισµό (object oriented programming, OOP) ένα πρόγραµµα υπολογιστή είναι ένα σύνολο αλληλεπιδρώντων αντικειµένων. Μπορεί να ειπωθεί
Διαβάστε περισσότεραΒασικά της γλώσσας JAVA
17 η διάλεξη Π. Σταθοπούλου pstath@ece.upatras.gr ή pstath@upatras.gr Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Φροντιστήριο : ευτέρα 11πµ-12πµ ΗΛ4 Προηγούµενη ιάλεξη
Διαβάστε περισσότεραΚλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1
Κλάσεις στη Java Παύλος Εφραιμίδης Java Κλάσεις στη Java 1 Κλάσεις στην Java Θα δούμε τη διαδικασία δημιουργίας μιας κλάσης Θα υλοποιήσουμε μια κλάση για τη Δομή Δεδομένων Stack Java Κλάσεις στη Java 2
Διαβάστε περισσότεραΑΠΛΗ ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ
ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ Μηχανισµός υλοποίησης των σχέσεων γενίκευσης/εξειδίκευσης µεταξύ κλάσεων Η σχέση εξειδίκευσης «υποκλάση-της» (subclass-of)είναι γνωστή σαν σχέση «είναι ένα» (isa) ή «είναι ένα είδος» (ako:
Διαβάστε περισσότεραΚλάσεις. Τροποποιητές, ιασυνδέσεις, Πακέτα. Τροποποιητές ελέγχου προσπέλασης µεταβλητών και µεθόδων
Κλάσεις Τροποποιητές, ιασυνδέσεις, Πακέτα Τροποποιητές ελέγχου προσπέλασης µεταβλητών και µεθόδων Υπάρχουν 4τροποποιητές: default, public, private, protected. Default: εν προηγείται τροποποιητής του ονόµατος
Διαβάστε περισσότεραΚλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack
Κλάσεις στην Java Κλάσεις στη Java Παύλος Εφραιμίδης Θα δούμε τη διαδικασία δημιουργίας μιας κλάσης Θα υλοποιήσουμε μια κλάση για τη Δομή Δεδομένων Stack Java Κλάσεις στη Java 1 Java Κλάσεις στη Java 2
Διαβάστε περισσότεραΕισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #15
Οι βασικές έννοιες που θα καλύψουμε Ομαδοποίηση αντικειμένων Εισαγωγή στις συλλογές Γενικές κλάσεις Iterators Συλλογές (ειδικά την ArrayList) Συνεχίζουμε την αναφορά στο θέμα της αφαίρεσης (abstraction)
Διαβάστε περισσότεραΠΟΛΥΜΟΡΦΙΣΜΟΣ. 4.1 Κληρονομικότητα και Αρχή της Υποκατάστασης
ΠΟΛΥΜΟΡΦΙΣΜΟΣ Λόγω της θεμελιώδους σημασίας της έννοιας του πολυμορφισμού (polymorphism) στην αντικειμενοστρεφή σχεδίαση, κρίνεται σκόπιμο στο σημείο αυτό του βιβλίου να αναλυθεί εκτενέστερα. Ο πολυμορφισμός
Διαβάστε περισσότερα1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι
1 ΕΙΣΑΓΩΓΗ Η γλώσσα προγραµµατισµού Java είναι ισχυρά τυποποιηµένη (strongly typed), που σηµαίνει ότι κάθε µεταβλητή και κάθε έκφραση έχει κάποιο τύπο, ο οποίος πρέπει να είναι γνωστός κατά το χρόνο της
Διαβάστε περισσότεραΚλάσεις και Αντικείµενα
Κλάσεις και Αντικείµενα Γρηγόρης Τσουµάκας Τµήµα Πληροφορικής, Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης Κλάσεις και Αντικείµενα 2 Τα αντικείµενα σε µια αντικειµενοστρεφή γλώσσα προγραµµατισµού, µοντελοποιούν
Διαβάστε περισσότεραΔοµές Δεδοµένων. 6η Διάλεξη Αναδροµικές Εξισώσεις και Αφηρηµένοι Τύποι Δεδοµένων. Ε. Μαρκάκης
Δοµές Δεδοµένων 6η Διάλεξη Αναδροµικές Εξισώσεις και Αφηρηµένοι Τύποι Δεδοµένων Ε. Μαρκάκης Περίληψη Χρήση αναδροµικών εξισώσεων στην ανάλυση αλγορίθµων Αφηρηµένοι τύποι δεδοµένων Συλλογές στοιχείων Στοίβα
Διαβάστε περισσότεραΔιάγραμμα Κλάσεων. Class Diagram
Διάγραμμα Κλάσεων Class Diagram Γενικά Ορίζει τις κλάσεις αντικειμένων σε ένα σύστημα, τις μεθόδους και τις συναρτήσεις τους, και τις συσχετίσεις μεταξύ των κλάσεων. Περιγράφουν την δομή και συμπεριφορά
Διαβάστε περισσότεραΣυλλογές, Στοίβες και Ουρές
Συλλογές, Στοίβες και Ουρές Σε πολλές εφαρμογές μας αρκεί η αναπαράσταση ενός δυναμικού συνόλου με μια δομή δεδομένων η οποία δεν υποστηρίζει την αναζήτηση οποιουδήποτε στοιχείου. Συλλογή (bag) : Επιστρέφει
Διαβάστε περισσότεραΜοτίβα Σχεδίασης (Design Patterns)
Ενότητα 6 Μοτίβα Σχεδίασης (Design Patterns) Ορισµοί βασικές έννοιες. Σηµαντικά µοτίβα σχεδίασης: Παρατηρητής (Observer). Πρόσοψη (Façade). Προσαρµογέας (Adapter). Πληρεξούσιος (Proxy). Μοναχοπαίδι (Singleton).
Διαβάστε περισσότεραΑντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η
Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η μέθοδος main(), εμφάνιση μηνυμάτων, Java προγράμματα που εκτελούν αριθμητικές πράξεις Γαβαλάς Δαμιανός
Διαβάστε περισσότεραI (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.
I (JAVA) Ονοματεπώνυμο: Α. Μ.: + ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην. + 1 ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ (σελ. 2/3) 2 ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ (σελ. 3/3)
Διαβάστε περισσότεραWeek. 6: Java Collections
Week 6: Java Collections Συλλογές δεδοµένων [collections] Εβδοµάδα 6: Συλλογές δεδοµένων στην Java Οι συλλογές [collections] (αναφέρονται και ως «υποδοχείς δεδοµένων» [containers]) είναι κλάσεις που χρησιµοποιούνται
Διαβάστε περισσότεραΔιάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών
ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Υλοποίηση ΑΤΔ με Συνδεδεμένες Λίστες -
Διαβάστε περισσότεραΑντικείµενα. ηµιουργία και χρησιµοποίηση αντικειµένων. ηµιουργία αντικειµένων
Αντικείµενα ηµιουργία και χρησιµοποίηση αντικειµένων ηµιουργία αντικειµένων Για να δηµιουργήσω ένα νέο αντικείµενο χρησιµοποιώ τον τελεστή new µε τοόνοµατηςκλάσηςαπότηνοποίαθέλωναδηµιουργήσωένααντικείµενο,
Διαβάστε περισσότεραΑντικειμενοστρεφής Προγραμματισμός
ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΙΚΑ ΜΑΘΗΜΑΤΑ Αντικειμενοστρεφής Προγραμματισμός Ενότητα 15: Σχεδίαση Εφαρμογών Γρηγόρης Τσουμάκας, Επικ. Καθηγητής Άδειες Χρήσης Το παρόν εκπαιδευτικό
Διαβάστε περισσότεραΑντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η
Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η μέθοδος main(), εμφάνιση μηνυμάτων, Java προγράμματα που εκτελούν αριθμητικές πράξεις 2 Ανατομία ενός προγράμματος
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων Παράδειγμα: Τμήμα πανεπιστημίου
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Σύνθεση αντικειμένων Παράδειγμα: Τμήμα πανεπιστημίου Μεγάλο παράδειγμα Θέλουμε να δημιουργήσουμε ένα λογισμικό για ένα τμήμα πανεπιστημίου. Το τμήμα έχει 4
Διαβάστε περισσότεραΠεριεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5
Περιεχόµενα 1 Εισαγωγή στις οµές εδοµένων 3 2 Στοίβα (Stack) 5 i ΠΕΡΙΕΧΟΜΕΝΑ ΠΕΡΙΕΧΟΜΕΝΑ ii Πληροφορίες Εργαστηρίου Σκοπός του εργαστηρίου Το εργαστήριο οµές εδοµένων αποσκοπεί στην εφαρµογή των τεχνολογιών
Διαβάστε περισσότεραΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 6/12/07
Πρώτοι αριθμοί ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 6/12/07 Ένας ακέραιος μεγαλύτερος του 1 είναι πρώτος αν έχει ακριβώς δύο διαιρέτες (τη μονάδα και τον εαυτό του). Πρόβλημα: έλεγχος
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Μέθοδοι Παράδειγμα 1 Θέλουμε ένα πρόγραμμα που να προσομοιώνει την κίνηση ενός αυτοκινήτου, το οποίο κινείται και τυπώνει τη θέση του.
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα Μαθήματα από το πρώτο εργαστήριο Δημιουργία αντικειμένου Scanner Scanner input = new Scanner(System.in); Το
Διαβάστε περισσότεραΑντικειμενοστρεφής Προγραμματισμός Διάλεξη 4 : CLASSES
Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 4 : CLASSES Κων. Κόκκινος Αντικειμενοστραφής Προγραμματισμός Η ιδέα του αντικειμενοστραφούς προγραμματισμού Αυτόνομες οντότητες Στιγμιότυπα οντοτήτων Παράδειγμα
Διαβάστε περισσότεραΔιαγράμματα Κλάσεων στη Σχεδίαση
Διαγράμματα Κλάσεων στη Σχεδίαση περιεχόμενα παρουσίασης Αφηρημένες κλάσεις Ιδιότητες Λειτουργίες Απλοί τύποι Συσχετίσεις Εξάρτηση Διεπαφές αφηρημένες κλάσεις Οι αφηρημένες κλάσεις δεν μπορούν να δημιουργήσουν
Διαβάστε περισσότεραΑντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ
Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ Κων. Κόκκινος Μεταβλητές-1 Οι μεταβλητές αποτελούν θέσεις μνήμης στις οποίες αποθηκεύονται τιμές αντίστοιχες
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πίνακες Κλάσεις και Αντικείμενα Μαθήματα από το πρώτο εργαστήριο Δημιουργία αντικειμένου Scanner Scanner input = new Scanner(System.in); Το αντικείμενο input
Διαβάστε περισσότεραΣύνθεση και Κληρονομικότητα
Σύνθεση και Κληρονομικότητα Σύνθεση (composition) Κληρονομικότητα (inheritance) Υπερφόρτωση κληρονομημένων μελών Εικονικές συναρτήσεις και Πολυμορφισμός Αφηρημένες (abstract) βασικές κλάσεις 1 Σύνθεση
Διαβάστε περισσότεραΔομές Δεδομένων & Αλγόριθμοι
Ουρές Ουρές Περίληψη Η ΟυράΑΔΤ Υλοποίηση με κυκλικό πίνακα Αυξανόμενη Ουρά βασισμένη σε πίνακα Interface ουράς στην C++ Η Ουρά ADT Η ΑΔΤ Ουρά αποθηκεύει αυθαίρετα αντικείμενα Οι εισαγωγές και διαγραφές
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές)
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές) Βρείτε τα λάθη Στο πρόγραμμα στην επόμενη διαφάνεια υπάρχουν διάφορα λάθη Ποια είναι? public abstract
Διαβάστε περισσότεραΑπό τη UML στον Κώδικα. Μέρος Α
Από τη UML στον Κώδικα Μέρος Α περιεχόμενα παρουσίασης Κλάσεις Ισότητα αντικειμένων Μονόδρομες συσχετίσεις με πολλαπλότητα «ένα» Μονόδρομες συσχετίσεις με πολλαπλότητα «πολλά» Συλλογές από το σχέδιο στον
Διαβάστε περισσότεραΟρισµός Νήµα (thread) είναι µια ακολουθιακή ροή ελέγχου (δηλ. κάτι που έχει αρχή, ακολουθία εντολών και τέλος) σ ένα
ΝΗΜΑΤΑ ΣΤΗ JAVA (1) Ορισµός Νήµα (thread) είναι µια ακολουθιακή ροή ελέγχου (δηλ. κάτι που έχει αρχή, ακολουθία εντολών και τέλος) σ ένα πρόγραµµα. Αιτία Η δυνατότητα αποµόνωσης (ή αυτονόµησης) κάποιων
Διαβάστε περισσότεραI (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.
I (JAVA) Ονοματεπώνυμο: Α. Μ.: + ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην. + 1 ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ (σελ. 2/3) 2 ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ (σελ. 3/3)
Διαβάστε περισσότεραΠανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων
Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 3. Στοίβες & Ουρές 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 19/10/2017 Ανακεφαλαίωση:
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Μέθοδοι Παράδειγμα Θέλουμε ένα πρόγραμμα που να προσομοιώνει την κίνηση ενός αυτοκινήτου, το οποίο κινείται και τυπώνει τη θέση του.
Διαβάστε περισσότεραΠανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων
Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 3. Στοίβες & Ουρές 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 4/11/2016 Ανακεφαλαίωση:
Διαβάστε περισσότεραΒασικές Έννοιες Δοµών Δεδοµένων
Δοµές Δεδοµένων Δοµές Δεδοµένων Στην ενότητα αυτή θα γνωρίσουµε ορισµένες Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε για την αποδοτική επίλυση του προβλήµατος του ευσταθούς ταιριάσµατος Βασικές Έννοιες
Διαβάστε περισσότεραH κλάση ArrayList. Γιώργος Θάνος. Γραφείο Γ. Γκλαβάνη 37. Αντικει ενοστραφής Προγρα. ος όροφος
H κλάση ArrayList Γιώργος Θάνος Γραφείο Γ ος όροφος Γκλαβάνη 37 Εισαγωγικά Η κλάση ArrayList δίνει την δυνατότητα να αποθηκεύσουμε δεδομένα οποιουδήποτε τύπου σε μία δομή δεδομένων η οποία επιτρέπει τα
Διαβάστε περισσότεραΟντοκεντρικός Προγραμματισμός
Οντοκεντρικός Προγραμματισμός Ενότητα 2: Η ΓΛΩΣΣΑ JAVA Κληρονομικότητα ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Constructors, equals, tostring Constructors (Δημιουργοί) O Constructor είναι μια «μέθοδος» η οποία καλείται όταν δημιουργούμε το αντικείμενο
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Εισαγωγή στη Java III Ισότητα Strings class StringTest public static void main(string args[]) String x1 = "java"; String y1 = "java"; System.out.println("1.
Διαβάστε περισσότεραΑντικειμενοστρέφεια. Henri Matisse, Harmony in Red, Κωστής Σαγώνας Νίκος Παπασπύρου
Αντικειμενοστρέφεια Henri Matisse, Harmony in Red, 1908 Κωστής Σαγώνας Νίκος Παπασπύρου Ορισμοί αντικειμενοστρέφειας Ποιοι είναι οι ορισμοί των παρακάτω; Αντικειμενοστρεφής
Διαβάστε περισσότεραOι βασικές πράξεις (λειτουργίες) που ορίζονται για τον τύπο στοίβα αναφέρονται παρακάτω:
3 ΣTOIBEΣ KAI OYPEΣ 3.1 ΣΤΟΙΒΕΣ Στοίβα (stack) είναι µία λίστα στην οποία νέα στοιχεία µπορούν να προστεθούν και να αφαιρεθούν µόνο από τη µία άκρη της (κορυφή της στοίβας). Συχνά µία στοίβα αναφέρεται
Διαβάστε περισσότεραΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ. Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής
Δοµές Δεδοµένων & Ανάλυση Αλγορίθµων 3ο Εξάµηνο Υλοποίηση Στοίβας και Ουράς µε Συνδεδεµένες Λίστες http://aetos.it.teithe.gr/~demos/teaching_gr.html Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής ATEI ΘΕΣΣΑΛΟΝΙΚΗΣ
Διαβάστε περισσότεραΔομές Δεδομένων & Ανάλυση Αλγορίθμων. 3ο Εξάμηνο. Ουρά (Queue) Υλοποίηση της με τη βοήθεια πίνακα. http://aetos.it.teithe.gr/~demos/teaching_gr.
Δομές Δεδομένων & Ανάλυση Αλγορίθμων 3ο Εξάμηνο Ουρά (Queue) Υλοποίηση της με τη βοήθεια πίνακα http://aetos.it.teithe.gr/~demos/teaching_gr.html Δημοσθένης Σταμάτης Τμήμα Μηχανικών Πληροφορικής ATEI ΘΕΣΣΑΛΟΝΙΚΗΣ
Διαβάστε περισσότεραΚληρονομικότητα. Παύλος Εφραιμίδης pefraimi <at> ee.duth.gr. Java Κληρονομικότητα 1
Κληρονομικότητα Παύλος Εφραιμίδης pefraimi ee.duth.gr Java Κληρονομικότητα 1 Ιεραρχίες Κλάσεων Στην Java (και γενικότερα στον αντικειμενοστραφή προγραμματισμό) μπορεί από μία να κλάση να δημιουργηθεί
Διαβάστε περισσότεραΔιάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες
ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Κυκλικές Απλά Συνδεδεμένες Λίστες - Κυκλικές Διπλά Συνδεδεμένες
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Στατικές μέθοδοι και μεταβλητές Εσωτερικές κλάσεις
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Στατικές μέθοδοι και μεταβλητές Εσωτερικές κλάσεις Στατικές μέθοδοι Τι σημαίνει το keyword static στον ορισμό της main μεθόδου? Τι είναι μια στατική μέθοδος?
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Δημιουργία Κλάσεων και Αντικειμένων Κλάση Μια κλάση είναι μία αφηρημένη περιγραφή αντικειμένων με κοινά χαρακτηριστικά και κοινή συμπεριφορά. Ένα καλούπι/πρότυπο
Διαβάστε περισσότεραPOINTERS, AGGREGATION, COMPOSITION
POINTERS, AGGREGATION, COMPOSITION POINTERS TO OBJECTS Η κλάση mystring class mystring private: char *s; int size; public: mystring(const char *); ~mystring(); char *GetString(); int GetSize(); ; mystring::mystring(const
Διαβάστε περισσότεραΚλάσεις. Κατηγορίες Αντικειµένων. Κλάσεις. Φυσικά Αντικείµενα. Χώρος = Οµάδα Φυσικών Αντικειµένων. Πρόγραµµα = Οµάδα
Αντικειµενοστραφής Προγραµµατισµός Αντικείµενα Ιεραρχία κλάσεων. Ιδιότητες Συµπεριφορά Ιδιότητες (Μεταβλητές) Συµπεριφορά (Μέθοδοι) Κληρονοµικότητα Μέθοδοι επικάλυψης Η χρήση του this και του super Αντικειµενοστραφής
Διαβάστε περισσότεραΠροσομοίωση παρακολούθησης πληθυσμών αλεπούδων και κουνελιών
Άλλες τεχνικές αφαίρεσης Προσομοίωση παρακολούθησης πληθυσμών αλεπούδων και ρ μ η ρ η ης η μ κουνελιών Άλλες τεχνικές αφαίρεσης public class Fox { private static final int BREEDING_AGE = 10; private static
Διαβάστε περισσότεραΔιάλεξη 07: Λίστες Ι Υλοποίηση & Εφαρμογές
Διάλεξη 07: Λίστες Ι Υλοποίηση & Εφαρμογές Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ευθύγραμμες Απλά Συνδεδεμένες Λίστες (εισαγωγή, εύρεση, διαγραφή) Ευθύγραμμες Διπλά Συνδεδεμένες Λίστες
Διαβάστε περισσότεραΔιάλεξη 15: Αναδρομή (Recursion) Διδάσκων: Παναγιώτης Ανδρέου
Διάλεξη 15: Αναδρομή (Recursion) Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Η έννοια της αναδρομής Μη αναδρομικός / Αναδρομικός Ορισμός Συναρτήσεων Παραδείγματα Ανάδρομης Αφαίρεση της Αναδρομής
Διαβάστε περισσότεραΠαύλος Εφραιµίδης. Java. Κληρονοµικότητα
κληρονοµικότητα Παύλος Εφραιµίδης 1 ιεραρχίες κλάσεων Στην (και γενικότερα στον αντικειµενοστρεφή προγραµµατισµό) µπορεί από µία κλάση να δηµιουργηθεί µια νέα κλάση απόγονος που κληρονοµεί όλα τα χαρακτηριστικά
Διαβάστε περισσότεραΤύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )
Τύποι Δεδομένων και Απλές Δομές Δεδομένων Παύλος Εφραιμίδης V1.0 (2014-01-13) Απλές Δομές Δεδομένων Στην ενότητα αυτή θα γνωρίσουμε ορισμένες απλές Δομές Δεδομένων και θα τις χρησιμοποιήσουμε για την αποδοτική
Διαβάστε περισσότεραWeek 7: Java Collection Classes
Week 7: Java Collection Classes Υλοποιήσεις Εβδοµάδα 7: Κλάσεις συλλογών δεδοµένων στην Java Τύποι συλλογών δεδοµένων Τεχνικές υλοποίησης linked Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης,
Διαβάστε περισσότεραAbstract classes, Interfaces ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA
Abstract classes, Interfaces ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA Τι θα συζητήσουμε σήμερα Αφαιρέσεις στη Java Abstract μέθοδοι και abstract κλάσεις Interfaces (=διασυνδέσεις, διεπαφές) Instanceof Παραδείγματα κώδικα Αφηρημένες
Διαβάστε περισσότεραΜέθοδοι. Υποσυστήµατα και πακέτα. Μοντέλα αντικειµενοστραφούς σχεδίασης. Αντικειµενοστραφής Σχεδίαση. Στα πρώτα στάδια της ανάλυσης
Αντικειµενοστραφής Σχεδίαση Αντώνης Καραγεώργος Τµήµα Μηχανικών Η/Υ και ικτύων Πανεπιστήµιο Θεσσαλίας karageorgos@inf.uth.gr Μέθοδοι Στα πρώτα στάδια της γράφουµε µόνο τα ονόµατα των µεθόδων Γράφουµε τις
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Σύνθεση αντικειμένων Αντικείμενα μέσα σε αντικείμενα Ορίζουμε κλάσεις για να ορίσουμε τύπους δεδομένων τους οποίους χρειαζόμαστε Π.χ., ο τύπος δεδομένων Date
Διαβάστε περισσότεραΑντικειμενοστρεφής Προγραμματισμός
Αντικειμενοστρεφής Προγραμματισμός Διδάσκουσα: Αναπλ. Καθηγήτρια Ανδριάνα Πρέντζα aprentza@unipi.gr Εργαστηριακός Συνεργάτης: Δρ. Βασιλική Κούφη vassok@unipi.gr Εργαστήριο 2 Βασικοί Τύποι Μεταβλητών Java
Διαβάστε περισσότεραΤο πρόγραμμα HelloWorld.java. HelloWorld. Κλάσεις και Αντικείμενα (2) Ορισμός μιας Κλάσης (1) Παύλος Εφραιμίδης pefraimi <at> ee.duth.
Το πρόγραμμα HelloWorld.java Σχόλια στη Java HelloWorld Παύλος Εφραιμίδης pefraimi ee.duth.gr Java Το πρόγραμμα HelloWorld 1 Java Το πρόγραμμα HelloWorld 2 Σχόλια στη Java ΗγλώσσαJava υποστηρίζει
Διαβάστε περισσότεραΚεφάλαιο 10 ο Υποπρογράµµατα
Κεφάλαιο 10 ο Υποπρογράµµατα Ανάπτυξη Εφαρµογών σε Προγραµµατιστικό Περιβάλλον Η αντιµετώπιση των σύνθετων προβληµάτων και η ανάπτυξη των αντίστοιχων προγραµµάτων µπορεί να γίνει µε την ιεραρχική σχεδίαση,
Διαβάστε περισσότερα2.1. Εντολές. 2.2. Σχόλια. 2.3. Τύποι Δεδομένων
2 Βασικές Εντολές 2.1. Εντολές Οι στην Java ακολουθούν το πρότυπο της γλώσσας C. Έτσι, κάθε εντολή που γράφουμε στη Java θα πρέπει να τελειώνει με το ερωτηματικό (;). Όπως και η C έτσι και η Java επιτρέπει
Διαβάστε περισσότεραΕισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#
Εισαγωγή σε αντικειμενοστραφή concepts Και λίγη C# Κλάσεις Κλάση: τύπος δεδομένων που αποτελεί συλλογή πεδίων, ορισμών συναρτήσεων/μεθόδων και ορισμών άλλων τύπων δεδομένων. Αντίστοιχο σκεπτικό με struct
Διαβάστε περισσότεραΣύνθεση και Κληρονομικότητα
Σύνθεση και Κληρονομικότητα Σύνθεση (composition) Κληρονομικότητα (inheritance) Υπερφόρτωση κληρονομημένων μελών Εικονικές συναρτήσεις και Πολυμορφισμός Αφηρημένες (abstract) βασικές κλάσεις 1 Σύνθεση
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Παράδειγμα Κληρονομικότητας Γενικευμένες κλάσεις Παράδειγμα κληρονομικότητας Έχουμε ένα σύστημα διαχείρισης εισιτηρίων μιας συναυλίας. Το κάθε εισιτήριο έχει
Διαβάστε περισσότεραΔοµές Δεδοµένων. 7η Διάλεξη Αφηρηµένοι Τύποι Δεδοµένων. Ε. Μαρκάκης
Δοµές Δεδοµένων 7η Διάλεξη Αφηρηµένοι Τύποι Δεδοµένων Ε. Μαρκάκης Περίληψη Στοίβα ώθησης προς τα κάτω Παραδείγµατα πελατών για στοίβες Υλοποιήσεις στοίβας µε πίνακες και λίστες Γενικές υλοποιήσεις Ουρές
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Σύνθεση αντικειμένων ΠΑΡΑΔΕΙΓΜΑ ΣΥΝΘΕΣΗΣ Μεγάλο παράδειγμα Θέλουμε να δημιουργήσουμε ένα λογισμικό για ένα τμήμα πανεπιστημίου. Το τμήμα έχει 4 φοιτητές οπού
Διαβάστε περισσότερα16 ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΣΧΕ ΙΑΣΗ
ΕΙΣΑΓΩΓΗ Ο αντικειµενοστρεφής προγραµµατισµός (object-oriented programming) έχει αναχθεί την τελευταία δεκαετία σε εξαιρετικά δηµοφιλή τεχνολογία ανάπτυξης λογισµικού. Το γεγονός αυτό αποδεικνύεται από
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Εισαγωγή στη Java III Το if-else statement Το if-else statement δουλεύει καλά όταν στο condition θέλουμε να περιγράψουμε μια επιλογή με δύο πιθανά ενδεχόμενα.
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα ως ορίσματα Αντικείμενα ως ορίσματα Μπορούμε να περνάμε αντικείμενα ως ορίσματα σε μία μέθοδο όπως οποιαδήποτε άλλη μεταβλητή Οποιαδήποτε κλάση
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Στην άσκηση αυτή θα υλοποιήσετε μια κλάση RandomVector η οποία διαχειρίζεται ένα τυχαίο διάνυσμα ακεραίων το οποίο μπορεί να έχει οποιοδήποτε
Διαβάστε περισσότεραΕργαστήριο Τεχνολογίας Λογισμικού και Ανάλυσης Συστημάτων - 4 ο Εργαστήριο -
ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΤΜΗΜΑ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ 3 ο ΕΞΑΜΗΝΟ Εργαστήριο Τεχνολογίας Λογισμικού και Ανάλυσης Συστημάτων - 4 ο Εργαστήριο - ΕΠΙΜΕΛΕΙΑ ΜΑΘΗΜΑΤΟΣ: Πρέντζα Ανδριάννα ΕΠΙΜΕΛΕΙΑ ΕΡΓΑΣΤΗΡΙΟΥ: Στουγιάννου
Διαβάστε περισσότεραΤεχνολογίες Υλοποίησης Αλγορίθµων
Τεχνολογίες Υλοποίησης Αλγορίθµων Χρήστος Ζαρολιάγκης Καθηγητής Τµήµα Μηχ/κων Η/Υ & Πληροφορικής Πανεπιστήµιο Πατρών email: zaro@ceid.upatras.gr Γρηγόρης Πράσινος Υποψήφιος ιδάκτωρ Τµήµα Μηχ/κων Η/Υ &
Διαβάστε περισσότεραΔιάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες
ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 0: Λίστες ΙΙ Κυκλικές Λίστες Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Κυκλικές Απλά Συνδεδεμένες Λίστες - Κυκλικές Διπλά Συνδεδεμένες
Διαβάστε περισσότεραΑντικειμενοστρεφής Προγραμματισμός
ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΙΚΑ ΜΑΘΗΜΑΤΑ Αντικειμενοστρεφής Προγραμματισμός Ενότητα 8: Περαιτέρω Τεχνικές Αφαίρεσης Γρηγόρης Τσουμάκας, Επικ. Καθηγητής Άδειες Χρήσης Το παρόν
Διαβάστε περισσότερα14η ιάλεξη. Προχωρημένα θέματα σχεδίασης
14η ιάλεξη Προχωρημένα θέματα σχεδίασης 1 ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Ι κ. ΠΕΤΑΛΙΔΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ 1 Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για
Διαβάστε περισσότεραΕισαγωγή στον Προγ/μό Η/Υ
Εισαγωγή στον Προγ/μό Η/Υ Ενότητα 7 2ο μέρος: Επιπλέον έννοιες σχετικά με αντικείμενα Διδάσκων: Μιχάλης Τίτσιας Περιεχόμενα Τι μπορεί να περιέχει μια τάξη Μέθοδοι τάξης και σταθερές τάξης Πολυμορφισμός
Διαβάστε περισσότεραΤι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα;
Εισαγωγή Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα; 1. Σελίδα μαθήματος Εγγραφή Ο κάθε φοιτητής πρέπει να κάνει εγγραφή στη σελίδα του μαθήματος στην πλατφόρμα e-class
Διαβάστε περισσότερα(Διαφάνειες Νίκου Βιδάκη)
(Διαφάνειες Νίκου Βιδάκη) JAVA Inheritance Εβδομάδα Νο. 3 2 Προηγούμενο μάθημα (1/2) Τι είναι αντικείμενο? Ανάλυση αντικειμένων Πραγματικά αντικείμενα Καταστάσεις Συμπεριφορές Αντικείμενα στον προγραμματισμό
Διαβάστε περισσότεραΕργαστήριο 02: Προγραμματισμός με Γενικούς Τύπους (JAVA Generics) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι
Εργαστήριο 02: Προγραμματισμός με Γενικούς Τύπους (JAVA Generics) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Generic Types Τα Generics έχουν προστεθεί στη JAVA από το 2004 ως μέρος του J2SE 5.0 Με τη χρήση
Διαβάστε περισσότεραΑρχές Τεχνολογίας Λογισμικού Εργαστήριο
Αρχές Τεχνολογίας Λογισμικού Εργαστήριο Κωδικός Μαθήματος: TP323 Ώρες Εργαστηρίου: 2/εβδομάδα (Διαφάνειες Νίκου Βιδάκη) 1 JAVA Inheritance Εβδομάδα Νο. 3 2 Προηγούμενο μάθημα (1/2) Τι είναι αντικείμενο?
Διαβάστε περισσότεραΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Πίνακες Συµβόλων Κεφάλαιο 12 ( ) Ε. Μαρκάκης Επίκουρος Καθηγητής
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Πίνακες Συµβόλων Κεφάλαιο 12 (12.1-12.4) Ε. Μαρκάκης Επίκουρος Καθηγητής Περίληψη Πίνακες συµβόλων Διεπαφή πίνακα συµβόλων Αναζήτηση µε αριθµοδείκτη Ακολουθιακή αναζήτηση Δυαδική αναζήτηση
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Παράδειγμα Κληρονομικότητας Γενικευμένες κλάσεις Συλλογές Από το προηγούμενο lab Είχαμε την κλάση Document, και δύο παραγόμενες κλάσεις: TextFile, Email Document
Διαβάστε περισσότερα11β Δομικά πρότυπα σχεδίασης
11β Δομικά πρότυπα σχεδίασης Τεχνολογία Λογισμικού Σχολή Hλεκτρολόγων Mηχανικών & Mηχανικών Yπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Χειμερινό εξάμηνο 2017 18 Δρ. Κώστας Σαΐδης saiko@di.uoa.gr Δομικά πρότυπα
Διαβάστε περισσότεραΑρχικοποίηση Αντικειµένων & Κλάσεων στη Java Object Instantiation & Class Initialisation Κώστας Σαΐδης saiko@di.uoa.gr http://daemon.di.uoa.gr/daemon/issue4 Μάρτιος 2004 Η Αρχή είναι το ήµισυ του Παντός
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Εισαγωγή στη Java Είσοδος Χρησιμοποιούμε την κλάση Scanner της Java import java.util.scanner; Αρχικοποιείται με το ρεύμα εισόδου: Scanner in = new Scanner(System.in);
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές)
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές) Κληρονομικότητα Employee name hiringdate getname gethiringdate Οι παράγωγες κλάσεις κληρονομούν τα πεδία
Διαβάστε περισσότεραΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές Μαθήματα από το lab Υπενθύμιση: Η άσκηση ζητούσε να υλοποιήσετε μία κλάση vector που να διαχειρίζεται διανύσματα οποιουδήποτε
Διαβάστε περισσότερα