Εναρξη Μαθήµατος. Κατανεµηµένα Συστήµατα ΙΙ Μάθηµα Ελεύθερης Επιλογής, Εαρινού Εξαµήνου Τοµέας Εφαρµογών και Θεµελιώσεων.

Σχετικά έγγραφα
Εναρξη Μαθήµατος. Κατανεµηµένα Συστήµατα ΙΙ Μάθηµα Ελεύθερης Επιλογής, Εαρινού Εξαµήνου Τοµέας Εφαρµογών και Θεµελιώσεων.

Week. 6: Java Collections

Week 7: Java Collection Classes

Διάλεξη Εισαγωγή στη Java, Μέρος B

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5

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

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

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

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

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

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

Wrapper Classes, Abstract Classes and Interfaces

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

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

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

H κλάση ArrayList. Γιώργος Θάνος. Γραφείο Γ. Γκλαβάνη 37. Αντικει ενοστραφής Προγρα. ος όροφος

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

Βασικά της γλώσσας JAVA

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

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

Βασίλης Χριστοφίδης Επαναληπτική Εξέταση (3 ώρες) Ηµεροµηνία: 21 Σεπτεµβρίου 2012

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

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

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

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

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

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

Δομές Δεδομένων - Εργαστήριο 2. Λίστες

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

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

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

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

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

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. Συλλογές και Επαναλήπτες. Συλλογές - Collections

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

ΚΑΤΑΝΕΜΗΜΕΝΟ ΣΥΣΤΗΜΑ ΔΙΑΧΕΙΡΙΣΗΣ ΣΥΣΚΕΥΩΝ ΑΣΗΜΑΚΟΠΟΥΛΟΣ ΣΩΤΗΡΗΣ ΑΜ : 3021

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

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιδάσκων ηµήτριος Κατσαρός, Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας

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

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα;

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

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

Χειρισµός Σφαλµάτων. Γρηγόρης Τσουµάκας. Τµήµα Πληροφορικής, Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης. Έκδοση:

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

Η λέξη κλειδί this. Γαβαλάς Δαμιανός

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

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

Κλάσεις. Κατηγορίες Αντικειµένων. Κλάσεις. Φυσικά Αντικείµενα. Χώρος = Οµάδα Φυσικών Αντικειµένων. Πρόγραµµα = Οµάδα

Γενικοί Τύποι. 13 Ιανουαρίου 2011 Αντικειμενοστρεφής Προγραμματισμός στη Java 32

Δομές Δεδομένων & Αλγόριθμοι

Μέθοδοι. Υποσυστήµατα και πακέτα. Μοντέλα αντικειµενοστραφούς σχεδίασης. Αντικειµενοστραφής Σχεδίαση. Στα πρώτα στάδια της ανάλυσης

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

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

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

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

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

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

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

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

Μέθοδοι. Μέθοδοι ηµιουργοί, Υπερφόρτωση και Υπέρβαση Μεθόδων

Βασικές Έννοιες Δοµών Δεδοµένων

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

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

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

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

ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT)

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

Ορισµός Νήµα (thread) είναι µια ακολουθιακή ροή ελέγχου (δηλ. κάτι που έχει αρχή, ακολουθία εντολών και τέλος) σ ένα

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

public class ArrayStack implements Stack {

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

Υπερφόρτωση (Overloading) Υπέρβαση (Overriding) - Upcasting Downcasting Final classes, methods

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

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

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

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

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

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

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

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

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

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιδάσκων ηµήτριος Κατσαρός, Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας

Η Υλοποίηση της Επικοινωνίας. Κατανεµηµένα Συστήµατα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές)

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

Ευφυείς Τεχνολογίες ----Πράκτορες

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

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

Κληρονομικότητα. Παύλος Εφραιμίδης pefraimi <at> ee.duth.gr. Java Κληρονομικότητα 1

Remote Method Invocation (RMI)

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

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

Διασυνδέσεις / Διεπαφές. Παναγιώτης Σφέτσος, PhD

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

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

Ειδικά Θέματα Προγραμματισμού

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

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

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

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

Transcript:

Εναρξη Μαθήµατος Κατανεµηµένα Συστήµατα ΙΙ Μάθηµα Ελεύθερης Επιλογής, Εαρινού Εξαµήνου Τοµέας Εφαρµογών και Θεµελιώσεων Ιωάννης Χατζηγιαννάκης Τετάρτη, 12 Μαρτίου, 2008 Αίθουσα ΑΠ7 Ο σκοπός του µαθήµατος: Σχεδιασµός κατανεµηµένων συστηµάτων (distributed systems) Τεχνικές και εργαλεία ανάπτυξης κατανεµηµένων εφαρµογών Προγραµµατισµό κατανεµηµένων εφαρµογών (distributed systems programming) Το µάθηµα ϑα διεξαχθεί γύρω από δύο άξονες: Τεχνολογίες Υλοποίησης ιαλέξεις Project Τυπικά Θέµατα Υλη Μαθήµατος (1) Θεωρία ιαλέξεις 2 ώρες την εβδοµάδα Τετάρτη 11:00-13:00, ΑΠ7 4 ϑεµατικές ενότητες Θέµατα Σχεδιασµού Τεχνολογίες Υλοποίησης Κατανεµηµένων Συστηµάτων Εργαλεία Ανάπτυξης Λογισµικού Ειδικές Πλατφόρµες Βαθµολογία Project -- 100% Θέµατα Σχεδιασµού 1. Επικοινωνία ιεργασιών 2. Σχήµατα Επικοινωνίας Request - Reply, Server - Client 3. Κλήση Αποµακρυσµένων ιαδικασιών 4. Κατανεµηµένα Αντικείµενα 5. Κατανεµηµένες Ουρές Μηνυµάτων 6. Ρεύµατα Επικοινωνίας 7. Java Enterprise Edition Τεχνολογίες Υλοποίησης Κατανεµηµένων Συστηµάτων 1. Java Server Pages 2. Java Remote Method Invocation (RMI) 3. Java Persistance -- Hibernate 4. Spring Framework

Υλη Μαθήµατος (2) Project Εργαλεία Ανάπτυξης Λογισµικού 1. CVS, Subversion 2. GForge, SourceForge, TRAC 3. IDEA IntelliJ Ειδικές Πλατφόρµες Java Micro Edition (ME) SUN Small Programmable Object Technology (SPOT) Google Geo API Υποχρεωτικό το 100% του τελικού ϐαθµού Πρακτικό Οµαδικό Καταγραφή Προδιαγραφών ενός Κατανεµηµένου Συστήµατος Σχεδιασµός Κατανεµηµένου Συστήµατος Μελέτη ενός προβλήµατος των ΚΣ Σχεδιασµός Κατανεµηµένου Αλγορίθµου Προγραµµατισµός / Ανάπτυξη Παρουσίαση Σύνοψη 2 ης ιάλεξης Interfaces Προηγούµενο Μάθηµα Θέµατα Μαθήµατος ιαδικασία Project Κατανεµηµένα Συστήµατα ΙΙ Αντικειµενοστραφής Προγραµµατισµός σε JAVA Βασικές Βιβλιοθήκες JAVA Βοηθητικά Εργαλεία Ανάπτυξης Κώδικα Σύνοψη Μαθήµατος Σύνοψη Μαθήµατος Βιβλιογραφία Επόµενη ιάλεξη Κατά την ανάπτυξη λογισµικού και συστηµάτων πληροφορικής είναι σηµαντικό οι προγραµµατιστές/µηχανικοί να συµφωνήσουν σε ένα κοινό API (προγραµµατιστική διεπαφή) Ενα συµβόλαιο που περιγράφει τον τρόπο επικοινωνίας µεταξύ των διαφορετικών τµηµάτων του συστήµατος. Κάθε οµάδα αναπτύσσει το τµήµα της χωρίς να έχει γνώση για τις τεχνικές λεπτοµέρειες των άλλων τµηµάτων. Η JAVA επιτρέπει την περιγραφή των κοινών διεπαφών µε την χρήση των Interfaces Ενα Interface δεν είναι αντικείµενο Λέµε ότι µια κλάση υλοποιεί ένα interface Μπορούµε να κάνουµε extend ένα interface

Interfaces -- Παράδειγµα (1) Ας υποθέσουµε µια µελλοντική κοινωνία όπου τα αυτοκίνητα ελέγχονται πλήρως από υπολογιστικά συστήµατα Οι ϐιοµηχανίες αυτοκινήτων γράφουν λογισµικό (σε JAVA -- ϕυσικά) που χειρίζονται την κίνηση των αυτοκινήτων Εναρξη, Επιτάχυνση, Στροφή,... Κάποιες εταιρείες γράφουν ειδικό λογισµικό για την πλοήγηση των αυτοκινήτων µε την χρήση GPS Εντοπίζουν την ϑέση του οχήµατος, υπολογίζουν την διαδροµή και οδηγούν το αυτοκίνητο Οι αυτοκίνητο-ϐιοµηχανίες αποφασίζουν σε ένα κοινό interface που περιγράφει αναλυτικά τις µεθόδους που επιτρέπουν την πλοήγηση ενός αυτοκίνητου Οι άλλες εταιρείες χρησιµοποιούν το interface για να οδηγήσουν το αυτοκίνητο Interfaces -- Παράδειγµα (2) public interface OperateCar { // method signatures int turn(direction direction, double radius, double startspeed, double endspeed); int changelanes(direction direction, double startspeed, double endspeed); int signalturn(direction direction, boolean signalon); int getradarfront(double distancetocar, double speedofcar); int getradarrear(double distancetocar, double speedofcar);... Interfaces -- Παράδειγµα (3) Interfaces -- Παράδειγµα (4) public class OperateBMW760i implements OperateCar { // the OperateCar method signatures, // with implementation -- for example: int signalturn(direction direction, boolean signalon) { //code to turn BMW s LEFT turn indicator lights on //code to turn BMW s LEFT turn indicator lights off //code to turn BMW s RIGHT turn indicator lights on //code to turn BMW s RIGHT turn indicator lights off // other members, as needed -- for example, // helper classes not visible to clients of interface Μπορούµε να χειριστούµε ένα αντικείµενο µέσω ενος Interface που υλοποιεί... σαν να ήταν αντικείµενο του συγκεκριµένου τύπου Με αυτόν τον τρόπο ο προγραµµατιστής έχει πρόσβαση µόνο στις µεθόδους που ορίζει το interface. OperateBMW760i car = new OperateBMW760i(); OperateCar op = car; op.signalturn(mydir, false); Μια κλάση µπορεί να υλοποιεί περισσότερα από ένα interface

Interfaces και Κληρονοµικότητα Ενα interface µπορεί να κληρονοµεί ένα ή περισσότερα interfaces Λέµε ότι το νέο interface κάνει extend ένα άλλο interface public interface GroupedInterface extends Interface1, Interface2, Interface3 { // constant declarations double E = 2.718282; // method signatures void dosomething (int i, double x); int dosomethingelse(string s); Ολοι οι ορισµοί µεταβλητών είναι αυτόµατα public, static και final (δηλαδή constants) Interfaces -- Παράδειγµα (6) Interfaces -- Παράδειγµα (5) public interface Relatable { // this (object calling islargerthan) and // other must be instances of the same class // returns 1, 0, -1 if this is greater // than, equal to, or less than other public int islargerthan(relatable other); Οποιαδήποτε κλάση µπορεί να υλοποιήσει το interface Relatable αν υπάρχει κάποιος τρόπος να συγκρίνει το σχετικό της µέγεθος µε άλλα αντικείµενα που το υλοποιούν Αν γνωρίζουµε ότι µια κλάση υλοποιεί το interface Relatable τότε γνωρίζουµε ότι µπορούµε να συγκρίνουµε τα µεγέθη των αντικειµένων που έχουν αρχικοποιηθεί από αυτή την κλάση Interfaces -- Παράδειγµα (7) public class RectanglePlus implements Relatable { public int width = 0; public int height = 0; public Point origin; // four constructors public RectanglePlus() { origin = new Point(0, 0); public RectanglePlus(Point p) { origin = p; public RectanglePlus(int w, int h) { origin = new Point(0, 0); width = w; height = h; public RectanglePlus(Point p, int w, int h) { origin = p; width = w; height = h; // a method for moving the rectangle public void move(int x, int y) { origin.x = x; origin.y = y; // a method for computing the area of the rectangle public int getarea() { return width * height;

Interfaces ως τύποι δεδοµένων Οποτε ορίζουµε ένα νέο interface ορίζουµε και ένα νέο τύπο δεδοµένων Μπορούµε να χρησιµοποιήσουµε το όνοµα του interface όπως χρησιµοποιούµε οποιοδήποτε άλλο τύπο δεδοµένων Μεταβλητές µε τύπο ένα interface χρησιµοποιούνται αποκλειστικά για αναφορές σε αντικείµενα (reference variable) public Object findlargest(object object1, Object object2) { Relatable obj1 = (Relatable)object1; Relatable obj2 = (Relatable)object2; if ( (obj1).islargerthan(obj2) > 0) return object1; else return object2; Packages Η JAVA επιτρέπει την δόµηση του κώδικα µε την χρήση πακέτων (packages) Μπορούµε να τοποθετήσουµε µια κλάση σε ένα πακέτο Ενα πακέτο µπορεί να περιέχει όσες κλάσεις ϑέλουµε και υπο-πακέτα Οι ϕάκελοι που περιέχουν τον κώδικα πρέπει να ακολουθούν την ιεραρχία των πακέτων package: graphics class name: graphics.rectangle pathname: graphics\rectangle.java Καλύτερη διαχείριση του κώδικα Packages -- ηµιουργία Για κάθε κλάση/interface δηλώνουµε το πακέτο που ανήκει πριν τον ορισµό Το statement package πρέπει να είναι στην πρώτη γραµµή του αρχείου //in the Draggable.java file package graphics; public interface Draggable {... Αν δεν ορίσουµε πακέτο τότε η κλάση/interface ανήκει στο κεντρικό-ανώνυµο πακέτο Packages -- Χρήση Για να χρησιµοποιήσουµε µια κλάση/interface από ένα συγκεκριµένο πακέτο Προσθέτουµε το όνοµα του πακέτου πριν το όνοµα της κλάσης/interface graphics.draggable graphics.rectangle myrect = new graphics.rectangle(); Μπορούµε να δηλώσουµε εξάρχής τα πακέτα που ϑέλουµε να χρησιµοποιήσουµε µε το statement import import graphics.*; Τώρα χρησιµοποιούµε τις κλάσεις/interfaces χωρίς το όνοµα του πακέτου Rectangle myrectangle = new Rectangle(); Μπορούµε να κάνουµε import συγκεκριµένες κλάσεις/interfaces από ένα πακέτο import graphics.draggable;

Packages -- Ιεραρχία Η ονοµασία των πακέτων µπορεί να ακολουθεί ιεραρχική δοµή java.awt java.awt.color java.awt.font... Οι ϕάκελοι που περιέχουν τα αρχεία κάθε πακέτου επίσης ακολουθούν την ιεραρχική δοµή java\awt java\awt\color java\awt\font... Οµως όταν κάνουµε import ένα πακέτο δεν γίνονται αυτόµατα import και όλα τα πακέτα του επόµενου επιπέδου! Generic Types -- Παράδειγµα (1) Σε οποιοδήποτε µη-τετριµµένο λογισµικό τα bugs υπάρχουν πάντα! Με τον αντικειµενοστραφή προγραµµατισµό, η δηµιουργία bugs µπορεί να δηµιουργηθούν πολύ εύκολα όταν χειριζόµαστε πολλαπλούς τύπους κλάσεων public class Box { private Object object; public void add(object object) { this.object = object; public Object get() { return object; Generic Types -- Παράδειγµα (2) Εφόσον η µέθοδος δέχεται ως παράµετρο ένα Object µπορούµε να περάσουµε οποιοδήποτε τύπο κλάσης επιθυµούµε public class BoxDemo1 { public static void main(string[] args) { // ONLY place Integer objects into this box! Box integerbox = new Box(); integerbox.add(new Integer(10)); Integer someinteger = (Integer)integerBox.get();.out.println(someInteger); Generic Types -- Παράδειγµα (3) public class BoxDemo2 { public static void main(string[] args) { // ONLY place Integer objects into this box! Box integerbox = new Box(); // Imagine this is one part of a large // application modified by one programmer. integerbox.add("10"); // the type is now String //... and this is another, perhaps written // by a different programmer Integer someinteger = (Integer)integerBox.get(); System.out.println(someInteger);

Generic Types -- Παράδειγµα (4) Generic Types Declaration Οταν εκτελέσουµε το BoxDemo2... // T stands for "Type" public class Box<T> { private T t; Exception in thread "main" java.lang.classcastexception: java.lang.string cannot be cast to java.lang.integer at BoxDemo2.main(BoxDemo2.java:6) Ο compiler δεν µπορεί να εντοπίσει το σφάλµα Εποµένως αναγκαστικά ϑα διαπιστώσουµε το πρόβληµα κατά την εκτέλεση (runtime) public void add(t t) { this.t = t; public T get() { return t; Αντικαταστήσαµε όλες τις χρήσεις του τύπου Object µε τον γενικό τύπο T Generic Types -- Χρήση Generic Types -- Παράδειγµα (5) Για να χρησιµοποιήσουµε ένα γενικό τύπο πρέπει να καθορίσουµε τον τύπο T -- λέµε ότι κάνουµε ένα generic type invocation Box<Integer> integerbox = new Box<Integer>(); Μπορούµε να το παροµοιάσουµε µε τον τρόπο που περνάµε παραµέτρους σε µια συνάρτηση... εδώ περνάµε ως παράµετρο τον τύπο Μια κλήση µιας γενικής κλάσης ονοµάζεται parameterized type public class BoxDemo3 { public static void main(string[] args) { Box<Integer> integerbox = new Box<Integer>(); integerbox.add(new Integer(10)); Integer someinteger = integerbox.get(); System.out.println(someInteger); Εκτός απο την ευκολία στον εντοπισµό σφαλµάτων κατά το compilation... επιταχύνεται και η εκτέλεση του κώδικα! Για κάθε type casting η JAVA εκτελεί εσωτερικούς ελέγχους που καθυστερούν την εκτέλεση

Generic Types -- Παράδειγµα (6) Αν παραβιάσουµε τον παραµετροποιηµένο τύπο... BoxDemo3.java:5: add(java.lang.integer) in Box<java.lang.Integer> cannot be applied to (java.lang.string) integerbox.add("10"); ˆ 1 error Μπορούµε να χρησιµοποιήσουµε περισσότερους από 1 παραµετροποιηµένους τύπους public class Box<T,E> {... Generic Methods -- Παράδειγµα public static void main(string[] args) { Box<Integer> integerbox = new Box<Integer>(); integerbox.add(new Integer(10)); integerbox.inspect("some text"); Θα δώσει ως έξοδο Generic Methods Μπορούµε να χρησιµοποιήσουµε παραµετροποιηµένους τύπους κατά τον ορισµό συναρτήσεων public class Box<T> { public <U> void inspect(u u){ System.out.println("T: " + t.getclass().getname()); System.out.println("U: " + u.getclass().getname()); Bounded Type Parameters Σε ορισµένες περιπτώσεις ϑέλουµε να περιορίσουµε τον παραµετροποιηµένο τύπο public <U extends Number> void inspect(u u){ System.out.println("T: " + t.getclass().getname()); System.out.println("U: " + u.getclass().getname()); T: java.lang.integer U: java.lang.string Μπορούµε να δηλώσουµε επιπλέον τύπους <U extends Number & MyInterface>

Collections Collections -- Interfaces Οι συλλογές (collections) είναι γνωστές και ως Containers Είναι αντικείµενα που περιέχουν άλλα αντικείµενα Επιτρέπουν την αποθήκευση, διαχείριση και µεταφορά δεδοµένων Παραδείγµατα: Vector, Hashtable, array Στην JAVA οι συλλογές ορίζουν ένα πλαίσιο εργασίας γνωστό και ως Collections framework Ορίζει συγκεκριµένες κοινές διεπαφές (interfaces) Υλοποιεί κλάσεις που ακολουθούν τις διεπαφές (implementations) Προσφέρει συγκεκριµένους αλγόριθµους για την διαχείριση του περιεχοµένου Βοηθάει στην γρήγορη ανάπτυξη κώδικα µείωση του κώδικα Οι υλοποιήσεις είναι υψηλού επιπέδου επιταχύνει τον κώδικα Ολες οι διεπαφές είναι υλοποιηµένες µέσω γενικού προγραµµατισµού public interface Collection<E> {... List<String> list = new ArrayList<String>(c); Collection Interface Collection Interface -- Πρόσβαση στα περιεχόµενα ύο ϐασικοί τρόποι υπάρχουν για την πρόσβαση στα δεδοµένα public interface Collection<E> extends Iterable<E> { int size(); boolean isempty(); boolean contains(object element); boolean add(e element); boolean remove(object element); Iterator<E> iterator(); boolean containsall(collection<?> c); boolean addall(collection<? extends E> c); boolean removeall(collection<?> c); boolean retainall(collection<?> c); void clear(); Object[] toarray(); <T> T[] toarray(t[] a); 1. Με την χρήση του construct for-each 2. Με την χρήση Iterators for (Object o : collection) System.out.println(o); Εναλλακτικά µπορούµε να µετατρέψουµε µια συλλογή σε πίνακα Object[] a = c.toarray(); String[] a = c.toarray(new String[0]);

Iterators Επιτρέπουν την προσπέλαση στα δεδοµένα ανεξάρτητα από την δοµή public interface Iterator<E> { boolean hasnext(); E next(); void remove(); //optional static void filter(collection<?> c) { for(iterator<?> it = c.iterator();it.hasnext();) if (!cond(it.next())) it.remove(); Set Interface -- Γενικά Ενα Set είναι µια συλλογή που δεν επιτρέπει διπλές εγγραφές Λογική αφαίρεση του µαθηµατικού συνόλου Η JAVA προσφέρει διάφορες υλοποιήσεις του interface Set 1. HashSet -- τα περιεχόµενα αποθηκεύονται σε hash table 2. TreeSet -- τα περιεχόµενα αποθηκεύονται σε red-black tree 3. LinkedHashSet -- τα περιεχόµενα αποθηκεύονται σε hash table µαζί µε µια ϐοηθητική linked list για γρήγορη σειριακή προσπέλαση Ευκολία στην χρήση... Collection c =... Collection<Type> nodups = new HashSet<Type>(c); Collection<Type> nodups = new LinkedHashSet<Type>(c) Set Interface IDEA IntelliJ 7.0 public interface Set<E> extends Collection<E> { int size(); boolean isempty(); boolean contains(object element); boolean add(e element); boolean remove(object element); Iterator<E> iterator(); boolean containsall(collection<?> c); boolean addall(collection<? extends E> c); boolean removeall(collection<?> c); boolean retainall(collection<?> c); void clear(); Object[] toarray(); <T> T[] toarray(t[] a); Ενα ιδιαίτερα προηγµένο ενοποιηµένο περιβάλλον ανάπτυξης κώδικα JAVA Εστιάζει στην παραγωγικότητα του προγραµµατιστή Αυτόµατη παραγωγή κώδικα Αυτόµατη µορφοποίηση κώδικα Αυτόµατη εισαγωγή σχολείων JavaDOC Αυτόµατη αναδιοργάνωση κώδικα... http://www.jetbrains.com/idea License Key User Name: University of Patras License Key 1: 40036-RQUIN-G1DD6-H475Y-09EFP-2I2T7

Subversion (SVN) Ενα σύστηµα διαχείρισης εκδόσεων κώδικα (version management system) Εξέλιξη του CVS (Concurrent Versioning System) Βασικό εργαλείο κατά την ανάπτυξη κώδικα ανεξάρτητα από το µέγεθος της οµάδας ηµιουργεί repositories για την αποθήκευση του κώδικα Για κάθε αρχείο και ϕάκελο διατηρεί όλες τις προηγούµενες εκδόσεις Μπορούµε να ανατρέξουµε σε προηγούµενες εκδόσεις, να εντοπίσουµε τις διαφορές Κάθε ϕορά που κάνουµε µια αλλαγή σε κάποιο αρχείο/φάκελο του repository αυξάνει κατά ένα το revision number Μπορεί να παίξει τον ϱόλο backup http://subversion.tigris.org/ Subversion (SVN) -- Βασικές Εννοιες Σε ένα κεντρικό σύστηµα δηµιουργούµε ένα νέο repository Εγκαθιστούµε ένα SVN Server Χρησιµοποιούµε την εντολή svnadmin create <directory> Από ένα τερµατικό συνδεόµαστε µε το repository κάνοντας checkout Εγκαθιστούµε ένα SVN Client Χρησιµοποιούµε την εντολή svn checkout <repository-url> Προσθέτουµε νέα αρχεία/φακέλους µε την εντολή svn add <file> Ενηµερώνουµε τα τοπικά αρχεία µε τις τελευταίες αλλαγές µε την εντολή svn update Μεταφέρουµε στο repository τις τοπικές αλλαγές µε την εντολή svn commit Για να σβήσουµε ένα αρχείο από το repository χρησιµοποιούµε την εντολή svn delete <file> Subversion (SVN) -- Λογισµικά Σύνοψη 2 ης ιάλεξης Για την εγκατάσταση ενός SVN Server Αναλόγως το ΛΣ του κεντρικού συστήµατος Μπορεί να συνδεθεί µε κάποιον Web Server Μπορεί να τρέξει και ως standalone server Ενας πολύ καλός client για τα Windows -- Tortoise SVN http://tortoisesvn.tigris.org/ Ενσωµατώνει τις λειτουργίες του Subversion στον Explorer Ενας καλός client για τα Linux -- KDE SVN http://kdesvn.alwins-world.de/ Το IDEA IntelliJ έχει εναν ενσωµατωµένο SVN Client Για την εξαγωγή στατιστικών σε ένα repository µπορούµε να χρησιµοποιήσουµε το http://sourceforge.net/projects/svnstat Προηγούµενο Μάθηµα Θέµατα Μαθήµατος ιαδικασία Project Κατανεµηµένα Συστήµατα ΙΙ Αντικειµενοστραφής Προγραµµατισµός σε JAVA Βασικές Βιβλιοθήκες JAVA Βοηθητικά Εργαλεία Ανάπτυξης Κώδικα Σύνοψη Μαθήµατος Σύνοψη Μαθήµατος Βιβλιογραφία Επόµενη ιάλεξη

Σύνοψη Μαθήµατος Βιβλιογραφία Αντικειµενοστραφής Προγραµµατισµός σε JAVA Interface Package Generic Types Collections Framework Βοηθητικά Εργαλεία Ανάπτυξης Κώδικα IDEA IntelliJ Subversion (SVN) Trail: Learning the Java Language http://java.sun.com/docs/books/tutorial/ java/toc.html Trail: Collections http://java.sun.com/docs/books/tutorial/ collections/index.html Version Control with Subversion http://svnbook.red-bean.com/ The world s largest Open Source software development web site http://sourceforge.net/ Επόµενη ιάλεξη Επανάληψη στη JAVA Θέµατα Σχεδιασµού Σχεδιαστικά Θέµατα Project