Περίγραμμα. Υπερφόρτωση. 1 Μ. Δικαιάκος, EΠΛ133. n Κάθε δεδομένο είναι. n Πεδία Δεδομένων ή Μεταβλητές Στιγμιοτύπου (fields or. n Mεθόδους (methods)

Σχετικά έγγραφα
Αντικείμενα και Κλάσεις

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

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

SUPERPOSITION, MEASUREMENT, NORMALIZATION, EXPECTATION VALUES. Reading: QM course packet Ch 5 up to 5.6

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

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

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

Αρχικοποιήσεις Μεταβλητών και Αντικειµένων. Κατασκευαστές. Περίγραμμα. Initializers. Παράδειγμα

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 133: ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΕΡΓΑΣΤΗΡΙΟ 3 Javadoc Tutorial

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

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

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

Περίγραμμα. n Αν θέλουμε να χρησιμοποιείται μόνο μια θέση αποθήκευσης για. n Δηλ., αν θέλουμε να καλούμε μια μέθοδο χωρίς να έχουμε

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

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

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

Αρχικοποιήσεις Μεταβλητών και Αντικειµένων

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

1. For each of the following power series, find the interval of convergence and the radius of convergence:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

IIT JEE (2013) (Trigonomtery 1) Solutions

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

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

ΠΟΛΥΜΟΡΦΙΣΜΟΣ. Chapter 8, Savitch. Περίγραμμα. Introduction to Polymorphism. Introduction to Polymorphism. Βασικό Ερώτημα

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

Βασικά Στοιχεία της Java

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

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

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

ΕΠΛ133 - Διάλεξη 6η. Kεφ. 5, Savitch. Περίγραμμα. A Person Class Constructor. Designing a Person Class: Constructor

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

Presentation of complex number in Cartesian and polar coordinate system


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

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

API: Applications Programming Interface

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

The Simply Typed Lambda Calculus

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

Homework for 1/27 Due 2/5

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

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

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

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

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

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

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

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

Last Lecture. Biostatistics Statistical Inference Lecture 19 Likelihood Ratio Test. Example of Hypothesis Testing.

Στοίβες. ΟΑΤ της Στοίβας. Περιγραφή και Υλικό Ανάγνωσης. Αφηρηµένοι Τύποι εδοµένων (AΤ )

! Προσδιοριστές πρόσβασης και απόκρυψη πληροφορίας. ! Προγραμματιστικές Συμβάσεις. ! Σε περίπτωση που δεν χρησιμοποιείται προσδιοριστής

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 24/3/2007

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

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

Βασικά Στοιχεία της Java

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

Οδηγίες Αγοράς Ηλεκτρονικού Βιβλίου Instructions for Buying an ebook

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

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΕΠΛ 035: οµές εδοµένων και Αλγόριθµοι για Ηλεκτρολόγους Μηχανικούς και Μηχανικούς Υπολογιστών

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

Τύποι δεδομένων, τελεστές, μεταβλητές

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 6/5/2006

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

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

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

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

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

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

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

Finite Field Problems: Solutions

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

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

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

derivation of the Laplacian from rectangular to spherical coordinates

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

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

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 19/5/2007

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

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

3.4 SUM AND DIFFERENCE FORMULAS. NOTE: cos(α+β) cos α + cos β cos(α-β) cos α -cos β

ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ

Other Test Constructions: Likelihood Ratio & Bayes Tests

Transcript:

Περίγραμμα Σχεδιασμός Κλάσεων (κεφ. 4) 1 2 Αντικείμενο Επανάληψη: Αντικείμενα και Κλάσεις Η βασική αφαιρετική αναπαράσταση δεδομένων (data abstractio) του Α/Σ Προγραμματισμού. Κάθε δεδομένο είναι αντικείμενο (εξαίρεση: οι μεταβλητές αρχέγονου τύπου) Κάθε αντικείμενο περιλαμβάνει/περικλείει τα εξής «μέλη»: Πεδία Δεδομένων ή Μεταβλητές Στιγμιοτύπου (fields or istace variables) Mεθόδους (methods) Η πρόσβαση στις μεθόδους και στα πεδία δεδομένων ενός αντικειμένου γίνεται μέσω: Χειριστηρίου (hadle), το οποίο αντιστοιχεί στη διεύθυνση μνήμης στην οποία αποθηκεύεται το αντικείμενο 3 4 Συστατικά στοιχεία Αντικειμένου A/Σ επίλυση προβλημάτων Οι τιµές τους καθορίζουν την «κατάσταση» του αντικειµένου Ένα πρόγραμμα JAVA κωδικοποιεί την επίλυση ενός υπολογιστικού προβλήματος σαν σύνολο από αντικείμενα που αλληλεπιδρούν. Ιδιότητες Πεδία Δεδοµένων Συµπεριφορές Λειτουργίες/Μέθοδοι Ταυτότητα Διεύθυνση µνήµης Καθορίζουν την αλληλεπίδραση του αντικειµένου µε άλλα αντικείµενα 5 6

Κλάση Περίγραμμα Η κλάση είναι τύπος δεδομένου (type), και συγκεκριμένα το σχεδιότυπο/σχεδιάγραμμα από το οποίο κατασκευάζονται τα αντικείμενα. Μια κλάση ορίζει τα πεδία δεδομένων και τις μεθόδους των αντικειμένων που προκύπτουν από αυτή. Μηχανισμός για σχεδιασμό και παραγωγή αντικειμένων Αντικείμενα που ανήκουν στην ίδια κλάση: Υποστηρίζουν την ίδια συλλογή λειτουργιών (συμπεριφορών) Έχουν ένα κοινό σύνολο από πιθανές καταστάσεις 7 8 Παράδειγμα: ηλεκτροστατικά φορτία Παράδειγμα Σχεδιασμού Κλάσης: Υπολογίζοντας το Ηλεκτροστατικό Πεδίο Οι αλληλεπιδράσεις ηλεκτρικών φορτίων ακολουθούν το Νόμο του Coulomb Κάθε φορτίο δημιουργεί ένα ηλεκτροστατικό δυναμικό στο χώρο, το οποίο καθορίζει τις δυνάμεις που ασκούνται σε άλλα φορτία του χώρου. Το δυναμικό ενός σημείου στο χώρο ισούται με το άθροισμα των δυναμικών που δημιουργούνται από όλα τα φορτία του χώρου Εξετάζουμε την περίπτωση των δύο διαστάσεων (τα φορτία είναι τοποθετημένα σε ένα επίπεδο) 9 10 Υπολογισμός Ηλεκτροστατικού Δυναμικού Ζητούμενο (x,y) r q (x0,y0) V = k q / r q: φορτίο r : απόσταση k: ηλεκτροστατική σταθερά (k = 8.99x10 9 Nm 2 /C 2 ) Υπολογίστε το ηλεκτροστατικό δυναμικό σημείων ενός επιπέδου, δεδομένων φορτίων που υπάρχουν στο επίπεδο. q2 q1 φορτισµένο σωµατίδιο c µε φορτίο q x qn 11 12

Υπολογιστικό πρόβλημα Ποιά είσοδος; ;;; EIΣΟΔΟΣ (iput) * Created by mdd o 15/01/2017. public class LeapYear { public static void mai(strig[] args) { it year = Iteger.parseIt(args[0]); Αλγόριθµος // divisible by 4 boolea isleapyear = (year % 4 == 0); // divisible by 4 ad ot 100 isleapyear = isleapyear && (year % 100!= 0); // divisible by 4 ad ot 100 uless divisible by 400 isleapyear = isleapyear (year % 400 == 0); System.out.pritl(isLeapYear); ;;; ΕΞΟΔΟΣ (output) Συντεταγμένες σημείου, τιμή η/σ φορτίων Συντεταγμένες σημείου, συντεταγμένες και τιμή φορτίων Συντεταγμένες σημείου, συντεταγμένες και τιμή φορτίων, ηλεκτροστατική σταθερά Συντεταγμένες σημείου, συντεταγμένες και τιμή φορτίων, ηλεκτροστατική σταθερά, εξίσωση Coulomb 13 EΠΛ133 14 Ποιά αντικείμενα χρειάζονται για τον υπολογιστικό υπολογισμό του ηλεκτροστατικού δυναμικού στο επίπεδο; Αφαιρετικότητα Πώς θα κωδικοποιήσουμε στο πρόγραμμά μας τα φορτία; Σαν αντικείμενα (objects) Επίπεδο, σημεία, φορτία Απόσταση, σημεία, φορτία Φορτία, σημεία Ποιές ιδιότητες καθορίζουν την κατάσταση (state) του κάθε φορτίου; Το μέγεθος του φορτίου: πραγματικός αριθμός (q) Την θέση του φορτίου στο επίπεδο: Ζευγάρι πραγματικών αριθμών (x, y) Φορτία Ποιά είναι η συμπεριφορά (behavior) του κάθε φορτίου; Δημιουργεί ένα πεδίο δυναμικού EΠΛ133 15 16 Αφαιρετικότητα Χρειαζόμαστε ένα τύπο δεδομένων, ο οποίος να ορίζει τα χαρακτηριστικά του κάθε φορτίου (κατάσταση, συμπεριφορά) Χαρακτηριστικά κλάσης Charge public class Charge double x, y, q; Εισάγουμε μια κλάση Charge για την περιγραφή ηλεκτρικών φορτίων. Τι πεδία δεδομένων πρέπει να έχει αυτή η κλάση; Θέση του κάθε φορτίου (συντεταγμένες x, y) Τιμή του φορτίου Τι συμπεριφορά πρέπει να έχουν τα στιγμιότυπα αυτής της κλάσης; Κάθε φορτίο προκαλεί κάποιο δυναμικό σε κάθε άλλο σημείο του επιπέδου double potetialat(double x, double y) επιστρέφει το δυναμικό στη θέση x,y που προκαλείται από το φορτίο Strig tostrig() επιστρέφει συμβολοσειρά που αναπαριστά το φορτίο 17 18

Χρήση της Charge public class ChargeCliet { public static void mai(strig[] args) { double x = Double.parseDouble(args[0]); double y = Double.parseDouble(args[1]); Charge c1 = ew Charge(.51, Μετασχηματισμός.63, του 21.3); stdi από πίνακα Charge c2 = ew Charge(.13, αλφαριθμητικών.94, σε 81.9); πραγματικούς System.out.pritl(c1); αριθμούς. System.out.pritl(c2); Χρήση της tostrig double v1 = c1.potetialat(x, y); double v2 = c2.potetialat(x, y); System.out.pritl(v1+v2); Παρατηρείστε ότι ο κώδικας που χρησιμοποιεί την Charge δεν χρειάζεται να γνωρίζει την υλοποίηση της. 19 Υλοποίηση Κλάσης Charge public class Charge { double rx, ry; // positio double q; // charge public Charge(double x0, double y0, double q0) { rx = x0; ry = y0; q = q0; public double potetialat(double x, double y) { retur k * q / Math.sqrt(dx*dx + dy*dy); public Strig tostrig() { retur q + " at " + "(" + rx + ", " + ry + ")"; Every program is a class Πεδία δεδοµένων (istace variables) Κατασκευαστής (costructor) Μέθοδοι (istace methods) 20 public class ChargeCliet { A object of a class is declared & amed by a variable of the class type public static void mai(strig[] args) { double x = Double.parseDouble(args[0]); double y = Double.parseDouble(args[1]); Charge c1 = ew Charge(.51,.63, 21.3); Charge c2 = ew Charge(.13,.94, 81.9); System.out.pritl(c1); System.out.pritl(c2); double v1 = c1.potetialat(x, y); double v2 = c2.potetialat(x, y); System.out.pritl(v1+v2); ew operator must be used to create the object ad associate it with its variable ame 21 Περίγραμμα 22 Μέθοδοι public class ChargeCliet { public static void mai(strig[] args) { double x = Double.parseDouble(args[0]); double y = Double.parseDouble(args[1]); Charge c1 = ew Charge(.51,.63, 21.3); Charge c2 = ew Charge(.13,.94, 81.9); System.out.pritl(c1); System.out.pritl(c2); double v1 = c1.potetialat(x, y); double v2 = c2.potetialat(x, y); System.out.pritl(v1+v2); Methods are ivoked usig the ame of the callig object ad the method ame. Ivokig a method is equivalet to executig the method body 23 24

Κατηγορίες Μεθόδων Μέθοδοι που επιτελούν μια ενέργεια (perform a actio): δεν επιστρέφουν μια τιμή. Τις χρησιμοποιούμε για τις παρενέργειές τους (side-effects). Αποκαλούνται void methods Μέθοδοι που υπολογίζουν και επιστρέφουν System.out.pritl(c1); μια τιμή καποιου τύπου (compute ad retur a public value of void a certai pritl(strig type) x){.. A ivocatio of a method (κλήση μεθόδου) that returs a value ca be used as a expressio (έκφραση) ayplace that a value of the typeretured ca be used public double potetialat(double x, double y) { retur k * q / Math.sqrt(dx*dx + dy*dy); 25 EΠΛ133 Ποιά από τις πιο κάτω προτάσεις είναι λάθος; Η mai είναι void μέθοδος της Java Kάθε μέθοδος Java μπορεί να χρησιμοποιηθεί σαν να ήταν void Στη mai δεν μπορούμε να κάνουμε χρήση εντολής «retur;» Η mai δεν χρειάζεται να υπάρχει σε κάθε κλάση Java 26 retur Statemets A void method eed ot cotai a retur statemet, uless there is a situatio that requires the method to ed before all its code is executed I this cotext, sice it does ot retur a value, a retur statemet is used without a expressio: retur; Ay Method Ca Be Used As a void Method A method that returs a value ca also perform a actio If you wat the actio performed, but do ot eed the retured value, you ca ivoke the method as if it were a void method, ad the retured value will be discarded: objectname.returedvaluemethod(); Copyright 2017 Pearso Ltd. All rights reserved. 27 Copyright 2017 Pearso Ltd. All rights reserved. 28 public class Charge { private double rx, ry; private double q; // positio // charge Tυπικές παράμετροι (formal parameters) Παράμετροι, Ορίσματα, Τοπικές Μεταβλητές, Κλήση με Τιμή public Charge(double x0, double y0, double q0) { rx = x0; ry = y0; q = q0; public double potetialat(double x, double y) { retur k * q / Math.sqrt(dx*dx + dy*dy); public Strig tostrig() { retur q + " at " + "(" + rx + ", " + ry + ")"; Ορίσματα ή κανονικές παράμετροι (argumets ή actual parameters) 29 30

Πραγματικές Παράμετροι ή Ορίσματα Whe a method is ivoked, the appropriate values must be passed to the method i the form of argumets (ορίσματα) Argumets are also called actual parameters (πραγματικές παράμετροι) The umber ad order of the argumets must exactly match that of the parameter list The type of each argumet must be compatible with the type of the correspodig parameter it a=1,b=2,c=3; double result = mymethod(a,b,c); Κλήση με τιμή (call by value) it a=1,b=2,c=3; double result = mymethod(a,b,c); I the precedig example, the value of each argumet (ot the variable ame) is plugged ito the correspodig method parameter. This method of pluggig i argumets for formal parameters is kow as the call-by-value mechaism (κλήση με τιμή) Copyright 2017 Pearso Ltd. All rights reserved. 31 Copyright 2017 Pearso Ltd. All rights reserved. 32 Mετασχηματισμός (αρχέγονων) τύπων If argumet ad parameter types do ot match exactly, Java will attempt to make a automatic type coversio A primitive argumet ca be automatically type cast (μετασχηματισμός τύπου) from ay of the followig types, to ay of the types that appear to its right: byte short it log float double char Pitfall: Use of the Terms "Parameter" ad "Argumet" Parameter (παράμετρος) is the variable Argumet (όρισμα) is the item passed i the parameter People ofte use the terms parameter ad argumet iterchageably Whe you see these terms, you may have to determie their exact meaig from cotext Copyright 2017 Pearso Ltd. All rights reserved. 33 Copyright 2017 Pearso Ltd. All rights reserved. 34 Τοπικές μεταβλητές public class ChargeCliet { public static void mai(strig[] args) { double x = Double.parseDouble(args[0]); double y = Double.parseDouble(args[1]); Charge c1 = ew Charge(.51,.63, 21.3); Charge c2 = ew Charge(.13,.94, 81.9); System.out.pritl(c1); System.out.pritl(c2); double v1 = c1.potetialat(x, y); double v2 = c2.potetialat(x, y); System.out.pritl(v1+v2); A variable declared withi a method defiitio is called a local variable 35 public class Charge { private double rx, ry; private double q; // positio // charge public Charge(double x0, double y0, double q0) { rx = x0; ry = y0; q = q0; public double potetialat(double x, double y) { retur k * q / Math.sqrt(dx*dx + dy*dy); public Strig tostrig() { retur q + " at " + "(" + rx + ", " + ry + ")"; All method parameters are used as local variables 36

Tι συμβαίνει κατά την εκτέλεση της TestSilly; public class Silly { public double dummysum(double x, double y, it z) { z = 288; retur x + y; public class TestSilly { public static void mai(strig args[]){ it zop = 133; Silly sillyobj = ew Silly(); System.out.pritl(sillyObj.dummySum(1, 2, zop) + + zop); Περίγραμμα Εκτυπώνει: 0 0 Εκτυπώνει: 3.0 zop Eκτυπώνει: 3.0 133 Εκτυπώνει: 3.0 288 EΠΛ133 37 38 public class Charge { private double rx, ry; private double q; // positio // charge H χρήση του «this» public Charge(double x0, double y0, double q0) { rx = x0; ry = y0; q = q0; public double potetialat(double x, double y) { retur k * q / Math.sqrt(dx*dx + dy*dy); public Strig tostrig() { retur q + " at " + "(" + rx + ", " + ry + ")"; 39 40 Σε κάθε χρήση μεταβλητής στιγμιοτύπου (istace variable) υπονοείται ότι υπάρχει παραπομπή στο αντικείμενο που περικλείει τη μεταβλητή: <object hadle>.idetifier public double potetialat(double x, double y) { retur k * q / Math.sqrt(dx*dx + dy*dy); Αν χρειαστούμε να ονοματίσουμε το περικλείον αντικείμενο, μπορούμε να χρησιμοποιήσουμε την κλειδολέξη this myistacevariable always meas ad is always iterchageable with this.myistacevariable public double potetialat(double x, double y) { retur k * q / Math.sqrt(dx*dx + dy*dy); public double potetialat(double x, double y) { double dx = x - this.rx; double dy = y - this.ry; retur k * this.q / Math.sqrt(dx*dx + dy*dy); Copyright 2017 Pearso Ltd. All rights reserved. 41 42

this must be used if a parameter or other local variable with the same ame is used i the method Otherwise, all istaces of the variable ame will be iterpreted as local it somevariable = this.somevariable local istace class Baaa { double param; Baaa(it prm) { param = prm; void f(it i) { System.out.pritl( Calc: + i * param); Baaa a = ew Baaa(5), b = ew Baaa(7); a.f(1); b.f(2); Copyright 2017 Pearso Ltd. All rights reserved. 43 44 l Η χρήση του this (συνέχεια) Πως μπορεί η μέθοδος f() να γνωρίζει αν καλείται από το αντικείμενο a ή το αντικείμενο b; a.f(1) ó Baaa.f(a,1) b.f(2) ó Baaa.f(b,2) Αν θέλουμε, μέσα από κάποιο αντικείμενο, να αποκτήσουμε πρόσβαση-χειριστήριο προς το αντικείμενο αυτό, μπορούμε να χρησιμοποιήσουμε την ειδική μεταβλητή this, η οποία είναι χειριστήριο για το αντικείμενο μας. l H παράμετρος this είναι «κρυμμένη» Ανάθεση στην this δεν επιτρέπεται. l Αν και δεν εμφανίζεται στη λίστα τυπικών παραμέτρων μιας μεθόδου, αυτομάτως και υπόρρητα περνιέται σαν όρισμα στο σώμα της μεθόδου. Μέσω της this μπορούμε να περάσουμε το τρέχον αντικείμενο σαν παράμετρο σε μεθόδους άλλων αντικειμένων. l Whe a method is ivoked, the callig object is automatically plugged i for this. 45 46 Παράδειγμα χρήσης this Περίγραμμα // Simple use of the "this" keyword. public class Leaf { private it i = 0; Leaf icremet() { i++; retur this; void prit() { System.out.pritl("i = " + i); public static void mai(strig[] args) { Leaf x = ew Leaf(); x.icremet().icremet().icremet().prit(); Πολλαπλή κλήση της ίδιας μεθόδου πάνω στο ίδιο αντικείμενο. 47 48

Στοιχεία αφαιρετικότητας στον Α/Σ.Π. Στοιχεία Αφαιρετικότητας στον Α/Σ. Π. Αντικείμενα: οι λύσεις σε υπολογιστικά προβλήματα μοντελοποιούνται σαν αλληλεπιδράσεις μεταξύ αντικειμένων. Κλάσεις: είναι το «εργαλείο» δημιουργίας σχεδιοτύπων και παραγωγής αντικείμενων με ομοειδή χαρακτηριστικά. 3. Απόκρυψη πληροφοριών. 4. Εμφώλευση. 5. Χαμηλή διασυνδετικότητα. 49 50 Iformatio Hidig ad Ecapsulatio Απόκρυψη Πληροφορίας (Iformatio Hidig) Iformatio hidig (απόκρυψη πληροφοριών) is the practice of separatig how to use a class from the details of its implemetatio Abstractio is aother term used to express the cocept of discardig details i order to avoid iformatio overload Ecapsulatio (εμφώλευση ή εγκόλπωση) meas that the data ad methods of a class are combied ito a sigle uit (i.e., a class object), which hides the implemetatio details Kowig the details is uecessary because iteractio with the object occurs via a well-defied ad simple iterface Δεν μας ενδιαφέρει πώς ακριβώς ένα αντικείμενο εκπληρώνει μια υποχρέωσή του. Έτσι, δεν έχουμε ιδέα τι ενέργειες θα κάνει και από ποιούς θα ζητήσει βοήθεια για να μας εξυπηρετήσει. Από την στιγμή που το αντικείμενο δεχθεί το μήνυμα-αίτημά μας, αποδέχεται και την ευθύνη για την διεκπεραίωση του. Βασική προσέγγιση Α/Σ. Π.: ψάχνουμε κάποιο άλλο αντικείμενο για να μεταβιβάσουμε ολόκληρη ή μέρος τής υποχρέωσης που έχουμε αναλάβει Copyright 2017 Pearso Ltd. All rights reserved. 51 52 Εμφώλευση δεδομένων (data ecapsulatio) Διασυνδετικότητα I Java, hidig details is doe by markig them private Aπόκρυψη της κατάστασης (state) του αντικειμένου σε ιδιωτικά (private) πεδία δεδομένων Περιορισμός της αλληλεπίδρασης/επικοινωνίας με τα αντικείμενα και δυνατότητα αλλαγής της κατάστασης των μόνο μέσω των μεθόδων τους Τα αντικείμενα διατηρούν τον έλεγχο του πώς ο εξωτερικός κόσμος μπορεί να τα αξιοποιήσει Με την απόκρυψη πληροφοριών, μπορούμε να πετύχουμε χαμηλή διασυνδετικότητα στα προγράμματά μας Ορισμός διασυνδετικότητας: Ο βαθμός εξάρτησης ενός τμήματος τού κώδικα κάποιου λογισμικού συστήματος από τα υπόλοιπα τμήματα. Σημασία διασυνδετικότητας Θεωρείστε κάποιον κώδικα που υλοποιεί ουσιώδη λειτουργία ενός πολύπλοκου συστήματος λογισμικού. Έφ όσον ο κώδικας αυτός χρησιμεύει σε άλλα κομμάτια του συστήματος, στοιχεία του (μεταβλητές, αποτελέσματα, εντολές) θα χρησιμοποιούνται και πρέπει να είναι γνωστά και προσβάσιμα για την υλοποίηση των υπολοίπων κομματιών του λογισμικού. Άρα, η ανάπτυξη ενός νέου υποσυστήματος προϋποθέτει την κατανόηση και γνώση του κώδικά μας (καλό ή κακό;) 53 54

l Απουσία Παρεμβολών (o-iterferece) Εφόσον ένα αντικείμενο παρέχει τις υπηρεσίες που θέλουμε, δεν μας ενδιαφέρει πως διεκπεραιώνει τα αιτήματά μας. Τα εξαρτήµατα λογισµικού (software compoets) σε Α/Σ συστήματα χαρακτηρίζονται από τις υπηρεσίες που παρέχουν και όχι από τις λεπτομέρειες της υλοποίησής τους. Η προσέγγιση αυτή διευκολύνει την συνεργασία πολλών προγραμματιστών πάνω στο ίδιο σύστημα με την ελάχιστη παρεμβολή του ενός στη δουλειά του άλλου. Ask ot what you ca do to your data structures; ask what your data structures ca do for you. Ποιά από τις πιο κάτω προτάσεις είναι η σωστή; Η χαμηλή διασυνδετικότητα είναι ιδιότητα του Α/Σ. Π. Η υποστήριξη της εμφώλευσης επιτρέπει την απόκρυψη πληροφορίας, η οποία διευκολύνει τη χαμηλή διασυνδετικότητα. Η χρήση αντικειμένων διασφαλίζει την απόκρυψη πληροφορίας. Η απουσία απόκρυψης πληροφορίας συνεπάγεται την υψηλή διασυνδετικότητα. 55 EΠΛ133 56 Η εμφώλευση στην Java Αccess Specifiers (Προσδιοριστές πρόσβασης) Αccessor Methods (Μέθοδοι Προσπέλασης) Mutator Methods (Mέθοδοι Μεταλλαγής) public ad private Modifiers Ο προσδιοριστής (modifier) public (δημόσιος) υποδηλώνει ότι δεν υπάρχουν περιορισμοί στο πού μπορεί να χρησιμοποιηθεί μια μεταβλητή στιγμιοτύπου ή μέθοδος. Ο προσδιοριστής private (ιδιωτικός) υποδηλώνει ότι μια μεταβλητή στιγμιοτύπου ή μέθοδος δεν μπορεί να προσπελασθεί μέσω του ονόματός της από κώδικα που ανήκει σε άλλη κλάση (caot be accessed by ame outside of the class) Καλή Πρακτική: όλες οι μεταβλητές στιγμιοτύπου να είναι private Οι περισσότερες μέθοδοι είναι public και έτσι δίνουν ελεγχόμενη πρόσβαση στις ιδιωτικές Συνήθως, μέθοδοι που δηλώνονται private χρησιμοποιούνται σαν υποβοηθητικές σε άλλες μεθόδους της κλάσης τους. 57 Copyright 2017 Pearso Ltd. All rights reserved. 58 public class Charge { private double rx, ry; private double q; // positio // charge public Charge(double x0, double y0, double q0) { rx = x0; ry = y0; q = q0; public double potetialat(double x, double y) { retur k * q / Math.sqrt(dx*dx + dy*dy); public Strig tostrig() { retur q + " at " + "(" + rx + ", " + ry + ")"; A Class Has Access to Private Members of All Objects of the Class Withi the defiitio of a class, private members of ay object of the class ca be accessed, ot just private members of the callig object public boolea equals(charge c) { retur (c.q == q); 59 Copyright 2017 Pearso Ltd. All rights reserved. 60

Accessor ad Mutator Methods Accessor οr getter methods (μέθοδοι προσπέλασης) allow the programmer to obtai the value of a object's istace variables The data ca be accessed but ot chaged The ame of a accessor method typically starts with the word get Mutator or setter methods (μέθοδοι μεταλλαγής) allow the programmer to chage the value of a object's istace variables i a cotrolled maer Icomig data is typically tested ad/or filtered The ame of a mutator method typically starts with the word set Copyright 2017 Pearso Ltd. All rights reserved. public class Charge { private double rx, ry; // positio private double q; // charge public Charge(double x0, double y0, double q0) { rx = x0; ry = y0; q = q0; public double potetialat(double x, double y) { retur k * q / Math.sqrt(dx*dx + dy*dy); public Strig tostrig() { retur q + " at " + "(" + rx + ", " + ry + ")"; public boolea equals(charge c) { retur (c.q == q); public getxcoord() { retur this.rx; public getycoord() { retur this.ry; public getchargevalue() { retur this.q; public setpositio(double x, double y) { this.rx = x; this.ry = y; Προσπέλασης - Αccessor Μεταλλαγής - Mutator 61 62 Mutator Methods Ca Retur a Boolea Value Some mutator methods issue a error message ad ed the program wheever they are give values that are't sesible A alterative approach is to have the mutator test the values, but to ever have it ed the program Istead, have it retur a boolea value, ad have the callig program hadle the cases where the chages do ot make sese Ecapsulatio Διαπροσωπεία (δημόσια) - καθορίζει ποιά στοιχεία των αντικειμένων μπορούν να χρησιμοποιηθούν από άλλες κλάσεις και αντικείμενα. Copyright 2017 Pearso Ltd. All rights reserved. 63 Copyright 2017 Pearso Ltd. All rights reserved. 64 A Couple of Importat Acroyms: API ad ADT The API or applicatio programmig iterface for a class is a descriptio of how to use the class A programmer eed oly read the API i order to use a well desiged class A ADT or abstract data type is a data type that is writte usig good iformatio-hidig techiques Precoditios ad Postcoditios The precoditio (προ-συνθήκη / συνθήκη πριν την κλήση) of a method states what is assumed to be true whe the method is called The postcoditio (μετά-συνθήκη / συνθήκη μετά την κλήση) of a method states what will be true after the method is executed, as log as the precoditio holds It is a good practice to always thik i terms of precoditios ad postcoditios whe desigig a method, ad whe writig the method commet Copyright 2017 Pearso Ltd. All rights reserved. 65 Copyright 2017 Pearso Ltd. All rights reserved. 66

Περίγραμμα Iitializers Στην Java, πριν την χρήση μιας μεταβλητής αρχέγονου τύπου, η μεταβλητή αυτή θα πρέπει να έχει αρχικοποιηθεί. Διαφορετικά ο μεταφραστής διαμαρτύρεται και βγάζει μήνυμα λάθους. Π.χ.: it i; i = i++ ; // illegal Για την αποφυγή του προβλήματος αυτού, χρησιμοποιούμε μια ειδική ανάθεση αρχικοποιητή (iitializer), με την οποία αρχικοποιούμε μια αρχέγονη μεταβλητή την στιγμή της δήλωσής της: it i = 1; Εξαίρεση αποτελούν οι αρχέγονοι τύποι που είναι στοιχεία κάποιου αντικειμένου. Τα στοιχεία αυτά μπορούν να μην αρχικοποιηθούν από τον προγραμματιστή (τι τιµές παίρνουν τότε ;) 67 68 Παράδειγμα class Measuremet { boolea t; char c; byte b; short s; it i; log l; float f; double d; void prit() { System.out.pritl("Data type Iitial value\" + "boolea " + t + "\" + "char " + c + "\" + "byte " + b + "\" + "short " + s + "\" + "it " + i + "\" + "log " + l + "\" + "float " + f + "\" +"double " + d); public class IitialValues { public static void mai(strig[] args){ Measuremet().prit; 69 Εκροή Παραδείγματος C:\users\epl233\eckel-code\c04>java IitialValues Data type Iitial value boolea false char byte 0 short 0 it 0 log 0 float 0.0 double 0.0 Το char αρχικοποιείται σε ull. Επίσης σε ull αρχικοποιούνται και όποια χειριστήρια αντικειμένων περιέχονται ως στοιχεία σε αντικείμενα. 70 Αρχικοποιήσεις Αντικειμένων class Measuremet { boolea t = false; char c = z ; byte b = 9; short s = 0; it i = f(s); log l = 12; float f = 2.3; double d = 0.9; void prit() { Αρχικοποίηση μπορεί να γίνει με κλήση μεθόδου. Οι παράμετροι που δικαιούμαστε να περάσουμε στην μέθοδο, πρέπει να έχουν ήδη αρχικοποιηθεί (αλλοιώς λαμβάνουμε exceptio). Κατασκευαστές (Costructors) 71 72

Κατασκευαστές (costructors) Οι costructors είναι μέθοδοι που χρησιμοποιούνται για την αρχικοποίηση ενός αντικειμένου κατά την στιγμή της δημιουργίας του. Δηλώνονται με το ίδιο όνοµα με την κλάση στην οποία ανήκουν. Έτσι η ονομασία τους δεν χρειάζεται ιδιαίτερη διαχείριση, για αποφυγή τυχόν συγκρούσεων με άλλα ονόματα. Οι κατασκευαστές δεν επιστρέφουν τίποτε, χωρίς ωστόσο να δηλώνονται με τύπο επιστροφής void. Διευκολύνουν τον προγραμματισμό καθώς «ενοποιούν» ονοματολογικά την δήλωση και την αρχικοποίηση των κλάσεων και αντικειμένων. Παράδειγμα costructor class Rock { Rock() { // This is the costructor System.out.pritl("Creatig Rock"); public class SimpleCostructor { public static void mai(strig[] args) { for(it i = 0; i < 10; i++) 73 74 l l Προκαθορισμένοι κατασκευαστές Σε πολλές περιπτώσεις μια κλάση ορίζεται χωρίς κατασκευαστή. Στην περίπτωση αυτή (και μόνο), ο μεταφραστής ορίζει και καλεί έναν προκαθορισμένο κατασκευαστή (default costructor), ο οποίος δεν δέχεται παραμέτρους: class Bird { it i; public class DefaultCostructor { public static void mai(strig[] args) { Bird c = ew Bird(); // default! Bird c = ew Bird(1); // error! Η αρχικοποίηση των στοιχείων του δημιουργούμενου l 75 Κατασκευαστές με παραμέτρους Ένας costructor μπορεί να δεχεται παραμέτρους, οι οποίες καθορίζουν περαιτέρω το πώς θα αρχικοποιηθεί το αντίστοιχο αντικείμενο. class Rock2 { Rock2(it i) { System.out.pritl("Creatig Rock umber " + i); public class SimpleCostructor2 { public static void mai(strig[] args) { for(it i = 0; i < 10; i++) ew Rock2(i); 76 Περίγραμμα Οverloadig () 77 78

Μεθόδων (overloadig) Παράδειγμα ς μεθόδων προκύπτει στην Java όταν το ίδιο όνοµα µεθόδου µπορεί να δεχτεί διαφορετικούς τύπους και/ή διαφορετικό αριθµό παραµέτρων. Η υπερφόρτωση μεθόδων χρησιμοποιείται ευρύτατα στον Α/ ΣΠ, αλλά και ιδιαίτερα στους κατασκευαστές-costructors. Αν δύο μέθοδοι ( κατασκευαστές ) έχουν το ίδιο όνομα, τότε πως γνωρίζει η Java ποιά μέθοδο θέλουμε να επικαλεστούμε; Kάθε υπερφορτωμένη μέθοδος πρέπει να δέχεται μια διαφορετική λίστα τύπων κατηγορημάτων. Ακόμη και διαφορές στην σειρά των κατηγορημάτων είναι αρκετές για να ξεχωρίσουν δυό μεθόδους, αλλά αυτό δεν είναι «καλή» προγραμματιστική τακτική. import java.util.*; class Tree { it height; Tree() { prt("platig a seedlig"); height = 0; Tree(it i) { prt("creatig ew Tree that is "+ i + " feet tall"); height = i; void ifo() { prt("tree is "+ height + " feet tall"); void ifo(strig s) { prt(s + : Tree is + height + " feet tall"); static void prt(strig s) { System.out.pritl(s); 79 80 Παράδειγμα ς (συνέχεια) public class Overloadig { public static void mai(strig[] args) { for(it i = 0; i < 5; i++) { Tree t = ew Tree(i); t.ifo(); t.ifo("overloaded method"); // Overloaded costructor: ew Tree(); 81 και Αρχέγονοι τύποι Αν ορίσουμε μια υπορουτίνα : void f (double x) { /* και την καλέσουμε σαν f(5), η παράμετρος «5» θα προαχθεί αυτόματα (promotio) σε 5.0. Τι θα συμβεί αν η f() είναι υπερφορτωμένη ώστε να δέχεται και ακέραιη παράμετρο; Θα εκτελεσθεί η έκδοση της f() που δέχεται ακέραιες παραµέτρους. Γενικότερα, αν η τιμή που περνάμε σε μια μέθοδο έχει τύπο µικρότερο από τον τύπο της δηλωμένης παραμέτρου, τότε η τιμή προάγεται στον τύπο της παραμέτρου. Αν υπάρχουν πολλοί τέτοιοι δυνατοί τύποι (πολλαπλών «υπερφορτώσεων»), τότε η προαγωγή γίνεται στον αμέσως μεγαλύτερο τύπο. Εξαίρεση έχουμε στην περίπτωση που ο τύπος της δηλωμένης παραμέτρου είναι char κι εμείς περνάμε έναν ακέραιο, ο οποίος δεν αντιστοιχεί σε τιμή χαρακτήρα char, τότε η τιμή αυτή προάγεται σε 82 Παράδειγμα public class Foo { void f1(double x) { System.out.pritl("double f1 -->" + x); void f1(it x) { System.out.pritl("it f1 -->" + x); Pitfall: You Ca Not Overload Based o the Type Retured The sigature of a method oly icludes the method ame ad its parameter types The sigature does ot iclude the type retured Java does ot permit methods with the same ame ad differet retur types i the same class public static void mai(strig[] args) { Foo ff = ew Foo(); ff.f1(5); 83 Copyright 2017 Pearso Ltd. All rights reserved. 84

Περίγραμμα Κατασκευάζοντας αυτοκίνητα στο Eclipse 85 86 87 88 89 90

import comp102x.io; private it odometer = 0; private Strig ower = "NoName"; // odometer value iitialized to 0 // Name of ower * Default costructor for a Car object public Car() { Μutator/Setter * movecar moves a car forward or backward by dist uits Methods (μέθοδος * @param dist movig distace μεταλλαγής) public void movecar(it dist) { odometer = odometer + dist; IO.outputl(ower +"'s car has moved " + dist + " uits."); Ορισμός Μεθόδων * A class of car objects that ca move forward, backward ad tur! * @author mdd * public class Car { Πεδία δεδομένων * turcar turs a car by a give degree * @param agle tur agle i degrees public void turcar(double agle) { IO.outputl(ower + "'s car has tured " + agle + " uits."); * getodometer gets the odometer readig of a car * public it getodometer() { retur odometer; * Costructor for a Car object with a ew ower's ame * @param ame ame of ower public Car(Strig ame){ ower = ame; Κατασκευαστές 91 Περίγραμμα 92 Λίγα λόγια για την τεκμηρίωση Τα σχόλια στον κώδικα χρησιμοποιούνται για να περιγράψουν: Αccessor/Getter Method (μέθοδος προσπέλασης) τι κάνει ένα πρόγραμμα και τι χρειάζεται; τι αναπαριστά μια μεταβλητή/πεδίο δεδομένων; ποιές προϋποθέσεις πρέπει να τηρούνται όταν χρησιμοποιείται μια μεταβλητή / πεδίο δεδομένων ή μέθοδος; μια σύντομη περιγραφή της λογικής ροής του προγράμματος πληροφορίες για τον προγραμματιστή και τον κώδικα Στη JAVA υπάρχουν τρεις γενικοί τρόποι για εισαγωγή σχολίων στον κώδικα. 93 94 import comp102x.io; Συμβάσεις Σχολίων: Γενικές Αρχές * A class of car objects that ca move forward, backward ad tur! * @author mdd * public class Car { Δύο ειδών σχόλια: Υλοποίησης, που περιλαμβάνονται ανάμεσα σε /*..., ή έπονται του // Αποδελτίωσης (documetatio ή "doc commets"), που περιλαμβάνονται ανάμεσα σε... Τα σχόλια αποδελτίωσης, μπορούν να εξαχθούν αυτόματα σε εγχειρίδια HTML μορφότυπου, με χρήση του εργαλείου javadoc. Τα σχόλια υλοποίησης χρησιμεύουν για τον αποκλεισμό κώδικα σε σχόλιο, ή τον σχολιασμό υλοποίησης. Τα σχόλια αποδελτίωσης στοχεύουν στην καταγραφή των προδιαγραφών του κώδικα (code specificatio), ανεξάρτητα της υλοποίησης. Γενικά, τα σχόλια αποσκοπούν στην παράθεση επεξηγήσεων σχετικά με τον κώδικα για πράγματα που δεν είναι φανερά από τον κώδικα τον ίδιο. Πάρα πολλά επεξηγηματικά σχόλια υποδηλώνουν συνήθως κακή σχεδίαση του κώδικα. /* The odometer has always positive value private it odometer = 0; // odometer value iitialized to 0 private Strig ower = "NoName"; // Name of ower * Default costructor for a Car object public Car() { * Costructor for a Car object with a ew ower's ame * @param ame ame of ower public Car(Strig ame){ ower = ame; 95 96

Σχόλια αποδελτίωσης - Javadoc Σχόλια που ξεκινούν με και καταλήγουν σε Τροφοδοτούν εργαλεία τεκμηρίωσης όπως το Javadoc, μέσω των οποίων μπορούμε να δημιουργήσουμε αρχεία τεκμηρίωσης (mauals) σε HTML, τα οποία μας δίνουν πληροφορίες για κλάσεις και τις δυνατότητές τους. Μπορεί να περιλαμβάνουν σημαντήρες (tags), όπως: @param για να περιγράφουν παραμέτρους @retur για να περιγράφουν την τιμή επιστροφής μιας μεθόδου @see, για να παραπέμπουν σε άλλα τμήματα των εγχειριδίων HTML, τα οποία δημιουργούνται από το javadoc Σχόλια αποδελτίωσης δεν πρέπει να τοποθετούνται μέσα στο σώμα μιας μεθόδου. 97 98 99 100 101 102 Tεκμηρίωση βιβλιοθηκών JAVA Σχόλια Αποδελτίωσης (συνέχεια) Άλλοι χρησιμοποιούμενοι σημαντήρες είναι οι ακόλουθοι: @versio @author author-iformatio @sice @param parameter-ame descriptio @retur descriptio @throws