Πρακτικά Θέματα. Αντικειμενοστρεφής Προγραμματισμός 7/3/2016. Διαλέξεις. Διάρκεια μαθήματος. Παρουσιάσεις διαλέξεων επιπλέον χρήσιμο υλικό

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

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

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

Προγραμματισμός Η/Υ. Προτεινόμενα θέματα εξετάσεων Εργαστήριο. Μέρος 1 ό. ΤΕΙ Λάρισας- Σχολή Τεχνολογικών Εφαρμογών Τμήμα Πολιτικών Έργων Υποδομής

Κεφάλαιο 2.3: Προγραμματισμός. Επιστήμη ΗΥ Κεφ. 2.3 Καραμαούνας Πολύκαρπος

<<ΔΗΜΗΤΡΗΣ ΜΑΝΩΛΗΣ ΦΥΣΙΚΟΣ ΜCs>> 1

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Διάλεξη #1 η : Εισαγωγή: Λογισμικό, Γλώσσες Προγραμματισμού, Java

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

Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού

Α. Ερωτήσεις Ανάπτυξης

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον κεφ.6 Εισαγωγή στον Προγραμματισμό

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 18/10/07

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

Κεφάλαιο 1 Προγραμματισμός Υπολογιστή. Εφαρμογές Πληροφορικής Κεφ. 7 Καραμαούνας Πολύκαρπος 1

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

Μαλούτα Θεανώ Σελίδα 1

Πληροφορική 2. Γλώσσες Προγραμματισμού

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

Εισαγωγή στον προγραμματισμό

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

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

Είναι μια αλληλουχία κατάλληλων οδηγιών(εντολών) που εκτελεί ο υπολογιστής για την επίλυση ενός προβλήματος.

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

Ενότητα 2 ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

ΚΕΦΑΛΑΙΟ 6. Περιβάλλοντα Ανάπτυξης Εφαρμογών. ΚΕΦΑΛΑΙΟ 6 Περιβάλλοντα Ανάπτυξης Εφαρμογών. Α Γενικού Λυκείου

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

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

ΕΠΛ 233: Αντικειμενοστρεφής Προγραμματισμός (Object-oriented programming)

ΑΕΠΠ Ερωτήσεις θεωρίας

Εισαγωγή στις Αρχές της Επιστήμης των ΗΥ

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

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

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

Ανάπτυξη Εφαρµογών σε Προγραµµατιστικό Περιβάλλον

Βασίλειος Κοντογιάννης ΠΕ19

Τεχνολογία Λογισµικού Ι Κεφάλαιο 5

ΚΕΦΑΛΑΙΟ 6 ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. 03/01/09 Χαράλαμπος Τζόκας 1

4. Συντακτικό μιας γλώσσας είναι το σύνολο των κανόνων που ορίζει τις μορφές με τις οποίες μια λέξη είναι αποδεκτή.

Περιεχόµενα. Ανασκόπηση - Ορισµοί. Ο κύκλος ανάπτυξης προγράµµατος. Γλώσσες Προγραµµατισµού Ασκήσεις

Μέρος Α. Λογισµικό & Προγράµµατα συστήµατος και εφαρµογών ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ. Το σηµερινό µάθηµα. Λογισµικό συστηµάτων & εφαρµογών

Μ Ε Ρ Ο Σ Γ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ

Βασικές Αρχές Προγραμματισμού

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος.

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ. Στέφανος Ουγιάρογλου

Εισαγωγή στην επιστήμη των υπολογιστών

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

6. 1 Η έννοια του προγράμματος

ΚΕΦΑΛΑΙΟ 6 ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. Η επίλυση ενός προβλήματος με τον υπολογιστή περιλαμβάνει τρία εξίσου σημαντικά στάδια.

Γλώσσες Προγραμματισμού Μεταγλωττιστές

Το λειτουργικό σύστημα. Προγραμματισμός II 1

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

ΚΕΦΑΛΑΙΟ 6 - ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Περιεχόμενο του μαθήματος

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

Συμβολική γλώσσα Εκπαιδευτικού Υπολογιστή - Λογισμικό Υπολογιστών

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #1 ο : Εισαγωγή στο Περιβάλλον Ανάπτυξης (IDE)

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

Outline. 4 Object-Oriented Programming

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα

Γλώσσες υψηλού επιπέδου Περιέχουν περισσότερες εντολές για την εκτέλεση πολύπλοκων εργασιών Τα προγράµµατα µεταφράζονται σε γλώσσα µηχανής είτε από το

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #1 ο : Εισαγωγή στο Περιβάλλον Ανάπτυξης (IDE)

Ε Ι Α Γ Ω Γ Η Σ Ο Ν Π Ρ Ο Γ Ρ Α Μ Μ Α Σ Ι Μ Ο Κ Ε Υ Α Λ Α Ι Ο 6. Σο πρόγραμμα γράφεται σε κάποια γλώσσα προγραμματισμού.

Κεφ. 2 Θέματα Θεωρητικής Επιστήμης Υπολογιστών. Κοντογιάννης Βασίλειος ΠΕ19

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

Εισαγωγή. Διαλέξεις στο μάθημα: Μεταφραστές Γιώργος Μανής

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Εισαγωγή στη γλώσσα προγραμματισμού JAVA. Δομές Δεδομένων Διδάσκων: Π.Α. Μήτκας Τομέας Ηλεκτρονικής και Υπολογιστών

Επιµέλεια Θοδωρής Πιερράτος

Περιγραφή Μαθήματος ΠΕΡΙΓΡΑΦΗ ΜΑΘΗΜΑΤΟΣ. Γεώργιος Παπαϊωάννου ( )

Διάλεξη 1: Αντικειμενοστρεφής Προγραμματισμός -Εισαγωγή. Διδάσκων: Παναγιώτης Ανδρέου

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

Εισαγωγή στην επιστήμη των υπολογιστών. Λογισμικό Υπολογιστών Κεφάλαιο 9ο Γλώσσες Προγραμματισμού

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

Κεφάλαιο 6 ο. Διαχείριση στοιχείων λογισμικού

Κεφάλαιο 7. ΕΠΑΛ Σύμης Εφαρμογές πληροφορικής Ερωτήσεις επανάληψης

Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου 7 η Διάλεξη: Σύντομη εισαγωγή στην Java

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

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

ΚΑΤΑΝΟΗΣΗ ΑΝΑΛΥΣΗ ΕΠΙΛΥΣΗ. Ο προγραμματισμός ασχολείται με το σύνολο των εντολών που δίνονται στον υπολογιστή ώστε να υλοποιείται ο αλγόριθμος.

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

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

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

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

Δομημένος Προγραμματισμός

ΕΡΩΤΗΣΕΙΣ ΑΞΙΟΛΟΓΗΣΗΣ

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

Το λειτουργικό σύστημα. Προγραμματισμός II 1

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 26/2/2008

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Από τον αλγόριθμο στην ανάπτυξη προγράμματος

Προγραμματισμός και Εφαρμογές Υπολογιστών

ΚΕΦΑΛΑΙΟ VI. Εισαγωγή στον προγραμματισμό

Εισαγωγή στην Επιστήμη των Υπολογιστών

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

Αντικειμενοστρεφής Προγραμματισμός -Python. Κ.Π. Γιαλούρης

Transcript:

Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων Αντικειμενοστρεφής Προγραμματισμός 7/3/2016 Δρ. Ανδριάνα Πρέντζα Αναπληρώτρια Καθηγήτρια aprentza@unipi.gr Πρακτικά Θέματα Διαλέξεις Δευτέρα 13:15-16:00, αίθουσα 103 Διάρκεια μαθήματος 13 εβδομάδες Παρουσιάσεις διαλέξεων επιπλέον χρήσιμο υλικό Στο site του μαθήματος Εργαστήρια Ώρες γραφείου: Τρίτη 14:30-16:00, κτίριο Ανδρούτσου, γραφείο 204 1

Αξιολόγηση / Βαθμολόγηση επίδοσης Βαθμολογία Εξετάσεις 80% Εργαστήρια Ασκήσεις Εργασία 30% Βαθμός εξετάσεων >= 5 ΥΠΟΧΡΕΩΤΙΚΑ για να μετρήσει ο βαθμός της εργασίας Στόχος Εισαγωγή στον αντικειμενοστρεφή προγραμματισμό (object oriented programming) χρησιμοποιώντας τη γλώσσα προγραμματισμού Java Ο σκοπός του είναι να διδάξει τις βασικές έννοιες και τεχνικές που συνιστούν το υπόδειγμα του αντικειμενοστρεφούς προγραμματισμού 2

Βιβλίο Βασικά Συγγράμματα H. M. Deitel, P. J. Deitel, Java Προγραμματισμός, Μ. Γκιούρδας David J. Barnes, Michael Kolling, Αντικειμενοστρεφής Προγραμματισμός σε Java, Εκδόσεις Κλειδάριθμος Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό 3

Γλώσσες προγραμματισμού (1/5) Το βασικό εργαλείο του προγραµµατιστή! Είναι ένα σύστηµα συµβολισµών µε το οποίο µπορεί να περιγράφει εργασίες που πρόκειται να εκτελεστούν από έναν υπολογιστή Η ποικιλία των εργασιών που είναι επιθυµητό να εκτελούνται από τους υπολογιστές δικαιολογεί την ύπαρξη πληθώρας γλωσσών προγραµµατισµού που διαφέρουν: στην πολυπλοκότητα στη µορφή στη θεµατική περιοχή όπου απευθύνονται στη φιλοσοφία προγραµµατισµού που υποστηρίζουν Γλώσσες προγραμματισμού (2/5) Γλώσσα μηχανής (Machine language) Γλώσσα συμβολομετάφρασης (Assembly language) Γλώσσες υψηλού επιπέδου (High-level languages) 4

Γλώσσες προγραμματισμού (3/5) Γλώσσα μηχανής (Machine language) Η φυσική γλώσσα του υπολογιστή Ακολουθία από 0 και 1 (binary) Διαφορετικοί υπολογιστές αντιλαμβάνονται-κατανοούν διαφορετικές ακολουθίες Δυσνόητη για τον άνθρωπο : 01010001... Γλώσσα συμβολομετάφρασης (Assembly language) Μνημονικά (σύντομες περιγραφικές λέξεις) για τη γλώσσα μηχανής low level: κάθε εντολή θεωρείται ως ένα σημείο πρωταρχική (minimal) Επίσης δύσκολη στην κατανόηση από τον άνθρωπο: ADD.L d0,d2 Γλώσσες προγραμματισμού (4/5) Με τη χρήση γλωσσών χαµηλού επιπέδου είναι πρακτικά αδύνατο να εξασφαλιστεί η απαιτούµενη ποιότητα του λογισµικού Οι γλώσσες προγραμματισμού χαµηλού επιπέδου χρησιµοποιούνται µόνο για την υλοποίηση τµηµάτων ενός συστήµατος λογισµικού που είναι εξαιρετικά απαιτητικό από πλευράς επιδόσεων ή που αφορά συγκεκριµένες συσκευές Παράδειγμα µέρη λειτουργικών συστηµάτων λογισµικό ειδικών απαιτήσεων, όπως αυτό που σχετίζεται µε συστήµατα πραγµατικού χρόνου (real time systems). 5

Γλώσσες προγραμματισμού (5/5) Γλώσσες υψηλού επιπέδου (High-level languages) FORTRAN, Pascal, BASIC, C, C++, Java, κτλ high level: κάθε εντολή συντίθεται από πολλές εντολές χαμηλού επιπέδου Πιο κοντά στην Αγγλική γλώσσα Ευκολότερη στην ανάγνωση και την κατανόηση: hypotenuse = Math.sqrt(opposite*opposite + adjacent*adjacent); Εξέλιξη γλωσσών προγραμματισμού 6

5 γενιές γλωσσών προγραμματισμού! 1η : Γλώσσες Μηχανής Κώδικας μηχανής 2η : Γλώσσες συμβολομετάφρασης Symbolic assemblers 3η : Διαδικαστικές γλώσσες υψηλού επιπέδου Γλώσσες ανεξάρτητες μηχανών (machine independent) 4η : Μη-διαδικαστικές γλώσσες Γεννήτριες εφαρμογών για συγκεκριμένο πεδίο εφαρμογής 5η : Φυσικές γλώσσες Κάθε γενιά βρίσκεται σε μεγαλύτερο αφαιρετικό επίπεδο Η 1 η γενιά (1940s) Στην αρχή... Stone Age! : Γλώσσες μηχανής Δυαδικές σειρές χαρακτήρων εντολών Εισήχθησαν με τον πρώτο υπολογιστή που μπορούσε να προγραμματιστεί Hardware dependent 7

Η 2 η γενιά (early 1950s) Ξεκινήσαμε να μελετάμε βελτιώσεις: Γλώσσες συμβολομετάφρασης 1-προς-1 αντικατάσταση μνημονικών από εντολές συμβολικής γλώσσας Hardware dependent Η 2 η γενιά (early 1950s) Η ανακάλυψη του Compiler! Η Grace Murray Hopper έφτιαξε τον compiler Flowmatic Κάθε ΚΜΕ έχει τη δική της ειδική γλώσσα μηχανής Ένα πρόγραμμα πρέπει να μεταφραστεί σε γλώσσα μηχανής πριν μπορεί να εκτελεστεί σε ένα συγκεκριμένο τύπο ΚΜΕ 8

Η 2 η γενιά (early 1950s) Interpreters και Virtual Machine Languages Speedcoding - πρώτη γλώσσα υψηλού επιπέδου (πιο κοντά στην εκφραστικότητα της φυσικής γλώσσας σε αντίθεση με την κωδικοποίηση σε γλώσσα μηχανής) που αναπτύχθηκε από τον John Backus το 1953 για τον IBM 701 για την υποστήριξη υπολογισμών με αριθμούς κινητής υποδιαστολής UNCOL - καθολική ενδιάμεση γλώσσα για μεταγλωττιστές που θεσπίστηκε από τον Melvin Conway το 1958 Ενδιάμεσοι μεταξυ των εντολών και των τελεστών των γλωσσών προγραμματισμού υψηλού επιπέδου και των αριθμών καταχωρητών και των κωδίκων λειτουργίας των γλωσσών μηχανής Η 3 η γενιά (1955-1965) Διαδικαστικές γλώσσες υψηλού επιπέδου κάνουν τον προγραμματισμό ευκολότερο Fortran, Algol, Lisp, Cobol, Basic 9

Η συμβατική διαδικασία προγραμματισμού Ένας compiler μεταφράζει πηγαίο κώδικα σε συγκεκριμένη γλώσσα κατάλληλη για συγκεκριμένο τύπο ΚΜΕ Ο linker συνδέει διάφορα προγράμματα αντικειμένου τα οποία έχουν αναπτυχθεί ανεξάρτητα Η 4 η γενιά γλωσσών (1980) Μη-διαδικαστικές γλώσσες (problem-oriented) Ο χρήστης καθορίζει τι πρέπει να γίνει και όχι πώς θα γίνει Χρειάζεται λιγότερη εκπαίδευση χρηστών Σχεδιασμένες για να λύνουν συγκεκριμένα προβλήματα Διάφοροι τύποι γλωσσών 4 ης γενιάς Γλώσσες Διαχείρισης Βάσεων Δεδομένων Συστήματα Υποστήριξης Αποφάσεων Στατιστική Προσομοίωση Βελτιστοποίηση Ανάλυση Αποφάσεων Συστήματα Παρουσίασης Γραφικών 10

Πώς διαφέρουν οι γλώσσες προγραμματισμού?? Κοινές δομές: Βασικοί τύποι δεδομένων (αριθμοί, κτλ.) Μεταβλητές Εκφράσεις Δηλώσεις Λέξεις-κλειδιά Δομές ελέγχου Διαδικασίες Σχόλια Σφάλματα... Μη κοινές δομές: Δηλώσεις τύπων Ειδικοί τύποι (ακολουθίες χαρακτήρων, πίνακες,...) Διαδοχική εκτέλεση Δομές παραλληλισμού Πακέτα Αντικείμενα Γενικές λειτουργίες Είδη προγραμματισμού (1/3) Σειριακός Προγραμματισμός Δομημένος/Συναρτησιακός Προγραμματισμός Αντικειμενοστρεφής Προγραμματισμός 11

Είδη προγραμματισμού (2/3) Σειριακός Προγραμματισμός Ενδείξεις / Ταμπέλες (Labels) Ροή από επάνω προς τα κάτω Ανακατευθύνσεις (GOTOs, Jumps) Παραδείγματα: Απλή Basic, Assembly Δομημένος/Συναρτησιακός Προγραμματισμός Βιβλιοθήκη συναρτήσεων Συνάρτηση (Function) Διαδικασία (Procedure) Κλήση Συναρτήσεων Είδη προγραμματισμού (3/3) Αντικειμενοστρεφής Προγραμματισμός Βιβλιοθήκη κλάσεων Στη Java λέγεται και πακέτο Κλάση (Class) Αντικείμενο / Στιγμιότυπο (Object / Instance) Ιδιότητα (Attribute) Μέθοδος (Method) Κλήσεις σε αντικείμενα, μεθόδους αντικειμένων κτλ. 12

Παραδείγματα γλωσσών Διαδικαστικές (Procedural) Γλώσσες Ατομικές δηλώσεις FORTRAN, ALGOL 60, ALGOL 68, Cobol, Pascal, C, Ada Συναρτησιακές (Functional) Γλώσσες Όταν πω στον υπολογιστή να κάνει κάτι, το κάνει Ένα πρόγραμμα σε συναρτησιακή γλώσσα δεν περιγράφει πώς λύνεται ένα πρόβλημα (όπως οι διαδικασίες στις διαδικαστικές γλώσσες) αλλά το ίδιο το πρόβλημα με συστηματικό/μαθηματικό τρόπο. LISP, Σχέδιο, CLOS, ML, Haskell Λογικές (Logic) Γλώσσες Μηχανή συμπερασματολογίας που παίζει το βασικό ρόλο Prolog, GHC Αντικειμενοστρεφείς (Object-oriented) Γλώσσες Θεωρούν τα δεδομένα μαζί με τις λειτουργίες Smalltalk, C++, Eiffel, Sather, Python, Ada95, Java, OCAML Προγραμματιστικά παραδείγματα 13

Προγραμματιστικά παραδείγματα Μία γλώσσα προγραμματισμού είναι ένα εργαλείο επίλυσης προβλημάτων Προγραμματισμός στα 1950s Εκτέλεση της μιας εντολής μετά την άλλη Χρήση GOTO για υπερπήδηση εντολής Απλή είσοδος, απλή έξοδος Υπορουτίνες (GOSUB) Φυσική διαίρεση δουλειάς Επαναχρησιμοποιήσιμη σε άλλα προγράμματαn other programs Περιορισμός Spaghetti-code 14

Δομημένος Προγραμματισμός 4 βασικές δομές Ακολουθία Επιλογή Επανάληψη Αναδρομή Δομημένος Προγραμματισμός Divide and Conquer Αποσύνθεση μεγάλης κλίμακας προβλημάτων σε μικρότερα ανεξάρτητα Πρόγραμμα είναι μία συλλογή από διαδικασίες, όπου η καθεμία περιλαμβάνει μία ακολουθία εντολών 15

Προβλήματα Δομημένου Προγραμματισμού Ο δομημένος προγραμματισμός έχει σοβαρό περιορισμό: Είναι εντελώς απίθανο να εκτιμήσει κάποιος το σχέδιο ενός ολοκληρωμένου συστήματος πριν υλοποιηθεί Όσο μεγαλύτερο το σύστημα, τόσο μεγαλύτερη η αναδόμηση Η ανάπτυξη του λογισμικού εστιάζει στην τμηματοποίηση του κώδικα ΜΗΝ ΧΡΗΣΙΜΟΠΟΙΕΙΤΕ Global Variables Ο διαμοιρασμός δεδομένων (global variables) αποτελεί παραβίαση του τμηματικού προγραμματισμού Όλα τα modules μπορούν να έχουν πρόσβαση σε όλες τις global variables χωρίς περιορισμό Κανένα module δεν μπορεί να αναπτυχθεί και να κατανοηθεί ανεξάρτητα Global data are dangerous!!! Έχει ως αποτέλεσμα όλα τα modules να εξαρτώνται το ένα από το άλλο 16

ΜΗΝ ΧΡΗΣΙΜΟΠΟΙΕΙΤΕ Global Variables Απόκρυψη πληροφορίας Μία βελτίωση: Κάθε procedure (module) να έχει τα δικά της τοπικά δεδομένα Αυτά τα δεδομένα μπορεί να τα χειριστεί αυτή η ίδια η υπορουτίνα Μπορούν να σχεδιαστούν, υλοποιηθούν και συντηρηθούν πιο εύκολα Αναγκαία δεδομένα «περνιούνται» κατά την κλήση διαδικασιών μέσω παραμέτρων 17

Modularized Data Βάλτε δεδομένα μέσα στα modules Αυτό κάνει τα modules πιο ανεξάρτητα Δεδομένα έξω από προγράμματα Τα μικρά προγράμματα απαιτούν μικρό input και output Τα μεγάλα προγράμματα δουλεύουν με τα ίδια δεδομένα ξανά και ξανά 18

Διαμοιρασμός δεδομένων Πρόσβαση σε κοινά δεδομένα από πολλούς ανθρώπους/ προγράμματα DBMS Παραδοσιακή αναπαράσταση 19

Αντικειμενοστρεφής αναπαράσταση Αντικειμενοστρεφής προσέγγιση 3 βασικές έννοιες στην ΟΟ Τεχνολογία Αντικείμενα (Objects) Μηνύματα (Messages) Κλάσεις (Classes) Μετάφραση στο δομημένο προγραμματισμό Μεταβλητές (variables) Κλήσεις συναρτήσεων (function calls) Τύποι δεδομένων (data types) 20

Δομημένος vs Αντικειμενοστρεφής Προγραμματισμός ΔΟΜΗΜΕΝΟΣ: εστιάζει σε διαδικασίες Οι δομές δεδομένων σχεδιάζονται έτσι ώστε να ταιριάζουν στις διαδικασίες Οι διαδικασίες και οι δομές δεδομένων συλλαμβάνονται στο χώρο των λύσεων Το σύστημα μοντελοποιείται ως συλλογή διαδικασιών ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ: εστιάζει σε αντικείμενα Τα αντικείμενα προέρχονται από το χώρο του προβλήματος Ερμηνεία μηνυμάτων από τα αντικείμενα Είναι ευκολότερη η κατηγοριοποίηση αντικειμένων Το σύστημα μοντελοποιείται ως συλλογή αλληλεπιδρώντων αντικειμένων Εξέλιξη μεθόδων σχεδιασμού λογισμικού 21

Πλεονεκτήματα αντικειμενοστρεφούς προσέγγισης Πρέπει να προσπαθούμε να κάνουμε το λογισμικό αξιόπιστο και συντηρήσιμο Επαναληπτική ανάπτυξη προγραμμάτων Δεν χρειάζεται να καταλάβουμε τα πάντα από την αρχή Αποφεύγουμε κώδικα spaghetti Δεν χρειάζεται κάθε φορά να ξεκινάμε από την αρχή Καθώς αυξάνεται η πολυπλοκότητα, το κόστος ανάπτυξης αυξάνεται εκθετικά OOP (Object Oriented Programming επιταχύνει το χρόνο ανάπτυξης Διαδικασία Σχεδίασης Προγράμματος Σχεδίαση, μετά κωδικοποίηση (ΟΧΙ κωδικοποίηση πρώτα και μετά σχεδίαση) Διαδικασία σχεδίασης Ορίζω με σαφήνεια το πρόβλημα Σχεδιάζω αντικείμενα για τις ανάγκες του προγράμματος Αναπτύσσω αλγορίθομους για τις μεθόδους των αντικειμένων Περιγράφω τους αλγόριθμους, συνήθως σε ψευδοκώδικα Διαδικασία κωδικοποίησης Γράφω τον κώδικα Ελέγχω τον κώδικα Διορθώνω λάθη και επαναελέγχω 22

Αντικείμενα Όταν γράφουμε ένα πρόγραμμα σε μια αντικειμενοστρεφή γλώσσα προγραμματισμού, στην ουσία δημιουργούμε ένα μοντέλο ενός συστήματος του κόσμου. Τα τμήματα από τα οποία αποτελείται το μοντέλο αυτό είναι τα αντικείμενα (objects) που εμφανίζονται στην περιοχή του προβλήματος. Τα αντικείμενα αυτά πρέπει να αναπαρασταθούν στο μοντέλο του συστήματος που δημιουργούμε με το πρόγραμμα που αναπτύσσουμε. Ο κόσμος γύρω μας αποτελείται από αντικείμενα. Κάθε αντικείμενο μπορεί να εκτελέσει κάποιες συγκεκριμένες ενέργειες και κάθε ενέργεια μπορεί να επηρεάσει κάποια από τα άλλα αντικείμενα του κόσμου. Κλάσεις Τα αντικείμενα μπορούν να κατηγοριοποιηθούν σε κλάσεις (classes), με κάθε κλάση να περιγράφει με ένα αφηρημένο τρόπο όλα τα αντικείμενα ενός συγκεκριμένου είδους. Ένα αντικείμενο, στην ουσία, περικλείει κάποια δεδομένα (πεδία) και ένα σύνολο λειτουργιών (μεθόδους) για την επεξεργασία τους. Συνήθως, αναφερόμαστε σε ένα συγκεκριμένο αντικείμενο ως στιγμιότυπο (instance), προκειμένου να δώσουμε έμφαση στο γεγονός ότι το αντικείμενο αυτό ανήκει σε μια συγκεκριμένη κλάση. Από τη στιγμή που θα ορίσουμε μια κλάση μπορούμε να δημιουργήσουμε όσα αντικείμενα στιγμιότυπα χρειαζόμαστε για την επίλυση ενός προβλήματος. 23

Αντικείμενα και Κλάσεις Αντικείμενα Αναπαριστούν πράγματα από τον πραγματικό κόσμο ή από κάποιο χώρο προβλήματος (π.χ: το κόκκινο αυτοκίνητο στο parking ) Κλάσεις Αναπαριστούν όλα τα αντικείμενα ενός είδους (π.χ: αυτοκίνητο ) Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling Ορισμοί Κλάση Πρότυπο, καλούπι (template) που περιλαμβάνει τον ορισμό, τη δήλωση δεδομένων και τις πράξεις που γίνονται σε αυτά, ορίζει τις κοινές μεταβλητές και μεθόδους όλων των ομοειδών αντικειμένων (με ίδια δομή και συμπεριφορά) και χρησιμοποιείται για τη δημιουργία πολλών αντικειμένων με παρόμοια χαρακτηριστικά (ιδιότητες και μεθόδους) Αντικείμενο Συγκεκριμένη εμφάνιση, στιγμιότυπο με συγκεκριμένες τιμές κοινών μεταβλητών. Κάθε αντικείμενο είναι μοναδικό, αλλά ταυτόχρονα ανήκει και σε μια κλάση (ομοειδών) αντικειμένων. Λέμε ότι το αντικείμενο είναι στιγμιότυπο της εν λόγω κλάσης. 24

Παράδειγμα Κλάση: Περιγράφει μια οικογένεια οντοτήτων με ίδια χαρακτηριστικά και συμπεριφορά (δηλ. μια αφηρημένη οντότητα) Π.χ. σκύλος, τοστιέρα Στιγμιότυπο: Περιγράφει μια συγκεκριμένη οντότητα, που παράγεται από μια αντίστοιχη κλάση, στην οποία λέμε ότι ανήκει Π.χ. Πλούτο, η_τοστιέρα_μου Στατικότητα Κλάσης Δυναμικότητα Στιγμιοτύπων Κλάσης Κλάση: αφηρημένη έννοια (π.χ. οι τηλεοράσεις γενικώς) Aντικείμενο: χειροπιαστή (απτή) οντότητα (η δική σου συγκεκριμένη συσκευή τηλεόρασης) Μια κλάση ορίζει τι είναι ένα αντικείμενο, αλλά δεν είναι αυτό καθ εαυτό ένα αντικείμενο. Π.χ. αν μιλάμε για την οντότητα γάτα, η κλάση είναι ο ορισμός της γάτας, αλλά δεν ταϊζουμε τον ορισμό της γάτας, αλλά μια συγκεκριμένη γάτα που έχουμε στο σαλόνι μας, ή που έχουν οι φίλοι μας, ή που συναντάμε κάπου κ.λ.π. Όταν γράφουμε ένα πρόγραμμα σε αντικειμενοστρεφή γλώσσα προγραμματισμού, δεν ορίζουμε στο πρόγραμμα μεμονωμένα αντικείμενα, αλλά κλάσεις αντικειμένων. Τα αντικείμενα δημιουργούνται από το πρόγραμμά μας κατά το χρόνο της εκτέλεσής του. 25

Στατικότητα Κλάσης Δυναμικότητα Στιγμιοτύπων Κλάσης Η κλάση είναι στατική περιγραφή συνόλου αντικειμένων ΕΝΩ κάθε αντικείμενο είναι μια δυναμική, πραγματική οντότητα Από κάθε κλάση μπορούν να δημιουργηθούν πολλά αντικείμενα (ανάλογα με τις ανάγκες του προβλήματος) κατά τη διάρκεια εκτέλεσης του προγράμματος (στιγμιότυπα instances) της κλάσης) Κάθε κλάση δηλώνεται μόνο μια φορά σε ένα πρόγραμμα Η δήλωση της κλάσης δεν δεσμεύει χώρο στη μνήμη, αλλά το κάθε αντικείμενο που θα δημιουργηθεί στο χρόνο εκτέλεσης καταλαμβάνει χώρο στη μνήμη για κάθε ιδιότητα Η κλάση είναι μια compile-time οντότητα, το αντικείμενο αποτελεί run-time οντότητα Στατικότητα Κλάσης Δυναμικότητα Στιγμιοτύπων Κλάσης Κλάση Περιγραφή, Ορισμός, ΣΥΝΤΑΓΗ, ΚΑΛΟΥΠΙ ένα συγκεκριμένο αντικείμενο Μία Δεν καταλαμβάνει χώρο στη μνήμη! Αντικείμενα Χειροπιαστές Οντότητες Πολλά Καταλαμβάνουν χώρο στη μνήμη 26

Ποια είναι κλάσεις και ποια αντικείμενα? Η ποδοσφαιρική ομάδα του Ολυμπιακού Ο παίκτης κ. Τάδε της ποδοσφαιρικής ομάδας του Παναθηναϊκού Έντομο Ελικόπτερο Ο υπάλληλος κ. Γεωργίου του ΟΤΕ Άνδρας Το αεροπλάνο που θα πραγματοποιήσει τη σημερινή πτήση των 10.20 της Aegean για Ρώμη Εργαζόμενος Θαλάσσιο όχημα Το Πανεπιστήμιο Πειραιώς Εντοπίστε ζεύγη με σχέση κλάσης αντικειμένου Ηλεκτρονική συσκευή Τηλεοπτική συσκευή Τηλεοπτική συσκευή Η τηλεόραση μάρκας τάδε, μεγέθους τάδε που έχω στο δωμάτιο μου Θηλαστικό Σκύλος Σκύλος Ο σκύλος του φίλου μου του Πέτρου που τον λένε Αζόρ Ορθογώνιο σχήμα Το ορθογώνιο με πάνω αριστερή κορυφή το σημείο (5,5) και κάτω δεξιά κορυφή το σημείο (10,3) Σχήμα Κυκλικό Σχήμα 27

Ορισμοί Ιδιότητα (attribute) Είναι μια μεταβλητή. Μπορεί να είναι: Αντικειμένου Μόνο του συγκεκριμένου αντικειμένου Κλάσης Όλων των αντικειμένων που περιλαμβάνει μια κλάση Κατ επέκταση και όλων των αντικειμένων των υποκλάσεων που περιλαμβάνει η κλάση Το σύνολο των ιδιοτήτων ενός αντικειμένου καθορίζουν την κατάστασή του (state) Ορισμοί Μέθοδος (method) ή λειτουργία Διαδικασία ή συνάρτηση που καθορίζει τη συμπεριφορά ενός αντικειμένου ή κλάσης / τρόπος με τον οποίο λειτουργεί/συμπεριφέρεται το αντικείμενο Π.χ. ο σκύλος γαβγίζει, τρώει, κοιμάται Το σύνολο των μεθόδων ενός αντικειμένου καθορίζουν τη συμπεριφορά του (behavior) 28

Βασικές έννοιες αντικειμενοστρεφούς προσέγγισης Αντικείμενο (object) / Κλάση (class) Ιδιότητες (properties) Μέθοδοι (methods) Βασικές έννοιες αντικειμενοστρεφούς προσέγγισης Η οργάνωση των κλάσεων χρησιμοποιείται για να γίνει το μοντέλο του φυσικού κόσμου. Σε αυτό, μεταξύ των άλλων βοηθούν και οι έννοιες: Ιεραρχίες (hierarchies) Κληρονομικότητα (inheritance) Οι ορισμοί των κλάσεων και οι ιεραρχίες τους προορίζονται για να αναπαραστήσουν ένα πρόβλημα ή τη λύση του. 29

Δομή αντικειμένου Στατικό μέρος (private) Δεδομένα (Μεταβλητές) Δυναμικό μέρος (public) Διαδικασίες (Μέθοδοι) Αντικείμενο - παράδειγμα Σύστημα που ελέγχει ένα φράγμα σε ποταμό Φράγμα: αντικείμενο το οποίο διαθέτει Ιδιότητες / Καταστάσεις, πχ: πλήρως_ανοιχτό (όπου το νερό του ποταμού ρέει ανεμπόδιστα μέσω του φράγματος) πλήρως_κλειστό (όπου δεν επιτρέπεται σε νερό του ποταμού να περάσει διαμέσου του φράγματος) Μέθοδοι / Συμπεριφορές, πχ: προειδοποιεί: όταν το φράγμα πρόκειται να αλλάξει κατάσταση από την κλειστή ανοιχτή, μπορεί να στέλνει μια προειδοποίηση στους ανθρώπους που βρίσκονται για αναψυχή στις εκβολές του ποταμού, για να τους ειδοποιήσει ότι το επίπεδο του νερού του ποταμού πρόκειται να ανέβει. 30

Παραδείγματα κλάσεων... Κλάση Φυτό Ιδιότητες: ύψος, ηλικία, χρώμα φύλλων, ανθοφόρο Μέθοδοι: φυτεύεται, αναπτύσσεται, δημιουργεί χλωροφύλλη, μαραίνεται Αντικείμενα της κλάσης: κάθε ένα συγκεκριμένο φυτό από τα φυτά της βεράντας μας, κάθε συγκεκριμένο φυτό στα παρτέρια μιας συγκεκριμένης πλατείας ή ενός συγκεκριμένου κήπου κ.λ.π. Παραδείγματα κλάσεων... Κλάση Μοτοσικλέτα Ιδιότητες: στοιχεία πινακίδων, μάρκα, μοντέλο, έτος κυκλοφορίας, τρέχουσα ταχύτητα, μέγιστη ταχύτητα, κυβισμός, τιμή Μέθοδοι: ξεκινά, κινείται, επιταχύνει, επιβραδύνει, φρενάρει, στρίβει, σταματά Αντικείμενα της κλάσης: η συγκεκριμένη μοτοσικλέτα που είναι παρκαρισμένη στο πάρκινγκ, μια Honda 250 με αριθμό κυκλοφορίας ΑΑΑ 1234, η μοτοσικλέτα του συμφοιτητή μου κ.λ.π 31

Προσδιορισμός Ιδιοτήτων Κλάσεων Όταν καλούμαστε να προσδιορίσουμε ιδιότητες (ή ιδιοχαρακτηριστικά) σε κλάσεις, θα πρέπει να θυμόμαστε ότι: Ιδιότητες είναι ότι περιγράφει την κατάσταση (state) κάθε αντικειμένου της κλάσης και θα πρέπει να μπορούν να παρασταθούν στο λογισμικό με μεταβλητές (variables) διαφόρων τύπων (ακέραιες, πραγματικές, λογικές (boolean) κλπ) ΔΕΝ συμπεριλαμβάνουμε στις ιδιότητες περιττές πληροφορίες, ούτε ιδιότητες που αποτελούν συνάρτηση άλλων. Προσδιορισμός Μεθόδων Κλάσεων Όταν καλούμαστε να προσδιορίσουμε μεθόδους σε κλάσεις, θα πρέπει να θυμόμαστε ότι: Οι μέθοδοι είναι ενέργειες που μπορεί να εκτελέσουν τα αντικείμενα της κλάσης ή μπορούν να εκτελεστούν επί αυτών και στο λογισμικό παριστάνονται με τμήματα κώδικα που υλοποιούν τις λειτουργίες που απαιτούνται για να γίνουν αυτές οι ενέργειες. 32

Ποιες είναι ιδιότητες και ποιες είναι μέθοδοι των κλάσεων? Τηλεφωνική συσκευή: επανάληψη κλήσης, χρώμα, μέγεθος, μάρκα, πλήθος πλήκτρων Φυτό: ρίζες, φύλλα, λουλούδια, ποτίζεται, ύψος, ηλικία, χρώμα φύλλων Μοτοσικλέτα: τιμόνι, ρόδες, φρένο, χρώμα, μάρκα, κυβικά, τιμή, φρενάρισμα, εκκίνηση, μήκος Ορθογώνιο: μήκος, ύψος, μήκος διαγωνίου, υπολογισμός εμβαδού, υπολογισμός μήκους περιφέρειας Ποιες είναι ιδιότητες και ποιες είναι μέθοδοι των κλάσεων? Κύκλος: συντεταγμένες κέντρου, ακτίνα, διάμετρος, υπολογισμός εμβαδού, υπολογισμός μήκους περιφέρειας Ηθοποιός: απαγγελία διαλόγων, ύψος, παίξιμο ρόλου, βάρος, χρώμα ματιών, χρώμα μαλλιών, ηλικία, φύλο, είδος υποκριτικής (δραματικός, κωμικός κλπ.) Χορευτής: ύψος, είδος χορών που χορεύει, βάρος, χρώμα ματιών, χρώμα μαλλιών, ηλικία, φύλο, κάνει πιρουέτες 33

Μέθοδοι και μηνύματα Μέθοδος Οι μέθοδοι είναι οι πράξεις που εκτελεί ένα αντικείμενο όταν λαμβάνει ένα μήνυμα. Οι πράξεις μπορούν να εκτελούνται μόνο αν είναι γνωστές στο αντικείμενο. Το σύνολο των μεθόδων ενός αντικειμένου καθορίζει τη συμπεριφορά του Μηνύματα Τα αντικείμενα επικοινωνούν και αλληλεπιδρούν μεταξύ τους στέλνοντας μηνύματα. Τα μηνύματα είναι αιτήσεις που στέλνονται από ένα αντικείμενο σε ένα άλλο έτσι ώστε το τελευταίο να εκτελέσει μια μέθοδο/λειτουργία. Οποιαδήποτε επιπλέον πληροφορία απαιτείται δίνεται με το μήνυμα και αποτελεί τις παραμέτρους του μηνύματος Βασικές έννοιες αντικειμενοστρεφούς προσέγγισης Συνοψίζοντας Ένα αντικείμενο είναι δομή προγράμματος που έχει δεδομένα και ονομάζονται ιδιότητες που σχετίζονται με αυτό, και μπορεί να εκτελεί συγκεκριμένες ενέργειες που είναι γνωστές ως συμπεριφορές. Μία κλάση ορίζει τον τύπο ή το είδος του αντικειμένου. Αποτελεί ένα προσχέδιο για τον ορισμό αντικειμένων. Όλα τα αντικείμενα της ίδιας κλάσης έχουν τα ίδια είδη δεδομένων και τις ίδιες συμπεριφορές. Όταν ένα πρόγραμμα τρέχει, όλα τα αντικείμενα μπορούν να ενεργούν αυτόνομα ή να αλληλεπιδρούν με άλλα αντικείμενα, για την επίτευξη του σκοπού του προγράμματος. Οι ενέργειες που επιτελούνται από τα αντικείμενα ορίζονται από τις μεθόδους τους. 34

Αναπαράσταση κλάσεων - παράδειγμα Μάθημα Κωδικός μαθήματος Είδος Τίτλος Διδάσκων Προσθήκη Μαθήματος () Διαγραφή Μαθήματος () Μεταβολή στοιχείων Μαθήματος () Ανάθεση Μαθήματος () Αναπαράσταση κλάσεων - παράδειγμα Καθηγητής Αρ. Ταυτότητας Όνομα Επώνυμο Διεύθυνση Τηλέφωνο Προσθήκη Καθηγητή () Διαγραφή Καθηγητή () Μεταβολή στοιχείων Καθηγητή () 35

Αντικείμενα / Στιγμιότυπα - παράδειγμα Κάθε αντικείμενο είναι ένα στιγμιότυπο (instance) μιας κλάσης! ΔΗΛΑΔΗ κάθε στιγμιότυπο διαθέτει τις δικές του τιμές χαρακτηριστικών ΑΛΛΑ μοιράζεται τα ονόματα των χαρακτηριστικών και τις συμπεριφορές με τα υπόλοιπα στιγμιότυπα της κλάσης Στιγμιότυπα κλάσεων (αντικείμενα) Μάθημα 01 Κωδικός μαθήματος: ΨΣ-502 Είδος: Κορμού Τίτλος: Αντικειμενοστρεφής Προγραμματισμός Διδάσκων: Β987654 Προσθήκη Μαθήματος () Διαγραφή Μαθήματος () Μεταβολή στοιχείων Μαθήματος () Ανάθεση Μαθήματος () 36

Στιγμιότυπα κλάσεων (αντικείμενα) Καθηγητής 01 Αρ. Ταυτότητας: Β987654 Όνομα: Νικόλαος Επώνυμο: Νικολάου Διεύθυνση: Χ. Τρικούπη και Φάωνος Τηλέφωνο: 2251036600 Προσθήκη Καθηγητή () Διαγραφή Καθηγητή () Μεταβολή στοιχείων Καθηγητή () Παραδείγματα αντικειμένων που ομαδοποιούνται σε κλάσεις 37

Βασικές αρχές σχεδιασμού ΟΟΡ Ενθυλάκωση (encapsulation) Πολυμορφισμός (polymorphism) Κληρονομικότητα (inheritance) Ενθυλάκωση Διαμερισματοποίηση (compartmentalisation) / ομαδοποίηση δομής και συμπεριφοράς έτσι ώστε οι λεπτομέρειες της υλοποίησης ενός αντικειμένου να είναι κρυμμένες 38

Ενθυλάκωση Οι ιδιότητες αποκρύπτονται από την συμπεριφορά του αντικειμένου Δεν χρειάζεται να ξέρεις πώς λειτουργεί η μηχανή για να οδηγήσεις ένα αυτοκίνητο Μεγάλο μέρος της λειτουργικότητας είναι αόρατο Γυρίζεις ένα διακόπτη το ραδιόφωνο αρχίζει Πατάς ένα πετάλι το αυτοκίνητο επιταχύνει Η ενθυλάκωση είναι η τεχνική που πακετάρει τις πληροφορίες με τέτοιο τρόπο ώστε να αποκρύπτει αυτές που πρέπει να είναι κρυμμένες (βρίσκονται μέσα στην «κάψουλα» θύλακα) και να καθιστά ορατές αυτές που πρέπει να είναι ορατές. Πολυμορφισμός «Πολλές μορφές» Είναι η ιδιότητα που επιτρέπει να σταλεί το ίδιο μήνυμα σε διαφορετικά αντικείμενα και το κάθε αντικείμενο να εκτελέσει μια λειτουργία που αντιστοιχεί στην κλάση που ανήκει (δυνατότητα χρήσης κοινών ονομάτων για διαφορετικές μεθόδους) Η εντολή accelerate είναι η ίδια ανεξαρτήτως για τα διαφορετικά αντικείμενα airplane, car, bus, κτλ Η κλάση των πολυγώνων. Για κάθε πολύγωνο υπολογίζεται το εμβαδό, αλλά ο υπολογισμός του εμβαδού ενός τριγώνου είναι διαφορετικός από τον υπολογισμό του εμβαδού ενός ορθογωνίου Η εντολή «παίξε το αγαπημένο σου άθλημα» σημαίνει διαφορετικά πράγματα για διαφορετικούς ανθρώπους. Για κάποιον σημαίνει μπάσκετ, για κάποιον άλλο ποδόσφαιρο. 39

Διαδικαστικός προγραμματισμός vs πολυμορφισμού Κληρονομικότητα Φανταστείτε ένα πρόβλημα που έχει ως αντικείμενα πελάτες, υπαλλήλους κτλ Τόσο οι πελάτες όσο και οι υπάλληλοι είναι άνθρωποι Θα πρέπει να φτιάξω δύο κλάσεις. Κάποια από τα χαρακτηριστικά / λειτουργίες αυτών είναι κοινά. π.χ. ύψος, βάρος κλπ. Θα έχω πολλές φορές τον ίδιο κώδικα!!! Για να το αποφύγω και να έχω καλύτερη επαναχρησιμοποίηση δεδομένων και λειτουργιών. Ορίζω μια κλάση (γονέας), ονόματι άνθρωπος Αυτή θα συγκεντρώνει τα κοινά χαρακτηριστικά/λειτουργίες Από την κλάση αυτή θα κληρονομούν οι κλάσεις πελάτης και υπάλληλος (κλάσεις παιδιά) 40

Κληρονομικότητα Η δυνατότητα δημιουργίας νέων κλάσεων παίρνοντας ως βάση μία άλλη ήδη υπάρχουσα Η νέα κλάση θα έχει τα χαρακτηριστικά της παλιάς ενώ θα μπορεί να τα τροποποιήσει, να τα επεκτείνει και να προσθέσει καινούρια για να καλύψει συγκεκριμένες ανάγκες Δύο όψεις: Η κλάση-παιδί είναι εξειδίκευση (specialization) της κλάσης-γονέας Η κλάση-γονέας είναι γενίκευση (generalization) της κλάσης-παιδί Κληρονομικότητα Κληρονομικότητα είναι η δυνατότητα να ορίζει κανείς καινούργιες κλάσεις, που είναι ήδη απόγονοι κάποιας άλλης κλάσης. Ο απόγονος μίας κλάσης έχει τη δυνατότητα χρήσης όλων των δεδομένων και μεθόδων, που κληρονομεί από τον πρόγονό του, ενώ παράλληλα διατηρεί τα δεδομένα και τις μεθόδους που ο ίδιος ορίζει. 41

Κληρονομικότητα Επιτρέπει σε κλάσεις να μοιράζονται χαρακτηριστικά και συμπεριφορές άλλων κλάσεων. Μία κλάση-παιδί (υποκλάση) μπορεί να κληρονομήσει τα δεδομένα και τις μεθόδους (δομή, συμπεριφορά και χαρακτηριστικά) μίας άλλης κλάσης, της κλάσης-γονέας (υπερκλάσης). Σχέση μεταξύ ενός πιο γενικού στοιχείου και ενός πιο ειδικού στοιχείου, το ειδικό στοιχείο περιέχει περισσότερες πληροφορίες από το γενικό στοιχείο Οι υποκλάσεις προσφέρουν εξειδικευμένη συμπεριφορά από τα κοινά στοιχεία που προσφέρει η υπερκλάση. Κληρονομικότητα Vehicle Automobile Motorcycle Bus Sedan Sports Car School Bus Luxury Bus Τι ιδιότητες κληρονομεί κάθε όχημα από τον τύπο οχήματος που βρίσκεται πιο πάνω στο διάγραμμα? 42

Κληρονομικότητα - Παράδειγμα Δημιουργία ιεραρχίας Καύσιμο ντίζελ Οκτάνια Κόστος ανά λίτρο Καύσιμο Οκτάνια Κόστος ανά λίτρο Ποσότητα_που_απομένει() Ποσότητα_που_απομένει() Καύσιμο αυτοκινήτου Καύσιμο ντίζελ Καύσιμο αυτοκ Οκτάνια Κόστος ανά λίτρο Ποσότητα_που_απομένει() Εύκολη προσθήκη νέου καυσίμου 43

Ιστορία της Java Βασίστηκε στη γλώσσα C και C++ (SUN MICROSYSTEMS) Το αρχικό της όνομα ήταν Oak (βελανιδιά). Αναπτύχθηκε από τον James Gosling το 1991 για «έξυπνες» ηλεκτρονικές συσκευές Επειδή δεν αναπτύχθηκε η αγορά, το project κινδύνευσε να ακυρωθεί Με την έκρηξη του Internet το 1993,το project σώθηκε Η Java χρησιμοποιήθηκε για τη δημιουργία σελίδων με δυναμικό περιεχόμενο Η Java ανακοινώθηκε επίσημα το 1995 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 2014 - JavaTM 2 Rel. 1.8 - aka Java SE 8 44

Η Java και ο Παγκόσμιος Ιστός Ένα μέρος της επιτυχίας της Java οφείλεται στο γεγονός ότι είναι η πρώτη γλώσσα που σχεδιάστηκε για να εκμεταλλευτεί τη δύναμη του Παγκόσμιου Ιστού, ο οποίος είχε αναδειχθεί λίγο πριν την κυκλοφορία της Java το 1995 Πέρα από τα πιο παραδοσιακά προγράμματα εφαρμογών, η Java καθιστά δυνατή τη συγγραφή μικρών αλληλεπιδραστικών προγραμμάτων, που λέγονται μικροεφαρμογές (applets), τα οποία εκτελούνται κάτω από τον έλεγχο ενός browser Βασικά Χαρακτηριστικά της Java Γλώσσα προγραμματισμού της εταιρίας SUN που αγοράστηκε από την Oracle Ανεξάρτητη πλατφόρμας λειτουργικού συστήματος και hardware, βάσει της τεχνολογίας Java Virtual Machine (JVM) Γλώσσα Αντικειμενοστρεφούς Προγραμματισμού (Object-Oriented) Διατίθεται δωρεάν το περιβάλλον εκτέλεσής της (runtime environment) και το περιβάλλον ανάπτυξης (development kit) 45

Βασικά Χαρακτηριστικά της Java Η Java σχεδιάστηκε με στόχο να είναι: Αντικειμενοστρεφής Κατανεμημένη Απλή Πολυνηματική (multi-threaded) Ασφαλής Ανεξάρτητη υπολογιστικής πλατφόρμας WORA (Write Once, Run Anywhere) Κατάλληλη για εφαρμογές στο Internet στον πελάτη (applets) και στον εξυπηρετητή (servlets) Ανεξαρτησία.. Τι εννοούμε λέγοντας: «Η Java είναι ανεξάρτητη πλατφόρμας συστήματος» 46

Βασικά Χαρακτηριστικά της Java Παρέχει τυποποιημένες βιβλιοθήκες κλάσεων (Java class libraries) μέσω των οποίων υποστηρίζονται Γραφικά και γραφικές διεπαφές (GUI) Πολυμέσα Επικοινωνία πάνω σε δίκτυα Επαναχρησιμοποιούμενες συνιστώσες (components) Σύνδεση με βάσεις δεδομένων... Java Class Libraries Προγράμματα Java Αποτελούνται από τμήματα που ονομάζονται classes Οι classes περιέχουν μεθόδους που επιτελούν κάποιον υπολογισμό Class libraries Γνωστές και σαν Java API (Applications Programming Interface) Πλούσια συλλογή από ήδη ορισμένες κλάσεις, έτοιμες για χρήση Δύο μέρη στην εκμάθηση της Java: Εκμάθηση της ίδιας της γλώσσας ώστε να μπορεί ο χρήστης να φτιάξει τις δικές του κλάσεις Εκμάθηση της χρήσης των ήδη υπαρχόντων class libraries 47

Παραδοσιακός τρόπος μεταγλώττισης προγραμμάτων Source code compiler Object code Linker Executable program Loader Running program Edit & Debug Libraries & other precompiled components Java compilation & interpretation Source code Java compiler Java bytecodes Java interpreter or JVM Running program Edit & Debug Libraries 48

Στάδια κατά τη διεργασία προγραμματισμού Η Java χρησιμοποιεί μια υβριδική στρατηγική: Τα προγράμματα μεταγλωττίζονται σε μια ενδιάμεση γλώσσα που παίζει το ρόλο Γλώσσας Μηχανής για την Java Virtual Machine (JVM) Η Java μετά ερμηνεύει αυτά τα προγράμματα προσομοιώνοντας την JVM Το JRE αποτελείται από τη JVM και τις τυποποιημένες βιβλιοθήκες κλάσεων Η διεργασία μεταγλώττισης πηγαίο αρχείο #include <stdio.h> main() { printf("hello\n"); } μεταγλωττι στής Αντικειμενικό αρχείο 0100100101011001000 1000010100011101011 0110100111010101100 άλλα αντικειμενικά αρχεία και βιβλιοθήκες 1001011010110001011 0100100101001011011 0101101011010100101 πρόγραμμα σύνδεσης Εκτελέσιμο αρχείο 0100100101011001000 1000010100011101011 0110100111010101100 1001011010110001011 0100100101001011011 0101101011010100101 49

Ο (δι)ερμηνευτής Java πηγαίο αρχείο αρχείο class αρχειοθήκη JAR import acm.program.*; public class Hello public void run() { println("hello"); } } μεταγλωττι στής CA FE BA BE 00 03 00 00 16 07 00 1A 07 00 00 04 00 07 0C 00 13 01 00 16 2B 4C 6A 61 πρόγραμμα σύνδεσης CA FE BA BE 00 03 00 00 16 07 00 1A 07 00 00 04 00 07 0C 00 13 01 00 16 2B 4C 6A 61 47 72 61 70 68 69 63 2D 00 1F 08 00 0F 07 14 0A 00 02 00 08 0A 00 18 0C 00 17 00 1C άλλα αρχεία class 47 72 61 70 68 69 63 2D 00 1F 08 00 0F 07 14 0A 00 02 00 08 0A 00 18 0C 00 17 00 1C JVM Hello hello Πώς δουλεύει η Java Ο Java compiler μεταφράζει Java source code σε μία ειδική αναπαράσταση που λέγεται bytecode Ο Java bytecode δεν είναι η γλώσσα μηχανής για οποιοδήποτε παραδοσιακό CPU Ένα άλλο εργαλείο λογισμικού, ο interpreter μεταφράζει το bytecode σε γλώσσα μηχανής και το εκτελεί Το JVM είναι ένα software layer που παρέχει μετάφραση μεταξύ Java byte codes και του λειτουργικού συστήματος 50

Η διαδικασία ανάπτυξης Java Java εφαρμογές και applets Υπάρχουν δύο τύποι εφαρμογών Java Java applications Τρέχουν stand alone Java applets Τρέχουν σε browser Ενσωματωμένα σε HTML αρχείο Έχουν μεγαλύτερους περιορισμούς ασφαλείας 51

Λογισμικά για ανάπτυξη εφαρμογών σε Java http://www.oracle.com/technetwork/java/javase/downloa ds/index.html Τρέχουσες εκδόσεις της γλώσσας, εκπαιδευτικό υλικό Για να αναπτύξετε προγράμματα χρειάζεται το Java Development Kit (JDK) διαθέτει εργαλεία για τη μεταγλώττιση και εκτέλεση ενός προγράμματος Java Για να εκτελέσετε προγράμματα χρειάζεται το Java Runtime Environment (JRE) διαθέτει εργαλεία μόνο για την εκτέλεση ενός προγράμματος Java Υπάρχουν εκδόσεις του περιβάλλοντος Java για Windows, Linux, Solaris, MacOS κά Τελευταία σταθερή έκδοση Java είναι η 8 (Java 1.8) Λογισμικά για ανάπτυξη εφαρμογών σε Java Java 2 Platform Standard Edition: ότι χρειάζεστε για την μεταγλώττιση και εκτέλεση εφαρμογών Java http://www.oracle.com/technetwork/java/javase/overview/index.html NetBeans: ενοποιημένο περιβάλλον ανάπτυξης, ένα από τα ευρύτερα χρησιμοποιούμενα, ελεύθερης διανομής εργαλεία ανάπτυξης Java http://www.netbeans.org/ Eclipse: περιβάλλον ανάπτυξης για μεταφορά κώδικα σε οποιαδήποτε γλώσσα http://www.eclipse.org/ Jbuilder: ενοποιημένο περιβάλλον ανάπτυξης Java από τη Borland http://borland.com/products/downloads/download_jbuilder.html 52

IDE Integrated Development Environment Ενοποιημένο περιβάλλον ανάπτυξης: software application που παρέχει εργαλεία στους computer programmers για software development. Ένα IDE συνήθως αποτελείται από: Source code editor Compiler και/ή interpreter Build automation εργαλεία Debugger Μερικές φορές, σύστημα ελέγχου εκδόσεων και διάφορα εργαλεία, τα οποία είναι ολοκληρωμένα για την απλοποίηση της κατασκευής ενός GUI. Πολλά σύγχρονα IDEs έχουν επίσης επιπλέον εργαλεία για αντικειμενοστρεφή ανάπτυξη λογισμικού Πηγές/Acknowledgements http://www.oracle.com/technetwork/java/index.html H. M. Deitel, P. J. Deitel, Java Προγραμματισμός, Μ. Γκιούρδας D. Barnes, M. Kolling, Αντικειμενοστρεφής Προγραμματισμός σε Java, Κλειδάριθμος Βασίλης Χριστοφίδης, Αντικειμενοστρεφής Προγραμματισμός, Πανεπιστήμιο Κρήτης Κ. Τσαγκάρης, Εισαγωγή στις εφαρμογές της Java, Πανεπιστήμιο Πειραιώς 53