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

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

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

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

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

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Κλάσεις και αντικείμενα #include <iostream.h<

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

Αντικείµενα. ηµιουργία και χρησιµοποίηση αντικειµένων. ηµιουργία αντικειµένων

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

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

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

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

Προγραμματισμός Ι (ΗΥ120)

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

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

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

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Μαθήματα από τα εργαστήρια

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

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

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

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

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

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

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

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

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

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

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

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

Η γλώσσα προγραμματισμού C

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

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

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

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

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

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

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

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

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

Ανάπτυξη και Σχεδίαση Λογισμικού

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 3: Έλεγχος ροής προγράμματος

Πίνακες στη Java. Αντικειμενοστρεφής Προγραμματισμός 4/4/2016. Δρ. Ανδριάνα Πρέντζα Αναπληρώτρια Καθηγήτρια.

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D. Κλάσεις.

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

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

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

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

7. Δομές Ελέγχου (Control Statements)

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

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

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

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

2.1. Εντολές Σχόλια Τύποι Δεδομένων

Προγραμματισμός ΙI (Θ)

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων Tοπικές μεταβλητές To αντικείμενο this Accessor, Mutator μέθοδοι

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

Pascal. 15 Νοεμβρίου 2011

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες

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

Transcript:

Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων Αντικειμενοστρεφής Προγραμματισμός 26/3/2018 Δρ. Ανδριάνα Πρέντζα Αναπληρώτρια Καθηγήτρια aprentza@unipi.gr

Εισαγωγή στις Κλάσεις και Αντικείμενα

Java's "Building Blocks" Στην Java η μονάδα προγραμματισμού είναι η κλάση από την οποία προκύπτουν στιγμιότυπα (δημιουργούνται) αντικειμένων Ένα πρόγραμμα αποτελείται από μία ή περισσότερες κλάσεις Μία κλάση περιέχει μία ή περισσότερες μεθόδους Μία μέθοδος περιλαμβάνει program statements (εντολές) Οι εντολές (statements) είναι: Δηλώσεις μεταβλητών: πρωταρχικοί τύποι δεδομένων και κλάσεις Λειτουργίες (Operations): αριθμητικές, λογικές Δομές ελέγχου: επιλογή, βρόχοι επαναλήψεων, κλπ. Μηνύματα αντικειμένων: π.χ. κλήσεις σε μεθόδους Μία εφαρμογή Java πάντοτε εκτελεί τη main method

Programs: Classes, Methods and Statements

Μελέτη του ορισμού μιας κλάσης Ο πηγαίος κώδικας των περισσότερων κλάσεων μπορεί να χωριστεί σε δύο τμήματα: στο εξωτερικό περιτύλιγμα της κλάσης, το οποίο απλά παρέχει ένα όνομα στην κλάση, και στο εσωτερικό τμήμα που υλοποιεί στην ουσία την κλάση, αφού σε αυτό ορίζονται τα πεδία, οι κατασκευαστές και οι μέθοδοι της κλάσης που καθορίζουν τα χαρακτηριστικά και την συμπεριφορά των αντικειμένων της κλάσης. Συγκεκριμένα: τα πεδία χρησιμοποιούνται για την αποθήκευση δεδομένων για κάθε αντικείμενο οι κατασκευαστές καθορίζουν την αρχική κατάσταση ενός αντικειμένου όταν αυτό δημιουργείται οι μέθοδοι υλοποιούν τη συμπεριφορά των αντικειμένων, αφού καθορίζουν τις λειτουργίες που μπορούν να εκτελέσουν. Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας 5

Κλάση ΤicketΜachine Προσομοίωση λειτουργίας μηχανήματος έκδοσης εισιτηρίων Η αρχική έκδοση της κλάσης αυτής προσομοιώνει τη λειτουργία ενός μηχανήματος έκδοσης εισιτηρίων με τις παρακάτω περιορισμένες δυνατότητες: 1. η τιμή των εισιτηρίων (price) που εκδίδει η μηχανή καθορίζεται εξαρχής και δεν μπορεί να αλλάξει μετά την έναρξη λειτουργίας της 2. η μηχανή υπολογίζει το σύνολο των χρημάτων (balance) που εισάγει ο χρήστης μέχρι να ζητήσει την εκτύπωση του εισιτηρίου και εμφανίζει το σύνολο εφόσον το ζητήσει ο χρήστης 3. θεωρούμε ότι ο χρήστης έχει εισάγει το σωστό αντίτιμο, αφού η μηχανή δεν ελέγχει αν τα χρήματα που έχει εισάγει στη μηχανή επαρκούν και δεν επιστρέφει ρέστα 4. η μηχανή υπολογίζει και εμφανίζει το σύνολο των χρημάτων (total) που έχουν συγκεντρωθεί από την έκδοση των εισιτηρίων. Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας 6

Βασική δομή κλάσης public class TicketMachine { } Το εσωτερικό τμήμα της κλάσης παραλείπεται public class ClassName { } Πεδία (Fields) Κατασκευαστές (Constructors) Μέθοδοι (Methods) Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling Εξωτερικό περιτύλιγμα κλάσης: κύριος σκοπός είναι να παρέχει ένα όνομα για την κλάση Τα περιεχόμενα μιας κλάσης: - Πεδία: αποθηκεύουν δεδομένα που θα χρησιμοποιηθούν από τα αντικείμενα - Κατασκευαστές: επιτρέπουν τη σωστή διαμόρφωση κάθε αντικειμένου όταν δημιουργείται για πρώτη φορά - Μέθοδοι: υλοποιούν τη συμπεριφορά των αντικειμένων

Source code Πηγαίος κώδικας Κάθε κλάση έχει το δικό της πηγαίο κώδικα (Java code) που συσχετίζεται με αυτήν και καθορίζει τις λεπτομέρειές της (fields-πεδία and methods-μεθόδους). Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling

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

Πεδία public class TicketMachine { private int price; private int balance; private int total; // η τιμή των εισιτηρίων που εκδίδει η μηχανή /* το σύνολο των χρημάτων που έχει εισάγει ο χρήστης μέχρι στιγμής */ /* το σύνολο των χρημάτων που έχουν συγκεντρωθεί στη μηχανή */ } η δεσμευμένη λέξη private δηλώνει ότι κάθε ένα από τα παραπάνω πεδία θα είναι προσπελάσιμο μόνο από την κλάση (τον κατασκευαστή και τις μεθόδους) στην οποία δηλώνεται και τα τρία πεδία είναι τύπου int που σημαίνει ότι μπορούν να πάρουν ακέραιες τιμές για την κατανόηση του ρόλου του κάθε πεδίου χρησιμοποιούνται σχόλια (comments). Τα σχόλια που καταλαμβάνουν μία μόνο γραμμή ξεκινάνε με τους χαρακτήρες //, ενώ τα σχόλια που καταλαμβάνουν περισσότερες γραμμές ξεκινάνε με τους χαρακτήρες /* και τελειώνουν με τους */. Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας

Πεδία Τα πεδία αποθηκεύουν δεδομένα για ένα αντικείμενο Τα πεδία λέγονται και μεταβλητές στιγμιοτύπου, αφού μπορεί να αλλάζουν συνεχώς τιμή μέσω της εκτέλεσης των μεθόδων. Τα πεδία ορίζουν την κατάσταση ενός αντικειμένου public class TicketMachine { } private int price; private int balance; private int total; Τα υπόλοιπα παραλείπονται Visibility modifier Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling Type Variable name

Μέθοδοι Από τη στιγμή που θα ορίσουμε μια κλάση μπορούμε να δημιουργήσουμε όσα αντικείμενα στιγμιότυπα χρειαζόμαστε για την επίλυση ενός προβλήματος Τα αντικείμενα που θα δημιουργήσουμε προκειμένου να λύσουμε ένα πρόβλημα μπορούμε να τα χειριστούμε εκτελώντας συγκεκριμένες λειτουργίες που περιγράφονται στην κλάση που ανήκουν τα αντικείμενα Οι λειτουργίες αυτές ονομάζονται μέθοδοι (methods) και λέμε ότι μια μέθοδος καλείται ή ενεργοποιείται Όπως είναι φυσικό ένα αντικείμενο ανταποκρίνεται στην ενεργοποίηση μιας μεθόδου εκτελώντας τη λειτουργία που περιγράφει η μέθοδος. Μια μέθοδος μπορεί να χρησιμοποιηθεί προκειμένου να αλλάξουμε την κατάσταση ενός αντικειμένου ή να προσπελάσουμε κάποιες από τις πληροφορίες που περικλείει το αντικείμενο Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας

Μέθοδοι Μια κλάση παρέχει μία ή περισσότερες μεθόδους (methods) Η μέθοδος Περιγράφει τους μηχανισμούς με τους οποίους εκπληρώνει το έργο της Αποκρύπτει από το χρήστη τις πολύπλοκες εργασίες που εκτελεί Η κλήση μιας μεθόδου της υποδεικνύει να εκτελέσει το έργο της 2005 Pearson Education, Inc. All rights reserved.

Μέθοδοι Μέθοδοι που μόνο κάνουν κάτι void installdoubleglazing() Χωρίς να επιστρέφουν κάποια τιμή (void) και χωρίς να απαιτείται επιπλέον πληροφορία (παράμετρος) για την εκτέλεση της μεθόδου myhouse.installdoubleglazing(); Μέθοδοι οι οποίες επιστρέφουν ένα αποτέλεσμα int getnumberofrooms() Επιστρέφει έναν ακέραιο int rooms; Μέθοδοι που απαιτούν παραμέτρους int getroomwidth(int roomno) rooms = myhouse.getnumberofrooms() Επιστρέφει έναν ακέραιο αλλά και απαιτεί και ακέραια παράμετρο int roomonewidth; roomonewidth = myhouse.getroomwidth(1);

Μεταβίβαση δεδομένων μέσω παραμέτρων Διαχωρίζουμε τα ονόματα των παραμέτρων μέσα σε ένα κατασκευαστή ή μία μέθοδο από τις τιμές των παραμέτρων έξω από αυτές, αναφερόμενοι στα ονόματα ως τυπικές παράμετροι και στις τιμές ως πραγματικές παράμετροι Η ticketcost είναι μία τυπική παράμετρος, ενώ η τιμή που δίνει ο χρήστης, π.χ 50, είναι πραγματική παράμετρος Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling

Μέθοδοι - Κατασκευαστές Ένα ιδιαίτερο είδος μεθόδου είναι η μέθοδος που χρησιμοποιούμε για τη δημιουργία ή αλλιώς την αρχικοποίηση (initialization) των αντικειμένων μιας κλάσης Η μέθοδος αυτή καθορίζει την αρχική κατάσταση του νέου αντικειμένου δίνοντας τις κατάλληλες αρχικές τιμές στα πεδία του. Μια τέτοια μέθοδος ονομάζεται κατασκευαστής (constructor) και είναι η μοναδική μέθοδος της κλάσης που έχει το ίδιο όνομα με αυτή. Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας

Κατασκευαστές Οι κατασκευαστές (constructors) μιας κλάσης αρχικοποιούν ένα αντικείμενο όταν δημιουργείται, έτσι ώστε να είναι σε κατάσταση να χρησιμοποιηθεί. Η αρχικοποίηση (initialization) στην ουσία αναφέρεται στην εκχώρηση των κατάλληλων τιμών στα πεδία ενός αντικειμένου και μπορεί να γίνει είτε με την ανάθεση σταθερών τιμών είτε με το πέρασμα τιμών που δίνονται από τον χρήστη κατά την εκτέλεση του προγράμματος. O κατασκευαστής (constructor) είναι η μοναδική μέθοδος της κλάσης που έχει το ίδιο όνομα με αυτή. Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας

Κατασκευαστές Όνομα κατασκευαστή == όνομα κλάσης Δεν έχει τύπο επιστροφής ΠΟΤΕ ΔΕΝ επιστρέφει τίποτα Συνήθως αρχικοποιεί πεδία Όλες οι κλάσεις χρειάζονται τουλάχιστον ένα κατασκευαστή Αν δεν ορίσουμε κάποιον, τότε default CLASSNAME () { }

Κατασκευαστές public TicketMachine(int ticketcost) { } price = ticketcost; balance = 0; total = 0; στα πεδία balance και total εκχωρείται η σταθερή τιμή 0, στο πεδίο price δεν μπορεί να εκχωρηθεί μια σταθερή τιμή, αφού η τιμή του εισιτηρίου δίνεται από τον χρήστη όταν δημιουργείται η μηχανή έκδοσης των εισιτηρίων και δεν είναι εκ των προτέρων γνωστή. Γι αυτό το λόγο λοιπόν χρησιμοποιείται η παράμετρος ticketcost που περνάει την τιμή του εισιτηρίου που δίνει ο χρήστης στον κατασκευαστή Παρατηρείστε ότι ο κατασκευαστής έχει το ίδιο όνομα με την κλάση! Οι κατασκευαστές αποτελούν τη μοναδική περίπτωση μεθόδων που έχουν το ίδιο όνομα με την κλάση στην οποία ορίζονται. Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας

Κατασκευαστές Σε μια κλάση είναι δυνατόν να υπάρχουν περισσότεροι του ενός κατασκευαστές. Για παράδειγμα, στην κλάση TicketMachine εκτός από τον κατασκευαστή που περιγράψαμε παραπάνω, στον οποίο η τιμή του εισιτηρίου δίνεται από τον χρήστη, μπορούμε να ορίσουμε και ένα δεύτερο κατασκευαστή που θα δημιουργεί μηχανές έκδοσης εισιτηρίων με προκαθορισμένη τιμή εισιτηρίου (που θα εκχωρείται στο σώμα του κατασκευαστή στο πεδίο price). Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας

Κατασκευαστές Οι κατασκευαστές μιας κλάσης αρχικοποιούν ένα αντικείμενο Έχουν το ίδιο όνομα με την κλάση στην οποία ορίζονται Αποθηκεύουν αρχικές τιμές στα πεδία Συχνά δέχονται τιμές παραμέτρου εξωτερικά για την αποθήκευση τιμών στα πεδία -> price public class TicketMachine { } Τα πεδία παραλείπονται public TicketMachine(int ticketcost) { } price = ticketcost; balance = 0; total = 0; Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling

Η κατάσταση ενός αντικειμένου Πεδία Το σύνολο των τιμών όλων των χαρακτηριστικών ενός αντικειμένου (όπως για παράδειγμα για τον κύκλο η διάμετρος, οι συντεταγμένες του κ.τ.λ.) καθορίζουν την κατάσταση (state) του αντικειμένου Για την αναπαράσταση της κατάστασης ενός αντικειμένου αποθηκεύονται οι τιμές των χαρακτηριστικών του σε μεταβλητές, οι οποίες ονομάζονται πεδία (fields) Η αλλαγή της κατάστασης ενός αντικειμένου (ή αλλιώς η αλλαγή των τιμών ενός ή περισσότερων πεδίων) ή η προσπέλαση κάποιων από τις πληροφορίες που περικλείει το αντικείμενο πραγματοποιείται ενεργοποιώντας τις κατάλληλες μεθόδους Παρατήρηση Όλα τα αντικείμενα/στιγμιότυπα μιας συγκεκριμένης κλάσης έχουν τον ίδιο αριθμό, τύπο και ονόματα πεδίων και φυσικά και τις ίδιες μεθόδους. Ωστόσο, οι τιμές των πεδίων και συνεπώς η κατάσταση των στιγμιοτύπων μιας κλάσης μπορεί να διαφέρει Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας

Αντικείμενο Τα αντικείμενα της ίδιας κλάσης έχουν όλα τα ίδια πεδία Ο αριθμός, ο τύπος και τα ονόματα των πεδίων είναι ίδια, ενώ η πραγματική τιμή ενός συγκεκριμένου πεδίου σε κάθε αντικείμενο μπορεί να είναι διαφορετική Τα αντικείμενα διαφορετικής κλάσης μπορεί να έχουν διαφορετικά πεδία Ο αριθμός, ο τύπος και τα ονόματα των πεδίων ορίζονται στην κλάση και όχι σε ένα αντικείμενο! Κλάση TicketMachine: ορίζει ότι κάθε αντικείμενοκύκλος θα έχει τρία πεδία με ονόματα price (τύπου int), balance (τύπου int), total (τύπου int)

Αλληλεπίδραση αντικειμένων Σε ένα πρόγραμμα σε Java υπάρχουν πολλά αντικείμενα Είναι δυνατόν τα αντικείμενα αυτά να μην δημιουργούνται πάντα από το χρήστη με ξεχωριστές εντολές, δηλαδή, δημιουργείται το 1ο αντικείμενο (ή ένας αριθμός αντικειμένων) και όλα τα υπόλοιπα αντικείμενα δημιουργούνται άμεσα ή έμμεσα από το αντικείμενο αυτό Ένα αντικείμενο λοιπόν μπορεί να δημιουργεί άλλα αντικείμενα, με τα οποία επικοινωνεί καλώντας τις μεθόδους τους Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας

Κλήση μεθόδων Για να καλέσουμε μία μέθοδο: Γράφουμε το όνομα του αντικειμένου, στη συνέχεια τελεία, και στη συνέχεια το όνομα της μεθόδου Circle1.makeVisible(); Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας

Μέθοδοι με παραμέτρους Κάποιες μέθοδοι απαιτούν την παροχή επιπλέον πληροφοριών για την εκτέλεση της λειτουργίας που αντιπροσωπεύουν Για την παροχή των επιπλέον πληροφοριών χρησιμοποιούμε παραμέτρους (parameters). Κάθε παράμετρος μιας μεθόδου έχει ένα συγκεκριμένο τύπο δεδομένων (data type) που καθορίζει τι είδους τιμές μπορεί να πάρει η παράμετρος και ένα όνομα (name) που φανερώνει τι αντιπροσωπεύει η πληροφορία/τιμή που έχει η συγκεκριμένη παράμετρος Οι παράμετροι μιας μεθόδου δηλώνονται στην επικεφαλίδα της, η οποία περιλαμβάνει όλες τις απαραίτητες πληροφορίες για την ενεργοποίησή της και ονομάζεται υπογραφή (signature) της μεθόδου Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας

Τύποι δεδομένων Ο τύπος μιας παραμέτρου καθορίζει τα είδη των δεδομένων που μπορούν να μεταβιβαστούν σε μία παράμετρο int: ακέραιος αριθμός String: αναμένεται τμήμα κειμένου. Τα αλφαριθμητικά περικλείονται πάντα μέσα σε διπλά εισαγωγικά boolean: Truth value (true or false) double: Real number (3.14, 1.0, -2.1)

Πηγαίος κώδικας Σε κάθε κλάση αντιστοιχεί και ο αντίστοιχος πηγαίος κώδικας. Ο πηγαίος κώδικας μιας κλάσης καθορίζει τη δομή και τη συμπεριφορά, δηλαδή τα πεδία και τις μεθόδους, των αντικειμένων της κλάσης. Η γενική μορφή μιας κλάσης είναι η εξής: public class <όνομα_κλάσης> { πεδία (fields) κατασκευαστές (constructors) } μέθοδοι (methods) Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας 28

Εμφάνιση του πηγαίου κώδικα μιας κλάσης public class Circle { private int diameter; private int xposition; private int yposition; Τα πεδία της κλάσης Circle private String color; private boolean isvisible; /** * Δημιουργία ενός νέου κύκλου στην προκαθορισμένη θέση και * με το προκαθορισμένο χρώμα. */ public Circle() { } diameter = 30; xposition = 20; yposition = 60; color = "blue"; isvisible = false; Κατασκευαστής για την αρχικοποίηση του νέου κύκλου Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας 29

Εμφάνιση του πηγαίου κώδικα μιας κλάσης /** * Εμφάνιση του κύκλου, αν δεν είναι ήδη ορατός. */ public void makevisible() { } isvisible = true; draw(); Από την υπογραφή της μεθόδου makevisible() προκύπτει ότι η μέθοδος: 1) δεν έχει καμία παράμετρο 2) δεν επιστρέφει καμία τιμή... } /** * Αλλαγή χρώματος. Τα αποδεκτά χρώματα είναι "red", "yellow", "blue", * "green", "magenta" και "black". */ public void changecolor(string newcolor) { } color = newcolor; draw(); Μέθοδος για την αλλαγή του χρώματος του κύκλου. Παράμετρος με όνομα newcolor, τύπου String για το «πέρασμα» του νέου χρώματος στη μέθοδο Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας 30

Μέθοδοι που επιστρέφουν τιμές Μέθοδοι με παραμέτρους αντικείμενα Στα προηγούμενα παραδείγματα παρουσιάσαμε μεθόδους χωρίς παραμέτρους ή με παραμέτρους τύπου int και String, οι οποίες δεν επέστρεφαν καμία τιμή. Ωστόσο, υπάρχουν και μέθοδοι που έχουν ως παραμέτρους ένα ή περισσότερα αντικείμενα, καθώς επίσης και μέθοδοι που η εκτέλεσή τους έχει ως αποτέλεσμα την επιστροφή κάποιας τιμής ο τύπος της οποίας δηλώνεται στην επικεφαλίδα/υπογραφή της Όλες αυτές οι πληροφορίες παρέχονται από την υπογραφή της μεθόδου, όπως θα δούμε στη συνέχεια Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας

Μέθοδοι που επιστρέφουν τιμές Μέθοδοι με παραμέτρους αντικείμενα public class Student { private String name; private String id; private int credits; // το πλήρες όνομα του σπουδαστή // ο κωδικός του σπουδαστή // η βαθμολογία του σπουδαστή } /** * Δημιουργία σπουδαστή με όνομα και κωδικό που δίνει ο χρήστης. */ public Student(String fullname, String studentid) { } /** name = fullname; id = studentid; credits = 0; * Επιστροφή του ονόματος του σπουδαστή. */ public String getname() { Η μέθοδος επιστρέφει μια τιμή τύπου String, δηλαδή ένα αλφαριθμητικό. Αν μια μέθοδος δεν επιστρέφει καμία τιμή return name; χρησιμοποιείται το void. } Η τιμή που επιστρέφεται από τη μέθοδο καθορίζεται με την εντολή return. Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας 32

Μέθοδοι που επιστρέφουν τιμές Μέθοδοι με παραμέτρους αντικείμενα public class LabClass { private String instructor; private String room; private String timeandday; private List students; private int capacity; } /** * Προσθήκη φοιτητή στο εργαστήριο */ public void enrolstudent(student newstudent) { } if(students.size() == capacity) { } else { } System.out.println("The class is full, you cannot enrol."); students.add(newstudent); Η παράμετρος της μεθόδου είναι ένα αντικείμενο - σπουδαστής. Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας 33

Άρα... Τα αντικείμενα έχουν μεθόδους που χρησιμοποιούμε για να επικοινωνήσουμε με αυτά Μπορούμε να χρησιμοποιήσουμε μία μέθοδο για να κάνουμε μία αλλαγή σε ένα αντικείμενο ή να πάρουμε πληροφορίες από αυτό Οι μέθοδοι μπορούν να έχουν παραμέτρους, και οι παράμετροι έχουν τύπους Οι μέθοδοι έχουν τύπους επιστροφής που καθορίζουν τον τύπο των δεδομένων που επιστρέφονται Αν ο τύπος είναι void τότε δεν επιστρέφουν τίποτα Τα αντικείμενα αποθηκεύουν τα δεδομένα σε πεδία (που έχουν τύπους) -> Κατάσταση αντικειμένου

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

Εμβέλεια μεταβλητής Η εμβέλεια μιας μεταβλητής καθορίζει το τμήμα του πηγαίου κώδικα από όπου μπορεί να προσπελαστεί η μεταβλητή Μία τυπική παράμετρος είναι διαθέσιμη σε ένα αντικείμενο μόνο μέσα στο σώμα του κατασκευαστή ή της μεθόδου που τη δηλώνει Λέμε ότι η εμβέλεια μιας παραμέτρου περιορίζεται στο σώμα του κατασκευαστή ή της μεθόδου όπου δηλώνεται Αντίθετα, η εμβέλεια ενός πεδίου επεκτείνεται σε όλο τον ορισμό της κλάσης μπορεί να προσπελαστεί από οποιοδήποτε αντικείμενο μέσα στην ίδια κλάση Γενικότερα, η εμβέλεια (scope) μιας μεταβλητής καθορίζει το τμήμα του πηγαίου κώδικα από το οποίο η μεταβλητή είναι προσπελάσιμη.

Πώς γράφουμε τη refundbalance? Επιστρόφή χρημάτων public int refundbalance() { } int amounttorefund; amounttorefund = balance; balance = 0; return amounttorefund; Τι είδους μεταβλητή είναι η amounttorefund? Πεδίο? ΟΧΙ τα πεδία ορίζονται έξω από τις μεθόδους Παράμετρος? ΟΧΙ οι παράμετροι ορίζονται στην επικεφαλίδα της μεθόδου

Πώς γράφουμε τη refundbalance? Η amounttorefund είναι τοπική μεταβλητή Μεταβλητές που δηλώνονται και χρησιμοποιούνται μέσα σε μία μέθοδο Δημιουργούνται όταν καλείται η μέθοδος και καταστρέφονται όταν η μέθοδος ολοκληρώνεται Η εμβέλεια και η διάρκεια ζωής τους περιορίζονται σε εκείνες της μεθόδου Συνηθισμένο η αρχικοποίηση να γίνεται κατά τη δήλωση int amounttorefund = balance; Οι δηλώσεις τοπικών μεταβλητών ποτέ δεν περιέχουν τη λέξη private ή public ΠΡΟΣΟΧΗ: Μία τοπική μεταβλητή που έχει το ίδιο όνομα με ένα πεδίο δεν επιτρέπει την προσπέλαση του πεδίου μέσα στη μέθοδο

Γιατί τοπική μεταβλητή? Tι θα γινόταν με τα παρακάτω? public int refundbalance() { balance = 0; return balance; } public int refundbalance() { } return balance; balance = 0; Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling

Μεταβλητές στιγμιότυπου/πεδία Οι μεταβλητές που δηλώνονται στο σώμα μιας μεθόδου Ονομάζονται τοπικές μεταβλητές Χρησιμοποιούνται μόνο εντός αυτής της μεθόδου Οι μεταβλητές που δηλώνονται στη δήλωση μιας κλάσης Λέγονται πεδία ή μεταβλητές στιγμιοτύπου Κάθε αντικείμενο της κλάσης έχει διαφορετικό στιγμιότυπο της μεταβλητής 2005 Pearson Education, Inc. All rights reserved.

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

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

Ανάθεση Η μικρής διάρκειας ζωής τιμή μιας παραμέτρου αποθηκεύεται σε ένα πεδίο με την εντολή ανάθεσης: variable = expression (παράσταση); price = ticketcost; Ο τύπος της παράστασης πρέπει να συμφωνεί με τον τύπο της μεταβλητής στην οποία ανατίθεται Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling

Μέθοδοι public <τύπος-επιστρ/νης-τιμής ή void> <όνομα-μεθόδου> ( λίστα-παραμέτρων ) { δηλώσεις } εντολές Σε όποια κατηγορία και να ανήκει μία μέθοδος αποτελείται από δύο τμήματα: την επικεφαλίδα (header) ή αλλιώς την υπογραφή (signature) της μεθόδου στην οποία παρέχονται οι εξής πληροφορίες: το όνομα της μεθόδου, αν επιστρέφει ή όχι κάποια τιμή και ποιες είναι οι παράμετροί της (εφόσον υπάρχουν). public int getprice() είναι μέθοδος και όχι πεδίο γιατί ακολουθείται από ζεύγος παρενθέσεων. Στο τέλος της υπογραφής δεν υπάρχει ; H getprice Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας 44

Μέθοδοι Αν η μέθοδος δεν επιστρέφει καμία τιμή αυτό δηλώνεται με τη λέξη void ενώ αν επιστρέφει δηλώνεται ο τύπος της (π.χ. int, boolean) πριν το όνομα της μεθόδου. Το όνομα και ο τύπος των παραμέτρων δηλώνεται μετά το όνομα της μεθόδου μέσα σε παρενθέσεις. Οι παρενθέσεις ( ) είναι απαραίτητες ακόμα και αν η μέθοδος δεν έχει καμία παράμετρο. το σώμα (body) της μεθόδου που περιλαμβάνει δηλώσεις και εντολές και καθορίζει τι συμβαίνει σε ένα αντικείμενο όταν καλείται η μέθοδος. Το σώμα της μεθόδου περικλείεται σε αγκύλες { }. Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας 45

Μέθοδοι Οι μέθοδοι υλοποιούν τις λειτουργίες που μπορούν να εκτελέσουν τα αντικείμενα μιας κλάσης, ή αλλιώς περιγράφουν τον τρόπο με τον οποίο ένα αντικείμενο εκτελεί μια λειτουργία. Οι μέθοδοι μπορούν να χωριστούν σε δύο κατηγορίες: Μεθόδους πρόσβασης (accessors): πρόκειται για μεθόδους που προσπελάζουν τα πεδία ενός αντικειμένου και επιστρέφουν ή εμφανίζουν πληροφορίες για την κατάστασή του Μεθόδους μετάλλαξης (mutators): πρόκειται για μεθόδους που αλλάζουν την κατάσταση ενός αντικειμένου, αλλάζουν δηλαδή τις τιμές ενός ή περισσότερων πεδίων. Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας 46

Μέθοδοι πρόσβασης (Accessors) Οι μέθοδοι αυτής της κατηγορίας επιστρέφουν κάποια τιμή αφού ολοκληρωθεί η εκτέλεσή τους - στο σημείο από όπου έγινε η κλήση τους. Αυτό επιτυγχάνεται συνήθως με την εντολή return. Βέβαια, αυτό δεν είναι κανόνας, αφού και μια μέθοδος που απλά τυπώνει πληροφορίες για την κατάσταση ενός αντικειμένου χαρακτηρίζεται ως μέθοδος πρόσβασης. Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας 47

Μέθοδοι πρόσβασης Visibility modifier Method name Return type public int getprice() { return price; } Parameter list (empty) Return statement: επιστρέφει τιμή που συμφωνεί με τον επιστρεφόμενο τύπο στην υπογραφή της μεθόδου Start and end of method body (block) Όταν μία μέθοδος περιλαμβάνει εντολή επιστροφής τιμής, αυτή είναι πάντα η τελευταία εντολή αυτής της μεθόδου Ακόμα δηλαδή και στην περίπτωση που μετά από μια εντολή return υπάρχουν και άλλες εντολές, αυτές δεν πρόκειται ποτέ να εκτελεστούν. Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling

Μέθοδοι πρόσβασης Υπάρχουν τουλάχιστον δύο σημαντικές διαφορές ανάμεσα στις υπογραφές του κατασκευαστή TicketMachine και της μεθόδου getprice: public TicketMachine(int ticketcost) public int getprice() Η μέθοδος έχει έναν επιστρεφόμενο τύπο (return type), ενώ ο κατασκευαστής δεν έχει επιστρεφόμενο τύπο. Ο επιστρεφόμενος τύπος γράφεται ακριβώς πριν το όνομα της μεθόδου Ο κατασκευαστής έχει μία τυπική παράμετρο, ticketcost, ενώ η μέθοδος καμία μόνο ένα ζεύγος κενών παρενθέσεων Ένας κατασκευαστής δεν μπορεί να έχει επιστρεφόμενο τύπο. Αντίθετα, τόσο οι κατασκευαστές όσο και οι μέθοδοι μπορούν να έχουν οποιοδήποτε αριθμό τυπικών παραμέτρων ή και καμία

Μέθοδοι μετάλλαξης Οι μέθοδοι μετάλλαξης αλλάζουν την κατάσταση ενός αντικειμένου! Έχουν παρόμοια δομή με επικεφαλίδα και σώμα Η αλλαγή της κατάστασης πετυχαίνεται με την αλλαγή της τιμής ενός ή περισσοτέρων πεδίων Τυπικά περιέχει εντολές ανάθεσης Τυπικά λαμβάνει παραμέτρους Μια άμεση συνέπεια αυτού του γεγονότος έγκειται στο γεγονός ότι ένα αντικείμενο μπορεί να παρουσιάσει διαφορετική συμπεριφορά πριν και μετά την εκτέλεση μιας μεθόδου. Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling

Μέθοδοι μετάλλαξης Visibility modifier Method name Return type Parameter public void insertmoney(int amount) { } balance = balance + amount; Field being mutated Assignment statement: επιστρέφει τιμή που συμφωνεί με τον επιστρεφόμενο τύπο στην υπογραφή της μεθόδου Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling

Βρείτε τα λάθη... public class CokeMachine { private price; public CokeMachine() { price = 300 } public int getprice { return Price; } Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling

Βρείτε τα λάθη... public class CokeMachine { private int price; public CokeMachine() { price = 300; } public int getprice() { return Price; } } Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling

Βρείτε τα λάθη... public void getage() { return age; }

Βρείτε τα λάθη... public void int getage() { return age; }

Δημιουργία αντικειμένων μιας κλάσης Η σύνταξη για τη δημιουργία ενός νέου αντικειμένου είναι η εξής: new <όνομα-κλάσης> (λίστα-παραμέτρων) Η εντολή έχει ως αποτέλεσμα: τη δημιουργία ενός νέου αντικειμένου της κλάσης που καθορίζεται στην εντολή την εκτέλεση του κατασκευαστή της συγκεκριμένης κλάσης Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας

Δημιουργία αντικειμένων μιας κλάσης Αν ο κατασκευαστής της κλάσης έχει παραμέτρους τότε στην εντολή new πρέπει να δοθούν οι πραγματικές παράμετροι. Για παράδειγμα, από τον ορισμό του κατασκευαστή της κλάσης Circle προκύπτει ότι αυτός δέχεται μια ακέραια τιμή ως παράμετρο: public Circle(int radius) τυπική παράμετρος Επομένως, στην εντολή new του κατασκευαστή της κλάσης Circle πρέπει να παρέχουμε μια πραγματική παράμετρο τύπου int: πραγματική παράμετρος new Circle(5); Ξυνόγαλος Στέλιος, Αντικειμενοστραφής Σχεδίαση & Προγραμματισμός, Τμήμα Διοίκησης Τεχνολογίας

Γιατί απαιτείται η δημιουργία αντικειμένων μιας κλάσης??? Για παράδειγμα για μια δοσμένη κλάση Cat με ιδιότητα age ΔΕΝ μπορούμε να πούμε: Cat.age = 5; ΑΛΛΑ πρέπει να πούμε: Cat Frisky = new Cat(); // δημιουργία αντικειμένου Cat στο οποίο αναφέρεται Frisky.age = 5; Γιατί??? // η μεταβλητή αναφοράς Frisky τύπου Cat Για να καταλάβουμε το γιατί ας δούμε τα παρακάτω:

Γιατί απαιτείται η δημιουργία αντικειμένων μιας κλάσης??? Αν σκεφτούμε τον τύπο των ακεραίων σαν μια κλάση, ΔΕΝ μπορούμε να πούμε: int = 5; ΑΛΛΑ λέμε: int x; x = 5; Πρώτα δηλώνουμε μια μεταβλητή τύπου int και μετά τη χειριζόμαστε Δηλαδή το ίδιο κάνουμε και για τους βασικούς (primitive) τύπους δεδομένων. Δηλώνουμε μεταβλητές του συγκεκριμένου τύπου (τόσες όσες απαιτεί το πρόβλημά μας). Αντίστοιχα, στις κλάσεις δημιουργούμε αντικείμενά τους (με τη χρήση του operator new) και αυτά χειριζόμαστε.

Σημείωση... Για να είμαστε ακόμα πιο ακριβείς στις κλάσεις γίνονται δυο ενέργειες: Δηλώνεται μια μεταβλητή (μεταβλητή αναφοράς ή τύπος αναφοράς (reference type)) που έχει ως τύπο τον τύπο της κλάσης και δημιουργείται (με τη χρήση του operator new) αντικείμενο της κλάσης που το «όνομά του» (μπορούμε να πούμε) είναι το όνομα της μεταβλητής που δηλώθηκε. Χρησιμοποιώντας το όνομα αυτής της μεταβλητής χειριζόμαστε το αντικείμενο. Οι δυο αυτές ενέργειες μπορούν να γίνουν με έναν από τους δύο παρακάτω ισοδύναμους τρόπους: Α) Cat Frisky; // μεταβλητή με όνομα Frisky τύπου Cat Frisky = new Cat(); // δημιουργία αντικειμένου τύπου Cat με «όνομα» Frisky Β) Cat Frisky = new Cat(); // δήλωση μεταβλητής Frisky τύπου Cat και // δημιουργία αντικειμένου στο οποίο αναφέρεται Δηλαδή δεν αρκεί όπως στους βασικούς τύπους δεδομένων μόνο η δήλωση, χρειάζεται επιπλέον και η δημιουργία!

Σημείωση... Το παρακάτω δεν θα λειτουργήσει Cat Frisky; Frisky.age = 3; Επίσης χωρίς τη δημιουργία αντικειμένων πώς θα χειριζόμασταν την περίπτωση προβλημάτων στα οποία απαιτούνται περισσότερα από ένα αντικείμενα της κλάσης Cat? Σε αντιστοιχία στους ακεραίους λέμε int x; int y; x=4; y=7;

Σύγκριση κατασκευαστή με άλλες μεθόδους Σύγκριση ως προς: Constructor Method Μέθοδος Την κλήση Έμμεσα (με τη χρήση του τελεστή new) Άμεσα Τον τύπο που επιστρέφει Κανέναν (ούτε void) πάντα (τουλάχιστον void) Το όνομα Ίδιο με το όνομα της κλάσης Επιλογή του χρήστη

Κλήσεις μεθόδων Εσωτερικές κλήσεις μεθόδων Οι μέθοδοι καλούν άλλες μεθόδους της ίδιας κλάσης ως τμήμα της υλοποίησής τους updatedisplay();... private void updatedisplay() Εσωτερική κλήση μεθόδου όνομαμεθόδου (λίστα παραμέτρων) Εξωτερικές κλήσεις μεθόδων Οι μέθοδοι καλούν μεθόδους άλλων αντικειμένων χρησιμοποιώντας την ονομαζόμενη σημειογραφία τελείας minutes.increment(); Εξωτερική κλήση μεθόδου αντικείμενο.όνομαμεθόδου (λίστα παραμέτρων)

Στοιχεία ορισμού κλάσης

Contract και Implementation μιας κλάσης Contract κλάσης: σύνολο μεθόδων και των συσχετιζόμενων semantics Implementation κλάσης: υλοποίηση των μεθόδων της κλάσης

1 // Fig. 3.1: GradeBook.java 2 // Class declaration with one method. 3 4 public Η κλάση class GradeBook GradeBook 5 { 6 // display a welcome message to the GradeBook user 7 public void displaymessage() 8 { 9 System.out.println( "Welcome to the Grade Book!" ); 10 } // end method displaymessage 11 12 } // end class GradeBook Δήλωση κλάσης με μία μέθοδο 2005 Pearson Education, Inc. All rights reserved.

Η κλάση GradeBook Η λέξη-κλειδί public είναι ένα τροποποιητικό πρόσβασης (access modifier) Οι δηλώσεις κλάσης περιλαμβάνουν : Το τροποποιητικό πρόσβασης Τη λέξη-κλειδί class Ζεύγος αριστερής και δεξιάς αγκύλων Δηλώσεις μεθόδων Η λέξη-κλειδί public υποδεικνύει ότι η μέθοδος είναι διαθέσιμη στο κοινό Μπορεί να κληθεί εκτός του σώματος δήλωσης της κλάσης, από μεθόδους άλλων κλάσεων Η λέξη-κλειδί void υποδεικνύει τη μη ύπαρξη τύπου επιστροφής Το τροποποιητικό πρόσβασης, ο τύπος επιστροφής, το όνομα της μεθόδου και οι παρενθέσεις αποτελούν την επικεφαλίδα της μεθόδου 2005 Pearson Education, Inc. All rights reserved.

ΠΡΟΣΟΧΗ Η δήλωση περισσοτέρων της μίας public κλάσης στο ίδιο αρχείο είναι σφάλμα μετάφρασης!!! 2005 Pearson Education, Inc. All rights reserved.

Η κλάση GradeBookTest Η Java είναι επεκτάσιμη Οι προγραμματιστές μπορούν να δημιουργήσουν καινούριες κλάσεις Έκφραση δημιουργίας στιγμιοτύπου κλάσης (αντικειμένου) Λέξη-κλειδί new Έπειτα το όνομα της κλάσης προς δημιουργία και παρενθέσεις Κλήση μιας μεθόδου Όνομα αντικειμένου, έπειτα ο διαχωριστής τελεία (.) Ακολουθεί το όνομα της μεθόδου και παρενθέσεις Η κλάση GradeBookTest χρησιμοποιείται για να δείξει την κλάση GradeBook 2005 Pearson Education, Inc. All rights reserved.

1 // Fig. 3.2: GradeBookTest.java 2 // Create a GradeBook object and call its displaymessage method. 3 Η κλάση 4 public class GradeBookTest 5 { 6 // main method begins program execution 7 public static void main( String args[] ) 8 { 9 // create a GradeBook object and assign it to mygradebook 10 GradeBook mygradebook = new GradeBook(); 11 12 // call mygradebook's displaymessage method 13 mygradebook.displaymessage(); 14 } // end main 15 16 } // end class GradeBookTest Welcome to the Grade Book! Αυτές οι δύο εντολές δημιουργούν ένα αντικείμενο και ενεργοποιούν μία μέθοδο Δημιουργίας αντικειμένου της GradeBook Κλήση μεθόδου displaymessage χρησιμοποιώντας το αντικείμενο GradeBook 2005 Pearson Education, Inc. All rights reserved.

Μετάφραση πολλαπλών κλάσεων Τοποθετούμε στη σειρά κάθε αρχείο.java ξεχωριστά, διαχωρίζοντάς τα με κενό (space) ή Δηλ. javac GradeBook.java GradeBookTest.java Για να μεταγλωττίζουμε όλα τα αρχεία.java στο φάκελο που βρισκόμαστε Εκτελούμε javac *.java 2005 Pearson Education, Inc. All rights reserved.

Δήλωση μιας μεθόδου με μία παράμετρο Τροποποίηση του προηγούμενου προγράμματος Η μέθοδος displaymessage παίρνει ένα όρισμα Χρήση μεθόδων της Scanner Η nextline διαβάζει τη επόμενη γραμμή από την είσοδο Η next διαβάζει τη επόμενη λέξη από την είσοδο 2005 Pearson Education, Inc. All rights reserved.

1 // Fig. 3.4: GradeBook.java 2 // Class declaration with a method that has a parameter. 3 4 public class GradeBook 5 { 6 // display a welcome message to the GradeBook user 7 public void displaymessage(string coursename) 8 { 9 System.out.printf("Welcome to the grade book for\n%s!\n", 10 coursename); 11 } // end method displaymessage 12 13 } // end class GradeBook Κλήση της printf μεθόδου με το όρισμα coursename 2005 Pearson Education, Inc. All rights reserved.

1 // Fig. 3.5: GradeBookTest.java 2 // Create GradeBook object and pass a String to 3 // its displaymessage method. 4 import java.util.scanner; // program uses Scanner 5 6 public class GradeBookTest Κλήση μεθόδων 7 { 8 // main method begins program execution 9 public static void main( String args[] ) 10 { 11 // create Scanner to obtain input from command window 12 Scanner input = new Scanner( System.in ); 13 14 // create a GradeBook object and assign it to mygradebook 15 GradeBook mygradebook = new GradeBook(); 16 17 // prompt for and input course name 18 System.out.println( "Please enter the course name:" ); 19 String nameofcourse = input.nextline(); // read a line of text 20 System.out.println(); // outputs a blank line 21 22 // call mygradebook's displaymessage method 23 // and pass nameofcourse as an argument 24 mygradebook.displaymessage(nameofcourse); 25 } // end main 26 27 } // end class GradeBookTest Κλήση μεθόδου nextline για διάβασμα μιας γραμμής από την είσοδο Κλήση displaymessage με ένα όρισμα 2005 Pearson Education, Inc. All rights reserved.

Please enter the course name: CS101 Introduction to Java Programming Welcome to the grade book for CS101 Introduction to Java Programming! 2005 Pearson Education, Inc. All rights reserved.

ΠΡΟΣΟΧΗ Σφάλμα μεταγλώττισης όταν κατά την κλήση μεθόδων 1. ο αριθμός ορισμάτων στην κλήση μιας μεθόδου δεν συνάδει με τον αριθμό παραμέτρων στη δήλωση της μεθόδου 2. οι τύποι των ορισμάτων στην κλήση μια μεθόδου δεν συνάδουν με τους τύπους των αντίστοιχων παραμέτρων στη δήλωση της μεθόδου 2005 Pearson Education, Inc. All rights reserved.

2005 Pearson Education, Inc. All rights reserved. Παρατηρήσεις To java.lang εισάγεται δυναμικά σε κάθε πρόγραμμα Το «προεπιλεγμένο πακέτο» (Default package) Οι κλάσεις που μεταγλωττίζονται στον ίδιο φάκελο στο δίσκο (π.χ. GradeBook και GradeBookTest) ανήκουν σε ένα λεγόμενο προεπιλεγμένο πακέτο Οι κλάσεις του ίδιου πακέτου εισάγονται εν δυνάμει στον πηγαίο κώδικα όλων των άλλων αρχείων στο φάκελο Επομένως, μια δήλωση import δεν απαιτείται όταν μια κλάση σε ένα πακέτο χρησιμοποιεί μια άλλη στο ίδιο το πακέτο αυτό (όπως π.χ. η GradeBook χρησιμοποιεί τη GradeBookTest) Τα πακέτα είναι αχρείαστα εφόσον χρησιμοποιούνται τα πλήρως προσδιορισμένα ονόματα (fully-qualified names) των κλάσεων Δηλ. Αν γράφαμε java.util.scanner δεν χρειαζόταν η δήλωση import και η γραμμή 12 παραπάνω θα γινόταν java.util.scanner input = new java.util.scanner( System.in );

1 // Fig. 3.7: GradeBook.java 2 // GradeBook class that contains a coursename instance variable 3 // and methods to set and get its value. 4 Μεταβλητές στιγμιότυπου, Πεδίο/Μεταβλητή στιγμιοτύπου 5 public class GradeBook coursename 6 { 7 private String coursename; // course name for this GradeBook 8 Μέθοδοι set και get 9 // method to set the course name 10 public void setcoursename( String name ) 11 { 12 coursename = name; // store the course name 13 } // end method setcoursename 14 15 // method to retrieve the course name 16 public String getcoursename() 17 { 18 return coursename; 19 } // end method getcoursename 20 21 // display a welcome message to the GradeBook user 22 public void displaymessage() 23 { 24 // this statement calls getcoursename to get the 25 // name of the course this GradeBook represents 26 System.out.printf( "Welcome to the grade book for\n%s!\n", 27 getcoursename() ); Κλήση μεθόδου get 28 } // end method displaymessage 29 30 } // end class GradeBook Μέθοδος set για την coursename Μέθοδος get για την coursename 2005 Pearson Education, Inc. All rights reserved.

Πρόσβαση public και private Λέξη-κλειδί private Χρησιμοποιείται για τις περισσότερες μεταβλητές στιγμιοτύπου/πεδία Οι μεταβλητές και οι μέθοδοι private είναι προσβάσιμες μόνο σε μεθόδους της κλάσης στην οποία δηλώνονται Θυμηθείτε τον όρο Απόκρυψη Πληροφορίας ή Δεδομένων 2005 Pearson Education, Inc. All rights reserved.

Public vs. Private Αναπαράσταση δεδομένων Αν η αναπαράσταση δεδομένων είναι public: - Ο κώδικας μπορεί να δημιουργήσει μη κατάλληλες τιμές - Υπάρχων κώδικας μπορεί να μην είναι έγκυρος λόγω αλλαγής αναπαράστασης - Απώλεια απόκρυψης πληροφορίας (Loss of encapsulation) Αν η αναπαράσταση δεδομένων είναι private: + Ο κώδικας ΔΕΝ μπορεί να δημιουργήσει μη κατάλληλες τιμές + Υπάρχων κώδικας ΔΕΝ μπορεί να μην είναι έγκυρος λόγω αλλαγής αναπαράστασης + Ενίσχυση απόκρυψης πληροφορίας (Boosting encapsulation)

Παρατηρήσεις Βάζετε πάντα πριν από κάθε δήλωση πεδίου (ιδιότητας) και μεθόδου ένα τροποποιητικό πρόσβασης Ο γενικός κανόνας λέει ότι οι μεταβλητές στιγμιοτύπου/πεδία δηλώνονται ως private και οι οι μέθοδοι δηλώνονται ως public Ωστόσο, όπως θα δούμε, είναι απαραίτητο να δηλώνουμε συγκεκριμένες μεθόδους ως private, αν πρόκειται να προσπελαστούν μόνο από άλλες μεθόδους της ίδιας κλάσης 2005 Pearson Education, Inc. All rights reserved.

Παρατηρήσεις Μπορούμε να δηλώσουμε τα πεδία (ιδιότητες) μιας κλάσης οπουδήποτε εντός της κλάσης (όχι βέβαια εντός μιας δήλωσης μεθόδου), αλλά Προτιμούμε να γράφουμε τα πεδία (ιδιότητες) μια κλάσης πρώτα Τοποθετούμε μια κενή γραμμή μεταξύ των δηλώσεων των μεθόδων για καλύτερη αναγνωσιμότητα 2005 Pearson Education, Inc. All rights reserved.

2005 Pearson Education, Inc. All rights reserved.... Μέθοδοι set και get Οι μεταβλητές στιγμιοτύπου/πεδία private Δεν μπορούν να προσπελαστούν απευθείας από τους πελάτες του αντικειμένου Πελάτης (client) είναι κάθε κλάση που καλεί τις μεθόδους του αντικειμένου Στο παράδειγμά μας η GradeBookTest είναι πελάτης που δημιουργεί και διαχειρίζεται ένα αντικείμενο GradeBook Χρήση μεθόδων set για τροποποίηση της τιμής των private μεταβλητών στιγμιοτύπου/πεδίων Χρήση μεθόδων get για να πάρουν τις τιμές των private μεταβλητών στιγμιοτύπου/πεδίων Τα ονόματα αυτών των μεθόδων για λήψη/εκχώρηση τιμών δεν είναι απαραίτητο να αρχίζουν με get ή set, αντιστοίχως, ωστόσο η τακτική αυτή ΣΥΝΙΣΤΑΤΑΙ ΘΕΡΜΑ στη JAVA!!!

Σημειώσεις για τις μεθόδους Set και Get Μέθοδοι Set Γνωστές και ως μέθοδοι-διαφοροποιητές (mutator methods) Αναθέτουν τιμές στις μεταβλητές στιγμιοτύπου Θα έπρεπε να επικυρώνουν νέες τιμές για τις μεταβλητές στιγμιοτύπου Π.χ. Μπορούν να επιστρέφουν μια τιμή για να υποδείξουν μη έγκυρα δεδομένα Μέθοδοι Get Γνωστές και ως μέθοδοι-πρόσβασης (accessor methods) ή μέθοδοι ερωτημάτων (query methods) Αποκτούν τις τιμές των μεταβλητών στιγμιοτύπου Μπορούν να ελέγχουν τη μορφή των δεδομένων που επιστρέφονται 2005 Pearson Education, Inc. All rights reserved.

Παρατήρηση (σχετική με τεχνολογία λογισμικού) Όταν είναι αναγκαίο, παρέχετε public μεθόδους για για την αλλαγή και ανάκτηση των τιμών των private μεταβλητών στιγμιοτύπου. Αυτή η αρχιτεκτονική βοηθά στην απόκρυψη της υλοποίησης της κλάσης από τους πελάτες της, κι αυτό βελτιώνει τη δυνατότητα τροποποίησης του προγράμματος Οι σχεδιαστές κλάσεων δεν χρειάζεται να παρέχουν μεθόδους set και get για κάθε private πεδίο. Αυτές οι δυνατότητες θα έπρεπε να παρέχονται μόνο όταν έχει νόημα 2005 Pearson Education, Inc. All rights reserved.

Παρατήρηση (σχετική με τεχνολογία λογισμικού) Οι μέθοδοι που τροποποιούν τις τιμές των private μεταβλητών θα πρέπει να επαληθεύουν ότι οι προοριζόμενες ως νέες τιμές είναι κατάλληλες. Αν δεν είναι, οι μέθοδοι set θα πρέπει να θέτουν τις private μεταβλητές σε μια κατάλληλη, σταθερή κατάσταση με έγκυρα δεδομένα, εντός προκαθορισμένων περιοχών 2005 Pearson Education, Inc. All rights reserved.

1 // Fig. 3.8: GradeBookTest.java 2 // Create and manipulate a GradeBook object. 3 import java.util.scanner; // program uses Scanner 4 5 public class GradeBookTest 6 { 7 // main method begins program execution 8 public static void main( String args[] ) 9 { 10 // create Scanner to obtain input from command window 11 Scanner input = new Scanner( System.in ); 12 13 // create a GradeBook object and assign it to mygradebook 14 GradeBook mygradebook = new GradeBook(); 15 16 // display initial value of coursename 17 System.out.printf( "Initial course name is: %s\n\n", 18 mygradebook.getcoursename() ); 19 Κλήση της μεθόδου get για την coursename 2005 Pearson Education, Inc. All rights reserved.

20 // prompt for and read course name 21 System.out.println( "Please enter the course name:" ); 22 String thename = input.nextline(); // read a line of text 23 mygradebook.setcoursename( thename ); // set the course name 24 System.out.println(); // outputs a blank line 25 26 // display welcome message after specifying course name 27 mygradebook.displaymessage(); 28 } // end main 29 30 } // end class GradeBookTest Κλήση της μεθόδου set για την coursename Κλήση της displaymessage Initial course name is: null Please enter the course name: CS101 Introduction to Java Programming Welcome to the grade book for CS101 Introduction to Java Programming! 2005 Pearson Education, Inc. All rights reserved.

1 // Fig. 6.11: Scope.java 2 // Scope class demonstrates field and local variable scopes. 3 4 public class Scope 5 { 6 // field that is accessible to all methods of this class 7 private int x = 1; 8 9 // method begin creates and initializes local variable x 10 // and calls methods uselocalvariable and usefield 11 public void begin() 12 { 13 int x = 5; // method's local variable x shadows field x 14 15 System.out.printf( "local x in method begin is %d\n", x ); 16 Εμβέλεια δηλώσεων!!!! 17 uselocalvariable(); // uselocalvariable has local x 18 usefield(); // usefield uses class Scope's field x 19 uselocalvariable(); // uselocalvariable reinitializes local x 20 usefield(); // class Scope's field x retains its value 21 2005 Pearson Education, Inc. All rights reserved.

22 System.out.printf( "\nlocal x in method begin is %d\n", x ); 23 } // end method begin 24 25 // create and initialize local variable x during each call 26 public void uselocalvariable() 27 { 28 int x = 25; // initialized each time uselocalvariable is called 29 30 System.out.printf( 31 "\nlocal x on entering method uselocalvariable is %d\n", x ); 32 ++x; // modifies this method's local variable x 33 System.out.printf( 34 "local x before exiting method uselocalvariable is %d\n", x ); 35 } // end method uselocalvariable 36 37 // modify class Scope's field x during each call 38 public void usefield() 39 { 40 System.out.printf( 41 "\nfield x on entering method usefield is %d\n", x ); 42 x *= 10; // modifies class Scope's field x 43 System.out.printf( 44 "field x before exiting method usefield is %d\n", x ); 45 } // end method usefield 46 } // end class Scope 2005 Pearson Education, Inc. All rights reserved.

1 // Fig. 6.12: ScopeTest.java 2 // Application to test class Scope. 3 4 public class ScopeTest 5 { 6 // application starting point 7 public static void main( String args[] ) 8 { 9 Scope testscope = new Scope(); 10 testscope.begin(); 11 } // end main 12 } // end class ScopeTest 2005 Pearson Education, Inc. All rights reserved.

1 // Fig. 6.12: ScopeTest.java 2 // Application to test class Scope. 3 4 public class ScopeTest 5 { 6 // application starting point 7 public static void main( String args[] ) 8 { 9 Scope testscope = new Scope(); 10 testscope.begin(); 11 } // end main 12 } // end class ScopeTest local x in method begin is 5 local x on entering method uselocalvariable is 25 local x before exiting method uselocalvariable is 26 field x on entering method usefield is 1 field x before exiting method usefield is 10 local x on entering method uselocalvariable is 25 local x before exiting method uselocalvariable is 26 field x on entering method usefield is 10 field x before exiting method usefield is 100 local x in method begin is 5 2005 Pearson Education, Inc. All rights reserved.

Πηγές/Acknowledgements http://java.sun.com/j2se H. M. Deitel, P. J. Deitel, Java Προγραμματισμός, 6η έκδοση, Μ. Γκιούρδας, 2006 D. Barnes, M. Kolling, Αντικειμενοστρεφής Προγραμματισμός σε Java, Κλειδάριθμος, 2008 Βασίλης Χριστοφίδης, Αντικειμενοστρεφής Προγραμματισμός, Πανεπιστήμιο Κρήτης Κ. Τσαγκάρης, Εισαγωγή στις εφαρμογές της Java, Πανεπιστήμιο Πειραιώς Jones, Evan, Adam Marcus, and Eugene Wu. 6.092 Introduction to Programming in Java,January IAP 2010. (Massachusetts Institute of Technology: MIT OpenCourseWare), http://ocw.mit.edu (Accessed 10 Mar, 2013). License: Creative Commons BY-NC-SA