Βασικά στοιχεία προγραµµατισµού στη JAVA. Επαναχρησιµοποίηση κώδικα Ονοµατολογία Χρήσιµες Βιβλιοθήκες (I/O) Προγραµµατιστικές συµβάσεις

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

HelloWorld. Παύλος Εφραιμίδης. Java Το πρόγραμμα HelloWorld 1

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

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

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

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

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

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

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

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

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

Σχηματίζοντας Γραφικές Παραστάσεις για Ημίτονο και Συνημίτονο και Ελέγχοντας Περιορισμούς σε Συστάδες Καρτών Τόμπολας

ΕΠΛ 131 Φροντιστήριο 2

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

API: Applications Programming Interface

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

> μεγαλύτερο <= μικρότερο ή ίσο < μικρότερο == ισότητα >= μεγαλύτερο ή ίσο!= διαφορετικό

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

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

ΕΠΛ Φροντιστήριο 3

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

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

Wrapper Classes, Abstract Classes and Interfaces

ΕΠΛ131 Είσοδος και Έξοδος (Input and Output)

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

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

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

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

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

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

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

ΕΠΛ233 ΠΛΗΡΟΦΟΡΙΑ ΤΥΠΟΥ. Type Information. Μ. Δικαιάκος

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

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

Σχεδιασµός, Εµφάνιση και Υφος

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

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

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

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

Γραφικά Περιβάλλοντα

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

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

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

Κλάσεις. Τροποποιητές, ιασυνδέσεις, Πακέτα. Τροποποιητές ελέγχου προσπέλασης µεταβλητών και µεθόδων

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

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

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

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

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

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

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

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

Πακέτα (Packages) Φωλιασμένες ή Εσωτερικές Κλάσεις (Inner Classes) Παναγιώτης Σφέτσος, PhD

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

5 Βιβλιοθήκες & Τεκµηρίωση

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Δοκιμή και Αποσφαλμάτωση Testing and Debugging

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

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

Πληρουορική Γ Γσμμασίοσ

Διαγράμματα Κλάσεων στη Σχεδίαση

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

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

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

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

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

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

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

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

Μεταγλώττιση και σύνδεση πολλαπλών αρχείων κώδικα. Προγραμματισμός II 1

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

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

Transcript:

Βασικά στοιχεία προγραµµατισµού στη JAVA Επαναχρησιµοποίηση κώδικα Ονοµατολογία Χρήσιµες Βιβλιοθήκες (I/O) Προγραµµατιστικές συµβάσεις

Επαναχρησιµοποίηση Κώδικα Application Programming Interfaces (APIs) Βιβλιοθήκες

Επαναχρησιμοποίηση κλάσεων Μ. Δικαιάκος Όταν θέλουμε να επαναχρησιμοποιήσουμε υπάρχουσες κλάσεις, ο μεταγλωττιστής θα πρέπει να μπορεί να τις αναζητήσει και να τις βρεί. Όταν ο πηγαίος κώδικας της επαναχρησιμοποιούμενης κλάσης βρίσκεται στο αρχείο μας, το πρόβλημα είναι απλό (no forward referencing problem στην Java). Επίσης, μπορούμε εύκολα να επαναχρησιμοποιήσουμε κλάσεις που βρίσκονται τοποθετημένες στον ίδιο κατάλογο με τον κώδικά μας Για την «ενσωμάτωση» εξωτερικών κλάσεων χρησιμοποιούμε την εντολή import, με την οποία λέμε στον μεταφραστή να ενσωματώσει μια κλάση ή ένα «πακέτο» (package), δηλ. μια βιβλιοθήκη κλάσεων. Π.χ.: import java.util.arraylist; import java.util.*; 3

4 Προγραμματιστική Διαπροσωπεία Εφαρμογών

4 Προγραμματιστική Διαπροσωπεία Εφαρμογών H Προγραμματιστική Διαπροσωπεία Εφαρμογών της JAVA (JAVA API - Application Programming Interface) αποτελείται από μια μεγάλη συλλογή έτοιμων δομοστοιχείων λογισμικού, τα οποία υλοποιούν διάφορες χρήσιμες λειτουργικότητες.

4 Προγραμματιστική Διαπροσωπεία Εφαρμογών H Προγραμματιστική Διαπροσωπεία Εφαρμογών της JAVA (JAVA API - Application Programming Interface) αποτελείται από μια μεγάλη συλλογή έτοιμων δομοστοιχείων λογισμικού, τα οποία υλοποιούν διάφορες χρήσιμες λειτουργικότητες. Το ΑΡΙ είναι οργανωμένο σε λογικές συλλογές (βιβλιοθήκες) κλάσεων και διαπροσωπειών, οι οποίες, στην ορολογία της JAVA, αποκαλούνται πακέτα (packages).

4 Προγραμματιστική Διαπροσωπεία Εφαρμογών H Προγραμματιστική Διαπροσωπεία Εφαρμογών της JAVA (JAVA API - Application Programming Interface) αποτελείται από μια μεγάλη συλλογή έτοιμων δομοστοιχείων λογισμικού, τα οποία υλοποιούν διάφορες χρήσιμες λειτουργικότητες. Το ΑΡΙ είναι οργανωμένο σε λογικές συλλογές (βιβλιοθήκες) κλάσεων και διαπροσωπειών, οι οποίες, στην ορολογία της JAVA, αποκαλούνται πακέτα (packages). Πληροφορίες για τον ορισμό των κλάσεων που υπάρχουν στις βιβλιοθήκες της Java, μπορούν να βρεθούν στα εγχειρίδια χρήσης της γλώσσας, που υπάρχουν σε μορφή HTML:

4 Προγραμματιστική Διαπροσωπεία Εφαρμογών H Προγραμματιστική Διαπροσωπεία Εφαρμογών της JAVA (JAVA API - Application Programming Interface) αποτελείται από μια μεγάλη συλλογή έτοιμων δομοστοιχείων λογισμικού, τα οποία υλοποιούν διάφορες χρήσιμες λειτουργικότητες. Το ΑΡΙ είναι οργανωμένο σε λογικές συλλογές (βιβλιοθήκες) κλάσεων και διαπροσωπειών, οι οποίες, στην ορολογία της JAVA, αποκαλούνται πακέτα (packages). Πληροφορίες για τον ορισμό των κλάσεων που υπάρχουν στις βιβλιοθήκες της Java, μπορούν να βρεθούν στα εγχειρίδια χρήσης της γλώσσας, που υπάρχουν σε μορφή HTML: JDK6 Documentation

4 Προγραμματιστική Διαπροσωπεία Εφαρμογών H Προγραμματιστική Διαπροσωπεία Εφαρμογών της JAVA (JAVA API - Application Programming Interface) αποτελείται από μια μεγάλη συλλογή έτοιμων δομοστοιχείων λογισμικού, τα οποία υλοποιούν διάφορες χρήσιμες λειτουργικότητες. Το ΑΡΙ είναι οργανωμένο σε λογικές συλλογές (βιβλιοθήκες) κλάσεων και διαπροσωπειών, οι οποίες, στην ορολογία της JAVA, αποκαλούνται πακέτα (packages). Πληροφορίες για τον ορισμό των κλάσεων που υπάρχουν στις βιβλιοθήκες της Java, μπορούν να βρεθούν στα εγχειρίδια χρήσης της γλώσσας, που υπάρχουν σε μορφή HTML: JDK6 Documentation http://java.sun.com/javase/6/docs/index.html

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

6 Το API της μαθηματικής βιβλιοθήκης

7 Ένα πρόγραμμα σε Java // Property.java import java.util.*; // java.util.date public class Property { public static void main(string[] args) { System.out.println(new Date()); Properties p = System.getProperties(); p.list(system.out); System.out.println( -- Memory usage: ); Runtime rt = Runtime.getRuntime(); System.out.println( Total Memory = + rt.totalmemory() + Free Memory = + rt.freememory()); } }

8 Πληροφορίες για κλάσεις

8 Πληροφορίες για κλάσεις getproperies(): στατική μέθοδος της κλάσης System. Επιστρέφει χειριστήριο για ένα αντικείμενο της κλάσης Properties.

Πληροφορίες για κλάσεις getproperies(): στατική μέθοδος της κλάσης System. Επιστρέφει χειριστήριο για ένα αντικείμενο της κλάσης Properties. Η κλάση Properties διαθέτει μια μέθοδο list(), η οποία στέλνει τα περιεχόμενα τού αντικειμένου σε ένα αντικείμενο System.out Μ. Δικαιάκος 8

Πληροφορίες για κλάσεις getproperies(): στατική μέθοδος της κλάσης System. Επιστρέφει χειριστήριο για ένα αντικείμενο της κλάσης Properties. Η κλάση Properties διαθέτει μια μέθοδο list(), η οποία στέλνει τα περιεχόμενα τού αντικειμένου σε ένα αντικείμενο System.out Υπερφόρτωση τελεστή + Μ. Δικαιάκος 8

Πληροφορίες για κλάσεις getproperies(): στατική μέθοδος της κλάσης System. Επιστρέφει χειριστήριο για ένα αντικείμενο της κλάσης Properties. Η κλάση Properties διαθέτει μια μέθοδο list(), η οποία στέλνει τα περιεχόμενα τού αντικειμένου σε ένα αντικείμενο System.out Υπερφόρτωση τελεστή + Αυτόματη μετατροπή τύπου Μ. Δικαιάκος 8

9

10

11

Διαχείριση Ονοµάτων Πώς αποφεύγουµε συγκρούσεις ανάµεσα σε δύο ονόµατα (µεθόδων, µεταβλητών, πεδίων δεδοµένων...);

13 Ορατότητα Ονομάτων (name visibility)

13 Ορατότητα Ονομάτων (name visibility) Αποφυγή συγκρούσεων ονομάτων:

13 Ορατότητα Ονομάτων (name visibility) Αποφυγή συγκρούσεων ονομάτων: Μέθοδοι και πεδία δεδομένων είναι πάντοτε φωλιασμένα σε κλάσεις και καλούνται μέσω του ονόματος αντικειμένων.

13 Ορατότητα Ονομάτων (name visibility) Αποφυγή συγκρούσεων ονομάτων: Μέθοδοι και πεδία δεδομένων είναι πάντοτε φωλιασμένα σε κλάσεις και καλούνται μέσω του ονόματος αντικειμένων. Επομένως, δεν υπάρχει περίπτωση σύγκρουσης με ονόματα μεθόδων ή πεδίων δεδομένων άλλων κλάσεων.

13 Ορατότητα Ονομάτων (name visibility) Αποφυγή συγκρούσεων ονομάτων: Μέθοδοι και πεδία δεδομένων είναι πάντοτε φωλιασμένα σε κλάσεις και καλούνται μέσω του ονόματος αντικειμένων. Επομένως, δεν υπάρχει περίπτωση σύγκρουσης με ονόματα μεθόδων ή πεδίων δεδομένων άλλων κλάσεων. Τι συμβαίνει με τα ονόματα των κλάσεων;

13 Ορατότητα Ονομάτων (name visibility) Αποφυγή συγκρούσεων ονομάτων: Μέθοδοι και πεδία δεδομένων είναι πάντοτε φωλιασμένα σε κλάσεις και καλούνται μέσω του ονόματος αντικειμένων. Επομένως, δεν υπάρχει περίπτωση σύγκρουσης με ονόματα μεθόδων ή πεδίων δεδομένων άλλων κλάσεων. Τι συμβαίνει με τα ονόματα των κλάσεων; Η JAVA εισάγει μια σύμβαση σύμφωνα με την οποία κάθε αρχείο Java αντιστοιχεί αυτόματα σε έναν δικό του χώρο ονομάτων (name space) και κάθε κλάση μέσα στο αρχείο δέχεται αυτόματα μια μοναδική ταυτότητα (identifier).

13 Ορατότητα Ονομάτων (name visibility) Αποφυγή συγκρούσεων ονομάτων: Μέθοδοι και πεδία δεδομένων είναι πάντοτε φωλιασμένα σε κλάσεις και καλούνται μέσω του ονόματος αντικειμένων. Επομένως, δεν υπάρχει περίπτωση σύγκρουσης με ονόματα μεθόδων ή πεδίων δεδομένων άλλων κλάσεων. Τι συμβαίνει με τα ονόματα των κλάσεων; Η JAVA εισάγει μια σύμβαση σύμφωνα με την οποία κάθε αρχείο Java αντιστοιχεί αυτόματα σε έναν δικό του χώρο ονομάτων (name space) και κάθε κλάση μέσα στο αρχείο δέχεται αυτόματα μια μοναδική ταυτότητα (identifier). Για την αποφυγή συγκρούσεων ανάμεσα σε ομώνυμες κλάσεις διαφορετικών προγραμματιστών, κάθε προγραμματιστής μπορεί να επιδιώκει την χρήση μοναδικών ονομάτων. Π.χ.: cy.ac.ucy.cs.mdd.utility

14 Κανόνες προτεραιότητας ονομάτων

14 Κανόνες προτεραιότητας ονομάτων import java.util.*;

14 Κανόνες προτεραιότητας ονομάτων import java.util.*; public class Test {

14 Κανόνες προτεραιότητας ονομάτων import java.util.*; public class Test { public static void main(string[] args) {

14 Κανόνες προτεραιότητας ονομάτων import java.util.*; public class Test { public static void main(string[] args) { Random rand = new Random();

14 Κανόνες προτεραιότητας ονομάτων import java.util.*; public class Test { public static void main(string[] args) { Random rand = new Random(); int j = rand.nextint() % 100;}}

14 Κανόνες προτεραιότητας ονομάτων import java.util.*; public class Test { public static void main(string[] args) { Random rand = new Random(); int j = rand.nextint() % 100;}} Πού ορίζεται η κλάση Random;

14 Κανόνες προτεραιότητας ονομάτων import java.util.*; public class Test { public static void main(string[] args) { Random rand = new Random(); int j = rand.nextint() % 100;}} Πού ορίζεται η κλάση Random; Τι συμβαίνει στο ακόλουθο;

14 Κανόνες προτεραιότητας ονομάτων import java.util.*; public class Test { public static void main(string[] args) { Random rand = new Random(); int j = rand.nextint() % 100;}} Πού ορίζεται η κλάση Random; Τι συμβαίνει στο ακόλουθο; import java.util.*;

14 Κανόνες προτεραιότητας ονομάτων import java.util.*; public class Test { public static void main(string[] args) { Random rand = new Random(); int j = rand.nextint() % 100;}} Πού ορίζεται η κλάση Random; Τι συμβαίνει στο ακόλουθο; import java.util.*; public class Random {

14 Κανόνες προτεραιότητας ονομάτων import java.util.*; public class Test { public static void main(string[] args) { Random rand = new Random(); int j = rand.nextint() % 100;}} Πού ορίζεται η κλάση Random; Τι συμβαίνει στο ακόλουθο; import java.util.*; public class Random { int nextint() { return 0; }

14 Κανόνες προτεραιότητας ονομάτων import java.util.*; public class Test { public static void main(string[] args) { Random rand = new Random(); int j = rand.nextint() % 100;}} Πού ορίζεται η κλάση Random; Τι συμβαίνει στο ακόλουθο; import java.util.*; public class Random { int nextint() { return 0; } }

14 Κανόνες προτεραιότητας ονομάτων import java.util.*; public class Test { public static void main(string[] args) { Random rand = new Random(); int j = rand.nextint() % 100;}} Πού ορίζεται η κλάση Random; Τι συμβαίνει στο ακόλουθο; import java.util.*; public class Random { int nextint() { return 0; } } public class Test {

14 Κανόνες προτεραιότητας ονομάτων import java.util.*; public class Test { public static void main(string[] args) { Random rand = new Random(); int j = rand.nextint() % 100;}} Πού ορίζεται η κλάση Random; Τι συμβαίνει στο ακόλουθο; import java.util.*; public class Random { int nextint() { return 0; } } public class Test { public static void main(string[] args) {

14 Κανόνες προτεραιότητας ονομάτων import java.util.*; public class Test { public static void main(string[] args) { Random rand = new Random(); int j = rand.nextint() % 100;}} Πού ορίζεται η κλάση Random; Τι συμβαίνει στο ακόλουθο; import java.util.*; public class Random { int nextint() { return 0; } } public class Test { public static void main(string[] args) { Random rand = new Random();

14 Κανόνες προτεραιότητας ονομάτων import java.util.*; public class Test { public static void main(string[] args) { Random rand = new Random(); int j = rand.nextint() % 100;}} Πού ορίζεται η κλάση Random; Τι συμβαίνει στο ακόλουθο; import java.util.*; public class Random { int nextint() { return 0; } } public class Test { public static void main(string[] args) { Random rand = new Random(); int j = rand.nextint() % 100;

Κανόνες προτεραιότητας ονομάτων import java.util.*; public class Test { public static void main(string[] args) { Random rand = new Random(); int j = rand.nextint() % 100;}} Πού ορίζεται η κλάση Random; Τι συμβαίνει στο ακόλουθο; import java.util.*; public class Random { int nextint() { return 0; } } public class Test { public static void main(string[] args) { Random rand = new Random(); int j = rand.nextint() % 100; }} Μ. Δικαιάκος 14

15 Ονοματολογία Κλάσεων και Μεθόδων import java.util.*; class Random { int nextint() { return 0; } } public class Test { public static void main(string[] args) { java.util.random rand = new java.util.random(); int j = rand.nextint() % 100; } }

Βιβλιοθήκες Εισόδου/Εξόδου

17

18

19 Λίγα λόγια για την StdDraw line(x0, y0, x1, y1) τραβάει μια γραμμή από το (x0,y0) στο (x1,y1) προκαθορισμένη κλίμακα: μοναδιαίο τετράγωνο: συντεταγμένες σημείων μεταξύ (0,0) και (1,1) προκαθορισμένη συμπεριφορά: η απεικόνιση των σχεδίων σας γίνεται σε παράθυρο με μαύρο χρώμα σε άσπρο παρασκήνιο point(x,y) απεικονίζει ένα σημείο στις συντεταγμένες (x,y)

20 Παράδειγμα αʼ Σχεδιάστε ένα ισόπλευρο τρίγωνο με μήκος ακμής 1 και με μια τελεία στο εσωτερικό του: (0.5, sqrt(3)/2) (0,0) (0,1)

21 Ο κώδικας } public class Triangle { public static void main(string[] args) { double t = Math.sqrt(3.0) / 2.0; StdDraw.line(0.0, 0.0, 1.0, 0.0); StdDraw.line(1.0, 0.0, 0.5, t); StdDraw.line(0.5, t, 0.0, 0.0); StdDraw.point(0.5, t/3.0); }

Παράδειγμα βʼ Διάβασε ένα σύνολο από συντεταγμένες σημείων και απεικόνισέ τα στο επίπεδο public class PlotFilter { public static void main(string[] args) { // read in bounding box and rescale double x0 = StdIn.readDouble(); double y0 = StdIn.readDouble(); double x1 = StdIn.readDouble(); double y1 = StdIn.readDouble(); StdDraw.setXscale(x0, x1); StdDraw.setYscale(y0, y1); } Μ. Δικαιάκος // plot points, one at a time while (!StdIn.isEmpty()) { double x = StdIn.readDouble(); double y = StdIn.readDouble(); StdDraw.point(x, y); } 22

Παράδειγμα βʼ Διάβασε ένα σύνολο από συντεταγμένες σημείων και απεικόνισέ τα στο επίπεδο public class PlotFilter { public static void main(string[] args) { // read in bounding box and rescale double x0 = StdIn.readDouble(); double y0 = StdIn.readDouble(); double x1 = StdIn.readDouble(); double y1 = StdIn.readDouble(); StdDraw.setXscale(x0, x1); StdDraw.setYscale(y0, y1); } Μ. Δικαιάκος // plot points, one at a time while (!StdIn.isEmpty()) { double x = StdIn.readDouble(); double y = StdIn.readDouble(); StdDraw.point(x, y); } 22

23 Παράδειγμα γʼ

23 Παράδειγμα γʼ Χρησιμοποιείστε την κλάση StdDraw για να κάνετε τη γραφική παράσταση της συνάρτησης: y = sin(4x) + sin(20x) στο διάστημα (0, π) Ωστόσο: στο διάστημα αυτό υπάρχουν άπειρα σημεία... Λύση: Δειγματοληψία: υπολογίζουμε τη συνάρτηση για πεπερασμένο αριθμό σημείων Γραμμική προσέγγιση: ενώνουμε τα σημεία της γραφικής παράστασης με ευθύγραμμα τμήματα

23 Παράδειγμα γʼ Χρησιμοποιείστε την κλάση StdDraw για να κάνετε τη γραφική παράσταση της συνάρτησης: y = sin(4x) + sin(20x) στο διάστημα (0, π) Ωστόσο: στο διάστημα αυτό υπάρχουν άπειρα σημεία... Λύση: Δειγματοληψία: υπολογίζουμε τη συνάρτηση για πεπερασμένο αριθμό σημείων Γραμμική προσέγγιση: ενώνουμε τα σημεία της γραφικής παράστασης με ευθύγραμμα τμήματα

23 Παράδειγμα γʼ Χρησιμοποιείστε την κλάση StdDraw για να κάνετε τη γραφική παράσταση της συνάρτησης: y = sin(4x) + sin(20x) στο διάστημα (0, π) Ωστόσο: στο διάστημα αυτό υπάρχουν άπειρα σημεία... Λύση: Δειγματοληψία: υπολογίζουμε τη συνάρτηση για πεπερασμένο αριθμό σημείων Γραμμική προσέγγιση: ενώνουμε τα σημεία της γραφικής παράστασης με ευθύγραμμα τμήματα

23 Παράδειγμα γʼ Χρησιμοποιείστε την κλάση StdDraw για να κάνετε τη γραφική παράσταση της συνάρτησης: y = sin(4x) + sin(20x) στο διάστημα (0, π) Ωστόσο: στο διάστημα αυτό υπάρχουν άπειρα σημεία... Λύση: Δειγματοληψία: υπολογίζουμε τη συνάρτηση για πεπερασμένο αριθμό σημείων Γραμμική προσέγγιση: ενώνουμε τα σημεία της γραφικής παράστασης με ευθύγραμμα τμήματα

23 Παράδειγμα γʼ Χρησιμοποιείστε την κλάση StdDraw για να κάνετε τη γραφική παράσταση της συνάρτησης: y = sin(4x) + sin(20x) στο διάστημα (0, π) Ωστόσο: στο διάστημα αυτό υπάρχουν άπειρα σημεία... Λύση: Δειγματοληψία: υπολογίζουμε τη συνάρτηση για πεπερασμένο αριθμό σημείων Γραμμική προσέγγιση: ενώνουμε τα σημεία της γραφικής παράστασης με ευθύγραμμα τμήματα

23 Παράδειγμα γʼ Χρησιμοποιείστε την κλάση StdDraw για να κάνετε τη γραφική παράσταση της συνάρτησης: y = sin(4x) + sin(20x) στο διάστημα (0, π) Ωστόσο: στο διάστημα αυτό υπάρχουν άπειρα σημεία... Λύση: Δειγματοληψία: υπολογίζουμε τη συνάρτηση για πεπερασμένο αριθμό σημείων Γραμμική προσέγγιση: ενώνουμε τα σημεία της γραφικής παράστασης με ευθύγραμμα τμήματα

23 Παράδειγμα γʼ Χρησιμοποιείστε την κλάση StdDraw για να κάνετε τη γραφική παράσταση της συνάρτησης: y = sin(4x) + sin(20x) στο διάστημα (0, π) Ωστόσο: στο διάστημα αυτό υπάρχουν άπειρα σημεία... Λύση: Δειγματοληψία: υπολογίζουμε τη συνάρτηση για πεπερασμένο αριθμό σημείων Γραμμική προσέγγιση: ενώνουμε τα σημεία της γραφικής παράστασης με ευθύγραμμα τμήματα

23 Παράδειγμα γʼ Χρησιμοποιείστε την κλάση StdDraw για να κάνετε τη γραφική παράσταση της συνάρτησης: y = sin(4x) + sin(20x) στο διάστημα (0, π) Ωστόσο: στο διάστημα αυτό υπάρχουν άπειρα σημεία... Λύση: Δειγματοληψία: υπολογίζουμε τη συνάρτηση για πεπερασμένο αριθμό σημείων Γραμμική προσέγγιση: ενώνουμε τα σημεία της γραφικής παράστασης με ευθύγραμμα τμήματα

23 Παράδειγμα γʼ Χρησιμοποιείστε την κλάση StdDraw για να κάνετε τη γραφική παράσταση της συνάρτησης: y = sin(4x) + sin(20x) στο διάστημα (0, π) Ωστόσο: στο διάστημα αυτό υπάρχουν άπειρα σημεία... Λύση: Δειγματοληψία: υπολογίζουμε τη συνάρτηση για πεπερασμένο αριθμό σημείων Γραμμική προσέγγιση: ενώνουμε τα σημεία της γραφικής παράστασης με ευθύγραμμα τμήματα

23 Παράδειγμα γʼ Χρησιμοποιείστε την κλάση StdDraw για να κάνετε τη γραφική παράσταση της συνάρτησης: y = sin(4x) + sin(20x) στο διάστημα (0, π) Ωστόσο: στο διάστημα αυτό υπάρχουν άπειρα σημεία... Λύση: Δειγματοληψία: υπολογίζουμε τη συνάρτηση για πεπερασμένο αριθμό σημείων Γραμμική προσέγγιση: ενώνουμε τα σημεία της γραφικής παράστασης με ευθύγραμμα τμήματα

23 Παράδειγμα γʼ Χρησιμοποιείστε την κλάση StdDraw για να κάνετε τη γραφική παράσταση της συνάρτησης: y = sin(4x) + sin(20x) στο διάστημα (0, π) Ωστόσο: στο διάστημα αυτό υπάρχουν άπειρα σημεία... Λύση: Δειγματοληψία: υπολογίζουμε τη συνάρτηση για πεπερασμένο αριθμό σημείων Γραμμική προσέγγιση: ενώνουμε τα σημεία της γραφικής παράστασης με ευθύγραμμα τμήματα

23 Παράδειγμα γʼ Χρησιμοποιείστε την κλάση StdDraw για να κάνετε τη γραφική παράσταση της συνάρτησης: y = sin(4x) + sin(20x) στο διάστημα (0, π) Ωστόσο: στο διάστημα αυτό υπάρχουν άπειρα σημεία... Λύση: Δειγματοληψία: υπολογίζουμε τη συνάρτηση για πεπερασμένο αριθμό σημείων Γραμμική προσέγγιση: ενώνουμε τα σημεία της γραφικής παράστασης με ευθύγραμμα τμήματα

23 Παράδειγμα γʼ Χρησιμοποιείστε την κλάση StdDraw για να κάνετε τη γραφική παράσταση της συνάρτησης: y = sin(4x) + sin(20x) στο διάστημα (0, π) Ωστόσο: στο διάστημα αυτό υπάρχουν άπειρα σημεία... Λύση: Δειγματοληψία: υπολογίζουμε τη συνάρτηση για πεπερασμένο αριθμό σημείων Γραμμική προσέγγιση: ενώνουμε τα σημεία της γραφικής παράστασης με ευθύγραμμα τμήματα

24 public class FunctionGraph { public static void main(string[] args) { } } // number of line segments to plot int N = Integer.parseInt(args[0]); // the function y = sin(4x) + sin(20x), sampled at N points // between x = 0 and x = pi double[] a = new double[n+1]; for (int i = 0; i <= N; i++) { a[i] = Math.sin(4*Math.PI*i/N) + Math.sin(20*Math.PI*i/N); } // rescale the coordinate system StdDraw.setXscale(0, N); StdDraw.setYscale(-2.0, +2.0); // plot the approximation to the function for (int i = 0; i < N; i++) { StdDraw.line(i, a[i], i+1, a[i+1]); }

25 Άσκηση για το σπίτι Χρησιμοποιείστε την StdDraw για να απεικονίσετε: ένα ισόπλευρο τρίγωνο εγγεγραμμένο σε κύκλο τον κύκλο το κέντρο του κύκλου

26 Έλεγχος στη StdDraw setxscale(x0, x1), setyscale(y0,y1) αλλάζουν τις κλίμακες των αξόνων συντεταγμένων από (0,1) σε (x0,x1) και (y0,y1), αντίστοιχα το σημείο (x0,y0) αντιστοιχεί στην κάτω αριστερά γωνία του καμβά μας. setpenradius(r) αλλάζει το μέγεθος της ακίδας του νοητού μολυβιού με το οποίο σχεδιάζονται οι γραμμές, σε r

27 Σχήματα στη StdDraw Η StdDraw υποστηρίζει την απεικόνιση σχημάτων (κύκλων, ορθωγώνιων, πολυγώνων) Ένα σχήμα ορίζεται από το περίγραμμά του Μέθοδοι των οποίων το όνομα ξεκινάει με filled, το εσωτερικό του σχήματος είναι διαφορετικό από το παρασκήνιο

28 Παράδειγμα σχημάτων στη StdDraw

29 StdDraw: χρώμα και κίνηση

Παράδειγμα δʼ: ελαστική σφαίρα Μ. Δικαιάκος Απεικονίστε μια ελαστική σφαίρα, η οποία κινείται με ταχύτητα (vx,vy), ξεκινώντας από μια αρχική θέση (rx, ry) Αλγόριθμος: Υπολόγισε τη νέα θέση της σφαίρας Καθάρισε τον καμβά Απεικόνισε τη σφαίρα στη νέα της θέση Περίμενε για λίγο διάστημα Επανάλαβε για έναν αριθμό βημάτων ώστε να δοθεί η αίσθηση της κίνησης της σφαίρας Υπολογισμός νέας θέσης: x t+1 = xt + vx, όπου x0 = rx y t+1 = yt + vx, όπου y0 = ry Τι συμβαίνει όταν χτυπήσουμε τοίχο; 30

public class BouncingBall { public static void main(string[] args) { // set the scale of the coordinate system StdDraw.setXscale(-1.0, 1.0); StdDraw.setYscale(-1.0, 1.0); // initial values double rx = 0.480, ry = 0.860; // position double vx = 0.005, vy = 0.003; // velocity double radius = 0.05; // radius // main animation loop while (true) { // bounce off wall according to law of elastic collision if (Math.abs(rx + vx) > 1.0 - radius) vx = -vx; if (Math.abs(ry + vy) > 1.0 - radius) vy = -vy; // update position rx = rx + vx; ry = ry + vy; // clear the background StdDraw.setPenColor(StdDraw.GRAY); StdDraw.filledSquare(0, 0, 1.0); // draw ball on the screen StdDraw.setPenColor(StdDraw.BLACK); StdDraw.filledCircle(rx, ry, radius); // display and pause for 20 ms StdDraw.show(20); } } } 31

32 StdDraw: αλληλεπίδραση με χρήστη double mousex() επιστρέφει την x συντεταγμένη του μυός double mousey() επιστρέφει την y συντεταγμένη του ποντικιού boolean mousepressed() επιστρέφει τιμή αληθή αν πιέσουμε το ποντίκι

33 Χρήση βιβλιοθηκών Κατεβάστε τα αρχεία JAVA που υλοποιούν τις StdIn, StdOut και StdDraw από το Διαδίκτυο: http://www.cs.princeton.edu/introcs/stdlib/stdin.java http://www.cs.princeton.edu/introcs/stdlib/stdout.java http://www.cs.princeton.edu/introcs/stdlib/stddraw.java Τοποθετείστε τα τρία αυτά αρχεία στον κατάλογο στον οποίο κρατάτε τα προγράμματα JAVA που δημιουργείτε. Εισάγετε τα αρχεία αυτά στο περιβάλλον του Eclipse. Χρησιμοποιείστε μέσα από το Eclipse την εντολή javadoc για να δημιουργηθούν τα εγχειρίδια χρήσης των κλάσεων StdIn, StdOut, StdDraw Είστε έτοιμοι!

Προγραµµατιστικές Συµβάσεις τής SUN για την JAVA

35 Λόγοι Υιοθέτησης Συμβάσεων Οι προγραμματιστικές συμβάσεις είναι σημαντικές για μια σειρά λόγων: 80% του χρόνου κωδικοποίησης ενός προγράμματος αφορά στην συντήρησή του. Σπάνια κάποιο λογισμικό συντηρείται από τον αρχικό προγραμματιστή. Προγραμματιστικές συμβάσεις βελτιώνουν την αναγνωσιμότητα του λογισμικού και διευκολύνουν τους προγραμματιστές να κατανοούν τα προγράμματα πιό γρήγορα και καλύτερα. Αν ο πηγαίος κώδικά σας πρόκειται να κυκλοφορήσει σαν προϊόν,θα πρέπει να είναι οργανωμένος και γραμμένος καθαρά.

36 Οργάνωση Αρχείων JAVA Ένα αρχείο αποτελείται από τμήματα, τα οποία πρέπει να διαχωρίζονται με κενές γραμμές και προαιρετικά σχόλια περιγραφής του κάθε σχήματος. Αρχεία μεγαλύτερα από 2000 γραμμές είναι δυσανάγνωστα και πρέπει να αποφεύγονται. Κάθε αρχείο Java περιέχει μια μόνο δημόσια κλάση ή διαπροσωπεία. Όταν υπάρχουν ιδιωτικές κλάσεις ή διαπροσωπείες που σχετίζονται με την δημόσια κλάση, αυτές μπορούν να συμπεριληφθούν στο αρχείο της δημόσιας κλάσης, αλλά μετά τον ορισμό της. Τα αρχεία της Java έχουν την ακόλουθη δομή: Στην αρχή υπάρχουν σχόλια. Ακολουθούν εντολές πακέτων (package)και εισαγωγών (import). Δηλώσεις κλάσεων και διαπροσωπειών.

Αρχικά Σχόλια Αρχείων Java /* * Classname * * Version information * * Date * * Copyright notice */ Μ. Δικαιάκος 37

Εντολές Πακέτων και Εντολών Εισαγωγής Η πρώτη εντολή στα περισσότερα αρχεία Java αφορά στον ορισμό της βιβλιοθήκης (package) στην οποία ανήκουν οι κλάσεις του αρχείου. Ακολουθούν εντολές ενσωμάτωσης υπαρχουσών βιβλιοθηκών. Π.χ.: package java.awt; import java.awt.peer.canvaspeer; Μ. Δικαιάκος 38

39 Δηλώσεις Κλάσεων και Διαπροσωπειών Σύμφωνα με την σύμβαση της Sun, η δήλωση μιας κλάσης περιλαμβάνει: 1. Σχόλιο για την αποδελτίωση (documentation) της κλάσης ή διαπροσωπείας 2. Δήλωση κλάσης ή διαπροσωπείας. 3. Αν χρειάζεται, σχόλιο σχετικά με την υλοποίηση της κλάσης ή της διαπροσωπείας. 4. Ορισμούς μεταβλητών κλάσης (στατικών), με πρώτες τις public, ακολουθούμενες από τις protected, τις μη καθοριζόμενης πρόσβασης και τις private. 5. Ορισμούς μεταβλητών στιγμιοτύπου (instance variables), με την ίδια σειρά όπως και οι στατικές. 6. Κατασκευαστές (constructors) 7. Μέθοδοι

40 Παράδειγμα αρχείου Java package java.blah; import java.blah.blahdy.blahblah; /** * Class description goes here. * * @version 1.82 18 Mar 1999 * @author Firstname Lastname */ public class Blah extends SomeClass { /* A class implementation comment can go here. */

41 Παράδειγμα αρχείου Java (συνέχεια) /** classvar1 documentation comment */ public static int classvar1; /** * classvar2 documentation comment that happens to be * more than one line long */ private static Object classvar2; /** instancevar1 documentation comment */ public Object instancevar1; /** instancevar2 documentation comment */ protected int instancevar2; /** instancevar3 documentation comment */ private Object[] instancevar3; /** *...constructor Blah documentation comment... */ public Blah() { //...implementation goes here... }

Παράδειγμα αρχείου Java (συνέχεια) /** *...method dosomething documentation comment... */ public void dosomething() { //...implementation goes here... } /** *...method dosomethingelse documentation comment... * @param someparam description */ public void dosomethingelse(object someparam) { //...implementation goes here... } } Μ. Δικαιάκος 42

Συμβάσεις Σχολίων: Γενικές Αρχές Δύο ειδών σχόλια: Υλοποίησης, που περιλαμβάνονται ανάμεσα σε /*...*/, ή έπονται του // Αποδελτίωσης (documentation ή "doc comments"), που περιλαμβάνονται ανάμεσα σε /**...*/. Τα σχόλια αποδελτίωσης, μπορούν να εξαχθούν αυτόματα σε εγχειρίδια HTML μορφότυπου, με χρήση του εργαλείου javadoc. Τα σχόλια υλοποίησης χρησιμεύουν για τον αποκλεισμό κώδικα σε σχόλιο, ή τον σχολιασμό υλοποίησης. Τα σχόλια αποδελτίωσης στοχεύουν στην καταγραφή των προδιαγραφών του κώδικα (code specification), ανεξάρτητα της υλοποίησης. Γενικά, τα σχόλια αποσκοπούν στην παράθεση επεξηγήσεων σχετικά με τον κώδικα για πράγματα που δεν είναι φανερά από τον κώδικα τον ίδιο. Πάρα πολλά επεξηγηματικά σχόλια υποδηλώνουν συνήθως κακή σχεδίαση του κώδικα. 43

44 Σχόλια Αποδελτίωσης (doc comments) Χρησιμεύουν στην αυτόματη αποδελτίωση σε εγχειρίδιο HTML από το εργαλείο javadoc. Περιλαμβάνονται μεταξύ χαρακτήρων /**...*/, με ένα σχόλιο για κάθε κλάση, διαπροσωπεία ή μέθοδο-μέλος κλάσης και πρέπει να εµφανίζονται ακριβώς πριν την δήλωση για την αποδελτίωση της οποίας εισάγονται: /** * The Example class provides... */ public class Example {... Ακολουθούν την στοίχιση της δήλωσης της οποίας προηγούνται. Σχόλια αποδελτίωσης δεν πρέπει να τοποθετούνται μέσα στο σώμα μιας μεθόδου.

Σχόλια Αποδελτίωσης (συνέχεια) Μπορούν να περιλαμβάνουν σημαντήρες (tags) @see, οι οποίοι επιτρέπουν την παραπομπή σε άλλα τμήματα των εγχειριδίων HTML, τα οποία δημιουργούνται από το javadoc. Άλλοι χρησιμοποιούμενοι σημαντήρες είναι οι ακόλουθοι: @version @author author-information @since @param parameter-name description @return description @throws Μ. Δικαιάκος 45

Μ. Δικαιάκος Συμβάσεις Ονοματολογίας Κλάσεις: Class names should be nouns, in mixed case with the first letter of each internal word capitalized. Try to keep simple and descriptive. Use whole words-avoid acronyms and abbreviations. Διαπροσωπείες: Interface names should be capitalized like class names. Μέθοδοι: Methods should be verbs, in mixed case with the first letter lowercase, with the first letter of each internal word capitalized. Μεταβλητές: Except for variables, all instance, class, and class constants are in mixed case with a lowercase first letter. Internal words start with capital letters. Variable names should not start with underscore _ or dollar sign $ characters, even though both are allowed. Variable names should be short yet meaningful. The choice of a variable name should be mnemonic- that is, designed to indicate to the casual observer the intent of its use. One-character variable names should be avoided except for temporary "throwaway" variables. Common names for temporary variables are i, j, k, m, and n for integers; c, d, and e for characters. Σταθερές: The names of variables declared class constants and of ANSI constants should be all uppercase with words separated by underscores ("_"). (ANSI constants should be avoided, for ease of debugging.) 46

47