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

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

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

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

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

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

Πληροφοριακά Συστήματα Διοίκησης Ενότητα 1: Βασικές Αρχές Αντικειμενοστραφούς Σχεδίασης Συστημάτων και Εφαρμογών (1ο Μέρος)

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

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

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

Βάση Δεδομένων. User Interface - 1 User Interface - 2

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

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

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

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

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

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

Κλάσεις και Αντικείµενα

Αντικείμενα (Objects) στην Java. Αντικείμενα στη Java. Δημιουργία Αντικειμένων. Δηλώσεις Μεταβλητών (2) Ο τελεστής new (1)

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής - Εβδομάδα 1

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

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

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

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

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

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

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

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

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

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

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

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Προγραμματισμός Η/Υ. Ι. Ψαρομήλιγκος Χ. Κυτάγιας

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

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

Αντικείμενα και Κλάσεις

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

8. Μέθοδοι (Methods)

Μέθοδοι. Υποσυστήµατα και πακέτα. Μοντέλα αντικειµενοστραφούς σχεδίασης. Αντικειµενοστραφής Σχεδίαση. Στα πρώτα στάδια της ανάλυσης

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

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

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

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

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

Wrapper Classes, Abstract Classes and Interfaces

Κλάσεις στην Python. Δημιουργία κλάσεων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων Constructors

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

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

Κλάσεις στην Python. Δημιουργία κλάσεων

Εισαγωγή στον Προγραμματισμό με C++

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

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

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

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

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

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

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

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

Λογισµικό (Software SW) Γλώσσες

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

ηµιουργία νέου τύπου δεδοµένων από το χρήστη

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

Αντικειμενοστρεφής προγραμματισμός Object Oriented Programming (OOP) Σπάχος Κυριάκος Καθηγητής Πληροφορικής ΠΕ19

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6

Προγραµµατισµός ΙΙ Java 2

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

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017

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

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

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

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

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

HelloWorld. Παύλος Εφραιμίδης. Java Το πρόγραμμα HelloWorld 1

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

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

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

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

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

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

Διάλεξη 5: Κλάσεις και Αντικείμενα. Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός μνήμης Αντικείμενα παράμετροι String Interning

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

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

5. Ανασκόπηση αντικειμενοστραφούς προγραμματισμού

Μέθοδοι. Μέθοδοι ηµιουργοί, Υπερφόρτωση και Υπέρβαση Μεθόδων

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

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Μέθοδοι που επιστρέφουν αντικείμενα Deep and Shallow Copies


Δυναμική μνήμη με πίνακες και λίστες

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

ΕΠΛ233 Βιβλιοθήκες και Προσδιοριστές Πρόσβασης στην JAVA

Transcript:

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κωδικός Θ: ΤΠ4003, Κωδικός Ε: ΤΠ4103 (ΜΕΥ( ΜΕΥ/Υ) Ώρες (Θ - ΑΠ - Ε): 2-1 - 3 Προαπαιτούμενα: ΤΠ2003,2103 Δρ. ΒΙΔΑΚΗΣ ΝΙΚΟΣ

Περιεχόμενα Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 2

Κλάσεις (Class) Κεντρική ιδέα στον αντικειμενοστραφή προγραμματισμό είναι η κλάση (class), μία αυτοτελής και αφαιρετική αναπαράσταση κάποιας κατηγορίας αντικειμένων, είτε φυσικών αντικειμένων του πραγματικού κόσμου είτε νοητών, εννοιολογικών αντικειμένων, σε ένα περιβάλλον προγραμματισμού. Πρακτικά είναι ένας τύπος δεδομένων, ή αλλιώς το προσχέδιο μίας δομής δεδομένων με δικά της περιεχόμενα, τόσο μεταβλητές όσο και διαδικασίες. Τα περιεχόμενα αυτά δηλώνονται είτε ως δημόσια (public) είτε ως ιδιωτικά (private), με τα ιδιωτικά να μην είναι προσπελάσιμα από κώδικα εκτός της κλάσης. Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 3

Κλάσεις (Class) Οι διαδικασίες των κλάσεων συνήθως καλούνται μέθοδοι (methods) και οι μεταβλητές τους γνωρίσματα (attributes) ή πεδία (fields). Μίακλάσηπρέπειιδανικάναείναι: εννοιολογικά αυτοτελής, να περιέχει δηλαδή μόνο πεδία τα οποία περιγράφουν μία κατηγορία αντικειμένων και δημόσιες μεθόδους οι οποίες επενεργούν σε αυτά όταν καλούνται από το εξωτερικό πρόγραμμα, χωρίς να εξαρτώνται από άλλα δεδομένα ή κώδικα εκτός της κλάσης, και επαναχρησιμοποιήσιμη, να αποτελεί δηλαδή μαύρο κουτί δυνάμενο να λειτουργήσει χωρίς τροποποιήσεις ως τμήμα διαφορετικών προγραμμάτων Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 4

Κλάσεις (Class) Η κλάση θεωρείται το καλούπι (blueprint) όλων των object που ανήκουν σε αυτήν. Μία κλάση ή τάξη είναι ένα σχέδιο ή πρότυπο που ορίζει τις κοινές μεταβλητές και μεθόδους όλων των ομοειδών αντικειμένων. Κάθε αντικείμενο είναι στιγμιότυπο μίας κλάσης. Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 5

Οι κλάσεις αποτελούνται από 3 πράγματα: a name, attributes, and operations. Κλάσεις (Class) Analysis and design versions of a class Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 6

Κλάσεις (Class) name : attribute type = default value Operations delayflight: 1 input parameter, no return value getarrivaltime: 0 parameter, return value assignflightcrew: 2 input parameters, no return value Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 7

Κλάσεις (Class) Δημόσιο Μέρος (Public API) Φρέναρε Αλλαξε Ταχύτητα Ξεκίνα Iδιωτικό Μέρος (Λεπτομέρειες Υλοποίησης) Στατικά Χαρακτηριστικά: Χρώμα Μοντέλο --------- Δυναμικά Χαρακτηριστικά: Αλλάξε Ταχύτητα: (Υλοποίηση) κλπ Παράδειγμα Κλάσης (Ποδήλατο) Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 8

class Bicycle { int cadence = 0; int speed = 0; int gear = 1; Κλάσεις (Class) void changecadence(int newvalue) { cadence = newvalue; } void changegear(int newvalue) { gear = newvalue; } void speedup(int increment) { speed = speed + increment; } void applybrakes(int decrement) { speed = speed - decrement; } void printstates() { System.out.println("cadence:"+cadence+" speed:"+speed+" gear:"+gear); } } Παράδειγμα Κλάσης (Ποδήλατο) Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 9

Αντικείμενα (Objects) Γενικά Αντικείμενο (object) είναι το στιγμιότυπο μίας κλάσης, δηλαδή αυτή καθαυτή η δομή δεδομένων (με αποκλειστικά δεσμευμένο χώρο στη μνήμη) βασισμένη στο «καλούπι» που προσφέρει η κλάση. Παραδείγματος χάρη, σε μία αντικειμενοστραφή γλώσσα προγραμματισμού θα μπορούσαμε να ορίσουμε κάποια κλάση ονόματι BankAccount, η οποία αναπαριστά έναν τραπεζικό λογαριασμό, και να δηλώσουμε ένα αντικείμενο της με όνομα MyAccount. Το αντικείμενο αυτό θα έχει δεσμεύσει χώρο στη μνήμη με βάση τις μεταβλητές και τις μεθόδους που περιγράψαμε όταν δηλώσαμε την κλάση. Έτσι, στο αντικείμενο θα μπορούσε να περιέχεται ένα γνώρισμα Balance (=υπόλοιπο) και μία μέθοδος GetBalance (=επέστρεψε το υπόλοιπο). Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 10

Αντικείμενα (Objects) Γενικά Ακολούθως θα μπορούσαμε να δημιουργήσουμε ακόμα ένα ή περισσότερα αντικείμενα της ίδιας κλάσης τα οποία θα είναι διαφορετικές δομές δεδομένων (διαφορετικοί τραπεζικοί λογαριασμοί στο παράδειγμα). Ας σημειωθεί εδώ πως τα αντικείμενα μίας κλάσης μπορούν να προσπελάσουν τα ιδιωτικά περιεχόμενα άλλων αντικειμένων της ίδιας κλάσης. Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 11

Αντικείμενα (Objects) Γενικά Δημόσιο Μέρος (Public API) Iδιωτικό Μέρος (Λεπτομέρειες Υλοποίησης) Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 12

Αντικείμενα (Objects) Γενικά Real-world objects Αντικείμενα πραγματικού κόσμου Real-world objects share two characteristics: They all have state and behaviour. Dogs have: o state (name, colour, breed, hungry) and o behaviour (barking, fetching, wagging tail). Bicycles also have o state (current gear, current pedal cadence, current speed) and o behaviour (changing gear, changing pedal cadence, applying brakes). Άλλαξε Ταχύτητα Φρέναρε Λεπτομέρειες Υλοποίησης των λειτουργιών Ξεκίνα Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 13

Αντικείμενα (Objects) Γενικά Software Object - Αντικείμενο Λογισμικού o Μοντελοποιεί, αναπαριστά, αντιστοιχεί σε κάποιο αντικείμενο του πραγματικού κόσμου o ομαδοποίηση μεταβλητών (στατικό μέρος) και σχετιζομένων μεθόδων (δυναμικό μέρος) A software object. A bicycle modelled as a software object. Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 14

Αντικείμενα (Objects) Γενικά Πλεονεκτήματα δομής κώδικα σε αντικείμενα (Objects) 1. Modularity: Ο πηγαίος κώδικας ενός αντικειμένου γράφεται και συντηρείται ανεξάρτητα από τον πηγαίο κώδικα άλλων αντικειμένων. 2. Information-hiding: Με το να αλληλεπιδρούμε μόνο με τις μεθόδους του αντικειμένου, οι λεπτομέρειες της υλοποίησης του αποκρύπτονται από τον έξω κόσμο. 3. Code re-use: Αν το αντικείμενο υπάρχει (ακόμα και αν είναι γραμμένο από άλλον) τότε μπορείτε να το χρησιμοποιήσετε. Αυτό δίνει την δυνατότητα τα αντικείμενα να υλοποιούνται (implement/test/debug ) από ειδικούς στον εκάστοτε τομέα. 4. Pluggability and debugging ease: Εάν ένα αντικείμενο παρουσιάζει προβλήματα τότε μπορείτε να το διαγράψετε και να προσθέσετε ένα άλλο με παρόμοια χαρακτηριστικά. Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 15

Αντικείμενα (Objects) Ιδιότητες (Attributes), Μέθοδοι (Methods - Operations) Ένα πρόγραμμα δημιουργεί πολλά αντικείμενα. Μέσα από την αλληλεπίδραση των αντικειμένων (με τις μεθόδους) το πρόγραμμα εκτελεί διάφορες εργασίες όπως η δημιουργία του GUI, υπολογισμός εξισώσεων, αποστολή και παραλαβή δεδομένων στο δίκτυο κλπ. Μόλις το αντικείμενο ολοκληρώσει την εργασία για την οποία δημιουργήθηκε αποδεσμεύει την πηγές που χρησιμοποίησε για να είναι διαθέσιμες προς χρήση από άλλα αντικείμενα Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 16

Αντικείμενα (Objects) Ιδιότητες (Attributes), Μέθοδοι (Methods - Operations) public class CreateObjectDemo { public static void main(string[] args) { //Declare and create a point object //and two rectangle objects. Point originone = new Point(23, 94); Rectangle rectone = new Rectangle(originOne, 100, 200); Rectangle recttwo = new Rectangle(50, 100); //display rectone's width, height, and area System.out.println("Width of rectone: " + rectone.width); System.out.println("Height of rectone: " + rectone.height); System.out.println("Area of rectone: " + rectone.getarea()); //set recttwo's position recttwo.origin = originone; Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 17

Αντικείμενα (Objects) //display recttwo's position System.out.println("X Position of recttwo: " + recttwo.origin.x); System.out.println("Y Position of recttwo: " + recttwo.origin.y); Ιδιότητες (Attributes), Μέθοδοι (Methods - Operations) //move recttwo and display its new position recttwo.move(40, 72); System.out.println("X Position of recttwo: " + recttwo.origin.x); System.out.println("Y Position of recttwo: " + recttwo.origin.y); } } This program creates, manipulates, and displays information about various objects. Here's the output: Width of rectone: 100 Height of rectone: 200 Area of rectone: 20000 X Position of recttwo: 23 Y Position of recttwo: 94 X Position of recttwo: 40 Y Position of recttwo: 72 Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 18

Αντικείμενα (Objects) Ιδιότητες (Attributes), Μέθοδοι (Methods - Operations) Από τον Παραπάνω κώδικα ας απομονώσουμε τις παρακάτω εντολές: Point originone = new Point(23, 94); Rectangle rectone = new Rectangle(originOne, 100, 200); Rectangle recttwo = new Rectangle(50, 100); Η πρώτη εντολή δημιουργεί ένα αντικείμενο τύπου Point ενώ η δεύτερη και τρίτη δημιουργούν αντικείμενα τύπου Rectangle Κάθε εντολή έχει τρία μέρη: 1. Declaration: Ο κώδικας σε bold είναι «variable declarations» που συνδέει το όνομα τις μεταβλητής με έναν τύπο αντικειμένου. 2. Instantiation: η λέξη new είναι «a Java operator» η οποία δημιουργεί το αντικείμενο. 3. Initialization: Η λέξη new ακολουθείται από τον «constructor», ο οποίος αρχικοποιεί το αντικείμενο. Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 19

Αντικείμενα (Objects) Ιδιότητες (Attributes), Μέθοδοι (Methods - Operations) Declare a Variable Point originone; Instantiating a Class Point originone = new Point(23, 94); Initializing an Object public class Point { public int x = 0; public int y = 0; //constructor public Point(int a, int b) { x = a; y = b; } } Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 20

Αντικείμενα (Objects) Ιδιότητες (Attributes), Μέθοδοι (Methods - Operations) Referencing an Object's Fields objectreference.fieldname e.g.: System.out.println("Width of rectone: " + rectone.width); Calling an Object's Methods objectreference.methodname(argumentlist); or objectreference.methodname(); e.g.: System.out.println("Area of rectone: " + rectone.getarea()); int areaofrectangle = new Rectangle(100, 50).getArea(); Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 21

Αντικείμενα (Objects) Ιδιότητες (Attributes), Μέθοδοι (Methods - Operations) The Garbage Collector Σε κάποιες γλώσσες πρέπει να κρατάμε ιστορικό των αντικειμένων που δημιουργούνται και να αποδεσμεύουμε τους πόρους του συστήματος καταστρέφοντας τα αντικείμενα όταν αυτά έχουν ολοκληρώσει την εργασία τους. Στην JAVA την δουλειά αυτή αναλαμβάνει ο «Garbage Collector» ο οποίος εντοπίζει τα αντικείμενα τα οποία έχουν ολοκληρώσει την εργασία τους και δεν έχουν νόημα ύπαρξης. Τα αντικείμενα αυτά καταστρέφονται και απελευθερώνονται οι πόροι του συστήματος. Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 22

Αντικείμενα (Objects) Άσκηση Φτιάξτε το δικό σας παράδειγμα: o Κοιτάξτε γύρω σας και προσδιορίστε μέσα στην τάξη αντικείμενα του πραγματικού κόσμου o Προσδιορίστε τα ανάλογα αντικείμενα λογισμικού. o Δώστε τους state και behavior Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 23

Encapsulation, Polymorphism, Inheritance Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 24

Encapsulation Ορισμοί Encapsulation (ουσιαστικό): the condition of being enclosed (as in a capsule) Ενθυλάκωση (ουσιαστικό): η κατάσταση του να βρίσκεσαι μέσα σε ένα θύλακα (κάψουλα) Ενθυλάκωση δεδομένων (data encapsulation) καλείται η ιδιότητα που προσφέρουν οι κλάσεις να «κρύβουν» τα ιδιωτικά δεδομένα τους από το υπόλοιπο πρόγραμμα και να εξασφαλίζουν πως μόνο μέσω των δημόσιων μεθόδων τους θα μπορούν αυτά να προσπελαστούν. Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 25

Encapsulation Το αντικείμενο θα πρέπει να είναι αυτόδιαχειριζόμενο, κάθε αλλαγή στο αντικείμενο θα πρέπει να γίνεται μέσα από τις μεθόδους του αντικειμένου. Θα πρέπει να κάνουμε πολύ δύσκολο αν όχι ακατόρθωτο να γίνονται αλλαγές από άλλα αντικείμενα. Ο χρήστης ενός αντικειμένου μπορεί να καλέσει τις μεθόδους του χωρίς να γνωρίζει τον τρόπο με τον οποίο εκτελούνται αυτές οι μέθοδοι. Τα παραπάνω κάνουν ευκολότερες τις αλλαγές στην υλοποίηση των μεθόδων ενός αντικειμένου Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 26

Encapsulation Ένα αντικείμενο με ενθυλάκωση μπορεί να θεωρηθεί ως ένα μαύρο κουτί. Η εσωτερική του δομή είναι άγνωστη κρυφή στα άλλα αντικείμενα, χρήστες ή εξυπηρετητές. Ποιος ο λόγος για encapsulation Προγραμματίζοντας με την έννοια του black box, ο χρήστης του αντικειμένου χρησιμοποιεί τις διασυνδέσεις τους αντικειμένου χωρίς να γνωρίζει την εσωτερική του δομή, Η διασυνδέσεις δεν μπορούν να παρακαμφθούν, Η ενθυλάκωση κάνει την διαχείριση του αντικειμένου εύκολη καθώς όλη η επικοινωνία με αυτό περνά από καλά προσδιορισμένες υπηρεσίες (services) Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 27

Encapsulation Η διασύνδεση του αντικειμένου γίνεται μέσω των μεθόδων του. Change Gear Brake Change Cadence Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 28

Encapsulation Level Η Ενθυλάκωση προσδιορίζεται στην κλάση και όχι στο αντικείμενο (στιγμιότυπο της κλάσης). Στην Java αντικείμενα της ίδιας κλάσης έχουν πρόσβαση σε ιδιωτικά (private) μέρη άλλων αντικειμένων της ίδιας κλάσης. Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 29

Encapsulation Η Ενθυλάκωση υλοποιείται μέσω κατάλληλων visibility modifiers Ο λόγοςπου προστατεύονται τα αντικείμενα είναι: Πολλές φορές ένα data element εξαρτάτε από άλλα, Μόνο κάποιες μεταβλητές ανήκουν στην δημόσια διασύνδεση, Ελαχιστοποιούνται τα bugs. Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 30

Encapsulation visibility modifiers in Java Access Levels Modifier Class Package Subclass World public Y Y Y Y protected Y Y Y N no modifier Y Y N N private Y N N N Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 31

Encapsulation Encapsulation (Αρχές / Ιδιότητες) Information Hiding Interface and Implementations Standardization Access Control mechanisms (private /public etc.) Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 32

Polymorphism Ο ορισμός του Πολυμορφισμού (κατά Webster): Πολυμορφισμός (ουσιαστικό): a genetic variation that produces differing characteristics in individuals of the same population or species Πολύμορφος (επίθετο): having, assuming, or passing through many or various forms, stages, or the like Οι βασικές αρχές της γενίκευσης και της αφαίρεσης είναι: Reuse Interoperability Ηβασικήιδέα: Ο προγραμματιστής χρησιμοποιεί μια γενική διασύνδεση (general interface), και η Java επιλέγει την σωστή μέθοδο Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 33

Αρχές Polymorphism Αν η κλάση Β είναι υποκλάση της Α τότε μπορούμε να αντικαταστήσουμε ένα στιγμιότυπο της Α με ένα στιγμιότυπο της Β Αν η Α ανταποκρίνεται στο μήνυμα m τότε η Β ανταποκρίνεται στο ίδιο μήνυμα m Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 34

Polymorphism Overloaded methods are methods with the same name signature but either a different number of parameters or different types in the parameter list. For example 'spinning' a number may mean increase it, 'spinning' an image may mean rotate it by 90 degrees. By defining a method for handling each type of parameter you achieve the effect that you want. Overridden methods are methods that are redefined within an inherited or subclass. They have the same signature and the subclass definition is used. Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 35

Polymorphism Polymorphism is the capability of an action or method to do different things based on the object that it is acting upon. Overloading and overriding are two types of polymorphism. A third type: dynamic method binding. Assume that three subclasses (Cow, Dog and Snake) have been created based on the Animal abstract class, each having their own speak() method. Notice that although each method reference was to an Animal (but no animal objects exist), the program is able to resolve the correct method related to the subclass object at runtime. This is known as dynamic (or late) method binding. Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 36

Polymorphism public class AnimalReference { public static void main(string args[]) Animal ref // set up var for an Animal Cow acow = new Cow("Bossy"); // makes specific objects Dog adog = new Dog("Rover"); Snake asnake = new Snake("Ernie"); // now reference each as an Animal ref = acow; ref.speak(); ref = adog; ref.speak(); ref = asnake; ref.speak(); } Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 37

Polymorphism Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 38

Polymorphism Polymorphism (Αρχές / Ιδιότητες) Many forms of same function Abstract Methods Abstract Classes Interfaces Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 39

Inheritance Κληρονομικότητα ονομάζεται η ιδιότητα των κλάσεων να επεκτείνονται σε νέες κλάσεις, ρητά δηλωμένες ως κληρονόμους (υποκλάσεις ή 'θυγατρικές κλάσεις'), οι οποίες μπορούν να επαναχρησιμοποιήσουν τις μεταβιβάσιμες μεθόδους και ιδιότητες της γονικής τους κλάσης αλλά και να προσθέσουν δικές τους. Στιγμιότυπα των θυγατρικών κλάσεων μπορούν να χρησιμοποιηθούν όπου απαιτούνται στιγμιότυπα των γονικών (εφόσον η θυγατρική είναι κατά κάποιον τρόπο μία πιο εξειδικευμένη εκδοχή της γονικής), αλλά το αντίστροφο δεν ισχύει. Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 40

Inheritance Παράδειγμα κληρονομικότητας είναι μία γονική κλάση Vehicle (Όχημα) καιοιδύοπιοεξειδικευμένες υποκλάσεις της Car (Αυτοκίνητο) και Bicycle (Ποδήλατο), οι οποίες λέμε ότι "κληρονομούν" από αυτήν. Πολλαπλή κληρονομικότητα είναι η δυνατότητα που προσφέρουν ορισμένες γλώσσες προγραμματισμού μία κλάση να κληρονομεί ταυτόχρονα από περισσότερες από μία γονικές. Από μία υποκλάση μπορούν να προκύψουν νέες υποκλάσεις που κληρονομούν από αυτήν, με αποτέλεσμα μία ιεραρχία κλάσεων που συνδέονται μεταξύ τους "ανά γενιά" με σχέσεις κληρονομικότητας. Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 41

Inheritance Υποκλάσεις (subclasses) και υπερκλάσεις (superclasses). Κάθε υποκλάση κληρονομεί τη συμπεριφορά και την κατάσταση της υπερκλάσης της. Οι υποκλάσεις μπορούν να επανεγγράψουν κληροδοτούμενη συμπεριφορά και κατάσταση. Ιεραρχία κλάσεων Πλεονεκτήματα: Οι υποκλάσεις προσφέρουν εξειδικευμένη συμπεριφορά από τα κοινά στοιχεία που προσφέρει η υπερκλάση. Επαναχρησιμοποίηση του κώδικα της υπερκλάσης. Οι προγραμματιστές μπορούν να υλοποιήσουν υπερκλάσεις που λέγονται αφαιρετικές κλάσεις (abstract classes) και ορίζουν γενικευμένη συμπεριφορά, η οποία εξειδικεύεται από τις αντίστοιχες υποκλάσεις. Οι αφαιρετικές κλάσεις δεν έχουν στιγμιότυπα Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 42

Inheritance Inheritance Principles (Αρχές / Ιδιότητες) Hierarchy Reusability Extensibility Expressive power Reflects many real-world problems Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 43

Inheritance Η σημειογραφία που χρησιμοποιείται είναι ένα βέλος που δείχνει προς την superclass. Στο παράδειγμα το Shape is a superclass του Circle και του Square. Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 44

Inheritance Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 45

Single Inheritance Inheritance (Single & Multiple) Library item Catalogue number Acquisition date Cost Ty pe Status Number of copies Acquire () Catalogue () Dispose () Issue () Return () Published item Title Publisher Recorded item Title Medium Book Author Edition Publication date ISBN Year Issue Magazine Film Director Date of release Distributor Computer program Version Platform Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 46

Inheritance (Single & Multiple) Book Author Edition Publication date ISBN Multiple Inheritance Voice recording Speaker Duration Recording date Talking book # Tapes Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 47

Inheritance Περισσότερα για την Κληρονομικότητα σε επόμενη διάλεξη με θέμα: Interfaces and Inheritance Μάθημα: Αντικειμενοστραφής Προγραμματισμός Καθηγητής: Δρ. Βιδάκης Νίκος Slide 48