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

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

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

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

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

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

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

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

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

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

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

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

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

Wrapper Classes, Abstract Classes and Interfaces

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

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

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


Διάλεξη 16-17: Πολυμορφισμός (Polymorphism) Διδάσκων: Παναγιώτης Ανδρέου

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

Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java

Η λέξη κλειδί this. Γαβαλάς Δαμιανός

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

Προγραμματισμός Διαδικτύου

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

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

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

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

ΚΛΑΣΕΙΣ ΜΕΘΟΔΟΙ - ΑΝΤΙΚΕΙΜΕΝΑ

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

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

Κάποιες γενικές παρατηρήσεις:

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές)

Αντικειμενοστρέφεια. Ορισμοί αντικειμενοστρέφειας. Κάποιες γενικές παρατηρήσεις: Περιεχόμενα. Ποιοι είναι οι ορισμοί των παρακάτω;

Αντικειμενοστρέφεια. Henri Matisse, Harmony in Red, 1908

Εισαγωγή στον Προγ/μό Η/Υ

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

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

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

Γλώσσες προγραµµατισµού. Ανάπτυξη Συστηµάτων Λογισµικού

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

Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων Παράδειγμα: Τμήμα πανεπιστημίου

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

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

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

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

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

public void printstatement() { System.out.println("Employee: " + name + " with salary: " + salary);

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

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

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές)

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

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

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Παναγιώτης Σφέτσος

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

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

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

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

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

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

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

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 9 : ΑΦΗΡΗΜΕΝΕΣ ΚΛΑΣΕΙΣ

class object Database Database Item Item [sub-typing and polymorphism] MusicCD Video MusicCD Video

ΑΡΦΕ ΑΝΣΙΚΕΙΜΕΝΟΣΡΕΥΟΤ ΠΡΟΓΡΑΜΜΑΣΙΜΟΤ. Ιωάννης Φατζηλυγερούδης Αναπληρωτής Καθηγητής Τμήμα Μηχ/κών Η/Υ και Πληροφορικής Πανεπιστήμιο Πατρών

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

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

Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

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

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

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

Ανάλυση Πληροφοριακών Συστημάτων. Εαρινό Εξάμηνο Lec08 09/04/2019 Διδάσκων: Γεώργιος Χρ. Μακρής

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

09 Η γλώσσα UML I. Τεχνολογία Λογισμικού. Τμήμα Πληροφορικής & Τηλεπικοινωνιών Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών. Εαρινό εξάμηνο

ΠΟΛΥΜΟΡΦΙΣΜΟΣ. 4.1 Κληρονομικότητα και Αρχή της Υποκατάστασης

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

Το πρόγραμμα HelloWorld.java. HelloWorld. Κλάσεις και Αντικείμενα (2) Ορισμός μιας Κλάσης (1) Παύλος Εφραιμίδης pefraimi <at> ee.duth.

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

Κατασκευαστές. Μέθοδοι Κατασκευής (Constructors).

3 Αλληλεπίδραση Αντικειμένων

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 8 : ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ & ΠΟΛΥΜΟΡΦΙΣΜΟΣ

Δοµές Δεδοµένων. 6η Διάλεξη Αναδροµικές Εξισώσεις και Αφηρηµένοι Τύποι Δεδοµένων. Ε. Μαρκάκης

Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

Προγραμματισμός Υπολογιστών με C++

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

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

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

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

Outline. 4 Object-Oriented Programming

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές)

Περιεχόμενα. Πρόλογος... 17

Κεφάλαιο 15 Γλώσσα προγραμματισμού Java

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

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

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

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

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

Transcript:

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

Αντικειμενοστρέφεια Στον προγραμματισμό object oriented programming Επανάληψη των βασικών εννοιών με παραδείγματα σε Java. Στην ανάλυση και στο σχεδιασμό object oriented analysis and design Έμφαση στη γλώσσα μοντελοποίησης UML. 2

Αντικειμενοστρεφής προγραμματισμός Η βασική έννοια είναι τα "αντικείμενα" Περιέχουν δεδομένα στη μορφή πεδίων state Περιέχουν κώδικα στη μορφή μεθόδων behavior Αυτο αναφορά this, self Ανταλλαγή μηνυμάτων message passing 3

Παράδειγμα class Point { private int x; private int y; public Point(int x, int y) { this.x = x; this.y = y; public int getx() { return x; public int gety() { return y; public void setx(int x) { this.x = x; public void sety(int y) { this.y = y; public void addtox(int num) { x += num; public void addyoy(int num) { x += num; 4

Χρήση Point p = new Point(0, 0); //στιγμιοτύπιση p.addtox(10); //αποστολή μηνύματος (επίκληση μεθόδου) assert p.getx() == 10; //επαλήθευση 5

Αντικειμενοστρεφείς γλώσσες Κληρονομικότητα inheritance Βασισμένη σε κλάσεις class based Βασισμένη σε πρωτότυπα prototype based Στυγμιοτύπιση instantiation Ενθυλάκωση encapsulation Δυναμική αποστολή μηνυμάτων dynamic method dispatch και αργή δέσμευση late binding Σύνθεση Πολυμορφισμός 6

Σύνθεση Ένα αντικείμενο περιέχει συντίθεται από άλλο αντικείμενα 7

Παράδειγμα class Line { private Point first; private Point second; public Line(Point first, Point second) { this.first = first; this.second = second; Point getfirstpoint() { return first; Point getsecondpoint() { return second; 8

Κληρονομικότητα Ένα αντικείμενο κληρονομεί τα πεδία ή/και τις μεθόδους των "προγόνων" του Κληρονομικότητα για εξειδίκευση specialization Κληρονομικότητα για επαναχρησιμοποίηση reuse 9

Παράδειγμα enum Direction { FROM_FIRST_TO_SECOND FROM_SECOND_TO_FIRST 10

Παράδειγμα class Arrow extends Line { private Direction d; public Arrow(Point p1, Point p2, Direction d) { super(p1, p2); this.d = d; public Arrow(Line l, Direction d) { this(l.getfirstpoint(), l.getsecondpoint(), d); public void toggledirection() { if (d == Direction.FROM_FIRST_SECOND) d = Direction.FROM_SECOND_TO_FIRST; else d = Direction.FROM_FIRST_SECOND; 11

Χρήση Point p1 = new Point(0, 0); Point p2 = new Point(10, 10); Arrow a = new Arrow(p1, p2, Direction.FROM_FIRST_TO_SECOND); 12

Ενθυλάκωση Η αρχή της απόκρυψης πληροφορίας information hiding Η κλάση Point ενθυλακώνει δύο ακεραίους Η κλάση Line ενθυλακώνει δύο Point αντικείμενα Η κλάση Arrow ενθυλακώνει δύο Point αντικείμενα και μια διεύθυνση 13

Παράδειγμα Βλ. Point, Line, Arrow 14

Πολυμορφισμός Παροχή μιας κοινής διεπαφής για αντικείμενα διαφορετικών τύπων ή Ένα αντικείμενο μπορεί να έχει πολλούς τύπους πολλές συμπεριφορές 15

Ad hoc πολυμορφισμός Operator overloading int x = 3 + 5; String s = name + surname; Method overloading class Foo { void dosomething(a a) {... void dosomething(a a, B b) {... class Bar extends Foo { void dosomething(c c, D d) {... 16

Παραμετρικός πολυμορφισμός Generics class Cache<K, V> { private final Map<K, V> cache = new HashMap<>(); public synchronized void put(k key, V value) { cache.put(key, value); public synchronized V get(k key) { return cache.get(key); 17

Cache<String, Line> linelabels = new Cache<>(); cache.put("first line", someline); cache.put("second line", someotherline); 18

Πολυμορφισμός υπο τύπων interface Shape { double getarea(); class Rectangle implements Shape { private double width; private double height; public double getarea() { return width * height; class Circle implements Shape { private double radius; public double getarea() { return Math.PI * radius * radius; 19

class AreaPrinter { public static void print(shape s) { System.out.println(s.getArea()); Rectangle r = new Rectangle(...); Circle c = new Circle(...); AreaPrinter.print(r); AreaPrinter.print(c); 20

Δυναμική αποστολή μηνυμάτων και αργή δέσμευση Βλ. κλάση AreaPrinter 21

Άλλο ένα παράδειγμα interface Computation { String getname(); void compute(); abstract class ComputationBase { public String getname() { return getclass().getname(); class ListOfComputations extends ComputationBase { private List<Computation> computations; public void compute() { for(computation c: computations) { System.out.println("Computing: " + c.getname()); c.compute(); 22

class SimpleComputation extends ComputationBase { public void compute() { System.out.println("Done computing"); class SimpleComputation2 extends SimpleComputation { public String getname() { return "Simple2" 23

Computation c1 = new SimpleComputation(); Computation c2 = new SimpleComputation2(); Computation list = new ListOfComputations(c1, c2); System.out.println(list.getName()); list.compute(); //Output ListOfComputations Computing: SimpleComputation Done computing Computing: Simple2 Done computing 24

Λίστα αναγνωσμάτων 12. Antero Taivalsaari, "On the notion of inheritance", ACM Computing Surveys, Vol. 28, No 3, September 1996. 25

Πρόταση για την τρίτη εργασία Μηχανισμοί υλοποίησης πολλαπλής κληρονομικότητας 26