OOP Lecture01 Uploaded [Compatibility Mode]

57
1 Αντικειμενοστρεφής Προγραμματισμός 05/03/2012 ∆ρ. Ανδριάνα Πρέντζα Επίκουρος Καθηγήτρια [email protected] Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων Πρακτικά Θέματα ∆ιαλέξεις ∆ευτέρα 13:15-16:00, αίθουσα 103 Εργαστήρια Τετάρτη 12:00-14:00 ∆ιάρκεια μαθήματος 13 εβδομάδες Παρουσιάσεις διαλέξεων επιπλέον χρήσιμο υλικό Στο site του μαθήματος Πρακτική άσκηση Ώρες γραφείου: Τετάρτη 12:30-14:30, κτίριο Ανδρούτσου, γραφείο 204

Transcript of OOP Lecture01 Uploaded [Compatibility Mode]

Page 1: OOP Lecture01 Uploaded [Compatibility Mode]

1

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

05/03/2012

∆ρ. Ανδριάνα ΠρέντζαΕπίκουρος Καθηγήτρια

[email protected]

Πανεπιστήμιο ΠειραιάΤμήμα Ψηφιακών Συστημάτων

Πρακτικά Θέματα ∆ιαλέξεις

∆ευτέρα 13:15-16:00, αίθουσα 103

Εργαστήρια Τετάρτη 12:00-14:00

∆ιάρκεια μαθήματος 13 εβδομάδες

Παρουσιάσεις διαλέξεων – επιπλέον χρήσιμο υλικό Στο site του μαθήματος

Πρακτική άσκηση

Ώρες γραφείου: Τετάρτη 12:30-14:30, κτίριο Ανδρούτσου, γραφείο 204

Page 2: OOP Lecture01 Uploaded [Compatibility Mode]

2

Αξιολόγηση / Βαθμολόγηση επίδοσης Εργασία (ΕΡ): 30% (Προαιρετική)

Ενδιάμεση Πρόοδος (ΠΡ) (Προαιρετική με 20% βαρύτητα – μόνο θετικά αν ΓΕ>=5)

Τελική Γραπτή Εξέταση (ΓΕ): 70%

Τελικός βαθμός (Β):

Β = ΓΕ

Β = (0,7 * ΓΕ) + (0,3 * ΕΡ) +(0,2 * ΠΡ)

Β = (0,7 * ΓΕ) + (0,3 * ΕΡ)

Β = ΓΕ + (0,2 * ΠΡ)

Β = ΓΕ

(ΓΕ ) >= 5 ΝΑΙ ΟΧΙ

Στόχος Εισαγωγή στον αντικειμενοστρεφή προγραμματισμό

(object oriented programming) χρησιμοποιώντας τη γλώσσα προγραμματισμού Java

Ο σκοπός του είναι να διδάξει τις βασικές έννοιες και τεχνικές που συνιστούν το υπόδειγμα του αντικειμενοστρεφούς προγραμματισμού

Page 3: OOP Lecture01 Uploaded [Compatibility Mode]

3

Τι θα μάθετε? Με τη ολοκλήρωση του μαθήματος θα γνωρίζετε:

Το μοντέλο του αντικειμενοστρεφούς προγραμματισμού: αφαιρετικοί τύποι δεδομένων, ενθυλάκωση, κληρονομικότητα, πολυμορφισμός

Τα βασικά στοιχεία μιας γλώσσας αντικειμενοστρεφούς προγραμματισμού όπως η Java: κλάσεις και διεπαφές αντικειμένων, ...

Πώς από την περιγραφή ενός προβλήματος να καθορίζετε τη λογική για την επίλυση του προβλήματος σύμφωνα με το υπόδειγμα του αντικειμενοστρεφούς προγραμματισμούκαι κατόπιν να είστε σε θέση να την υλοποιείτε σε Java πρόγραμμα

Πώς να δοκιμάζετε, τεκμηριώνετε και προετοιμάζετε ένα επαγγελματικό πρόγραμμα χρησιμοποιώντας τα εργαλεία της Java(assertions, javadoc, packages) καθώς και ολοκληρωμένα περιβάλλοντα ανάπτυξης λογισμικού

Βιβλίο

Βασικά Συγγράμματα

H. M. Deitel, P. J. Deitel, Java Προγραμματισμός, 6η έκδοση , Μ. Γκιούρδας, 2006

David J. Barnes, Michael Kolling, Αντικειμενοστρεφής Προγραμματισμός σε Java, 3η έκδοση, Εκδόσεις Κλειδάριθμος, 2008

Page 4: OOP Lecture01 Uploaded [Compatibility Mode]

4

Λογισμικά για ανάπτυξη εφαρμογών σε Java http://java.sun.com

Τρέχουσες εκδόσεις της γλώσσας, εκπαιδευτικό υλικό

Για να αναπτύξετε προγράμματα χρειάζεται το Java Development Kit (JDK)

Για να εκτελέσετε προγράμματα χρειάζεται το Java Runtime Environment (JRE)

Υπάρχουν εκδόσεις του περιβάλλοντος Java για Windows, Linux, Solaris, MacOS κά

Λογισμικά για ανάπτυξη εφαρμογών σε Java Java 2 Platform Standard Edition: ότι χρειάζεστε για την μεταγλώττιση και εκτέλεση εφαρμογών Java http://java.sun.com/j2se

NetBeans: ενοποιημένο περιβάλλον ανάπτυξης, ένα από τα ευρύτερα χρησιμοποιούμενα, ελεύθερης διανομής εργαλεία ανάπτυξης Java http://www.netbeans.org/

Eclipse: περιβάλλον ανάπτυξης για μεταφορά κώδικα σε οποιαδήποτε γλώσσα http://www.eclipse.org/

Jbuilder: ενοποιημένο περιβάλλον ανάπτυξης Java από τη Borland http://borland.com/products/downloads/download_jbuilder.html

Page 5: OOP Lecture01 Uploaded [Compatibility Mode]

5

Λογισμικά για ανάπτυξη εφαρμογών σε Java BlueJ: εργαλείο σχεδιασμένο για να βοηθά στη διδασκαλία της αντικειμενοστρεφούς Java σε νέους προγραμματιστές http://blueJ.org

Στα πλαίσια του μαθήματος θα χρησιμοποιήσουμε : το ολοκληρωμένο περιβάλλον ανάπτυξης BlueJ και

την πλατφόρμα Java 2 Platform, Standard Edition (J2SE)

IDE?? Integrated development environment (IDE) –Ενοποιημένο περιβάλλον ανάπτυξης: software application που παρέχει εργαλεία στους computer programmers για software development. Ένα IDE συνήθως αποτελείται από: Source code editor

Compiler και/ή interpreter

Build automation εργαλεία

Debugger

Μερικές φορές, σύστημα ελέγχου εκδόσεων και διάφορα εργαλεία, τα οποία είναι ολοκληρωμένα για την απλοποίηση της κατασκευής ενός GUI. Πολλά σύγχρονα IDEs έχουν επίσης επιπλέον εργαλεία για αντικειμενοστρεφή ανάπτυξη λογισμικού

Page 6: OOP Lecture01 Uploaded [Compatibility Mode]

6

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

Πανεπιστήμιο ΠειραιάΤμήμα Ψηφιακών Συστημάτων

Οι διάφορες όψεις του προγραμματισμούΟ προγραμματισμός είναι: Έλεγχος: ο υπολογιστής κάνεις ΑΚΡΙΒΩΣ ότι του λέμε να κάνει

∆ιδασκαλία: ο υπολογιστής μπορεί να “μάθει” να κάνει νέα πράγματα μόνο αν του πούμε πώς!!!

Επίλυση προβλημάτων: πάντα να προσπαθούμε να κάνουμε τον υπολογιστή να κάνει κάτι χρήσιμο, π.χ. Να βρει μια βέλτιστη διαδρομή για να πάμε κάπου

∆ημιουργία: πρέπει να βρει μία καλή λύση από πολλές

Μοντελοποίηση: περιγράφει ιδιότητες και συμπεριφορές ενός συστήματος που αποτελείται από components (objects)

Αφαίρεση ή αφαιρετικότητα: προσδιορίζει σημαντικά χαρακτηριστικά χωρίς να χάνεται στις λεπτομέρειεις!

Χειροπιαστός: πρέπει να παρέχουμε λεπτομερείς οδηγίες για την ολοκλήρωση μιας εργασίας

Page 7: OOP Lecture01 Uploaded [Compatibility Mode]

7

Τι είναι πρόγραμμα Μοντέλο ενός πολύπλοκου συστήματος

Μοντέλο : απλουστευμένη αναπαράσταση αξιοπρόσεκτων χαρακτηριστικών ενός πράγματος (χειροπιαστών ή αφηρημένων)

Σύστημα : συλλογή συστατικών που συνεργάζονται

Ακολουθίες από εντολές εκφραζόμενες σε συγκεκριμένη γλώσσα προγραμματισμού : Σύνταξη (syntax): γραμματικοί κανόνες για τη κατάρτιση εντολών

Σημασιολογία (semantics) : σημασία/ερμηνεία των εντολών

Εντολές γραμμένες από προγραμματιστές Κωδικοποίηση σε συγκεκριμένη γλώσσα προγραμματισμού

Οι γλώσσες προγραμματισμού μας επιτρέπουν να εκφραζόμαστε ακριβέστερα από ότι οι φυσικές γλώσσες => τα προγράμματα δεν μπορούννα είναι διφορούμενα

Το σύνολο όλων των εντολών ονομάζεται πηγαίος κώδικας (source code)

Εκτελούνται από τον υπολογιστή εκτελώντας κάθε μία από τις επιμέρους εντολές

Βασικά γλωσσικά εργαλεία (1/2) Προετοιμαστής/∆ιορθωτής (Editor)

Επιτρέπει τη συγγραφή και την αλλαγή του προγράμματος

Προεπεξεργαστής (Preprocessor) Επεξεργάζεται το πρόγραμμα εκτελώντας απλούς συμβολικούς μετασχηματισμούς και παράγει ένα αντίστοιχο πρόγραμμα. Χρησιμοποιείται σε συμβολικές γλώσσες, τη Fortran (Ratfor), τη C, και τη C++

Συμβολομεταφραστής (Assembler) Μετατρέπει τη συμβολική γλώσσα του επεξεργαστή σε γλώσσα μηχανής

Μεταγλωττιστής (Compiler) Μεταφράζει μια γλώσσα υψηλού επιπέδου σε γλώσσα επιπέδου μηχανής

Page 8: OOP Lecture01 Uploaded [Compatibility Mode]

8

Βασικά γλωσσικά εργαλεία (2/2) ∆ιερμηνευτής (Interpreter)

Εκτελεί άμεσα γραµµή προς γραµµή τον πηγαίο κώδικα που είναι γραµµένος σε µια γλώσσα προγραµµατισµού υψηλού επιπέδου

Συνδέτης (Linker) Συρράφει τμήματα ενός προγράμματος που έχουν μεταγλωττιστεί ξεχωριστά σε ένα συνεχές πρόγραμμα

Φορτωτής (Loader) Φορτώνει το πρόγραμμα στη μνήμη του επεξεργαστή διορθώνοντας αναφορές σε σχετικές θέσεις μνήμης. Συνήθως τμήμα του λειτουργικού συστήματος

Εντοπιστής σφαλμάτων (Debugger) Επιτρέπει την εκτέλεση του προγράμματος βήμα-βήμα, την εξέταση και αλλαγή μεταβλητών του και γενικά ενέργειες που αποσκοπούν στην ανίχνευση λαθών που μπορεί να περιέχει το πρόγραμμα

Γλώσσες προγραμματισμού (1/5) Το βασικό εργαλείο του προγραµµατιστή!

Είναι ένα σύστηµα συµβολισµών µε το οποίο µπορεί να περιγράφει εργασίες που πρόκειται να εκτελεστούν από έναν υπολογιστή

Η ποικιλία των εργασιών που είναι επιθυµητό να εκτελούνται από τους υπολογιστές δικαιολογεί την ύπαρξη πληθώρας γλωσσών προγραµµατισµού που διαφέρουν: στην πολυπλοκότητα

στη µορφή

στη θεµατική περιοχή όπου απευθύνονται

στη φιλοσοφία προγραµµατισµού που υποστηρίζουν

Page 9: OOP Lecture01 Uploaded [Compatibility Mode]

9

Γλώσσες προγραμματισμού(2/5) Γλώσσα μηχανής (Machine language)

Συμβολική γλώσσα (Assembly language)

Γλώσσες υψηλού επιπέδου (High-level languages)

Γλώσσες προγραμματισμού(3/5) Γλώσσα μηχανής (Machine language)

Η φυσική γλώσσα του υπολογιστή

Ακολουθία από 0 και 1 (binary)

∆ιαφορετικοί υπολογιστές αντιλαμβάνονται-κατανοούν διαφορετικές ακολουθίες

∆υσνόητη για τον άνθρωπο : 01010001...

Συμβολική γλώσσα (Assembly language)

Μνημονικά ονόματα για γλώσσα μηχανής

low level: κάθε εντολή θεωρείται ως ένα σημείο πρωταρχική (minimal)

Επίσης δύσκολη στην κατανόηση από τον άνθρωπο :ADD.L d0,d2

Page 10: OOP Lecture01 Uploaded [Compatibility Mode]

10

Γλώσσες προγραμματισμού (4/5) Με τη χρήση γλωσσών χαµηλού επιπέδου είναι πρακτικά αδύνατο να εξασφαλιστεί η απαιτούµενη ποιότητα του λογισµικού

Οι γλώσσες προγραμματισμού χαµηλού επιπέδου χρησιµοποιούνται µόνο για την υλοποίηση τµηµάτων ενός συστήµατος λογισµικού που είναι εξαιρετικά απαιτητικό από πλευράς επιδόσεων ή που αφορά συγκεκριµένες συσκευές

Παράδειγμα µέρη λειτουργικών συστηµάτων

λογισµικό ειδικών απαιτήσεων, όπως αυτό που σχετίζεται µε συστήµατα πραγµατικού χρόνου (real time systems).

Γλώσσες προγραμματισμού(5/5) Γλώσσες υψηλού επιπέδου (High-level languages)

FORTRAN, Pascal, BASIC, C, C++, Java, κτλ

high level: κάθε εντολή συντίθεται από πολλές εντολές χαμηλού επιπέδου

Πιο κοντά στην Αγγλική γλώσσα

Ευκολότερη στην ανάγνωση και την κατανόηση:hypotenuse = Math.sqrt(opposite*opposite + adjacent*adjacent);

Page 11: OOP Lecture01 Uploaded [Compatibility Mode]

11

Εξέλιξη γλωσσών προγραμματισμού

5 γενιές γλωσσών προγραμματισμού!

Page 12: OOP Lecture01 Uploaded [Compatibility Mode]

12

Η 1η γενιά (1940s)

Η 2η γενιά (early 1950s)

Page 13: OOP Lecture01 Uploaded [Compatibility Mode]

13

Η 2η γενιά (early 1950s)

Η 2η γενιά (early 1950s)

Page 14: OOP Lecture01 Uploaded [Compatibility Mode]

14

Η 3η γενιά (1955-1965)

Η συμβατική διαδικασία προγραμματισμού

Page 15: OOP Lecture01 Uploaded [Compatibility Mode]

15

Η 4η γενιά γλωσσών (1980) Non-procedural Languages (problem-oriented)

User specifies what is to be done not how it is to be accomplished

Less user training is required

Designed to solve specific problems

Diverse Types of 4GLs Spreadsheet Languages

Database Query Languages

Decision Support Systems

Statistics

Simulation

Optimization

Decision Analysis

Presentation Graphics Systems

Είδη προγραμματισμού (1/3)

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

∆ομημένος/Συναρτησιακός Προγραμματισμός

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

Page 16: OOP Lecture01 Uploaded [Compatibility Mode]

16

Είδη προγραμματισμού (2/3)

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

Ενδείξεις / Ταμπέλες (Labels)

Ροή από επάνω προς τα κάτω

Ανακατευθύνσεις (GOTOs, Jumps)

Παραδείγματα: Απλή Basic, Assembly

∆ομημένος/Συναρτησιακός Προγραμματισμός

Βιβλιοθήκη συναρτήσεων (Functions Library)

Συνάρτηση (Function)

∆ιαδικασία (Procedure)

Κλήση Συναρτήσεων (Function Call)

Είδη προγραμματισμού (3/3)

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

Βιβλιοθήκη κλάσεων (Class Library)

Στη Java λέγεται και πακέτο (package)

Κλάση (Class)

Αντικείμενο / Στιγμιότυπο (Object / Instance)

Ιδιότητα (Attribute)

Μέθοδος (Method)

Κλήσεις σε αντικείμενα, μεθόδους αντικειμένων κτλ.

Page 17: OOP Lecture01 Uploaded [Compatibility Mode]

17

Παραδείγματα γλωσσών

Procedural Languages Individual statements

FORTRAN, ALGOL60, ALGOL68, Cobol, Pascal, C, Ada

Functional Languages When you tell the computer to do something it does it

LISP, Scheme, CLOS, ML, Haskell

Logic Languages Inference engine that drives things

Prolog, GHC

Object-oriented Languages Bring together data and operations

Smalltalk, C++, Eiffel, Sather, Python, Ada95, Java, OCAML

Προγραμματιστικά παραδείγματα

Page 18: OOP Lecture01 Uploaded [Compatibility Mode]

18

Παραδοσιακή αναπαράσταση

ΟΟ αναπαράσταση

Page 19: OOP Lecture01 Uploaded [Compatibility Mode]

19

Αντικείμενα

Όταν γράφουμε ένα πρόγραμμα σε μια αντικειμενοστρεφή γλώσσα προγραμματισμού, στην ουσία δημιουργούμε ένα μοντέλο ενός συστήματος του κόσμου.

Τα τμήματα από τα οποία αποτελείται το μοντέλο αυτό είναι τα αντικείμενα (objects) που εμφανίζονται στην περιοχή του προβλήματος.

Τα αντικείμενα αυτά πρέπει να αναπαρασταθούν στο μοντέλο του συστήματος που δημιουργούμε με το πρόγραμμα που αναπτύσσουμε.

Κλάσεις Τα αντικείμενα μπορούν να κατηγοριοποιηθούν σε κλάσεις (classes), με κάθε κλάση να περιγράφει – με ένα αφηρημένο τρόπο – όλα τα αντικείμενα ενός συγκεκριμένου είδους.

Ένα αντικείμενο, στην ουσία, περικλείει κάποια δεδομένα (πεδία) και ένα σύνολο λειτουργιών (μεθόδους) για την επεξεργασία τους.

Συνήθως, αναφερόμαστε σε ένα συγκεκριμένο αντικείμενο ως στιγμιότυπο (instance), προκειμένου να δώσουμε έμφαση στο γεγονός ότι το αντικείμενο αυτό ανήκει σε μια συγκεκριμένη κλάση.

Από τη στιγμή που θα ορίσουμε μια κλάση μπορούμε να δημιουργήσουμε όσα αντικείμενα – στιγμιότυπα χρειαζόμαστε για την επίλυση ενός προβλήματος.

Page 20: OOP Lecture01 Uploaded [Compatibility Mode]

20

Objects First with Java - A Practical Introduction using BlueJ, © David J.

Barnes, Michael Kölling

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

ΑντικείμεναΑναπαριστούν ‘πράγματα’ από τον πραγματικό κόσμο ή από κάποιο χώρο προβλήματος (π.χ: “το κόκκινο αυτοκίνητο στο parking”)

ΚλάσειςΑναπαριστούν όλα τα αντικείμενα ενός είδους

(π.χ: “αυτοκίνητο”)

Ορισμοί Αντικείμενο

Ένα αυτόνομο στοιχείο ενός προγράμματος υπολογιστή που παριστά μια σχετική ομάδα χαρακτηριστικών και είναι σχεδιασμένο να κάνει συγκεκριμένες εργασίες.

Κλάση

Πρότυπο που χρησιμοποιείται για τη δημιουργία πολλών αντικειμένων με παρόμοια χαρακτηριστικά (ιδιότητες και μεθόδους)

Κάθε αντικείμενο είναι μοναδικό, αλλά ταυτόχρονα ανήκει και σε μια κλάση (ομοειδών) αντικειμένων. Λέμε ότι το αντικείμενο είναι στιγμιότυπο της εν λόγω κλάσης.

Page 21: OOP Lecture01 Uploaded [Compatibility Mode]

21

Παράδειγμα

Κλάση: Περιγράφει μια οικογένεια οντοτήτων με ίδια χαρακτηριστικά και συμπεριφορά (δηλ. μια αφηρημένη οντότητα) Π.χ. σκύλος, τοστιέρα

Στιγμιότυπο: Περιγράφει μια συγκεκριμένη οντότητα, που παράγεται από μια αντίστοιχη κλάση, στην οποία λέμε ότι ανήκει Π.χ. Πλούτο, η_τοστιέρα_μου

Στατικότητα Κλάσης – ∆υναμικότητα Στιγμιοτύπων Κλάσης Κλάση: αφηρημένη έννοια (π.χ. οι τηλεοράσεις γενικώς)

Aντικείμενο: χειροπιαστή (απτή) οντότητα (η δική σου συγκεκριμένη συσκευή τηλεόρασης)

Μια κλάση ορίζει τι είναι ένα αντικείμενο, αλλά δεν είναι αυτό καθ’ εαυτό ένα αντικείμενο. Π.χ. αν μιλάμε για την οντότητα ‘γάτα’, η κλάση είναι ο ορισμός της γάτας, αλλά δεν χαϊδεύουμε τον ‘ορισμό’ της γάτας, αλλά μια συγκεκριμένη γάτα που έχουμε στο σαλόνι μας, ή που έχουν οι φίλοι μας, ή που συναντάμε κάπου κ.λ.π.

Όταν γράφουμε ένα πρόγραμμα σε αντικειμενοστρεφή γλώσσα προγραμματισμού, δεν ορίζουμε στο πρόγραμμαμεμονωμένα αντικείμενα, αλλά κλάσεις αντικειμένων. Τα αντικείμενα δημιουργούνται από το πρόγραμμά μας κατά το χρόνο της εκτέλεσής του.

Page 22: OOP Lecture01 Uploaded [Compatibility Mode]

22

Στατικότητα Κλάσης – ∆υναμικότητα Στιγμιοτύπων Κλάσης Η κλάση είναι στατική περιγραφή συνόλου αντικειμένων

ΕΝΩ κάθε αντικείμενο είναι μια δυναμική, πραγματική οντότητα

Από κάθε κλάση μπορούν να δημιουργηθούν πολλά αντικείμενα (ανάλογα με τις ανάγκες του προβλήματος) κατά τη διάρκεια εκτέλεσης του προγράμματος (στιγμιότυπα – instances) της κλάσης)

Κάθε κλάση δηλώνεται μόνο μια φορά σε ένα πρόγραμμα

Η δήλωση της κλάσης δεν δεσμεύει χώρο στη μνήμη, αλλά το κάθε αντικείμενο που θα δημιουργηθεί στο χρόνο εκτέλεσης καταλαμβάνει χώρο στη μνήμη για κάθε ιδιότητα

Η κλάση είναι μια compile-time οντότητα, το αντικείμενοαποτελεί run-time οντότητα

Στατικότητα Κλάσης – ∆υναμικότητα Στιγμιοτύπων Κλάσης

Περιγραφή, Ορισμός, “ΣΥΝΤΑΓΗ”, “ΚΑΛΟΥΠΙ”

ένα συγκεκριμένο αντικείμενο

Κλάση Μία

∆εν καταλαμβάνει χώρο στη μνήμη!

Χειροπιαστές Οντότητες

Αντικείμενα Πολλά

Καταλαμβάνουν χώρο στη μνήμη

Page 23: OOP Lecture01 Uploaded [Compatibility Mode]

23

Ποια είναι κλάσεις και ποια αντικείμενα? Η ποδοσφαιρική ομάδα του Ολυμπιακού

Ο παίκτης κ. Τάδε της ποδοσφαιρικής ομάδας του Παναθηναϊκού

Έντομο

Ελικόπτερο

Ο υπάλληλος κ. Γεωργίου του ΟΤΕ

Άνδρας

Το αεροπλάνο που θα πραγματοποιήσει τη σημερινή πτήση των 10.20 της Ολυμπιακής για Ρώμη

Εργαζόμενος

Θαλάσσιο όχημα

Το Πανεπιστήμιο Πειραιώς

Εντοπίστε ζεύγη με σχέση κλάσης – αντικειμένου Ηλεκτρονική συσκευή – Τηλεοπτική συσκευή

Τηλεοπτική συσκευή – Η τηλεόραση μάρκας τάδε, μεγέθους τάδε που έχω στο δωμάτιο μου

Θηλαστικό – Σκύλος

Σκύλος – Ο σκύλος του φίλου μου του Πέτρου που τον λένε Αζόρ

Ορθογώνιο σχήμα – Το ορθογώνιο με πάνω αριστερή κορυφή το σημείο (5,5) και κάτω δεξιά κορυφή το σημείο (10,3)

Σχήμα – Κυκλικό Σχήμα

Page 24: OOP Lecture01 Uploaded [Compatibility Mode]

24

Ορισμοί Ιδιότητα (attribute)

Είναι μια μεταβλητή. Μπορεί να είναι:

Αντικειμένου Μόνο του συγκεκριμένου αντικειμένου

Κλάσης Όλων των αντικειμένων που περιλαμβάνει μια κλάση

Κατ’ επέκταση και όλων των αντικειμένων των υποκλάσεων που περιλαμβάνει η κλάση

Το σύνολο των ιδιοτήτων ενός αντικειμένου καθορίζουν την κατάστασή του (state)

Ορισμοί

Μέθοδος (method) ή λειτουργία

∆ιαδικασία ή συνάρτηση που καθορίζει τη συμπεριφορά ενός αντικειμένου ή κλάσης

Αντικειμένου Μόνο του συγκεκριμένου αντικειμένου

Κλάσης Όλων των αντικειμένων που περιλαμβάνει μια κλάση

Κατ’ επέκταση και όλων των αντικειμένων των υποκλάσεων που περιλαμβάνει η κλάση

Το σύνολο των μεθόδων ενός αντικειμένου καθορίζουν τη συμπεριφορά του (behavior)

Page 25: OOP Lecture01 Uploaded [Compatibility Mode]

25

Βασικές έννοιες αντικειμενοστρεφούς προσέγγισης

Αντικείμενο (object)

Ιδιότητες (properties)

Μέθοδοι (methods)

Οι τρεις αυτές έννοιες βοηθούν στην κατανόηση των: Ενθυλάκωση (encapsulation)

Τμηματοποίηση (modularity)

Αφαίρεση (abstraction)

Πολυμορφισμός (polymorphism)

Βασικές έννοιες αντικειμενοστρεφούς προσέγγισης

Τα αντικείμενα οργανώνονται συνήθως σε:

Κλάσεις (classes)

Όψεις/Στιγμιότυπα (instances)

Η οργάνωση των κλάσεων χρησιμοποιείται για να γίνει το μοντέλο του φυσικού κόσμου. Σε αυτό, μεταξύ των άλλων βοηθούν και οι έννοιες:

Ιεραρχίες (hierarchies)

Κληρονομικότητα (inheritance) Οι ορισμοί των κλάσεων και οι ιεραρχίες τους προορίζονται

για να αναπαραστήσουν ένα πρόβλημα ή τη λύση του, ΕΠΟΜΕΝΩΣ δύο διαφορετικές αναπαραστάσεις μπορούν να είναι εξίσου σωστές ή χρήσιμες.

Page 26: OOP Lecture01 Uploaded [Compatibility Mode]

26

Αντικείμενο Αντικείμενο λογισμικού: μοντελοποιεί, αναπαριστά, αντιστοιχεί σε κάποιο αντικείμενο του πραγματικού κόσμου

Αποτελείται από στατικό μέρος (ομαδοποίηση μεταβλητών) και δυναμικό (σχετιζόμενες μέθοδοι)

Το αντικείμενο είναι μια λογική οντότητα η οποία συνδυάζει δεδομένα και επεξεργασίες για να εκπληρώσει το ρόλο της μέσα στο σύστημα

∆ομή αντικειμένου

Στατικό μέρος (private) ∆εδομένα (Μεταβλητές)

∆υναμικό μέρος (public) ∆ιαδικασίες (Μέθοδοι)

Page 27: OOP Lecture01 Uploaded [Compatibility Mode]

27

Αντικείμενο Σύμφωνα με τον Booch (1991), για να οριστεί ένα αντικείμενο θα πρέπει να έχει τρεις βασικές ιδιοκτησίες:

Ταυτότητα, δηλαδή το μοναδικό χαρακτηριστικό το οποίο αντιστοιχεί σε μια οντότητα του πραγματικού κόσμου, το όνομα με το οποίο ξεχωρίζει από τα υπόλοιπα αντικείμενα.

Κατάσταση (state), η οποία καθορίζεται από τις ιδιοκτησίες του/στατικές ιδιότητες και τις τιμές για κάθε μία από αυτές.

Συμπεριφορά (behaviour), η οποία αναφέρεται στο πώς δρα το αντικείμενο μέσα στο περιβάλλον του, δηλαδή πώς αντιδρά σε κάθε ενεργοποίηση των μεθόδων του.

Αντικείμενο - παράδειγμα

Σύστημα που ελέγχει ένα φράγμα σε ποταμό

Φράγμα: αντικείμενο το οποίο διαθέτει

Καταστάσεις, πχ: πλήρως_ανοιχτό (όπου το νερό του ποταμού ρέει ανεμπόδιστα μέσω του φράγματος)

πλήρως_κλειστό (όπου δεν επιτρέπεται σε νερό του ποταμού να περάσει διαμέσου του φράγματος)

Συμπεριφορές, πχ: ήχος_προειδοποίησης: όταν το φράγμα πρόκειται να αλλάξει κατάσταση από την κλειστή ανοιχτή, μπορεί να στέλνει μια προειδοποίηση στους ανθρώπους που βρίσκονται για αναψυχή στις εκβολές του ποταμού, για να τους ειδοποιήσει ότι το επίπεδο του νερού του ποταμού πρόκειται να ανέβει.

Page 28: OOP Lecture01 Uploaded [Compatibility Mode]

28

Περισσότεροι ορισμοί Κλάση (class)

Πρότυπο, καλούπι (template) που περιλαμβάνει τον ορισμό, τη δήλωση δεδομένων και τις πράξεις που γίνονται σε αυτά, ορίζει τις κοινές μεταβλητές και μεθόδους όλων των ομοειδών αντικειμένων (με ίδια δομή και συμπεριφορά)

Όψη/Στιγμιότυπο (instance) Είναι η συγκεκριμένη εμφάνιση που προσδιορίζει με ακρίβεια ένα μέλος μιας κλάσης

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

Κάθε αντικείμενο ανήκει σε μία κλάση

Πεδίο (field, attribute) Μία μεταβλητή που παριστάνει ένα χαρακτηριστικό του αντικειμένου

Το σύνολο των πεδίων αποτελεί την κατάσταση του αντικειμένου

Παραδείγματα κλάσεων...

Κλάση ‘Φυτό’

Ιδιότητες:

ύψος, ηλικία, χρώμα φύλλων, βγάζει άνθη ή όχι

Μέθοδοι:

φυτεύεται, αναπτύσσεται, δημιουργεί χλωροφύλλη, μαραίνεται

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

κάθε ένα συγκεκριμένο φυτό από τα φυτά της βεράντας μας, κάθε συγκεκριμένο φυτό στα παρτέρια μιας συγκεκριμένης πλατείας ή ενός συγκεκριμένου κήπου κ.λ.π.

Page 29: OOP Lecture01 Uploaded [Compatibility Mode]

29

Παραδείγματα κλάσεων...

Κλάση ‘Τραγουδιστής’

Ιδιότητες:

ύψος, ηλικία, φύλο, χρώμα ματιών, χρώμα μαλλιών, είδος τραγουδιών που τραγουδάει, χροιά φωνής, εύρος συχνοτήτων της φωνής του/της

Μέθοδοι:

τραγουδάει, κινείται, υπογράφει αυτόγραφα, ντύνεται

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

Η Αρβανιτάκη, ο Παπακωνσταντίνου, ο Μαχαιρίτσας, κ.λ.π.

Παραδείγματα κλάσεων...

Κλάση ‘Μοτοσικλέτα’

Ιδιότητες:

στοιχεία πινακίδων, μάρκα, μοντέλο, έτος κυκλοφορίας, τρέχουσα ταχύτητα, μέγιστη ταχύτητα, κυβισμός, τιμή

Μέθοδοι:

ξεκινά, κινείται, επιταχύνει, επιβραδύνει, φρενάρει, στρίβει, σταματά

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

η συγκεκριμένη μοτοσικλέτα που είναι παρκαρισμένη κάτω από το μπαλκόνι μου, μια Honda 250 με αριθμό κυκλοφορίας ΑΧΙ 1234, η μοτοσικλέτα του συμφοιτητή μου κ.λ.π

Page 30: OOP Lecture01 Uploaded [Compatibility Mode]

30

Προσδιορισμός Ιδιοτήτων Κλάσεων Όταν καλούμαστε να προσδιορίσουμε ιδιότητες (ή ιδιοχαρακτηριστικά) σε κλάσεις, θα πρέπει να θυμόμαστε ότι:

Ιδιότητες είναι ότι περιγράφει την κατάσταση (state) κάθε αντικειμένου της κλάσης και θα πρέπει να μπορούν να παρασταθούν στο λογισμικό με μεταβλητές(variables) διαφόρων τύπων (ακέραιες, πραγματικές, λογικές (boolean) κλπ)

∆ΕΝ συμπεριλαμβάνουμε στις ιδιότητες περιττές πληροφορίες, ούτε ιδιότητες που αποτελούν συνάρτηση άλλων.

Προσδιορισμός Μεθόδων Κλάσεων Όταν καλούμαστε να προσδιορίσουμε μεθόδους σε κλάσεις, θα πρέπει να θυμόμαστε ότι:

Οι μέθοδοι είναι ενέργειες που μπορεί να εκτελέσουν τα αντικείμενα της κλάσης ή μπορούν να εκτελεστούν επί αυτών και στο λογισμικό παριστάνονται με τμήματα κώδικα που υλοποιούν τις λειτουργίες που απαιτούνται για να γίνουν αυτές οι ενέργειες.

Page 31: OOP Lecture01 Uploaded [Compatibility Mode]

31

Ποιες είναι ιδιότητες και ποιες είναι μέθοδοι των κλάσεων? Τηλεφωνική συσκευή: επανάληψη κλήσης, χρώμα, μέγεθος, μάρκα, πλήθος πλήκτρων, ακουστικό, ενσύρματη ή ασύρματη, κυρίως σώμα τηλεφώνου

Φυτό: ρίζες, φύλλα, λουλούδια, ανθίζει ή όχι, χρειάζεται πότισμα, ύψος, ηλικία, χρώμα φύλλων

Μοτοσικλέτα: τιμόνι, ρόδες, φρένο, χρώμα, μάρκα, κυβικά, τιμή, φρενάρισμα, εκκίνηση, μήκος

Ορθογώνιο: μήκος, ύψος, μήκος διαγωνίου, υπολογισμός εμβαδού, υπολογισμός μήκους περιφέρειας

Ποιες είναι ιδιότητες και ποιες είναι μέθοδοι των κλάσεων? Κύκλος: συντεταγμένες κέντρου, ακτίνα, διάμετρος, υπολογισμός εμβαδού, υπολογισμός μήκους περιφέρειας

Ηθοποιός: πόδια, απαγγελία διαλόγων, διψάει, κεφάλι, ύψος, παίξιμο ρόλου, βάρος, χρώμα ματιών, χρώμα μαλλιών, ηλικία, φύλο, ρεπερτόριο ρόλων, είδος υποκριτικής (δραματικός, κωμικός κλπ.)

Χορευτής: κεφάλι, ύψος, είδος χορών που χορεύει, βάρος, χρώμα ματιών, χρώμα μαλλιών, ηλικία, φύλο, κάνει πιρουέτες

Page 32: OOP Lecture01 Uploaded [Compatibility Mode]

32

Περισσότεροι ορισμοί Μέθοδος (method, member function)

Οι μέθοδοι είναι οι πράξεις που εκτελεί ένα αντικείμενο όταν λαμβάνει ένα μήνυμα. Οι πράξεις μπορούν να εκτελούνται μόνο αν είναι γνωστές στο αντικείμενο.

Το σύνολο των μεθόδων ενός αντικειμένου καθορίζει τη συμπεριφορά του

Μηνύματα (messages) Τα αντικείμενα επικοινωνούν και αλληλεπιδρούν μεταξύ τους στέλνοντας μηνύματα.

Τα μηνύματα είναι αιτήσεις που στέλνονται από ένα αντικείμενο σε ένα άλλο έτσι ώστε το τελευταίο να εκτελέσει μια λειτουργία.

Οποιαδήποτε επιπλέον πληροφορία απαιτείται δίνεται με το μήνυμα και αποτελεί τις παραμέτρους του μηνύματος

Περισσότεροι ορισμοί Τμηματοποίηση είναι ο χωρισμός πολύπλοκων συστημάτων σε ενότητες (modules)

Αφαίρεση είναι η απλοποιημένη περιγραφή και καθορισμός του συστήματος έτσι ώστε να δίνεται έμφαση σε ορισμένες λεπτομέρειες και να αγνοούνται οι άλλες

Page 33: OOP Lecture01 Uploaded [Compatibility Mode]

33

Αντικείμενο

Πεδία

Μέθοδοι

Ιδιωτικό μέρος

∆ημόσιο μέρος με τις λεπτομέρειες υλοποίησης των λειτουργιών

Αντικείμενο

ΑΡΑ Ενθυλάκωση (encapsulation) πληροφοριών: ο τρόπος με τον οποίο οι μέθοδοι σχηματίζουν ένα προστατευτικό όριο γύρω από το αντικείμενο, απομονώνοντάς το από πράγματα που μπορούν να συμβούν σε άλλα αντικείμενα

Όνομα κλάσης

Ενθυλάκωση

∆ιαμερισματοποίηση (compartmentalisation) δομής και συμπεριφοράς έτσι ώστε οι λεπτομέρειες της υλοποίησης ενός αντικειμένου είναι κρυμμένες

Page 34: OOP Lecture01 Uploaded [Compatibility Mode]

34

Ενθυλάκωση

Οι ιδιότητες αποκρύπτονται από την συμπεριφορά του αντικειμένου ∆εν χρειάζεται να ξέρεις πώς λειτουργεί η μηχανή για να οδηγήσεις ένα αυτοκίνητο

Μεγάλο μέρος της λειτουργικότητας έιναι αόρατο Γυρίζεις ένα διακόπτη – το ραδιόφωνο αρχίζει

Πατάς ένα πετάλι – το αυτονίητο επιταχύνει

Ενθυλάκωση Η απόκρυψη λεπτομερειών υλοποίησης ενός αντικειμένου. Οι διαδικασίες κρύβονται από το χρήστη και τα ίδια τα δεδομένα προσδιορίζουν τους τρόπους διαχείρισής τους

Απόκρυψη πληροφοριών (Information Hiding)

Ελεγχόμενη προσβασιμότητα/ορατότητα των ιδιοτήτων/μεθόδων του αντικειμένου Public: μπορούν να χρησιμοποιηθούν (κληθούν/προσπελαστούν) από όλο το πρόγραμμα

Private: που χρησιμοποιούνται μόνο από αντικείμενα της κλάσης

Protected,Friend

Το σύνολο των «ορατών» μεθόδων αποτελούν τη διαπροσωπεία (interface) του αντικειμένου Ό,τι μπορώ να ζητήσω από ένα αντικείμενο μέσα στο πρόγραμμά μου?

Στην ουσία είναι οι public λειτουργίες

Page 35: OOP Lecture01 Uploaded [Compatibility Mode]

35

Ενθυλάκωση Η ενθυλάκωση (encapsulation) είναι η συγκέντρωση, ομαδοποίηση δεδομένων και πράξεων στην ίδια δομή

Με αυτό το τρόπο «κρύβονται» οι εσωτερικές λεπτομέρειες της υλοποίησης των ενοτήτων. (Οι εσωτερικές λεπτομέρειες περιλαμβάνουν δεδομένα για την κατάσταση των ενοτήτων και τις διαδικασίες που καθορίζουν τη συμπεριφορά τους).

Πλεονεκτήματα

Αρθρωτά προγράμματα όπου ο πηγαίος κώδικας για ένα αντικείμενο γράφεται και συντηρείται ανεξάρτητα από άλλα

Έχουμε απόκρυψη πληροφορίας

Ενθυλάκωση Όχι ακριβώς απόκρυψη πληροφοριών!!!

Το προστατευτικό όριο της ενθυλάκωσης μπορεί να είναι στην πραγματικότητα διαφανές ή ημιδιαφανές.

∆ηλαδή, μερικές φορές μπορούμε αν δούμε διαμέσου του προστατευτικού ορίου (είναι διαφανές και ορατό), αλλά μερικές φορές δεν μπορούμε (είναι ημιδιαφανές)

Η αφαίρεση μας βοηθά να καθορίσουμε τις συγκεκριμένες πληροφορίες που θα είναι ορατές, και τις πληροφορίες που θα αποκρύπτονται.

Η ενθυλάκωση είναι τότε η τεχνική που πακετάρει τις πληροφορίες με τέτοιο τρόπο ώστε να αποκρύπτει αυτές που πρέπει να είναι κρυμμένες και να καθιστά ορατές αυτές που πρέπει να είναι ορατές.

Page 36: OOP Lecture01 Uploaded [Compatibility Mode]

36

Πολυμορφισμός

Πολυμορφισμός είναι η ιδιότητα που επιτρέπει να σταλεί το ίδιο μήνυμα σε διαφορετικά αντικείμενα και το κάθε αντικείμενο να εκτελέσει μια λειτουργία που αντιστοιχεί στην τάξη που ανήκει (δυνατότητα χρήσης κοινών ονομάτων για διαφορετικές μεθόδους) Π.χ. Η εντολή accelerate είναι η ίδια ανεξαρτήτως για τα διαφορετικά αντικείμενα airplane, car, bus, κτλ

π.χ. η κλάση των πολυγώνων. Για κάθε πολύγωνο υπολογίζεται το εμβαδό, αλλά ο υπολογισμός του εμβαδού ενός τριγώνου είναι διαφορετικός από τον υπολογισμό του εμβαδού ενός ορθογωνίου

∆ιαδικαστικός προγραμματισμός vsπολυμορφισμού

Page 37: OOP Lecture01 Uploaded [Compatibility Mode]

37

Παραδείγματα αντικειμένων που ομαδοποιούνται σε κλάσεις

Κλάσεις - παράδειγμα

Κλάση: η ομάδα των ελεφάντων

Χαρακτηριστικά της κλάσης των ελεφάντων: χρώμα, μέγεθος, τοποθεσία (Αφρικανικός ελέφαντας ή Ασιατικός ελέφαντας)

Ενέργειες ή συμπεριφορές της κλάσης: ο ελέφαντας κινείται, τρώει, και πλένεται

Κλάση: αεροπλάνο

Xαρακτηριστικά της κλάσης του αεροπλάνου: χρώμα, μέγεθος, ταχύτητα, αριθμός επιβατών

Eνέργειες ή συμπεριφορές της κλόπως απογείωση, προσγείωση, επισκευή

Page 38: OOP Lecture01 Uploaded [Compatibility Mode]

38

Αναπαράσταση κλάσεων - παράδειγμα

Ελέφαντας

Χρώμα: string

Αριθμός χαυλιοδόντων: integer

Τοποθεσία: string

Βάρος: real

Ύψος: real

κίνηση_προς (τοποθεσία)

πλύσιμο (ημερομηνία)

λήψη_τροφής ( ποσότητα, ημερομηνία, ώρα)

Αναπαράσταση κλάσεων - παράδειγμα

Μάθημα

Κωδικός μαθήματος

Θεματική ενότητα

Τίτλος

∆ιδάσκων

Προσθήκη Μαθήματος ()

∆ιαγραφή Μαθήματος ()

Μεταβολή στοιχείων Μαθήματος ()

Ανάθεση Μαθήματος ()

Page 39: OOP Lecture01 Uploaded [Compatibility Mode]

39

Αναπαράσταση κλάσεων - παράδειγμα

Καθηγητής

Αρ. Ταυτότητας

Όνομα

Επώνυμο

∆ιεύθυνση

Τηλέφωνο

Προσθήκη Καθηγητή ()

∆ιαγραφή Καθηγητή ()

Μεταβολή στοιχείων Καθηγητή ()

Στιγμιότυπα - παράδειγμα

Κάθε αντικείμενο είναι ένα στιγμιότυπο (instance) μιας κλάσεις!

∆ΗΛΑ∆Η Κάθε στιγμιότυπο διαθέτει τις δικές του τιμές χαρακτηριστικών ΑΛΛΑ μοιράζεται τα ονόματα των χαρακτηριστικών και τις συμπεριφορές με τα υπόλοιπα στιγμιότυπα της κλάσης

Κλάση: ελέφαντες με κοινές ιδιότητες όπως οι χαυλιόδοντες και τα αυτιά

ΑΛΛΑ οι Ασιατικοί ελέφαντες διαθέτουν κάποια χαρακτηριστικά που είναι διαφορετικά από τους Αφρικανικούς

Page 40: OOP Lecture01 Uploaded [Compatibility Mode]

40

Στιγμιότυπα κλάσεων (αντικείμενα)

Καθηγητής 01

Αρ. Ταυτότητας: Β987654

Όνομα: Νικόλαος

Επώνυμο: Νικολάου

∆ιεύθυνση: Χ. Τρικούπη και Φάωνος

Τηλέφωνο: 2251036600

Προσθήκη Καθηγητή ()

∆ιαγραφή Καθηγητή ()

Μεταβολή στοιχείων Καθηγητή ()

Στιγμιότυπα κλάσεων (αντικείμενα)

Καθηγητής 02

Αρ. Ταυτότητας: Α123456

Όνομα: Γεωργία

Επώνυμο: Γεωργίου

∆ιεύθυνση: Σαπφούς 5

Τηλέφωνο: 2251036699

Προσθήκη Καθηγητή ()

∆ιαγραφή Καθηγητή ()

Μεταβολή στοιχείων Καθηγητή ()

Page 41: OOP Lecture01 Uploaded [Compatibility Mode]

41

Στιγμιότυπα κλάσεων (αντικείμενα)

Μάθημα 01

Κωδικός μαθήματος: ΠΛΡ-111

Θεματική ενότητα: ΠΛΗΡΟΦΟΡΙΚΗ

Τίτλος: Ανάλυση&Σχεδιασμός Συστημάτων

∆ιδάσκων: Β987654

Προσθήκη Μαθήματος ()

∆ιαγραφή Μαθήματος ()

Μεταβολή στοιχείων Μαθήματος ()

Ανάθεση Μαθήματος ()

Κληρονομικότητα Φανταστείτε ένα πρόβλημα που έχει ως αντικείμενα πελάτες, υπαλλήλους κτλ

Τόσο οι πελάτες όσο και οι υπάλληλοι είναι ανθρωποι Θα πρέπει να φτιάξω 2 κλάσεις. Κάποια από τα χαρακτηριστικά / λειτουργίες αυτών είναι κοινά.

π.χ. Ύψος, βάρος κλπ.

Θα έχω πολλές φορές τον ίδιο κώδικα!!!

Για να το αποφύγω και να έχω καλύτερη επαναχρησιμοποίηση δεδομένων και λειτουργιών. Ορίζω μια Κλάση Βάσης (ή βασική κλάση), ονόματι άνθρωπος

Αυτή θα συγκεντρώνει τα κοινά χαρακτηριστικά/λειτουργίες

Από την κλάση αυτή θα κληρονομούν οι κλάσεις πελάτης και υπάλληλος

Page 42: OOP Lecture01 Uploaded [Compatibility Mode]

42

Κληρονομικότητα

Η δυνατότητα δημιουργίας νέων αντικειμένων παίρνοντας ως βάση ένα άλλο ήδη υπάρχον

Το νέο αντικείμενο θα έχει τα χαρακτηριστικά του παλιού ενώ θα μπορεί να τα τροποποιήσει, να τα επεκτείνει και να προσθέσει καινούρια για να καλύψει συγκεκριμένες ανάγκες Απλή: Κάθε κλάση έχει μία κλάση-πατέρα

Πολλαπλή: Κάθε κλάση έχει πάνω από μία κλάση-πατέρα

∆ύο όψεις: Η κλάση-παιδί είναι εξειδίκευση (specialization) της κλάσης-πατέρα

Η κλάση-πατέρας είναι γενίκευση (generalization) της κλάσης-παιδί

Κληρονομικότητα Κληρονομικότητα είναι η δυνατότητα να ορίζει κανείς καινούργια αντικείμενα, που είναι ήδη απόγονοι κάποιου άλλου (υπαρκτού) αντικειμένου. Ο απόγονος ενός αντικειμένου έχει τη δυνατότητα χρήσης όλων των δεδομένων και μεθόδων, που κληρονομεί από τον πρόγονό του, ενώ παράλληλα διατηρεί τα δεδομένα και τις μεθόδους που ο ίδιος ορίζει.

Page 43: OOP Lecture01 Uploaded [Compatibility Mode]

43

Κληρονομικότητα Επιτρέπει σε κλάσεις να μοιράζονται χαρακτηριστικά και

συμπεριφορές άλλων κλάσεων.

Για να κατασκευάσουμε αυτή την ιεραρχία ξεκινάμε ορίζοντας γενικά μία κλάση και στη συνέχεια την εκλεπτύνουμε σε πιο εξειδικευμένες υποκλάσεις.

Μία κλάση (υποκλάση/subclass) μπορεί να κληρονομήσει τα δεδομένα και τις μεθόδους (δομή, συμπεριφορά και χαρακτηριστικά) μίας άλλης κλάσης, της υπερκλάσης (superclass).

Σχέση μεταξύ ενός πιο γενικού στοιχείου και ενός πιο ειδικού στοιχείου, το ειδικό στοιχείο περιέχει περισσότερες πληροφορίες από το γενικό στοιχείο

Οι υποκλάσεις προσφέρουν εξειδικευμένη συμπεριφορά από τα κοινά στοιχεία που προσφέρει η υπερκλάση.

∆υνατότητα επαναχρησιμοποίησης κώδικα υπερκλάσης

Κληρονομικότητα - Παράδειγμα

Page 44: OOP Lecture01 Uploaded [Compatibility Mode]

44

∆ημιουργία ιεραρχίας

Καύσιμο ντίζελ

Οκτάνια

Κόστος ανά λίτρο

Ποσότητα_που_απομένει()

Καύσιμο αυτοκινήτου

Οκτάνια

Κόστος ανά λίτρο

Ποσότητα_που_απομένει()

Καύσιμο

Οκτάνια

Κόστος ανά λίτρο

Ποσότητα_που_απομένει()

Καύσιμο ντίζελ Καύσιμο αυτοκ

Αφηρημένη τάξη

Εύκολη προσθήκη νέου καυσίμου

ΟΟ στυλ σχεδιασμού και προγραμματισμού 3 κλειδιά στην ΟΟ Τεχνολογία

Αντικείμενα (Objects)

Μηνύματα (Messages)

Κλάσεις (Classes)

Μετάφραση για προγραμματιστές δομημένου στυλ Μεταβλητές (variables)

Κλήσεις συναρτήσεων (function calls)

Τύποι δεδομένων (data types)

Page 45: OOP Lecture01 Uploaded [Compatibility Mode]

45

Εξέλιξη μεθόδων σχεδιασμού λογισμικού

Πλεονεκτήματα αντικειμενοστρεφούς προσέγγισης Αφαίρεση δεδομένων(ενθυλάκωση-απόκρυψη δεδομένων, υπερφόρτωση μεθόδων-πολυμορφισμός)

Τμηματικότητα(κλάσεις, υποκλάσεις)

Επεκτασιμότητα(αλλαγές σ’ ένα αντικείμενο ελάχιστη επίπτωση έχουν στα άλλα)

Επαναχρησιμοποίηση(βιβλιοθήκες αντικειμένων)

Κατανοησιμότητα(απόρροια των δύο πρώτων)

Page 46: OOP Lecture01 Uploaded [Compatibility Mode]

46

Πλεονεκτήματα αντικειμενοστρεφούς προσέγγισης

Ιστορία της Java

Βασίστηκε στην C και στην C++ (SUN MICROSYSTEMS)

Το αρχικό της όνομα ήταν Oak (βελανιδιά).

Αναπτύχθηκε από τον James Gosling το 1991 για «έξυπνες» ηλεκτρονικές συσκευές Επειδή δεν αναπτύχθηκε η αγορά, το project κινδύνευσε να ακυρωθεί

Με την έκρηξη του Internet το 1993,το project σώθηκε

Η Java χρησιμοποιήθηκε για τη δημιουργία σελίδων με δυναμικό περιεχόμενο

Η Java ανακοινώθηκε επίσημα το 1995

Page 47: OOP Lecture01 Uploaded [Compatibility Mode]

47

Java editions

1996 - JavaTM 1.0

1997 - JavaTM 1.1

1998 - JavaTM 1.2 - aka Java 2 Platform

2000 - JavaTM 2 Rel.1.3Stand.Ed.(J2SE)

2002 - JavaTM 2 Rel. 1.4 J2SE

2004 - JavaTM 2 Rel. 1.5 - aka J2SE 5.0

2006 - JavaTM 2 Rel. 1.6 - aka Java SE 6

2011 - JavaTM 2 Rel. 1.7 - aka Java SE 7

Η Java και ο Παγκόσμιος Ιστός (WWW) Ένα μέρος της επιτυχίας της Java οφείλεται στο γεγονός ότι είναι η πρώτη γλώσσα που σχεδιάστηκε για να εκμεταλλευτεί τη δύναμη του Παγκόσμιου Ιστού, ο οποίος είχε αναδειχθεί λίγο πριν την κυκλοφορία της Java το 1995

Πέρα από τα πιο παραδοσιακά προγράμματα εφαρμογών,η Java καθιστά δυνατή τη συγγραφή μικρών αλληλεπιδραστικών προγραμμάτων, που λέγονται μικροεφαρμογές (applets), τα οποία εκτελούνται κάτω από τον έλεγχο ενός φυλλομετρητή ιστού

Page 48: OOP Lecture01 Uploaded [Compatibility Mode]

48

Βασικά Χαρακτηριστικά της Java… Γλώσσα προγραμματισμού της εταιρίας SUN

Ανεξάρτητη πλατφόρμας λειτουργικού συστήματος και hardware, βάσει της τεχνολογίας Java Virtual Machine (JVM)

Γλώσσα Αντικειμενοστρeφούς Προγραμματισμού (Object-Oriented)

∆ιατίθεται δωρεάν το περιβάλλον εκτέλεσής της (runtime environment) και το περιβάλλον ανάπτυξης(development kit)

Βασικά Χαρακτηριστικά της Java… Η Java σχεδιάστηκε με στόχο να είναι:

Αντικειμενοστρεφής

Κατανεμημένη

Απλή

Πολυνηματική (multi-threaded)

Ασφαλής

Ανεξάρτητη υπολογιστικής πλατφόρμας

WORA (Write Once, Run Anywhere)

Κατάλληλη για εφαρμογές στο Internet στον πελάτη (applets) και στον εξυπηρετητή (servlets)

Page 49: OOP Lecture01 Uploaded [Compatibility Mode]

49

Ανεξαρτησία..Τι εννοούμε λέγοντας:

«Η Java είναι ανεξάρτητη πλατφόρμας συστήματος»

Βασικά Χαρακτηριστικά της Java… Παρέχει τυποποιημένες βιβλιοθήκες κλάσεων (Java

class libraries) μέσω των οποίων υποστηρίζονται

Γραφικά και γραφικές διεπαφές (GUI)

Πολυμέσα

Επικοινωνία πάνω σε δίκτυα

Επαναχρησιμοποιούμενες συνιστώσες (components)

Σύνδεση με βάσεις δεδομένων

...

Page 50: OOP Lecture01 Uploaded [Compatibility Mode]

50

Java Class Libraries

Προγράμματα Java Αποτελούνται από τμήματα που ονομάζονται classes

Οι classes περιέχουν μεθόδους που επιτελούν κάποιον υπολογισμό

Class libraries Γνωστές και σαν Java API (Applications Programming Interface)

Πλούσια συλλογή από ήδη ορισμένες κλάσεις, έτοιμες για χρήση

∆ύο μέρη στην εκμάθηση της Java: Εκμάθηση της ίδιας της γλώσσας ώστε να μπορεί ο χρήστης να φτιάξει τις δικές του κλάσεις

Εκμάθηση της χρήσης των ήδη υπαρχόντων class libraries

Παραδοσιακός τρόπος μεταγλώττισης προγραμμάτων

Source code

compiler Object code

Linker Execu-table program

Loader Running program

Edit & Debug

Libraries & other pre-compiled components

Page 51: OOP Lecture01 Uploaded [Compatibility Mode]

51

Java compilation & interpretation

Source code

Java compiler

Java bytecodes

Java interpreter or JVM

Running program

Edit & Debug

Libraries

Στάδια κατά τη διεργασία προγραμματισμού Κάθε σύστημα υπολογιστών καταλαβαίνει μια γλώσσα χαμηλού επιπέδου που είναι ειδικά για το συγκεκριμένο τύπο υλικού και λέγεται γλώσσα μηχανής (ΓΜ)

Οι προγραμματιστές γράφουν το λογισμικό τους σε μιαγλώσσα υψηλότερου επιπέδου (ΓΥΕ) που είναι πιο κατανοητή από τους ανθρώπους

Για να εκτελέσει ένα πρόγραμμα γραμμένο σε μια ΓΥΕ, ο υπολογιστής πρέπει να ακολουθήσει τη μία από τις δύο στρατηγικές: Η κλασσική προσέγγιση είναι να μεταφράσει τη ΓΥΕ σε μια ΓΜ. Αυτή η στρατηγική λέγεται μεταγλώττιση.

Μια δεύτερη προσέγγιση είναι να προσομοιώσει τη λειτουργία του προγράμματος χωρίς στην πραγματικότητα να το μεταφράσει σε ΓΜ. Αυτή η στρατηγική λέγεται (δι)ερμηνεία.

Page 52: OOP Lecture01 Uploaded [Compatibility Mode]

52

Στάδια κατά τη διεργασία προγραμματισμού Η Java χρησιμοποιεί μια υβριδική στρατηγική:

Τα προγράμματα μεταγλωττίζονται σε μια ενδιάμεση γλώσσα που παίζει το ρόλο ΓΜ για την Java Virtual Machine (JVM)

Η Java μετά ερμηνεύει αυτά τα προγράμματα προσομοιώνοντας την JVM

Το JRE αποτελείται από τη JVM και τις τυποποιημένες βιβλιοθήκες κλάσεων

Η διεργασία μεταγλώττισης

#include <stdio.h>

main() printf("hello\n");

010010010101100100010000101000111010110110100111010101100

μεταγλωττιστής

πηγαίο αρχείο Αντικειμενικό αρχείο

100101101011000101101001001010010110110101101011010100101

άλλα αντικειμενικά αρχείακαι βιβλιοθήκες

010010010101100100010000101000111010110110100111010101100100101101011000101101001001010010110110101101011010100101

Εκτελέσιμο αρχείο

πρόγραμμασύνδεσης

Page 53: OOP Lecture01 Uploaded [Compatibility Mode]

53

Ο (δι)ερμηνευτής Java

import acm.program.*;

public class Hellopublic void run() println("hello");

CA FE BA BE 00 03 0000 16 07 00 1A 07 0000 04 00 07 0C 00 1301 00 16 2B 4C 6A 61

μεταγλωττιστής

πηγαίο αρχείο αρχείο class

47 72 61 70 68 69 632D 00 1F 08 00 0F 0714 0A 00 02 00 08 0A00 18 0C 00 17 00 1C

άλλα αρχεία class

CA FE BA BE 00 03 0000 16 07 00 1A 07 0000 04 00 07 0C 00 1301 00 16 2B 4C 6A 6147 72 61 70 68 69 632D 00 1F 08 00 0F 0714 0A 00 02 00 08 0A00 18 0C 00 17 00 1C

αρχειοθήκη JAR

πρόγραμμασύνδεσης

JVM

Hello

hello

Πώς δουλεύει η Java… Ο Java compiler μεταφράζει Java

source code σε μία ειδική αναπαράσταση που λέγεται bytecode Ο Java bytecode δεν είναι η γλώσσα μηχανής για οποιοδήποτε παραδοσιακό CPU

Ένα άλλο εργαλείο λογισμικού, ο interpreter μεταφράζει το bytecodeσε γλώσσα μηχανής και το εκτελεί Το JVM είναι ένα software layer που παρέχει μετάφραση μεταξύ Java byte codes και του λειτουργικού συστήματος

Page 54: OOP Lecture01 Uploaded [Compatibility Mode]

54

Βασικό λεξιλόγιο Μία ενότητα κώδικα, ένα πρόγραμμα κατά την ορολογία των

διαδικαστικών γλωσσών προγραμματισμού ονομάζεται κλάση (class)

Οι υπορουτίνες της ονομάζονται μέθοδοι (methods)

Μία κλάση μπορεί να ορίζει μεθόδους για δική της χρήση (ιδιωτικές μέθοδοι) ή για χρήση από άλλες κλάσεις (δημόσιες μέθοδοι)

Όταν καλούμε μία μέθοδο, στέλνουμε ένα μήνυμα (message) στο αντικείμενο του οποίου η κλάση υλοποιεί την ομώνυμη μέθοδο. Το πλήρες όνομα της μεθόδου είναι ΌνομαΚλάσης.ΌνομαΜεθόδου και ακολουθεί η λίστα παραμέτρων

Μπορούμε να δηλώσουμε τις ιδιότητες (properties) που περιλαμβάνει μία κλάση σα να ορίζαμε ένα νέο τύπο δεδομένων

Σε αυτή την περίπτωση οι κλάσεις λειτουργούν ως πρότυπα ή καλούπια δεδομένων

Κατά την εκτέλεση δημιουργούναι αντικείμενα (objects) που είναι στιγμιότυπα των κλάσεων

Βασικές αρχές λειτουργίας ενός τυπικού περιβάλλοντος Java Συστήματα ανάπτυξης εφαρμογών σε Java

Αποτελούνται από το περιβάλλον ανάπτυξης, την γλώσσα, Java Applications Programming Interface (API), class libraries

Τα προγράμματα Java ακολουθούν τις εξής φάσεις δημιουργίας: Edit (πληκτρολόγηση)

Χρήση ενός editor ώστε να γραφτεί το πρόγραμμα Java vi ,emacs, notepad, Jbuilder, Visual J++ .java extension

Compile (μετάφραση) Μεταφράζει το πρόγραμμα σε μορφή που είναι κατανοητή σε έναν μεταφραστή Java

javac εντολή: javac myProgram.java ∆ημιουργεί .class αρχείο που περιέχει σειρά από bytes

(myProgram.class)

Page 55: OOP Lecture01 Uploaded [Compatibility Mode]

55

Βασικές αρχές λειτουργίας ενός τυπικού περιβάλλοντος Java

Loading (φόρτωμα) Ο Class loader μεταφέρει το αρχείο τύπου .class στη μνήμη Εφαρμογές: τρέχουν στον υπολογιστή του χρήστη

Applets: φορτώνονται, προσωρινά, στον φυλλομετρητή (web browser) του χρήστη

Οι κλάσεις φορτώνονται και εκτελούνται από τον διερμηνευτή με χρήση της εντολής java, π.χ.

java Welcome

Τα έγγραφα σε μορφή HTML μπορούν να αναφέρονται σε Java Applets, που είναι φορτωμένα στον φυλλομετρητή

Βασικές αρχές λειτουργίας ενός τυπικού περιβάλλοντος Java

Verify (επαλήθευση)

Ο Bytecode verifier επαληθεύει ότι ο ενδιάμεσος κώδικας είναι σωστός και δεν παραβιάζει την ασφάλεια

Η Java πρέπει να είναι ασφαλής – δυνατή η πρόκληση προβλημάτων (π.χ. από ιούς)

Execute (εκτέλεση)

Ο υπολογιστής εκτελεί τον κώδικα, ένα-ένα bytecode

Έτσι, εκτελεί τον υπολογισμό που περιγράφεται στο πρόγραμμα

Debugging (αποσφαλμάτωση) καθώς τα προγράμματα (συνήθως) δεν τρέχουν σωστά με την πρώτη!

Κάνουμε τις απαραίτητες αλλαγές και επαναλαμβάνουμε τη διαδικασία

Page 56: OOP Lecture01 Uploaded [Compatibility Mode]

56

Το πρόγραμμα δημιουργείται και αποθηκεύεται στον δίσκο.

Ο μεταφραστής δημιουργεί σειρές από bytes και τα αποθηκεύει στον δίσκο.

Ο Class loader μεταφέρει τις σειρές από bytes στην μνήμη.

Ο Bytecode verifier επαληθεύει ότι όλες οι σειρές από bytes είναι ασφαλής.

Ο Interpreter διαβάζει τις σειρές από bytes και τους μεταφράζει στην γλώσσα μηχανής.

Φάση 1

Φάση 2

Φάση 3

Φάση 4

Φάση 5

DiskEditor

Μεταφραστής

Class Loader

Disk

Disk

Κύρια μνήμη

.

.

.

.

.

.

Κύρια μνήμη

.

.

.

.

.

.

Κύρια μνήμη

.

.

.

.

.

.

Bytecode Verifier

Interpreter

Η διαδικασία ανάπτυξης Java

Page 57: OOP Lecture01 Uploaded [Compatibility Mode]

57

Java Compile vs RunTime Environment

Πηγές/Acknowledgements http://java.sun.com/j2se

H. M. Deitel, P. J. Deitel, Java Προγραμματισμός, 6η έκδοση , Μ. Γκιούρδας, 2006

D. Barnes, M. Kolling, Αντικειμενοστρεφής Προγραμματισμός σε Java, Κλειδάριθμος, 2008

Βασίλης Χριστοφίδης, Αντικειμενοστρεφής Προγραμματισμός, Πανεπιστήμιο Κρήτης

Κ. Τσαγκάρης, Εισαγωγή στις εφαρμογές της Java, Πανεπιστήμιο Πειραιώς