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

Σχετικά έγγραφα
ΕΠΛ233 Βασικά στοιχεία προγραµµατισµού στη JAVA

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

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

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

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

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

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

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

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 4 : CLASSES

API: Applications Programming Interface

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Στοιχειώδεις Δοµές Δεδοµένων Δοµικά Στοιχεία και Πίνακες Κεφάλαιο 3 (3.1 και 3.2) Ε. Μαρκάκης Επικ. Καθηγητής

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

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

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

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

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

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

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

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

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

Τι σημαίνει; n Για την αποδοτική δέσμευση δομών δεδομένων μη. n Για την αποφυγή «διαρροών μνήμης» (memory leaks).

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

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

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

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

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

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

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

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

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

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

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

Εισαγωγή στον Προγραμματισμό Μάθημα 4: Αλγόριθμοι και Γλώσσες Προγραμματισμού Δεκέμβριος 2015 Χ. Αλεξανδράκη

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

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

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

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

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

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

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

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

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

9:00-10:00 π.μ. (60 λεπτά) Παρασκευή, 14 Οκτωβρίου, 2016

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

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

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

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

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

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

«ΕΙΔΙΚΑ ΘΕΜΑΣΑ ΣΟΝ ΠΡΟΓΡΑΜΜΑΣΙΜΟ ΤΠΟΛΟΓΙΣΩΝ» Κεφάλαιο 4: Αντικειμενοςτρεφήσ Προγραμματιςμόσ

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

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

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

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Υπάρχουσες κλάσεις και αντικείμενα στην Java Strings Wrapper Classes Δομές

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Περισσότερα για τις Κλάσεις, τα Αντικείμενα και τις Μεθόδους

Δοµές Δεδοµένων. 3η Διάλεξη Στοιχειώδεις Δοµές Δεδοµένων: Πίνακες. Ε. Μαρκάκης

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

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

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

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

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

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

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

Δομημένος Προγραμματισμός (ΤΛ1006)

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

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

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

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

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

ΕΠΛ131 Αρχές Προγραμματισμού

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

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

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

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

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

Mεταβλητές (variables) και Σταθερές (constants)

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

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

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

ΑΦAΙΡΕΤΙΚΟΣ (ή ΑΦΗΡΗΜΕΝΟΣ) ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT) - σύνολο δεδομένων (data, objects) - σύνολο πράξεων στα δεδομένα

Outline. 4 Object-Oriented Programming

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 17/1/08

Transcript:

Αντικείμενα και Κλάσεις Μ. Δικαιάκος Πανεπιστήμιο Κύπρου

Η έννοια της αφαιρετικότητας 2

3 Αφαιρετικότητα - abstraction Γλώσσες Υψηλότερου Επιπέδου Lisp Prolog (setq bar (cons 'x (cdr foo))) Διαδικασιακές Γλώσσες (C, Fortran, Modula) Συµβολικές Γλώσσες (assembly) sibling(x, Y) :- parent_child(z, X), parent_child(z, Y). addcc %r1,-4,%r1 addcc %r1,%r2,%r4 ld %r4,%r5 ba loop

4 Αφαιρετικότητα Παραδοσιακές «διαδικασιακές» Γ.Π. (Fortran, BASIC, C): Αποτελούν αφαιρετική αναπαράσταση των συμβολικών γλωσσών (assembly), οι οποίες με την σειρά τους αποτελούν μια αφαιρετική αναπαράσταση των λειτουργιών του υλικού του Η/Υ. Ο προγραμματιστής καλείται να δημιουργήσει μια σύνδεση ανάμεσα στο μοντέλο μηχανής και στο μοντέλο του προβλήματος που προσπαθεί να επιλύσει. LISP, APL, PROLOG: επιβάλλουν συγκεκριμένη μοντελοποίηση του πραγματικού κόσμου (π.χ. σαν σύνολο από λίστες, σαν αλγορίθμους, ή σαν αλυσίδες αποφάσεων).

5 Αφαιρετικότητα - abstraction Γλώσσες Υψηλότερου Επιπέδου Αλγόριθµος Διαδικασιακές Γλώσσες (C, Fortran, Modula) Θεωρητικό Συµβολικές Μοντέλο Μηχανής Γλώσσες (assembly) Μηχανή Turing

6 Η αξία της αφαιρετικότητας Το πρόβληµα του Akis Express: βρες την πιο σύντοµη διαδροµή (traveling salesman) Ποιά διαδροµή είναι η συντοµότερη; 1 2 3 1, 2, 3, 4, 5, 6, 1 ή 1, 4, 2, 6, 5, 3, 1 ή... 6 5 4

7 Η αξία της αφαιρετικότητας Γλώσσες Υψηλότερου Επιπέδου Διαδικασιακές Γλώσσες (C, Fortran, Modula) Συµβολικές Γλώσσες (assembly) Το πρόβληµα του Akis Express (traveling salesman)

8 Αφαιρετικότητα στον Α/Σ Π Τα πάντα είναι αντικείμενα Ένα πρόγραμμα JAVA κωδικοποιεί την επίλυση ενός υπολογιστικού προβλήματος σαν σύνολο από αντικείμενα που αλληλεπιδρούν.

Τι είναι τα αντικείµενα ;;; 9

10 Αντικείμενα Η έννοια των αντικειμένων έχει κομβική σημασία στον Α/Σ προγραμματισμό: τα πάντα είναι «αντικείµενα»: Τα αντικείμενα στον Α/Σ προγραμματισμό έχουν τρία κύρια χαρακτηριστικά: Κατάσταση (state) Συµπεριφορά (behavior) Ταυτότητα (identity)

11 Αντικείμενα Η πολυπλοκότητα της κατάστασης και της συμπεριφοράς διαφορετικών αντικειμένων μπορεί να διαφέρει: Ένας σκύλος έχει κατάσταση (name, color, breed, hungry) και συμπεριφορά (barking, fetching, wagging tail). Ένα ποδήλατο επίσης έχει κατάσταση (current gear, current pedal cadence, current speed) και συμπεριφορά (changing gear, changing pedal cadence, applying brakes). Ο καθορισμός της κατάστασης και της συμπεριφοράς αντικειμένων του πραγματικού κόσμου είναι ένας πολύ καλός τρόπος για να ξεκινήσετε να σκέφτεστε με αντικειμενοστρεφή τρόπο.

12 Αντικείμενα Ένα αντικείμενο λογισμικού: Aποθηκεύει στο εσωτερικό του πληροφορίες που είναι αποτέλεσμα των υπολογισμών-λειτουργιών του. Η αποθήκευση γίνεται στα πεδία δεδομένων του αντικειμένου(fields/variables). Οι αποθηκευμένες πληροφορίες αποτελούν την κατάσταση(state) του αντικειμένου. Ένα αντικείμενο λογισμικού: Εκθέτει τη συμπεριφορά του μέσω μεθόδων (functions in some programming languages). Οι μέθοδοι λειτουργούν πάνω στην εσωτερική κατάσταση ενός αντικειμένου και αποτελούν τον βασικό μηχανισμό για επικοινωνία ανάμεσα σε αντικείμενα. Η ταυτότητα ενός αντικειμένου λογισμικού: identifier μέσω του οποίου έχουμε προγραμματιστική πρόσβαση στο αντικείμενο (π.χ. η διεύθυνση στην οποία αποθηκεύεται).

13 Αντικείμενα Λογισμικού Κατάσταση Συµπεριφορά Πεδία Δεδοµένων Λειτουργίες/Μέθοδοι Ταυτότητα Διεύθυνση µνήµης Καθορίζουν την αλληλεπίδραση του αντικειµένου µε άλλα αντικείµενα

14 Αντικείμενα στη JAVA Όλα τα δεδομένα στην JAVA κωδικοποιούνται σαν αντικείμενα. Για κάθε αντικείμενο πρέπει να υπάρχει ένα χειριστήριο (handle) μέσω του οποίου: αποκτούμε πρόσβαση στο ίδιο το αντικείμενο χρησιμοποιούμε τις μεθόδους και τα δεδομένα του Μετά την δημιουργία-δήλωση ενός χειριστηρίου, μπορεί να γίνει η διασύνδεσή του με κάποιο αντικείμενο. Η δημιουργία ενός νέου αντικειμένου γίνεται με τη χρήση της εντολής new.

15 Δημιουργία αντικειμένων String s = new String( asdf ); String s = asdf ; BankAcct b1 = new BankAcct(21338, 0.0);

16 Πρόσβαση σε πεδία δεδομένων αντικειμένων Πεδία δεδομένων αντικειμένων DatOnly: class DatOnly { int i; float f; boolean b; } Δήλωση χειριστηρίου, δημιουργία αντικειμένου, αρχικοποίηση χειριστηρίου DataOnly d = new DataOnly(); Αρχικοποίηση πεδίων αντικειμένου: d.i = 47; d.f = 1.1f; d.b = false; myplane.lefttank.capacity = 100;

Μέθοδοι και αντικείμενα Οι μέθοδοι της JAVA είναι οι γνωστές συναρτήσειςδιαδικασίες του διαδικασιακού προγραμματισμού. Οι μέθοδοι καθορίζουν τις υπευθυνότητες που να αναλαμβάνουν τα αντικείμενα μιας κλάσης. Οι μέθοδοι δηλώνονται μόνο σαν στοιχείο κάποιας κλάσης. Μια μέθοδος μπορεί να κληθεί μόνο μέσω κάποιου αντικειμένου/κλάσης, το οποίο να την εμπεριέχει. Αν προσπαθήσετε να καλέσετε κάποια μέθοδο που δεν ενυπάρχει σε ένα αντικείμενο, θα πάρετε μήνυμα λάθους από τον μεταφραστή. Κλήση μεθόδου: objectname.methodname(arg1,arg2,arg3) Μ. Δικαιάκος 17

Παράμετροι (arguments) Η λίστα παραμέτρων μιας μεθόδου καθορίζει τις πληροφορίες που πρέπει να περάσουμε στην μέθοδο όταν την καλέσουμε. Οι πληροφορίες αυτές έχουν τη μορφή αντικειμένων (ή μεταβλητών αρχέγονου τύπου). Ως παραμέτρους στις κλήσεις μεθόδων περνούμε λοιπόν τα χειριστήρια των σχετικών αντικειμένων. Π.χ.: int storage(string s) { return s.length() * 2; } void nothing () { return; } Η χρήση της εντολής return Μ. Δικαιάκος 18

19 Ενθυλάκωση (encapsulation) Η απόκρυψη της εσωτερικής κατάστασης και ο περιορισμός της επικοινωνίας με τα αντικείμενα μόνο μέσω των μεθόδων των αντικειμένων υλοποιούν την αρχή της ενθυλάκωσης δεδομένων (data encapsulation), η οποία είναι βασική στον Α/ Σ προγραμματισμό. By attributing state (current speed, current pedal cadence, and current gear) and providing methods for changing that state, the object remains in control of how the outside world is allowed to use it. For example, if the bicycle only has 6 gears, a method to change gears could reject any value that is less than 1 or greater than 6.

Τι είναι οι κλάσεις ;;; 20

21 Κλάσεις Στον πραγματικό κόσμο θα βρείτε συχνά αντικείμενα που ανήκουν στην ίδια κατηγορία - είναι του ίδιου τύπου. Π.χ. έχουμε χιλιάδες ποδήλατα της ίδιας μάρκας και του ίδιου μοντέλου, τα οποία έχουν κατασκευαστεί με βάση το ίδιο σχέδιο κι έχουν τα ίδια συστατικά στοιχεία. Στον Α/Σ προγραμματισμό, λέμε ότι ένα αντικείμενοποδήλατο, αποτελεί στιγμιότυπο (instance) μια κλάσης αντικειμένων που είναι γνωστά ως ποδήλατα. Η κλάση είναι το σχεδιάγραμμα (ο τύπος) από το οποίο κατασκευάζονται τα αντικείμενα-ποδήλατα. Η κλάση καθορίζει την κατάσταση και τη συμπεριφορά των αντικειμένων της.

22 Αντικείμενα και Κλάσεις Αντικείμενα που ανήκουν στην ίδια κλάση: Υποστηρίζουν την ίδια συλλογή λειτουργιών (συμπεριφορών) Έχουν ένα κοινό σύνολο από πιθανές καταστάσεις

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

24 Δημιουργία νέων τύπων: κλάσεις Ο τύπος των αντικειμένων στην JAVA καθορίζεται με τον ορισμό κλάσεων. Π.χ: class ATypeName { /* class body */} Αντικείμενα μιας κλάσης δημιουργούνται με χρήση της new: ATypeName a = new ATypeName(); Στον ορισμό των κλάσεων συμπεριλαμβάνονται: Πεδία δεδομένων (fields): Αντικείμενα οποιουδήποτε τύπου, που αντιπροσωπεύονται από κάποια χειριστήρια. Χρήζουν αρχικοποίησης με την new. Mεταβλητές αρχέγονων τύπων. Μέθοδοι Κάθε αντικείμενο διατηρεί την δική του μνήμη για τα δικά του πεδία δεδομένων.

25 Παράδειγμα: ηλεκτροστατικά φορτία Οι αλληλεπιδράσεις ηλεκτρικών φορτίων ακολουθούν το Νόμο του Coulomb Κάθε φορτίο δημιουργεί ένα ηλεκτροστατικό δυναμικό στο χώρο, το οποίο καθορίζει τις δυνάμεις που ασκούνται σε άλλα φορτία του χώρου. Το δυναμικό ενός σημείου στο χώρο ισούται με το άθροισμα των δυναμικών που δημιουργούνται από όλα τα φορτία του χώρου Εξετάζουμε την περίπτωση των δύο διαστάσεων (τα φορτία είναι τοποθετημένα σε ένα επίπεδο)

26 Υπολογισμός Ηλεκτροστατικού Δυναμικού (x,y) r q (x0,y0) V = k q / r q: φορτίο r : απόσταση k: ηλεκτροστατική σταθερά (k = 8.99x10 9 Nm 2 /C 2 ) φορτισµένο σωµατίδιο c µε φορτίο q

27 Ζητούμενο Υπολογίστε το ηλεκτροστατικό δυναμικό σημείων ενός επιπέδου, δεδομένων φορτίων που υπάρχουν στο επίπεδο. q1 q2 x qn

28 Αφαιρετικότητα Πώς θα κωδικοποιήσουμε στο πρόγραμμά μας τα φορτία; Σαν αντικείμενα (objects) Τι συμπεριλαμβάνει η κατάσταση (state) του κάθε φορτίου; Το μέγεθος του φορτίου Πραγματικός αριθμό (q) Την θέση του φορτίου στο επίπεδο Ζευγάρι πραγματικών αριθμών (x, y) Ποιά είναι η συμπεριφορά (behavior) του κάθε φορτίου; Δημιουργεί ένα πεδίο δυναμικού

29 Αφαιρετικότητα Χρειαζόμαστε ένα τύπο δεδομένων, ο οποίος να ορίζει τα χαρακτηριστικά του κάθε φορτίου (κατάσταση, συμπεριφορά) Εισάγουμε μια κλάση Charge για την περιγραφή ηλεκτρικών φορτίων. Τι πεδία δεδομένων πρέπει να έχει αυτή η κλάση; Θέση του κάθε φορτίου (συντεταγμένες x, y) Τιμή του φορτίου Τι συμπεριφορά πρέπει να έχουν τα στιγμιότυπα αυτής της κλάσης; Κάθε φορτίο προκαλεί κάποιο δυναμικό σε κάθε άλλο σημείο του επιπέδου

30 Χαρακτηριστικά κλάσης Charge public class Charge double x0, y0, q0; double potentialat(double x, double y) δυναμικό στη θέση x,y λόγω του φορτίου String tostring() μια συμβολοσειρά που αναπαριστά το φορτίο

31 Χρήση της Charge public class ChargeClient { public static void main(string[] args) { double x = Double.parseDouble(args[0]); double y = Double.parseDouble(args[1]); Charge c1 = new Charge(.51,.63, 21.3); Charge c2 = new Charge(.13,.94, 81.9); System.out.println(c1); System.out.println(c2); Μετασχηµατισµός του stdin από πίνακα συµβολοσειρών σε πραγµατικούς αριθµούς. Χρήση της tostring } } double v1 = c1.potentialat(x, y); double v2 = c2.potentialat(x, y); StdOut.println(v1+v2); Παρατηρείστε ότι ο κώδικας που χρησιμοποιεί την Charge δεν χρειάζεται να γνωρίζει την υλοποίηση της.

32 Απόκρυψη Πληροφοριών-Information Hiding Είναι πολύ σημαντικό να προσέξουμε ότι δεν μας ενδιαφέρει πως ακριβώς ένα αντικείμενο εκπληρώνει μια υποχρέωσή του. Έτσι, δεν έχουμε ιδέα τι ενέργειες θα κάνει και από ποιούς θα ζητήσει βοήθεια για να μας εξυπηρετήσει. Από την στιγμή που το αντικείμενο δεχθεί το μήνυμα-αίτημά μας, αποδέχεται και την ευθύνη για την διεκπεραίωση του. Βασική προσέγγιση: ψάχνουμε πάντοτε κάποιον άλλο για να μεταβιβάσουμε ολόκληρη την υποχρέωση που έχουμε αναλάβει ή ένα μέρος της.

33 Διασυνδετικότητα Επιτυγχάνουμε έτσι, χαμηλή διασυνδετικότητα στα προγράμματά μας Ορισμός διασυνδετικότητας: Ο βαθμός εξάρτησης ενός τμήματος τού κώδικα κάποιου λογισμικού συστήματος από τα υπόλοιπα τμήματα. Σημασία διασυνδετικότητας Θεωρείστε κάποιον κώδικα που υλοποιεί ουσιώδη λειτουργία ενός πολύπλοκου συστήματος λογισμικού. Έφʼ όσον ο κώδικας αυτός χρησιμεύει σε άλλα κομμάτια του συστήματος, στοιχεία του (μεταβλητές, αποτελέσματα, εντολές) θα χρησιμοποιούνται και πρέπει να είναι γνωστά και προσβάσιμα για την υλοποίηση των υπολοίπων κομματιών του λογισμικού. Άρα, η ανάπτυξη ενός νέου υποσυστήματος προϋποθέτει την κατανόηση και γνώση του κώδικά μας (καλό ή κακό;)

34 Αντιμετώπιση πολυπλοκότητας Βασική μέθοδος αντιμετώπισης της πολυπλοκότητας στον προγραμματισμό: ΔΙΑΙΡΕΙ και ΒΑΣΙΛΕΥΕ (Divide & Conquer) Διαμερισμός των προβλημάτων σε μικρότερα υποπροβλήματα Ξεχωριστή επίλυση των μικρότερων υποπροβλημάτων χωριστά Εύκολη συναρμολόγηση των υπο-λύσεων

35 Απουσία Παρεμβολών (non-interference) Εφόσον ένα αντικείμενο παρέχει τις υπηρεσίες που θέλουμε, δεν μας ενδιαφέρει πως διεκπεραιώνει τα αιτήματά μας. Τα εξαρτήµατα λογισµικού (software components) σε Α/Σ συστήματα χαρακτηρίζονται από τις υπηρεσίες που παρέχουν και όχι από τις λεπτομέρειες της υλοποίησής τους. Η προσέγγιση αυτή διευκολύνει την συνεργασία πολλών προγραμματιστών πάνω στο ίδιο σύστημα με την ελάχιστη παρεμβολή του ενός στη δουλειά του άλλου. Ask not what you can do to your data structures; ask what your data structures can do for you.

36 Υλοποίηση Κλάσης Charge public class Charge { private double rx, ry; private double q; // position // charge Πεδία δεδοµένων (instance variables) public Charge(double x0, double y0, double q0) { rx = x0; ry = y0; q = q0; } public double potentialat(double x, double y) { double k = 8.99e09; double dx = x - rx; double dy = y - ry; return k * q / Math.sqrt(dx*dx + dy*dy); } Κατασκευαστής Μέθοδοι (instance methods) public String tostring() { return q + " at " + "(" + rx + ", " + ry + ")"; } }

Μερικά απλά υπολογιστικά προβλήματα 37

38 Βρείτε αν ένα έτος είναι δίσεκτο Δίσεκτο έτος: διαιρείται δια 4 αλλά όχι δια εκατό, εκτός αν διαιρείται δια 400 public class LeapYear { public boolean isleapyear(int year) { boolean isleapyear; // divisible by 4 isleapyear = (year % 4 == 0); // divisible by 4 and not 100 isleapyear = isleapyear && (year % 100!= 0); // divisible by 4 and not 100 unless divisible by 400 isleapyear = isleapyear (year % 400 == 0); } } return isleapyear;

39 Βρείτε αν ένα έτος είναι δίσεκτο public class TestLeapYear { public static void main(string[] args) { int year = Integer.parseInt(args[0]); LeapYear leapyearcheck = new LeapYear(); } } System.out.println(leapYearCheck.isLeapYear(year));

40 Βρείτε τυχαίο ακέραιο μεταξύ 0 - Ν public class RandomInteger { public void printrandint(string max) { int N = Integer.parseInt(max); // a pseudo-random real between 0.0 and 1.0 double r = Math.random(); // a pseudo-random integer between 0 and N-1 int n = (int) (r * N); } } System.out.println("Your random integer is: " + n);

Κλάση ποδήλατο class Bicycle { int cadence = 0; int speed = 0; int gear = 1; Παρατηρήσεις: 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); } } Μ. Δικαιάκος Αποτύπωση κατάστασης Ορισµός συµπεριφοράς Που βρίσκεται η main? 41

42 Εφαρμογή ποδηλάτου class BicycleDemo { public static void main(string[] args) { /* Create two different Bicycle objects */ Bicycle bike1 = new Bicycle(); Bicycle bike2 = new Bicycle(); /* Invoke methods on those objects */ bike1.changecadence(50); bike1.speedup(10); bike1.changegear(2); bike1.printstates(); bike2.changecadence(50); bike2.speedup(10); bike2.changegear(2); bike2.changecadence(40); bike2.speedup(10); bike2.changegear(3); bike2.printstates(); }}