2. Προσδιοριστές, δεσμευμένες λέξεις και τύποι

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

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

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

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

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

3. Εκφράσεις και έλεγχος ροής

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

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

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Διαδικασιακός Προγραμματισμός

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

Εισαγωγή στη JAVA. Εισαγωγή στη Java. Η Java είναι δημιούργημα της SUN MICROSYSTEMS.

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

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

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

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

Β. Εισαγωγή στον Προγραμματισμό Η/Υ με την JavaScript

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

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

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

Μπορείτε να δηλώσετε πίνακα οποιουδήποτε τύπου είτε βασικού είτε κλάσης:

Στοιχειώδης προγραμματισμός σε C++

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

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

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

Δομές ελέγχου ροής προγράμματος

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

Δεδομένα, τελεστές, είσοδος/έξοδος

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΣΤΗ JAVA ΤΕΛΕΣΤΕΣ - ΜΕΤΑΒΛΗΤΕΣ

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

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

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

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

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

Διαδικασιακός Προγραμματισμός

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός

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

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

Δεδομένα, Τύποι και Τιμές

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

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack

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

ΕΠΛ 012. JavaScripts

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

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

Προγραμματισμός Η/Υ (ΤΛ2007 )

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

6. Εξαιρέσεις στη γλώσσα Java

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

Ενδεικτική περιγραφή μαθήματος

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

Απλές Δοµές Δεδοµένων Στην ενότητα αυτή θα γνωρίσουµε ορισµένες απλές Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε για την αποδοτική επίλυση του προβλή

Προγραμματισμός Η/Υ (ΤΛ2007 )

C: Από τη Θεωρία στην Εφαρµογή 2 ο Κεφάλαιο

Σχολικό Βιβλίο - Κεφάλαιο 7 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ PASCAL ΠΑΡΟΥΣΙΑΣΗ 13

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

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

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

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

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

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

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι

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

B. Ενσωμάτωση Ιθαγενών Μεθόδων

ιορθώσεις επί της 2 ης έκδοσης εκτύπωσης 2002

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

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

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

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

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

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

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

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

Περιεχόμενα. Πρόλογος... 21

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου)

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

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

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

CSD Univ. of Crete Φθινόπωρο Άσκηση 1 Εκφώνηση

Προγραμματισμός Η/Υ (ΤΛ2007 )

Εργαστήριο 2ο. Περίγραμμα Εργαστηριακής Άσκησης

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

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

Οικονόμου Βαγγέλησ Διάλεξη Νο 2. Δομημένοσ Προγραμματιςμόσ - Διάλεξη 2

Ηλεκτρονικοί Υπολογιστές

3 ο Εργαστήριο Μεταβλητές, Τελεστές

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

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

Εισαγωγή στη γλώσσα προγραμματισμού C++

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

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

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

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

ΑΣΚΗΣΗ 5: ΠΙΝΑΚΕΣ. Σχήµα 1: H έννοια των πινάκων

Transcript:

2. Προσδιοριστές, δεσμευμένες λέξεις και τύποι Τελειώνοντας αυτό το κεφάλαιο θα μπορείτε: Να χρησιμοποιείτε σχόλια σε ένα πηγαίο πρόγραμμα Java. Να διακρίνετε σωστούς από λάθος προσδιοριστές. Να αναγνωρίζετε τις δεσμευμένες λέξεις της Java. Να παρουσιάζετε τους οκτώ βασικούς τύπους της Java. Να ορίζετε λεκτικές τιμές για αριθμητικούς και αλφαριθμητικούς τύπους. Να περιγράφετε τη βασική έννοια των όρων κλάση, αντικείμενο, μεταβλητή μέλος και αναφορά. Να δημιουργείτε έναν ορισμό μίας κλάσης σε Java για μία απλή κλάση που περιέχει βασικές μεταβλητές μέλη. Να δηλώνετε μεταβλητές τύπου κλάσης. Να δημιουργείτε, με χρήση της new, ένα αντικείμενο και να περιγράφετε την εξ ορισμού αρχικοποίησή του. Να προσπελαύνετε τις μεταβλητές μέλους ενός αντικειμένου με χρήση του συμβολισμού «τελείας». Να περιγράφετε τη σημαντικότητα μιας αναφοράς μεταβλητής και να δηλώνετε τις συνέπειες από την ανάθεση μεταξύ μεταβλητών τύπου κλάσεων. 2.1 Σχόλια Υπάρχουν τρία επιτρεπτά στυλ για την εισαγωγή σχολίων: // σχόλια σε μία γραμμή /* σχόλια σε μία ή περισσότερες γραμμές */ /** σχόλια τεκμηρίωσης */ Τα σχόλια τεκμηρίωσης τοποθετούνται αμέσως πριν έναν ορισμό (μιας μεταβλητής ή μίας μεθόδου) και δηλώνουν ότι το σχόλιο θα πρέπει να συμπεριλαμβάνεται σε οποιαδήποτε αυτόματα παραγόμενη τεκμηρίωση (τα αρχεία HTML που παράγονται από την εντολή javadoc). Τα σχόλια αυτά λειτουργούν ως περιγραφή του στοιχείου που δηλώνεται. 2.2 Ερωτηματικά, μπλοκ και κενά Στη Java οι εντολές τερματίζονται με ερωτηματικό. Ένα μπλοκ σημειώνεται μέσα σε άγκιστρα { και } και αποτελεί μία συμπαγή εντολή. Τα κενά επιτρέπονται ανάμεσα σε στοιχεία του πηγαίου κώδικα και οπουδήποτε επιτρέπεται κενό μπορείτε να χρησιμοποιήσετε όσο θέλετε. Τα κενά περιλαμβάνουν το χαρακτήρα κενό (spaces), τα tabs και την αλλαγή γραμμής, συνεπώς μπορείτε με τον τρόπο αυτό να βελτιώσετε την οπτική εμφάνιση του πηγαίου κώδικά σας. 1

2.3 Προσδιοριστές Στη Java ένας προσδιοριστής ξεκινά με ένα γράμμα, με underscore (_) ή με το σύμβολο του δολαρίου ($). Οι επόμενοι χαρακτήρες μπορούν να περιλαμβάνουν και αριθμητικά ψηφία. Οι προσδιοριστές επηρεάζονται από πεζά/κεφαλαία γράμματα και δεν έχουν μέγιστο μήκος. Τα ακόλουθα είναι επιτρεπτοί προσδιοριστές: identifier username User_name _sys_var1 $change ημεταβλητήμου Ο πηγαίος κώδικας σε Java γράφεται ουσιαστικά σε Unicode, και όχι σε ASCII, συνεπώς ένα γράμμα είναι σε μεγαλύτερο εύρος από το κλασικό a->z και A->Z. Προσοχή στους μη ASCII χαρακτήρες γιατί το Unicode μπορεί να υποστηρίζει διαφορετικούς χαρακτήρες οι οποίοι όμως να παρουσιάζονται ως ίδιοι. Οι προσδιοριστές μπορεί να περιέχουν, αλλά να μην είναι στην πράξη, δεσμευμένες λέξεις. Στη συνέχεια θα παρουσιάσουμε τις δεσμευμένες λέξεις. Συνεπώς, το thisone είναι επιτρεπτός προσδιοριστής, ενώ το this δεν είναι. Σημείωση Οι προσδιοριστές που περιέχουν το σύμβολο του δολαρίου ($) είναι γενικά μη συνηθισμένοι, αν και γλώσσες όπως η BASIC και οι φλοιοί του Unix, όπως και τα συστήματα VAX VMS το χρησιμοποιούν κατά κόρον. Επειδή δεν είναι συνήθεις, είναι καλύτερο να τους αποφεύγουμε εκτός αν υπάρχει μία τοπική σύμβαση ή άλλος λόγος που να χρειάζεται να συμπεριλάβουμε το σύμβολο αυτό στον προσδιοριστή. 2.4 Δεσμευμένες λέξεις abstract double int strictfp ** boolean else interface super break extends long switch byte final native synchronized case finally new this catch float package throw char for private throws class goto * protected transient const * if public try continue implements return void default import short volatile 2

do instanceof static while * δηλώνει μία δεσμευμένη λέξη που δε χρησιμοποιείται ** δηλώνει μία δεσμευμένη λέξη που εισήχθη στη Java 2 Σημείωση Στη Java, τα λεκτικά true, false και null είναι με πεζά, και όχι με κεφαλαία γράμματα όπως στη C++. Αυστηρά μιλώντας δεν είναι δεσμευμένες λέξεις, αλλά λεκτικά. Σημείωση Δεν υπάρχει τελεστής sizeof: το μέγεθος και η αναπαράσταση όλων των τύπων είναι προκαθορισμένη και δεν εξαρτάται από την υλοποίηση. Σημείωση Τα goto και const είναι δεσμευμένες λέξεις αλλά δε χρησιμοποιούνται στην πράξη από τη Java. 2.5 Πρωτογενείς τύποι στη Java Η Java ορίζει οκτώ πρωτογενείς τύπου δεδομένων και έναν ειδικό τύπο. Αυτοί μπορούν να χρησιμοποιηθούν ως λεκτικές τιμές ή σε μεταβλητές. Οι τύποι διακρίνονται σε τέσσερις κατηγορίες. Αυτές είναι λογικοί, κειμένου, ακέραιοι και κινητής υποδιαστολής. 2.5.1. Λογικοί boolean Οι λογικές τιμές έχουν δύο καταστάσεις. Συχνά τις σκεφτόμαστε ως «ανοικτό» και «κλειστό», «αληθές» και «ψευδές» ή «ναι» και «όχι». Στη Java μία τέτοια τιμή αναπαρίσταται με τον τύπο boolean. Ο τύπος boolean έχει δύο λεκτικές τιμές: true και false. Σημείωση. Δεν υπάρχει μετατροπή (cast) ανάμεσα σε τύπους ακεραίων και τον τύπο boolean. Ορισμένες γλώσσες, με χαρακτηριστικές τη C και την C++, επιτρέπουν σε αριθμητικές να διερμηνεύονται ως λογικές τιμές, θεωρώντας τυπικά το μηδέν ως ψευδές και τις μη μηδενικές τιμές ως αληθείς. Αυτό δεν επιτρέπεται στη Java και οπουδήποτε απαιτείται boolean δεν μπορεί να χρησιμοποιηθεί κάτι διαφορετικό. 2.5.2. Κειμένου char και String Για απλούς χαρακτήρες χρησιμοποιούμε αναπαράσταση με τον τύπο char. Ένα char αναπαριστά έναν χαρακτήρα Unicode με χρήση ενός μη προσημασμένου αριθμού των 16 bits στο εύρος 0.. 2 16-1. Ένα λεκτικό τύπου char πρέπει να περιλαμβάνεται σε μονά εισαγωγικά ( ). a \t \u???? Το tab Ένας συγκεκριμένος Unicode, χαρακτήρας, όπου τα???? θα πρέπει να αντικατασταθούν από ακριβώς τέσσερα, δεκαεξαδικά ψηφία Ο τύπος String, που δεν είναι από τους βασικούς, χρησιμοποιείται για να αναπαραστήσει ακολουθίες χαρακτήρων. Οι χαρακτήρες είναι Unicode και οι ακολουθίες με χρήση του \ 3

που παρουσιάστηκαν στην περίπτωση του char, ισχύουν και εδώ. Ένα λεκτικό τύπου String περιλαμβάνεται σε διπλά εισαγωγικά ως εξής: The quick brown fox jumped over the lazy dog. 2.5.3. Ακέραιοι byte, short, int και long Υπάρχουν τέσσερις τύποι ακεραίων στη Java. Κάθε τύπος δηλώνεται με χρήση μίας από τις δεσμευμένες λέξεις byte, short, int ή long. Τα λεκτικά των ακεραίων μπορούν να αναπαρασταθούν σε δεκαδική, οκταδική ή δεκαεξαδική μορφή ως εξής: 2 Η δεκαδική τιμή είναι δύο 077 Το πρώτο μηδέν δηλώνει οκταδική τιμή 0xBABE Το αρχικό 0x δηλώνει δεκαεξαδική τιμή Σημείωση Όλοι οι ακέραιοι τύποι στη Java είναι προσημασμένοι αριθμοί. Τα ακέραια λεκτικά είναι τύπου int εκτός αν ακολουθούνται ρητά από το γράμμα L. Το L δηλώνει τιμή long. Σημειώστε ότι στη Java είναι επιτρεπτό να χρησιμοποιήσετε είτε το κεφαλαίο είτε το πεζό L, αλλά η επιλογή του πεζού γράμματος είναι άσχημη επιλογή, καθώς μπορεί να μην μπορείτε να το διακρίνετε από τον αριθμό 1 στις περισσότερες περιπτώσεις. Οι long εκδόσεις των πιο πάνω θα είναι: 2L 077L Η δεκαδική τιμή είναι δύο, ως long Το πρώτο μηδέν συνεχίζει να δηλώνει οκταδική τιμή 0xBABE Το αρχικό 0x συνεχίζει να δηλώνει δεκαεξαδική τιμή Το μήκος και το εύρος για τους τέσσερις ακέραιους τύπους παρουσιάζονται στη συνέχεια. Η αναπαράσταση του εύρους ορίζεται από την προδιαγραφή της Java ως συμπλήρωμα ως προς δύο και είναι ανεξάρτητη πλατφόρμας. Μήκος ακεραίου Όνομα ή τύπος Εύρος 8 bits byte -2 7 2 7-1 ( -128 127) 16 bits short -2 15 2 15-1 ( -32768 32767) 32 bits int -2 31 2 31-1 64 bits long 2 63 2 63-1 2.5.4. Κινητής υποδιαστολής float και double Μία μεταβλητή κινητής υποδιαστολής μπορεί να οριστεί με χρήση των δεσμευμένων λέξεων float ή double. Στη συνέχεια ακολουθούν παραδείγματα αριθμών κινητής υποδιαστολής. Ένα αριθμητικό λεκτικό είναι κινητής υποδιαστολής αν περιέχει υποδιαστολή, ή ένα μέρος εκθέτη (με το γράμμα E) ή ακολουθείται είτε από F είτε από D. 3.14 Μία απλή τιμή κινητής υποδιαστολής 6.02Ε23 Μία μεγάλη τιμή κινητής υποδιαστολής 4

2.718F Μία απλή τιμή μεγέθους float 123.4Ε+306D Μία μεγάλη τιμή double, με το D να είναι πλεονάζον Μήκος κινητής υποδιαστολής 32 bits float 64 bits double Όνομα ή τύπος Σημείωση Τα λεκτικά κινητής υποδιαστολής είναι double, εκτός αν δηλωθούν ρητά ως float. Η μορφή ενός αριθμού κινητής υποδιαστολής ορίζεται από τις προδιαγραφές της Java να ακολουθεί την IEEE 754 αναπαράσταση και να έχει τα μεγέθη που φαίνονται στον πιο πάνω πίνακα. Είναι ανεξάρτητη πλατφόρμας. 2.6 Μεταβλητές, δηλώσεις και αναθέσεις Το πιο κάτω πρόγραμμα παρουσιάζει πώς δηλώνουμε και αναθέτουμε τιμές σε μεταβλητές τύπου ακεραίου, κινητής υποδιαστολής, boolean, χαρακτήρων και συμβολοσειρών. 1 public class Assign { 2 public static void main(string args[]) { 3 4 int x, y; //ορίζουμε ακεραίους 5 float z = 3.414f; //ορισμός και ανάθεση κιν. Υποδ. 6 double w = 3.1415; //ορισμός και ανάθεση double 7 boolean truth = true; //ορισμός και ανάθεση boolean 8 9 char c; //ορισμός μεταβλητής χαρακτήρα 10 String str; //ορισμός μεταβλητής String 11 String str1= bye ; //ορισμός και ανάθεση String 12 13 c = A ; //ανάθεση τιμής σε μεταβλητή char 14 str = Hi out there! //ανάθεση τιμής σε μεταβλητή String 15 x = 6; 16 y = 1000; //ανάθεση τιμής σε μεταβλητές int 17... 18 } 19 } 2.7 Συμβάσεις στον κώδικα της Java Κλάσεις Τα ονόματα των κλάσεων πρέπει να είναι ουσιαστικά, με πεζούς ή κεφαλαίους χαρακτήρες και με το πρώτο γράμμα να είναι κεφαλαίο. Διεπαφές Τα ονόματα των διεπαφών (interfaces) πρέπει να ξεκινάνε με κεφαλαίο το πρώτο γράμμα, όπως και των κλάσεων. 5

Μέθοδοι Τα ονόματα των μεθόδων πρέπει να είναι ρήματα, με πεζούς ή κεφαλαίους χαρακτήρες και με το πρώτο γράμμα να είναι πεζό. Μέσα σε κάθε όνομα μεθόδου χρησιμοποιούμε κεφαλαίο γράμμα για διαχωρισμό των λέξεων (Camel Notation). Μη χρησιμοποιείτε το underscore στα ονόματα των μεταβλητών. Σταθερές Οι σταθερές των βασικών τύπων θα πρέπει να είναι όλο κεφαλαία γράμματα και οι λέξεις να διαχωρίζονται με το χαρακτήρα underscore, ενώ οι σταθερές αντικειμένων μπορούν να είναι πεζά και κεφαλαία γράμματα. Μεταβλητές Όλες οι μεταβλητές στιγμιοτύπων, κλάσεων και οι καθολικές μεταβλητές θα πρέπει να είναι με πεζά και κεφαλαία γράμματα με το πρώτο γράμμα να είναι πεζό. Οι λέξεις διαχωρίζονται με κεφαλαία γράμματα (Camel Notation). Επίσης αποφεύγετε το σύμβολο του δολαρίου ($), καθώς το σύμβολο αυτό έχει ιδιαίτερη σημασία για τις εσωτερικές κλάσεις (inner classes) που θα δούμε στη συνέχεια. Οι μεταβλητές θα πρέπει να έχουν νόημα. Το όνομά τους θα πρέπει να υποδηλώνει στο συνήθη αναγνώστη το σκοπό χρήσης τους. Ονόματα ενός χαρακτήρα θα πρέπει να αποφεύγονται, εκτός ίσως από τις προσωρινές μεταβλητές που πρόκειται να «πεταχτούν» (για παράδειγμα, τα i, j, k, για τον έλεγχο ενός βρόχου που δεν πρόκειται να χρησιμοποιηθούν έξω από αυτόν). 2.7.1. Άλλες συμβάσεις Δομές ελέγχου Χρησιμοποιείτε άγκιστρα ({ }) γύρω από όλες τις εντολές, ακόμα και από μονές εντολές, όταν αποτελούν μέρος μίας δομής ελέγχου όπως το if-else ή το for. Κενά Χρησιμοποιείτε μόνο μία εντολή σε κάθε γραμμή, με χρήση indentation 4 κενών για να είναι ο κώδικάς σας πιο αναγνώσιμος. Σχόλια Χρησιμοποιείτε σχόλια για επεξήγηση των τμημάτων του κώδικα που δεν είναι προφανή. Χρησιμοποιείται τα σχόλια // για απλή σχολίαση κώδικα, ώστε να μπορείτε να χρησιμοποιήσετε τα /*... */ για να σχολιάσετε μεγάλα τμήματα κώδικα (κατά τους ελέγχους). Επίσης χρησιμοποιείτε το /**... */ σχόλιο τεκμηρίωσης για να παρέχετε σε όποιον πρόκειται να συντηρήσει στο μέλλον τον κώδικά σας ένα API μέσω του javadoc. 2.8 Κατανοώντας τα αντικείμενα 2.8.1. Εν αρχή ην... Οι πρώτες γλώσσες προγραμματισμού, και οι νέοι προγραμματιστές, έχουν την τάση να αντιμετωπίζουν τις μεταβλητές ως απομονωμένες καταστάσεις. Για παράδειγμα, αν ένα πρόγραμμα χρειάζεται να χειρίζεται ημερομηνίες, μπορούμε να δηλώσουμε τρεις διαφορετικούς ακεραίους int day, month, year; Η εντολή αυτή κάνει δύο πράγματα. Δηλώνει ότι όταν αναφερόμαστε σε day, month ή year θα χειριζόμαστε έναν ακέραιο αντί κάτι άλλου, στη μνήμη. Επίσης δεσμεύει τον απαραίτητο χώρο αποθήκευσης για τους ακεραίους αυτούς. Αν και αυτή η προσέγγιση είναι απλή στην κατανόησή της, έχει δύο σημαντικά μειονεκτήματα. Πρώτον, αν το πρόγραμμα πρέπει να παρακολουθεί περισσότερες από μία ημερομηνίες, τότε χρειαζόμαστε περισσότερες δηλώσεις. Για να διατηρήσουμε για παράδειγμα δύο ημερομηνίες γέννησης θα πρέπει να χρησιμοποιήσουμε: 6

int mybirthday, mybirthmonth, mybirthyear; int yourbirthday, yourbirthmonth, yourbirthyear; Η μέθοδος αυτή σύντομα θα οδηγήσει σε προβλήματα σε σχέση με το πλήθος των ονομάτων που χρειαζόμαστε. Το δεύτερο μειονέκτημα είναι ότι κάθε μία από τις τιμές αυτές είναι μία ανεξάρτητη μεταβλητή. Σε εννοιολογικό επίπεδο υπάρχει μία συσχέτιση ανάμεσα στις day, month και year. Είναι όλες μέρη του ίδιου πράγματος, στην περίπτωσή μας μίας ημερομηνίας. 2.8.2. Σύνθετοι τύποι δεδομένων Οι περισσότερες γλώσσες προγραμματισμού, ακόμα και οι παλαιότερες, υποστηρίζουν την έννοια των μεταβλητών με τύπο. Δηλαδή, μία τιμή μπορεί να είναι ακέραιος ή αριθμός κινητής υποδιαστολής ή ίσως ένας χαρακτήρας. Αν και οι γλώσσες αυτές έχουν ένα πλήθος ενσωματωμένων τύπων, θα ήταν πολύ ωραίο να μπορούσαμε να ορίσουμε νέους τύπους για να αναπαριστούν άλλες ιδέες, όπως αυτή της ημερομηνίας. Οι δυσκολίες αυτές αντιμετωπίζονται σε πολλές γλώσσες με την εισαγωγή των σύνθετων τύπων δεδομένων (aggregate data types). Οι σύνθετοι τύποι δεδομένων αναφέρονται σε ορισμένες λέξεις ως τύποι δομής (structured types) ή τύποι εγγραφής (record types). Οι σύνθετοι τύποι δεδομένων ορίζονται από τους προγραμματιστές στο πηγαίο πρόγραμμα. Από τη στιγμή που έχει γίνει ο ορισμός ο τύπος μπορεί να χρησιμοποιηθεί όπως οποιοσδήποτε άλλος. Για να ορίσει έναν τύπο, ο προγραμματιστής θα πρέπει να περιγράψει τα στοιχεία που αποτελούν ένα στιγμιότυπο της νέας μεταβλητής. Έστω η ακόλουθη δήλωση int day; Η Java γνωρίζει πόση μνήμη πρέπει να δεσμεύσει και μπορεί επίσης να ερμηνεύσει τα περιεχόμενα αυτού του χώρου μνήμης. Συνεπώς, για να ορίσουμε έναν νέο τύπο πρέπει να καθορίσουμε πόσο χώρο αποθήκευσης χρειάζεται στη μνήμη και πώς πρέπει να ερμηνεύουμε τα περιεχόμενα αυτού του χώρου. Αυτό συνήθως γίνεται, όχι χρησιμοποιώντας πλήθος bytes, ή ταξινομώντας και επεξηγώντας τι είναι κάθε bit, αλλά σε σχέση με άλλους τύπους οι οποίοι είναι ήδη γνωστοί. Για παράδειγμα για να ορίσουμε έναν τύπο που αναπαριστά μία ημερομηνία, χρειαζόμαστε επαρκή χώρο όσο για τρεις ακεραίους και θέλουμε το χώρο αυτό να τον αντιμετωπίζουμε ως τρεις διακριτούς ακεραίους. Επιπλέον, όταν τους χρησιμοποιούμε δίνουμε αντίστοιχα την έννοια της ημέρας, του μήνα και του χρόνου στους τρεις αυτούς ακεραίους. Στη Java αυτό γίνεται ως εξής: public class Date { int day; int month; int year; } Η λέξη class είναι μέρος της γλώσσας Java και πρέπει να γράφεται εξ ολοκλήρου με πεζά γράμματα. Το όνομα Date γράφεται με κεφαλαίο το πρώτο γράμμα με βάση τη σύμβαση, και όχι ως απαίτηση της γλώσσας. 7

Σημείωση Μία κλάση είναι κάτι περισσότερο από έναν απλό σύνθετο τύπο, αλλά αυτά τα ζητήματα θα τα δούμε στη συνέχεια. Τώρα μπορούμε να ορίσουμε μία μεταβλητή ως τύπου Date και τα μέρη της ημέρας, μήνα και χρόνου θα εννοούνται από τη δήλωση που ακολουθεί: Date mybirth, yourbirth; Με χρήση αυτής της δήλωσης η Java επιτρέπει να προσπελαύνουμε τα μέρη (day, month, year) των μεταβλητών με χρήση του τελεστή τελεία (.) όπως φαίνεται στη συνέχεια. mybirth.day = 26; mybirth.month = 11; mybirth.year = 1960; Η προσέγγιση των σύνθετων τύπων δεδομένων παρέχει ένα μέσο συσχέτισης των τμημάτων των συνιστωσών του μοντέλου μίας ημερομηνίας, αντιμετωπίζοντάς τα όχι ως απομονωμένα στοιχεία, αλλά ως στοιχεία ενός μεγαλύτερου όλου. Επίσης μειώνει το βάρος στους χώρους ονομάτων, καθώς ένα μόνο όνομα απαιτείται για κάθε ημερομηνία και όχι τρία. Κάθε ένα από τα στοιχεία που αποτελούν μία κλάση, δηλαδή, τα τμήματα day, month και year στην περίπτωση αυτή, συνήθως ονομάζονται πεδία (fields), αλλά στην αντικειμενοστρεφή ορολογία καλούνται μεταβλητές μέλη (member variables). Καθώς η Java είναι μία αντικειμενοστρεφής γλώσσα θα χρησιμοποιούμε τον όρο μεταβλητές μέλη ή απλά μέλη. Ένα στιγμιότυπο ενός σύνθετου τύπου, όπως ο Date, ονομάζεται αντικείμενο (object). 2.8.3. Δημιουργία ενός αντικειμένου Όταν ορίζουμε μεταβλητές ενός βασικού τύπου, δηλαδή οποιουδήποτε των boolean, byte, short, int, long, float, και double, η περιοχή μνήμης δεσμεύεται ως μέρος της δήλωσης. Η δήλωση μίας μεταβλητής τύπου κλάσης, όπως η String, ή οποιουδήποτε άλλου τύπου που ορίζεται από το χρήστη, δε δεσμεύει χώρο στη μνήμη. Σημείωση Ορισμένες γλώσσες δεσμεύουν μνήμη, αλλά όχι η Java. Στην πράξη, μία μεταβλητή που δηλώνεται ότι είναι τύπου κλάσης δεν είναι από μόνη της δεδομένα, αλλά μία αναφορά σε δεδομένα. Σημείωση Μπορείτε να σκεφτόσαστε μία αναφορά ως ένα δείκτη - στις πιο πολλές υλοποιήσεις είναι ακριβώς αυτό και αν αυτή η έννοια έχει νόημα για σας, θα σας βοηθήσει στην κατανόηση. Συνεπώς, προτού να μπορέσετε να χρησιμοποιήσετε τη μεταβλητή θα πρέπει να δεσμευτεί ο πραγματικός χώρος αποθήκευσής της. Αυτό γίνεται με χρήση της δεσμευμένης λέξης new ως εξής: Date mybirth; mybirth = new Date(); Η πρώτη εντολή, η δήλωση, δεσμεύει επαρκή χώρο για την αναφορά. Η δεύτερη εντολή δεσμεύει χώρο για τους τρεις ακεραίους που χρησιμοποιούνται για να δημιουργήσουν μία Date. Η ανάθεση θέτει τη μεταβλητή mybirth ώστε να αναφέρεται ορθά στο νέο 8

αντικείμενο. Αφού έχουν πραγματοποιηθεί οι δύο πράξεις, μπορείτε να χειρίζεστε τις συνιστώσες του τύπου ημερομηνίας, όπως παρουσιάσαμε νωρίτερα. Ο πραγματικός αποθηκευτικός χώρος που δεσμεύεται με την κλήση της new Date() ονομάζεται αντικείμενο. Δεδομένου ενός ορισμού κλάσης για μία τυχαία κλάση Xxxx() μπορείτε να καλείτε την new Xxxx() για τη δημιουργία όσων αντικειμένων χρειαζόσαστε. Κάθε ένα είναι διακριτό από τα υπόλοιπα και έχει τη δική του αναφορά. Η αναφορά αυτή χρειάζεται για να αποθηκευθεί σε μία μεταβλητή ώστε να μπορείτε να χρησιμοποιήσετε το συνδυασμό «μεταβλητή τελεία μέλος» (όπως mybirth.day) για την προσπέλαση του κάθε μέλους του κάθε του αντικειμένου. 2.8.4. Δημιουργία ενός αντικειμένου Δέσμευση και διαμόρφωση μνήμης Στο σώμα μίας μεθόδου η δήλωση: Date today; today = new Date(); δεσμεύει αποθηκευτικό χώρο μόνο για μία αναφορά: today???? Η δημιουργία δεσμεύει και αρχικοποιεί τον αποθηκευτικό χώρο Date today; today = new Date(); today???? day month year 0 0 0 Τέλος η ανάθεση θέτει τη μεταβλητή αναφοράς ώστε να δείχνει ορθά στο μόλις δημιουργημένο νέο αντικείμενο. Date today; today = new Date(); 9

today 0x01abcdef day month year 0 0 0 2.8.5. Ανάθεση μεταβλητών αναφοράς Η Java αντιμετωπίζει τις μεταβλητές που δηλώνονται ως τύπου κλάσης ως αναφορές και αυτό έχει ορισμένες συνέπειες σχετικά με την έννοια της ανάθεσης. Έστω το ακόλουθο τμήμα κώδικα: int x = 7; int y = x; String s = Hello ; String t = s; Δημιουργούνται τέσσερις μεταβλητές: δύο τύπου int και δύο αναφορές σε String. Η τιμή της x είναι 7 και η τιμή αυτή αντιγράφεται στην y. Αμφότερες οι x και y είναι ανεξάρτητες μεταβλητές και μελλοντικές αλλαγές σε μία από τις δύο δεν επηρεάζουν την άλλη. Με τις μεταβλητές s και t υπάρχει μόνο ένα αντικείμενο String, και περιέχει το κείμενο Hello. Αμφότερες οι s και t αναφέρονται σε ένα μόνο αντικείμενο. x y s t 7 7 0x01234567 0x01234567 Hello 2.8.6. Εξ ορισμού αρχικοποίηση και η τιμή αναφοράς null Όταν εκτελείτε τη new για να δεσμεύσετε μνήμη για ένα αντικείμενο η Java αρχικοποιεί τις τιμές στο αποθηκευτικό χώρο σε μηδέν. Για τις αριθμητικές τιμές η τιμή είναι πράγματι το μηδέν. Για μεταβλητές boolean η τιμή είναι false. Για αναφορές, δηλαδή για οποιαδήποτε μεταβλητή τύπου αντικειμένου, χρησιμοποιείται μία ειδική τιμή η null. Στη Java η τιμή null δηλώνει ότι η αναφορά δεν αναφέρεται σε κάποιο αντικείμενο. Αυτό επιτρέπει στο σύστημα εκτέλεσης να ανιχνεύει τη χρήση μίας τέτοιας αναφοράς και να σταματά αμέσως την προσπέλαση, με καθαρό τρόπο και ανεξάρτητα από την 10

πλατφόρμα, χωρίς να επιτρέπει να συμβεί κάποια ζημιά. Περισσότερες λεπτομέρειες σχετικά με αυτή τη συμπεριφορά θα δούμε στη συνέχεια. Σημείωση Η εξ ορισμού αρχικοποίηση λαμβάνει χώρα μόνο στις μεταβλητές μέλη, όχι στις αυτόματες ή τοπικές μεταβλητές μεθόδων. Η χρήση μίας αυτόματης μεταβλητής προτού να της έχει σίγουρα ανατεθεί τιμή είναι λάθος κατά το χρόνο μεταγλώττισης. Μπορείτε όμως να αναθέσετε την τιμή null σε μία μεταβλητή. Οι προγραμματιστές C και C++ θα πρέπει να προσέξουν καθώς το λεκτικό null στη Java είναι με πεζά γράμματα σε αντίθεση με το αντίστοιχό του στις γλώσσες αυτές. 2.8.7. Επανάληψη στην ορολογία Στο κεφάλαιο αυτό εισαγάγαμε αρκετούς όρους. Στο υποκεφάλαιο αυτό θα τους δούμε εν συντομία Σύνθετοι τύποι δεδομένων Μία (μάλλον μαθηματική) ονομασία για ένα προγραμματιστικό μοντέλο. Το μοντέλο δημιουργείται τοποθετώντας μεταβλητές που περιγράφουν τις διαφορετικές απόψεις που καθορίζουν την κατάσταση μίας οντότητας σε ένα μόνο ορισμό. Από τη στιγμή που έχει οριστεί οι μεταβλητές μπορούν να δημιουργούνται με χρήση του ονόματος του τύπου. Ορισμένες γλώσσες χρησιμοποιούν τον όρο Εγγραφή ή τύποι δομής. Η Java χρησιμοποιεί τον όρο Κλάση (class). Κλάση Η αντικειμενοστρεφής έκδοση ενός σύνθετου τύπου αντικειμένων. Αυστηρά η ιδέα της κλάσης είναι υποσύνολο της ιδέας του σύνθετου τύπου δεδομένων, αλλά δεν έχουμε ακόμα αναφερθεί στα πολλά επιπλέον χαρακτηριστικά που έχει μία κλάση. Αντικείμενο Ένα στιγμιότυπο μίας κλάσης. Η κλάση μπορεί να θεωρηθεί ως ένα πρότυπο ένα μοντέλο για το αντικείμενο που περιγράφεται. Το αντικείμενο είναι αυτό που λαμβάνετε κάθε φορά που δημιουργείτε ένα στιγμιότυπο μίας κλάσης. Μέλος Ένα μέλος είναι ένα από τα στοιχεία που δημιουργούν το αντικείμενο. Ο όρος χρησιμοποιείται επίσης για τα στοιχεία της κλάσης που ορίζεται. Οι όροι μεταβλητή μέλος, μεταβλητή στιγμιοτύπου και πεδίο χρησιμοποιούνται χωρίς διάκριση. Αναφορά Στη Java, μία μεταβλητή που ορίζεται να έχει τύπο κλάσης δεν έχει στην πράξη τα δεδομένα για το αντικείμενο. Αντ αυτού η μεταβλητή είναι ένα μέσο αναγνώρισης ενός συγκεκριμένου αντικειμένου. Αυτού του είδους οι μεταβλητές ονομάζονται αναφορές. 11

2.9 Ασκήσεις 2.9.1. Επίπεδο 1: Δημιουργία μιας κλάσης Java και των αντικειμένων 1. Ένα σημείο μπορεί να χαρακτηριστεί από τις συντεταγμένες x και y. Ορίστε μία κλάση Java που θα ονομάσετε Point και η οποία αναπαριστά την ιδέα αυτή. Πώς θα πρέπει να ονομάσετε το αρχείο; 2. Γράψτε τη μέθοδο main(), μέσα στην κλάση σας και στη συνέχεια δηλώστε δύο μεταβλητές τύπου Point. Ονομάστε τις μεταβλητές start και end. Δημιουργήστε δύο αντικείμενα με χρήση της new Point() και θέστε τις τιμές αναφοράς στις μεταβλητές. 3. Αναθέστε στα μέλη x και y του αντικειμένου start την τιμή 10. 4. Αναθέστε στο x του end την τιμή 20, και στο y την τιμή 30. 5. Εκτυπώστε τις τιμές για αμφότερα τα μέλη κάθε ενός από τα αντικείμενα start και end. 6. Μεταγλωττίστε και εκτελέστε το πρόγραμμα. Για το βήμα 5 θα πρέπει να ξέρετε μερικά ακόμα πράγματα σχετικά με την κλάση System.out. Το System.out.println() με ένα όρισμα String παρουσιάζει στην έξοδο μία συμβολοσειρά και ξεκινά μία νέα γραμμή. Η System.out.print() δεν ξεκινά νέα γραμμή. Αν χρησιμοποιήσετε τη System.out.print() θα πρέπει μετά να καλέσετε είτε τη System.out.println είτε τη System.out.flush() πριν τερματίσετε την εφαρμογή ώστε να εμφανιστεί αλλαγή γραμμής. Για να παρουσιάσετε αριθμούς μπορείτε να χρησιμοποιήσετε την ακόλουθη μορφή, που θα δούμε στη συνέχεια: System.out.println( Start Point = X: + start.x + Y: + start.y); Σημείωση Το σύμβολο συν (+) μετατρέπει τον τελεσταίο σε String αν ο πρώτος είναι επίσης String. 2.9.2. Επίπεδο 2: Επιθεωρώντας μία ανάθεση αναφοράς Χρησιμοποιώντας την κλάση Point που δημιουργήσατε πριν προσθέστε κώδικα στη μέθοδο main() για να κάνει τα ακόλουθα: 1. Ορίστε μία νέα μεταβλητή τύπου Point με όνομα stray. Θέστε αυτή την τιμή αναφοράς στην υπάρχουσα μεταβλητή end. 2. Εκτυπώστε τις τιμές των μελών x και y αμφοτέρων των μεταβλητών end και stray. 3. Θέστε νέες τιμές σε αμφότερα τα x και y της stray. 4. Εκτυπώστε τις τιμές των μελών αμφοτέρων των end και stray. Μεταγλωττίστε και εκτελέστε την κλάση Point. Παρατηρήστε ότι οι τιμές που αναφέρονται στην end αντικατοπτρίζουν τις αλλαγές που έγιναν στην stray, δηλώνοντας ότι και οι δύο μεταβλητές αναφέρονται στο ίδιο αντικείμενο Point. 5. Θέστε νέες τιμές σε αμφότερα τα μέλη x και y της start. 12

6. Εκτυπώστε τις τιμές των μελών αμφοτέρων των start και end. Μεταγλωττίστε και εκτελέστε ξανά την κλάση Point. Παρατηρήστε αυτή τη φορά ότι οι τιμές του start είναι ανεξάρτητες αυτών των stray και end, πράγμα που δηλώνει ότι η μεταβλητή start συνεχίζει να αναφέρεται σε ένα αντικείμενο Point διακριτό από αυτό στο οποίο αναφέρονται οι stray και end. 13