11. Προηγμένα χαρακτηριστικά της γλώσσας

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "11. Προηγμένα χαρακτηριστικά της γλώσσας"

Transcript

1 11. Προηγμένα χαρακτηριστικά της γλώσσας Τελειώνοντας το κεφάλαιο αυτό θα μπορείτε: Να καλείτε μεθόδους που έχετε υπερβεί, από τη μέθοδο που τις υπερβαίνει Να καλείτε μεθόδους δημιουργίας που έχετε υπερβεί Να ελέγχετε την κλήση των μεθόδων δημιουργίας των γονικών κλάσεων Να δηλώνετε και να χρησιμοποιείτε τις κατάλληλες static μεταβλητές και μεθόδους Να δηλώνετε και να χρησιμοποιείτε τις κατάλληλες final κλάσεις, μεθόδους και μεταβλητές Να δηλώνετε και να χρησιμοποιείτε σωστά τις αφηρημένες μεθόδους και τις διεπαφές Να περιγράφετε και να χρησιμοποιείτε τον εξ ορισμού και τον protected έλεγχο προσπέλασης Να χρησιμοποιείτε την ένδειξη deprecation για το μεταγλωττιστή Java ώστε να καθορίζετε τις κατάλληλες μεθόδους JDK 1.1 που θέλετε να χρησιμοποιήσετε. Να περιγράφετε και να χρησιμοποιείτε τις inner κλάσεις Κλήση μεθόδων που έχετε υπερβεί Συχνά, όταν υπερβαίνετε μία μέθοδο, ο πραγματικός σας σκοπός δεν είναι να αντικαταστήσετε την υπάρχουσα συμπεριφορά με νέα, αλλά να επεκτείνετε τη συμπεριφορά αυτή με κάποιο τρόπο. Αυτό μπορεί να επιτευχθεί με χρήση της δεσμευμένης λέξης super. public class Employee { String name; int salary; public String getdetails() { return Name: + name + \nsalary: + salary; public class Manager { String department; public String getdetails() { return super.getdetails() + \ndepartment: + department; Σημειώστε ότι μία κλήση της μορφής super.method() θα καλέσει ολόκληρη τη συμπεριφορά, μαζί με τυχόν παρενέργειες που αυτή έχει, της μεθόδου που θα είχε 1

2 κληθεί αν το αντικείμενο στο οποίο αναφερόμασταν άνηκε στην πραγματικότητα στη γονική κλάση. Η μέθοδος δε χρειάζεται να έχει οριστεί ακριβώς στη γονική κλάση, μπορεί να έχει κληροδοτηθεί από κάποια κλάση πιο ψηλά στην ιεραρχία Κανόνες υπέρβασης μεθόδων Υπάρχουν δύο σημαντικοί κανόνες για την υπέρβαση μεθόδων: Μία μέθοδος που υπερβαίνει μία άλλη δεν μπορεί να είναι λιγότερο προσπελάσιμη από την αρχική μέθοδο. Μία μέθοδος που υπερβαίνει μία άλλη δεν μπορεί να «πετάει» περισσότερες εξαιρέσεις από την αρχική μέθοδο. Αμφότεροι οι κανόνες προκύπτουν από τη φύση του πολυμορφισμού σε συνδυασμό με την ανάγκη της Java να είναι «ασφαλής ως προς τον τύπο». Έστω το πιο κάτω μη επιτρεπτό σενάριο: public class Parent { public void method() { public class Child extends Parent { private void method() { public class UseBoth { public void othermethod() { Parent p1 = new Parent(); Parent p2 = new Child(); p1.method(); p2.method(); Αν ήταν επιτρεπτό η method() στην κλάση Child να είναι ιδιωτική ενώ στην κλάση Parent είναι δημόσια, τότε ο πιο πάνω κώδικας θα ήταν επιτρεπτός. Όμως κατά την εκτέλεση θα προέκυπτε ένα πρόβλημα γιατί η μέθοδος method() που θα έπρεπε να εκτελεστεί για την p2 θα έπρεπε να είναι η έκδοση της method() για το Child, αλλά αυτή έχει δηλωθεί ως ιδιωτική, συνεπώς η πρόσβαση δεν είναι επιτρεπτή. Με παρόμοια λογική, στα πλαίσια του κανόνα «δήλωσε ή αντιμετώπισε» δεν επιτρέπεται να «πετάει» περισσότερες εξαιρέσεις από τη μέθοδο που υπερβαίνει Κλήση μεθόδων δημιουργίας που έχουμε υπερβεί Αν έχετε μία κλάση με πολλές μέθοδοι δημιουργίας μπορεί να θέλετε να επαναλάβετε όσα συμβαίνουν στη μία μέσα σε μία άλλη. Αυτό μπορεί να επιτευχθεί με τη δεσμευμένη λέξη this ως κλήση μεθόδου: 2

3 public class Employee { String name; int Salary; public Employee(String n, int s) { name = n; salary = s; public Employee(String n) { this(n, 0); public Employee() { this( Unknown ); Στην τρίτη μέθοδος δημιουργίας, η οποία δεν έχει ορίσματα, η κλήση this( Unknown ) στην πράξη μεταβιβάζει τον έλεγχο σε εκείνη την έκδοση μεθόδου δημιουργίας που δέχεται ως όρισμα ένα String και παρέχει το String Κλήση μεθόδων δημιουργίας των γονικών κλάσεων Η Java είναι ιδιαίτερα ιδιότροπη σε σχέση με την αρχικοποίηση των αντικειμένων. Αυτό συμβαίνει για να είμαστε σίγουροι σε σχέση με την ασφάλεια. Όταν δημιουργείτε ένα στιγμιότυπο ενός συγκεκριμένου αντικειμένου, λαμβάνει χώρα η ακόλουθη ακολουθία πράξεων: 1. Δεσμεύεται ο χώρος στη μνήμη και αρχικοποιείται σε «μηδενικές» τιμές 2. Για κάθε κλάση στην ιεραρχία, ξεκινώντας από την κορυφή a. Πραγματοποιείται ρητή αρχικοποίηση b. Καλείται μία μέθοδος δημιουργίας Το μοντέλο ασφάλειας της Java απαιτεί όλες οι απόψεις ενός αντικειμένου που περιγράφουν τη γονική κλάση του να έχουν πλήρως αρχικοποιηθεί πριν να αρχίσει να εκτελεί οτιδήποτε η θυγατρική κλάση. Σε πολλές περιπτώσεις, χρησιμοποιείται η εξ ορισμού μέθοδο δημιουργίας δηλαδή η μέθοδος δημιουργίας χωρίς ορίσματα για να αρχικοποιήσει το γονικό αντικείμενο. Αν χρειάζεται μπορείτε να ελέγξετε τον τρόπο με τον οποίο δημιουργείται μία γονική κλάση. public class Employee { String name; public Employee (String n) { name = n; 3

4 public class Manager extends Employee { String department; public Manager(String s, String d) { super(s); department = d; Σημείωση Η κλήση της super() μπορεί να περιέχει οποιονδήποτε αριθμό ορισμάτων απαιτούν οι αντίστοιχες μέθοδοι δημιουργίας στη γονική κλάση, αλλά πρέπει να είναι η πρώτη εντολή στη μέθοδο δημιουργίας Μεταβλητές κλάσης Ορισμένες φορές είναι επιθυμητό να έχουμε μία μεταβλητή η οποία μεταβιβάζεται ανάμεσα σε όλα τα στιγμιότυπα μίας κλάσης. Για παράδειγμα, μπορεί να χρησιμοποιηθεί ως βάση επικοινωνίας ανάμεσα σε όλα τα στιγμιότυπα ή για να παρακολουθούμε το πλήθος των στιγμιοτύπων που έχουν δημιουργηθεί. Μπορείτε να επιτύχετε αυτό το αποτέλεσμα σημειώνοντας τη μεταβλητή με τη δεσμευμένη λέξη static. Μία τέτοια μεταβλητή ορισμένες φορές ονομάζεται μεταβλητή κλάσης (class variable) για να διακριθεί από τη μεταβλητή μέλος ή μεταβλητή στιγμιοτύπου. public class Count { private int serialnumber; private static int counter = 0; public Count() { counter++; serialnumber = counter; Στο πιο πάνω παράδειγμα κάθε αντικείμενο που δημιουργείται λαμβάνει ένα μοναδικό σειριακό αριθμό, ξεκινώντας από το άνω και αυξάνοντάς τον. Η μεταβλητή counter διαμοιράζεται ανάμεσα σε όλα τα στιγμιότυπα, συνεπώς όταν η μέθοδος δημιουργίας ενός αντικειμένου την αυξάνει κατά ένα, το επόμενο αντικείμενο που δημιουργείται βλέπει την αυξημένη τιμή. Μία στατική μεταβλητή είναι παρόμοια κατά κάποιον τρόπο με μία καθολική μεταβλητή σε άλλες γλώσσες. Η Java δεν έχει καθολικές μεταβλητές με τον παραδοσιακό τρόπο, αλλά μία στατική μεταβλητή είναι μία μόνη μεταβλητή η οποία είναι προσπελάσιμη από όλα τα αντικείμενα της κλάσης. Αν μία στατική μεταβλητή είναι δηλωμένη και ως δημόσια, μπορεί να προσπελασθεί και εκτός της κλάσης. Για να το επιτύχετε αυτό δε χρειαζόσαστε καν κάποιο στιγμιότυπο της κλάσης. Μπορείτε αντ αυτού να αναφερθείτε σε αυτήν μέσω του ονόματος της κλάσης. public class StaticVar { public static int number; public class OtherClass { 4

5 public void method() { int x = StaticVar.number; 11.6 Μέθοδοι κλάσης Ορισμένες φορές χρειάζεται να έχετε πρόσβαση σε κώδικα προγράμματος χωρίς να υπάρχει στιγμιότυπο ενός συγκεκριμένου αντικειμένου. Μία μέθοδος που είναι σημειωμένη με τη δεσμευμένη λέξη static μπορεί να χρησιμοποιηθεί με τον τρόπο αυτό και ορισμένες φορές καλείται μέθοδος κλάσης (class method). public class GeneralFunction { public static int addup(int x, int y) { return x + y; public class UseGeneral { public void method() { int a = 9; int b = 10; int c = GeneralFunction.addUp(a, b); System.out.println( addup() gives + c); Επειδή μία static μέθοδος μπορεί να κληθεί χωρίς να υπάρχει στιγμιότυπο της κλάσης στην οποία ανήκει δεν υπάρχει τιμή this. Συνέπεια αυτού είναι ότι μία μέθοδος static δεν μπορεί να προσπελάσει οποιαδήποτε μεταβλητή εκτός από τα ορίσματά της και τις static μεταβλητές. Προσπαθώντας να προσπελάσετε μη στατικές μεταβλητές θα έχει ως αποτέλεσμα ένα σφάλμα μεταγλώττισης. public class Wrong { int x; public static void main(string args[]) { x = 9; // COMPILER ERROR 11.7 Η δεσμευμένη λέξη final Final κλάσεις H Java επιτρέπει την εφαρμογή της δεσμευμένης λέξης final σε κλάσεις, και αν συμβεί κάτι τέτοιο δεν μπορούμε να έχουμε υποκλάσεις της κλάσης αυτής. Η κλάση java.lang.string για παράδειγμα είναι μία final κλάση. Αυτό μπορεί να γίνει για λόγους ασφαλείας, καθώς έτσι είμαστε σίγουροι ότι αν μία μέθοδος έχει μία αναφορά σε ένα String, και στην πράξη θα αντιμετωπίσει σίγουρα ένα String και όχι κάποια υποκλάση που ίσως έχει προστεθεί με άσχημους σκοπούς και θα έχει τροποποιημένη συμπεριφορά. 5

6 Final μέθοδοι Και ορισμένες μέθοδοι μπορούν να σημειωθούν ως final. Αν συμβεί κάτι τέτοιο τότε δεν είναι δυνατή η υπέρβαση της μεθόδου, με άλλα λόγια οι μέθοδοι αυτοί δεν είναι ιδεατές (virtual). Και πάλι αυτό γίνεται για λόγους ασφαλείας, ώστε αυτός που καλεί τη μέθοδο να γνωρίζει ότι η συμπεριφορά που θα προκύψει θα είναι η σωστή, αρχική, συμπεριφορά και όχι κάποια ανατρεπτική εναλλακτική συμπεριφορά. Οι μέθοδοι που έχουν δηλωθεί final ορισμένες φορές χρησιμοποιούνται για λόγους βελτιστοποίησης, καθώς ο μεταγλωττιστής μπορεί να παράγει κώδικα που να καλεί άμεσα τη μέθοδο, αντί να χρειάζεται να χρησιμοποιήσει τη συνήθη κλήση ιδεατών μεθόδων που εμπεριέχει μία αναζήτηση κατά το χρόνο εκτέλεσης για να αποφασισθεί ποια μέθοδος θα κληθεί. Οι μέθοδοι που δηλώνονται ως static ή private είναι αυτόματα και final, καθώς σε καμία από τις δύο περιπτώσεις δεν μπορεί να εφαρμοστεί η δυναμική ή καθυστερημένη σύνδεση Final μεταβλητές Αν μία μεταβλητή δηλωθεί ως final το αποτέλεσμα είναι ότι αυτή γίνεται σταθερά. Οποιαδήποτε προσπάθεια αλλαγής της τιμής μίας final μεταβλητής θα προκαλέσει σφάλμα μεταγλωττιστή. Σημείωση Αν σημειώσετε μία μεταβλητή τύπου αναφοράς, δηλαδή τύπου κάποιας κλάσης, ως final δε θα μπορείτε να αναφερθείτε σε άλλο αντικείμενο εκτός από το αρχικό, αλλά θα μπορείτε να μεταβάλλετε τα περιεχόμενα του αντικειμένου Αφηρημένες κλάσεις Ορισμένες φορές, κατά την ανάπτυξη μίας βιβλιοθήκης μπορεί να θέλετε να δημιουργήσετε μία κλάση που αναπαριστά κάποια βασική συμπεριφορά και να ορίσετε μεθόδους για αυτή την κλάση, αλλά δεν μπορείτε να υλοποιήσετε τη συμπεριφορά στην κλάση αυτή. Αντ αυτού έχετε σκοπό να υλοποιήσετε τις μεθόδους στις υποκλάσεις. Για παράδειγμα έστω η κλάση Drawing. Η κλάση πρέπει να αναπαριστά μεθόδους για ένα πλήθος ευκολιών σχεδίασης, αλλά αυτές πρέπει να υλοποιηθούν με τρόπο ανεξάρτητο από πλατφόρμα. Σαφώς δεν είναι δυνατό να προσπελάσουμε το υλικό video σε μία μηχανή και να συνεχίσει να είναι ανεξάρτητο από πλατφόρμα. Σκοπός είναι η κλάση Drawing να ορίζει ποιες μεθόδους θα πρέπει να υπάρχουν, αλλά θα πρέπει να δημιουργηθούν υποκλάσεις που εξαρτώνται από την πλατφόρμα οι οποίες θα υλοποιούν τη συμπεριφορά. Μία κλάση όπως η κλάση Drawing, η οποία δηλώνει την ύπαρξη κάποιων μεθόδων, αλλά όχι και την υλοποίηση συνήθως ονομάζεται αφηρημένη κλάση (abstract class). Μπορείτε να δηλώσετε μία κλάση ως αφηρημένη στη Java με χρήση της δεσμευμένης λέξης abstract. Κάθε μέθοδος που δεν ορίζεται θα πρέπει επίσης να σημειώνεται ως abstract. public abstract class Drawing { public abstract void drawdot(int x, int y); public void drawline(int x1, int y1, int x2, int y2) { // σχεδίαση με επαναληπτική χρήση της drawdot 6

7 Σημειώστε ότι μία κλάση abstract μπορεί να περιέχει μη αφηρημένες μεθόδους και μεταβλητές. Δεν μπορείτε να δημιουργήσετε ένα στιγμιότυπο μίας κλάσης abstract, παρά μόνο έμμεσα δημιουργώντας ένα στιγμιότυπο μίας υποκλάσης της. Οι υποκλάσεις των abstract κλάσεων πρέπει να παρέχουν υλοποιήσεις για όλες τις αφηρημένες μεθόδους των γονικών κλάσεών τους, διαφορετικά θεωρούνται και αυτές ως αφηρημένες. Μπορείτε να δηλώσετε μεταβλητές αναφορές με τύπο αυτό της abstract κλάσης Διεπαφές Μία διεπαφή (interface) είναι μία παραλλαγή της ιδέας μίας abstract κλάσης. Σε ένα interface όλες οι μέθοδοι είναι abstract και καμία δεν μπορεί να έχει σώμα. Επίσης ένα interface δεν μπορεί να περιέχει μεταβλητές μέλους. Το πλεονέκτημα ενός interface είναι ότι μπορεί να χρησιμοποιηθεί για να κάμψει τον κανόνα απλής κληρονομικότητας που επιβάλλει η Java. Ο ορισμός μίας κλάσης μπορεί να κάνει extend μία μόνο άλλη κλάση, αλλά μπορεί να υλοποιεί (implements) όσες διεπαφές χρειάζεται. Η υλοποίηση ενός interface είναι παρόμοια με τη δημιουργία υποκλάσεων, εκτός από το γεγονός ότι υλοποίηση μίας κλάσης δεν κληρονομεί συμπεριφορά από τον ορισμό ενός interface. Ό,τι συμβαίνει στην κλάση αυτή είναι γνωστό ότι υλοποιεί μία συγκεκριμένη διεπαφή. Αυτό σημαίνει ότι είναι δυνατό να κληθούν μέθοδοι που είναι μέλη του interface σε οποιοδήποτε στιγμιότυπο ενός αντικειμένου που υλοποιεί το interface αυτό. Όπως και με τις αφηρημένες κλάσεις, είναι επιτρεπτό να χρησιμοποιήσουμε το όνομα μίας διεπαφής ως τύπο σε μία μεταβλητή αναφοράς. Θα εφαρμοστεί η συνήθης δυναμική σύνδεση. Οι αναφορές μπορούν να μετατραπούν (cast) προς και από τύπους διεπαφών και μπορεί να χρησιμοποιηθεί ο τελεστής instanceof για να καθοριστεί αν ένα αντικείμενο υλοποιεί ένα interface. Οι διεπαφές χρησιμοποιούνται κατά τη διαχείριση συμβάντων στο AWT. public class ReactToButton implements ActionListener { public void actionperformed(actionevent e) { // αντίδραση στο συμβάν Προηγμένος έλεγχος πρόσβασης Εκτός από τα επίπεδα πρόσβασης private και public στη Java ορίζονται ακόμα δύο επίπεδα ελέγχου πρόσβασης για χρήση σε μεταβλητές και μεθόδους μέλη. Αυτά είναι το εξ ορισμού επίπεδο ελέγχου πρόσβασης και ένα επίπεδο που ονομάζεται protected. Μία μεταβλητή ή μία μέθοδος έχει την εξ ορισμού προσβασιμότητα αν δεν υπάρχει ρητά κάποιος τροποποιητής ως μέρος της δήλωσής της. Τέτοια προσβασιμότητα σημαίνει ότι η 7

8 πρόσβαση είναι επιτρεπτή από οποιαδήποτε μέθοδο σε οποιαδήποτε κλάση που είναι μέλος του ίδιου πακέτου όπως και ο στόχος. Μία μεταβλητή ή μέθοδος η οποία έχει σημειωθεί με τον τροποποιητή protected στην πράξη είναι περισσότερο προσβάσιμη από μία με τον εξ ορισμού έλεγχο πρόσβασης. Μία protected μέθοδος ή μεταβλητή είναι προσβάσιμη από οποιαδήποτε μέθοδο σε οποιαδήποτε κλάση που ανήκει στο ίδιο πακέτο, αλλά είναι επίσης προσβάσιμη από οποιαδήποτε μέθοδο σε οποιαδήποτε από τις υποκλάσεις Deprecation Μεταξύ των εκδόσεων JDK 1.0, JDK 1.1, JDK 1.2, JDK 1.3 και JDK 1.4 έγινε σημαντική προσπάθεια για την τυποποίηση των ονομάτων των μεθόδων. Αποτέλεσμα αυτού είναι ότι ένας μεγάλος αριθμός μεθόδων δημιουργίας κλάσεων και κλήσεων μεθόδων έγινε παρωχημένος έχουν αντικατασταθεί από ένα όνομα μεθόδου που ακολουθεί μία περισσότερο αντικειμενοστρεφή προσέγγιση, και γενικά, κάνει τη ζωή του προγραμματιστή λιγότερο πολύπλοκη. Για παράδειγμα στην έκδοση JDK 1.0 στον ορισμό της κλάσης java.awt.component συνέβαιναν τα ακόλουθα: Αλλαγή / λήψη του μεγέθους της συνιστώσας o resize() και size() Αλλαγή / λήψη του πλαισίου που περιέχει τη συνιστώσα o reshape() και bounds() Στην έκδοση JDK 1.1 οι πιο πάνω μέθοδοι της java.awt.component έγιναν deprecated και αντικαταστάθηκαν από μεθόδους που χρησιμοποιούσαν τις λέξεις get και set για να δηλώσουν τη βασική πράξη της μεθόδου setsize() και getsize() setbounds() και getbounds() Στην έκδοση JDK συνεχίζουν να υπάρχουν deprecated μέθοδοι μαζί με τις νέες μεθόδους, αλλά η κατάσταση αυτή πρόκειται να αλλάξει στο μέλλον. Όποτε μεταφέρετε κώδικα από το JDK 1.0 στο JDK 1.1, ή ακόμα αν χρησιμοποιείτε κώδικα που λειτουργούσε με την έκδοση JDK 1.0, είναι σκόπιμο η μεταγλώττιση να γίνεται με την ένδειξη deprecation: % javac deprecation MyFile.java Η ένδειξη deprecation θα αναφέρει όσες μεθόδους που καλούνται από μέσα από την κλάση και οι οποίες είναι deprecated. Για παράδειγμα, ακολουθεί μία βοηθητική κλάση με το όνομα DateConverter για τη μετατροπή μίας ημερομηνίας που είναι στη μορφή mm/dd/yy στην ημέρα της εβδομάδας. package myutilities; import java.util.*; public final class DateConverter { private static String day_of_the_week[] = { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday ; 8

9 public static String getdayofweek (String thedate) { int month, day, year; StringTokenizer st = new StringTokenizer(theDate, / ); month = Integer.parseInt(st.nextToken()); day = Integer.parseInt(st.nextToken()); year = Integer.parseInt(st.nextToken()); Date d = new Date(year, month, day); return(day_of_the_week[d.getday()]); Όταν μεταγλωττιστεί με χρήση του JDK 1.1 και με την ένδειξη deprecation: % javac deprecation DateConverter.java DateConverter.java:20: Note:The constructor java.util.date(int,int,int) has been deprecated. Date d = new Date(year, month, day); ^ DateConverter.java:23: Note: The method int getday() in class java.util.date has been deprecated. return (day_of_the_week[d.getday()]); ^ Note: DateConverter.java uses a deprecated API. Please consult the documentation for a better alternative. 3 warnings Ξαναγράφοντας την κλάση DateConverter έχουμε το εξής: package myutilities; import java.util.*; public final class DateConverter { private static String day_of_the_week[] = { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday ; public static String getdayofweek (String thedate) { Date d = null; SimpleDateFormat sdf = new SimpleDateFormat( MM/dd/yy ); try { d = sdf.parse(thedate); catch (ParseException e) { System.out.println(e); e.printstacktrace(); 9

10 // Create a GregorianCalendar object Calendar c = new GregorianCalendar(TimeZone.getTimeZone( EST, Locale.US); c.settime(d); return (day_of_the_week[(c.get(calendar.day_of_week)-1)]); Εδώ στην έκδοση 1.1 χρησιμοποιούνται δύο νέες κλάσεις: η SimpleDateFormat, μία κλάση που δέχεται μία μορφή ημερομηνίας σε String και δημιουργεί ένα αντικείμενο Date και η κλάση GregorianCalendar, η οποία χρησιμοποιείται για να δημιουργηθεί ένα ημερολόγιο με την τοπική ζώνη ώρας και το locale Inner κλάσεις Οι inner κλάσεις, οι οποίες ονομάζονται και ένθετες κλάσεις (nested classes), είναι ένα νέο χαρακτηριστικό από το JDK 1.1. Στις προηγούμενες εκδόσεις του JDK επιτρέπονταν μόνο κλάσεις άνω επιπέδου το αρχείο java έπρεπε να περιέχει μόνο κλάσεις που ήταν μέλη του δηλωμένου πακέτου. Το JDK 1.1 υποστηρίζει πλέον κλάσεις που είναι μέλη άλλων κλάσεων, και ορίζονται τοπικά μέσα σε ένα μπλοκ εντολών ή ανώνυμα μέσα σε μία έκφραση. Οι inner κλάσεις έχουν τις ακόλουθες ιδιότητες: Το όνομα της κλάσης μπορεί να χρησιμοποιηθεί μόνο μέσα στο καθορισμένο πεδίο εμβέλειας (scope), εκτός και αν χρησιμοποιείται μέσα σε ένα πλήρες όνομα (qualified name). Το όνομα της inner κλάσης πρέπει να διαφέρει από αυτό της κλάσης που την περιέχει. Η inner κλάση μπορεί να χρησιμοποιεί τόσο μεταβλητές στιγμιοτύπου και κλάσης της κλάσης που την περιέχει όσο και τοπικές μεταβλητές του μπλοκ που την περιέχει. Η inner κλάση μπορεί να οριστεί και ως abstract. H inner «κλάση» μπορεί να είναι διεπαφή, η οποία υλοποιείται από άλλη κλάση. Οι inner κλάσεις μπορούν να δηλωθούν ως private ή protected. Η προστασία πρόσβασης δεν αποτρέπει μία inner κλάση να χρησιμοποιεί οποιοδήποτε μέλος μίας άλλης κλάσης, εφόσον η μία περιέχει την άλλη. Οι inner κλάσεις που δηλώνονται static γίνονται αυτόματα πρώτου επιπέδου κλάσεις χάνουν την ικανότητά τους να χρησιμοποιούν δεδομένα ή μεταβλητές μέσα στο τοπικό πεδίο εμβέλειας και άλλες inner κλάσεις. Οι inner κλάσεις δεν μπορούν να δηλώσουν μέλη τους ως static μόνο οι πρώτου επιπέδου κλάσεις μπορούν να ορίζουν static μέλη. Μία inner κλάση που θα ήθελε να χρησιμοποιήσει ένα static μέλος θα πρέπει να το ορίσει ως static στην κλάση πρώτου επιπέδου. Οι inner κλάσεις χρησιμοποιούνται καλύτερα ως ένα χαρακτηριστικό ευκολίας για τη δημιουργία προσαρμοστών συμβάντων (event adapters). Έστω η κλάση TwoListen με δύο κλάσεις χειριστές: 10

11 import java.awt.*; import java.awt.event.*; public class TwoListenInner { private Frame f; private TextField tf; public static void main(string args[]) { TwoListenInner that = new TwoListenInner(); that.go(); public void go() { f = new Frame( Two listeners example ); f.add = ( North, new Label( Click and drag the mouse )); tf = new TextField(30); f.add ( South, tf); f.addmousemotionlistener(new MouseMotionHandler()); f.addmouselistener(new MouseEventHandler()); f.setsize(300, 200); f.setvisible(true); // The MouseMotionHandler is an inner class public class MouseMotionHandler extends MouseMotionAdapter { public void mousedragged(mouseevent e); String s = Mouse dragging: X = + e.getx() + Y = + e.gety(); tf.settext(s); // MouseEventHandler public class MouseEventHandler extends MouseAdapter { public void mouseentered (MouseEvent e) { String s = The mouse entered ; tf.settext(s); public void mouseexited(mouseevent e) { String s = The mouse has left the building ; tf.settext(s); 11

12 Τα πλεονεκτήματα της προσέγγισης αυτής είναι ότι αμφότερες οι κλάσεις MouseMotionHandler και MouseEventHandler συμπεριλαμβάνονται στο αρχείο TwoListenInner.class και το συνολικό μέγεθος του προγράμματος είναι μικρότερο. Το μέγεθος της TwoListenInner σε μία κλάση είναι 1362 bytes. Αν τα πιο πάνω γράφονταν με τις δύο επιπλέον κλάσεις σε πρώτο επίπεδο θα δημιουργούνταν τρεις διαφορετικές κλάσεις και το συνολικό μέγεθος της εφαρμογής θα είναι 2864 bytes Ανώνυμες κλάσεις Επίσης είναι δυνατό να περιληφθεί μια ολόκληρη κλάση μέσα στο πεδίο εμβέλειας μίας έκφρασης. Η προσέγγιση αυτή ορίζει την ανώνυμη κλάση και δημιουργεί ένα στιγμιότυπο ταυτόχρονα. Για παράδειγμα θα μπορούσαμε να ξαναγράψουμε μέρος του TwoListenInner ώστε να περιέχει μία ανώνυμη κλάση ως εξής: public void go() { f = new Frame( Two listeners example ); f.add = ( North, new Label( Click and drag the mouse )); tf = new TextField(30); f.add ( South, tf); f.addmousemotionlistener(new MouseMotionAdapter() { public void mousedragged (MouseEvent e) { String s = Mouse dragging: X = + e.getx() + Y = + e.gety(); tf.settext(s); ); // προσοχή στην παρένθεση που κλείνει f.addmouselistener(new MouseEventHandler()); f.setsize(300, 200); f.setvisible(true); Ενώ οι ανώνυμες κλάσεις παρέχουν ακόμα μικρότερα μεγέθη αρχείων κλάσεων (η TwoListenInner με αμφότερους τους προσαρμοστές γραμμένους με χρήση ανώνυμων κλάσεων γίνεται μόνο 1291 bytes), όπως μπορείτε να δείτε ο κώδικας γίνεται όλο και περισσότερο μπερδεμένος. Οι ανώνυμες κλάσεις μπορούν να έχουν αρχικοποιήσεις αλλά όχι μέθοδοι δημιουργίας. Η λίστα των ορισμάτων που περνάνε στην έκφραση new (συνήθως κενή) μεταβιβάζεται στη μέθοδο δημιουργίας της υπερκλάσης Πώς λειτουργούν οι inner κλάσεις; Οι inner κλάσεις έχουν πρόσβαση στο πεδίο εμβέλειας της κλάσης που τις περιλαμβάνει, συνεπώς ο μεταγλωττιστής JDK 1.1 προσθέτει μία επιπλέον ιδιωτική μεταβλητή στιγμιοτύπου στην inner κλάση και μια μέθοδο δημιουργίας. Επιπρόσθετα, ο 12

13 μεταγλωττιστής εφαρμόζει αυτόματα το πεδίο εμβέλειας της κλάσης που την περιλαμβάνει στην inner κλάση, αντικαθιστώντας το συνήθη συμβολισμό με τελεία «.» με ένα «$». Συνεπώς ο τροποποιημένος πηγαίος κώδικας δείχνει κάπως έτσι στο μεταγλωττιστή: import java.awt.*; import java.awt.event.*; public class TwoListenInner { // Τα υπόλοιπα στοιχεία παραμένουν ως έχουν public void go() {... f.addmousemotionlistener (new TwoListenInner$MouseMotionHandler(this));... class TwoListenInner$MouseMotionHandler extends MouseMotionAdapter { // saved copy of TwoListenInner.this private TwoListenInner this$0; // Compiler generated constructor TwoListenerInner$MouseMotionHandler (TwoListenInner this$0) { this.this$0 = this$0; public void mousedragged(mouseevent e); String s = Mouse dragging: X = + e.getx() + Y = + e.gety(); this$0.tf.settext(s); Η κλάση Vector Η κλάση Vector παρέχει μεθόδους για εργασία με δυναμικούς πίνακες με στοιχεία διαφόρων τύπων. java.lang.object java.util.vector Σύνοψη public class Vector extends Object implements Cloneable 13

14 Κάθε διάνυσμα (vector) διατηρεί μία capacity (χωρητικότητα) και μία capacityincrement (αύξηση χωρητικότητας). Όπως προστίθενται στοιχεία σε ένα διάνυσμα, ο χώρος αποθήκευσης για το διάνυσμα αυξάνει σε τμήματα μεγέθους ίσο με τη μεταβλητή capacityincrement. Η χωρητικότητα ενός διανύσματος είναι πάντα τουλάχιστον ίση με το μέγεθος του διανύσματος (και συνήθως μεγαλύτερη) Μέθοδοι δημιουργίας Στη συνέχεια παρουσιάζονται οι μέθοδοι δημιουργίας της κλάσης Vector. public Vector() Δημιουργεί ένα κενό διάνυσμα public Vector(int initialcapacity) Δημιουργεί ένα κενό διάνυσμα με αποθηκευτικό χώρο ίσο με την καθορισμένη χωρητικότητα. public Vector(int initialcapacity, int capacityincrement) Δημιουργεί ένα κενό διάνυσμα με αποθηκευτικό χώρο ίσο με την καθορισμένη χωρητικότητα και την καθορισμένη capacityincrement Μεταβλητές Η κλάση Vector περιέχει τις ακόλουθες μεταβλητές στιγμιοτύπου: protected int capacityincrement το μέγεθος της αύξησης. (Αν είναι 0, το μέγεθος της ενδιάμεσης μνήμης διπλασιάζεται κάθε φορά που χρειάζεται να αυξηθεί το διάνυσμα). protected int elementcount το πλήθος των στοιχείων στην ενδιάμεση μνήμη. protected Object elementdata[] η ενδιάμεση μνήμη στην οποία αποθηκεύονται τα στοιχεία Μέθοδοι Στη συνέχεια παρουσιάζονται ορισμένες από τις μεθόδους της κλάσης Vector. Αναφερθείτε στο Java API για την περιγραφή όλων των μεθόδων της κλάσης. public final int size() Επιστρέφει το πλήθος των στοιχείων στο διάνυσμα. (Δεν είναι η χωρητικότητα του διανύσματος). public final boolean contains(object elem) Επιστρέφει true αν το καθορισμένο αντικείμενο είναι μια από τις τιμές στη συλλογή. public final int indexof(object elem) Αναζητεί το καθορισμένο στοιχείο ξεκινώντας από την πρώτη θέση και επιστρέφει ένα δείκτη σε αυτό (ή 1 αν δε βρεθεί το στοιχείο). Χρησιμοποιεί τη μέθοδο equals() του αντικειμένου, συνεπώς αν το αντικείμενο δεν υπερβαίνει τη μέθοδο equals() του Object θα συγκρίνει μόνο αναφορές αντικειμένων και όχι τα περιεχόμενα. public final synchronized Object elementat (int index) Επιστρέφει το στοιχείο που βρίσκεται στο συγκεκριμένο δείκτη. «Πετάει» ArrayIndexOutOfBoundException αν το index δεν είναι επιτρεπτό public final synchronized void setelementat(object obj, int index) Αντικαθιστά το στοιχείο στο συγκεκριμένο δείκτη με το συγκεκριμένο αντικείμενο 14

15 «Πετάει» ArrayIndexOutOfBoundException αν το index δεν είναι επιτρεπτό public final synchronized void removeelementat(int index) Διαγράφει το στοιχείο στο συγκεκριμένο δείκτη. «Πετάει» ArrayIndexOutOfBoundException αν το index δεν είναι επιτρεπτό public final synchronized void addelement(object obj) Προσθέτει το συγκεκριμένο αντικείμενο ως το τελευταίο στοιχείο του διανύσματος. public final synchronized void insertelementat(object obj, int index) Εισαγάγει το συγκεκριμένο αντικείμενο στη συγκεκριμένη θέση, μετακινώντας προς τα πάνω τα στοιχεία με ίσο ή μεγαλύτερο δείκτη. «Πετάει» ArrayIndexOutOfBoundException αν το index δεν είναι επιτρεπτό Παράδειγμα Vector Το ακόλουθο παράδειγμα μπορεί να χρησιμοποιηθεί για την προσθήκη στοιχείων διαφόρων τύπων σε ένα διάνυσμα και για την εκτύπωση των στοιχείων του διανύσματος. Σημείωση Το πρόγραμμα χρησιμοποιεί μεθόδους από τις κλάσεις που έχουμε ήδη περιγράψει στο κεφάλαιο αυτό. import java.util.*; public class MyVector extends Vector { public myvector () { super(1,1); // storage capacity & capacityincrement public void addint(int i) { addelement(new Integer(i)); // η addelement απαιτεί στοιχείο τύπου Object public void addfloat(float f) { addelement(new Float(f)); public void addstring(string s) { addelement(s); public void addchararray(char a[]) { addelement(a); public void printvector() { Object o; 15

16 int length = size(); // compare with capacity() System.out.println( Number of vector elements is + length + and they are: ); for (int i=0; i < length; i++) { o = elementat(i); if (o instanceof char[]) { //System.out.println(o.toString()); prints garbage System.out.println(String.copyValueOf((char[])o)); else { System.out.println(o.toString()); public static void main(string args[]) { MyVector v = new MyVector(); int digit = 5; float real = 3.14f; char letters[] = { a, b, c, d ; String s = new String( Hi there! ); v.addint(digit); v.addfloat(real); v.addstring(s); v.addchararray(letters); v.printvector(); Το πρόγραμμα παράγει την ακόλουθη έξοδο: $ java MyVector Number of vector elements is 4 and are: Hi there! abcd Ασκήσεις Επίπεδο 1: Τροποποίηση Bank 1. Ξαναγράψτε το rollover applet (Mover.java) ώστε να χρησιμοποιεί inner κλάσεις ή/και κλάσεις προσαρμοστές. 16

17 2. Συγκρίνετε το συνολικό μέγεθος των αρχείων.class που δημιουργούνται Επίπεδο 2: Προσθήκη μεθόδων find και delete στην κλάση MyVector 1. Προσθέστε μία μέθοδο find στην κλάση MyVector η οποία να επιστρέφει τη θέση του στοιχείου που μεταβιβάστηκε ως όρισμα. Η μέθοδος θα πρέπει να επιστρέφει 1 αν το όρισμα δε βρέθηκε στο διάνυσμα. Παράδειγμα εξόδου $ java MyVectorFind is located at index 1 Number of vector elements is 4 and are: Hi there! abcd $ java MyVectorFind c args[0] =c not found in vector Number of vector elements is 4 and are: Hi there! abcd 2. Προσθέστε μία μέθοδο delete στην κλάση MyVector η οποία να αφαιρεί όλα τα στοιχεία που ταιριάζουν στο όρισμα. Η μέθοδος θα πρέπει να επιστρέφει true ή false: true αν η διαγραφή πέτυχε και false διαφορετικά (με την έννοια ότι το στοιχείο δεν υπάρχει στο διάνυσμα). Παράδειγμα εξόδου $ java MyVectorDelete 3.14 Elements 3.14 successfully deleted from vector Number of vector elements is 3 and are: 5 Hi there! abcd 17

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 11: Vectors (διανύσματα)

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 11: Vectors (διανύσματα) ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 11: Vectors (διανύσματα) Μιχάλης Δρακόπουλος Σχολή Θετικών επιστημών Τμήμα Μαθηματικών ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (Java) Ενότητα 11 Vectors (διανύσματα) Τα vectors είναι δυναμικές δομές δεδομένων.

Διαβάστε περισσότερα

8. Το μοντέλο συμβάντων του AWT

8. Το μοντέλο συμβάντων του AWT 8. Το μοντέλο συμβάντων του AWT Τελειώνοντας αυτό το κεφάλαιο θα μπορείτε: Να γράφετε κώδικα που θα αντιμετωπίζει συμβάντα που θα συμβαίνουν στη διεπαφή με το χρήστη Να χρησιμοποιείτε τις κατάλληλες διεπαφές

Διαβάστε περισσότερα

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

public void printstatement() { System.out.println(Employee:  + name +  with salary:  + salary); Κληρονομικότητα Η κληρονομικότητα (inheritance) αποτελεί έναν από τους χαρακτηριστικότερους μηχανισμούς των αντικειμενοστρεφών γλωσσών προγραμματισμού. Επιτρέπει την δημιουργία μιας νέας κλάσης απορροφώντας

Διαβάστε περισσότερα

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

Κλάσεις και Αντικείµενα Κλάσεις και Αντικείµενα Γρηγόρης Τσουµάκας Τµήµα Πληροφορικής, Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης Κλάσεις και Αντικείµενα 2 Τα αντικείµενα σε µια αντικειµενοστρεφή γλώσσα προγραµµατισµού, µοντελοποιούν

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές Μαθήματα από το lab Υπενθύμιση: Η άσκηση ζητούσε να υλοποιήσετε μία κλάση vector που να διαχειρίζεται διανύσματα οποιουδήποτε

Διαβάστε περισσότερα

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

Αντικειµενοστρεφής Προγραµµατισµός 16 η διάλεξη Π. Σταθοπούλου pstath@ece.upatras.gr ή pstath@upatras.gr Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Φροντιστήριο : ευτέρα 11πµ-12πµ ΗΛ4 Προηγούµενη ιάλεξη

Διαβάστε περισσότερα

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

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack Κλάσεις στην Java Κλάσεις στη Java Παύλος Εφραιμίδης Θα δούμε τη διαδικασία δημιουργίας μιας κλάσης Θα υλοποιήσουμε μια κλάση για τη Δομή Δεδομένων Stack Java Κλάσεις στη Java 1 Java Κλάσεις στη Java 2

Διαβάστε περισσότερα

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

Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1 Κλάσεις στη Java Παύλος Εφραιμίδης Java Κλάσεις στη Java 1 Κλάσεις στην Java Θα δούμε τη διαδικασία δημιουργίας μιας κλάσης Θα υλοποιήσουμε μια κλάση για τη Δομή Δεδομένων Stack Java Κλάσεις στη Java 2

Διαβάστε περισσότερα

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

Αντικείµενα. ηµιουργία και χρησιµοποίηση αντικειµένων. ηµιουργία αντικειµένων Αντικείµενα ηµιουργία και χρησιµοποίηση αντικειµένων ηµιουργία αντικειµένων Για να δηµιουργήσω ένα νέο αντικείµενο χρησιµοποιώ τον τελεστή new µε τοόνοµατηςκλάσηςαπότηνοποίαθέλωναδηµιουργήσωένααντικείµενο,

Διαβάστε περισσότερα

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

2.1 Αντικειµενοστρεφής προγραµµατισµός 2.1 Αντικειµενοστρεφής προγραµµατισµός Στον αντικειµενοστρεφή προγραµµατισµό (object oriented programming, OOP) ένα πρόγραµµα υπολογιστή είναι ένα σύνολο αλληλεπιδρώντων αντικειµένων. Μπορεί να ειπωθεί

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Constructors, equals, tostring Constructors (Δημιουργοί) O Constructor είναι μια «μέθοδος» η οποία καλείται όταν δημιουργούμε το αντικείμενο

Διαβάστε περισσότερα

ΠΟΛΥΜΟΡΦΙΣΜΟΣ. 4.1 Κληρονομικότητα και Αρχή της Υποκατάστασης

ΠΟΛΥΜΟΡΦΙΣΜΟΣ. 4.1 Κληρονομικότητα και Αρχή της Υποκατάστασης ΠΟΛΥΜΟΡΦΙΣΜΟΣ Λόγω της θεμελιώδους σημασίας της έννοιας του πολυμορφισμού (polymorphism) στην αντικειμενοστρεφή σχεδίαση, κρίνεται σκόπιμο στο σημείο αυτό του βιβλίου να αναλυθεί εκτενέστερα. Ο πολυμορφισμός

Διαβάστε περισσότερα

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

Αντικειμενοστρεφής Προγραμματισμός Αντικειμενοστρεφής Προγραμματισμός Διδάσκουσα: Αναπλ. Καθηγήτρια Ανδριάνα Πρέντζα aprentza@unipi.gr Εργαστηριακός Συνεργάτης: Δρ. Βασιλική Κούφη vassok@unipi.gr Εργαστήριο 2 Βασικοί Τύποι Μεταβλητών Java

Διαβάστε περισσότερα

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

Κλάσεις. Τροποποιητές, ιασυνδέσεις, Πακέτα. Τροποποιητές ελέγχου προσπέλασης µεταβλητών και µεθόδων Κλάσεις Τροποποιητές, ιασυνδέσεις, Πακέτα Τροποποιητές ελέγχου προσπέλασης µεταβλητών και µεθόδων Υπάρχουν 4τροποποιητές: default, public, private, protected. Default: εν προηγείται τροποποιητής του ονόµατος

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Βασικά Στοιχεία της Java Βασικά Στοιχεία της Java Παύλος Εφραιμίδης Java Βασικά Στοιχεία της γλώσσας Java 1 Τύποι Δεδομένων Η Java έχει δύο κατηγορίες τύπων δεδομένων: πρωτογενείς (primitive) τύπους δεδομένων αναφορές Java Βασικά

Διαβάστε περισσότερα

Abstract classes, Interfaces ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

Abstract classes, Interfaces ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA Abstract classes, Interfaces ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA Τι θα συζητήσουμε σήμερα Αφαιρέσεις στη Java Abstract μέθοδοι και abstract κλάσεις Interfaces (=διασυνδέσεις, διεπαφές) Instanceof Παραδείγματα κώδικα Αφηρημένες

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Constructors Υπερφόρτωση Αντικείμενα ως παράμετροι ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Constructors Υπερφόρτωση Αντικείμενα ως παράμετροι Μαθήματα από το lab Boolean μεταβλητές: Συνήθως τα ονόματα που δίνουμε στις boolean μεταβλητές περιγράφουν

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας Στην άσκηση αυτή θα υλοποιήσετε μια κλάση Geometric η οποία διαχειρίζεται μια γεωμετρική ακολουθία ακεραίων

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Αντικειμενοστρεφής Προγραμματισμός Αντικειμενοστρεφής Προγραμματισμός Διδάσκουσα: Αναπλ. Καθηγήτρια Ανδριάνα Πρέντζα aprentza@unipi.gr Εργαστηριακός Συνεργάτης: Δρ. Βασιλική Κούφη vassok@unipi.gr Περιεχόμενα Java Classes Java Objects Java

Διαβάστε περισσότερα

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

Οντοκεντρικός Προγραμματισμός Οντοκεντρικός Προγραμματισμός Ενότητα 5: H ΓΛΩΣΣΑ C++ Διαφορές Java και C++ ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής ΔΙΑΦΟΡΕΣ JAVA C++ Η

Διαβάστε περισσότερα

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

Πακέτα (Packages) Φωλιασμένες ή Εσωτερικές Κλάσεις (Inner Classes) Παναγιώτης Σφέτσος, PhD (Object Oriented Programming) Πακέτα (Packages) Φωλιασμένες ή Εσωτερικές Κλάσεις (Inner Classes) PhD http://aetos.it.teithe.gr/~sfetsos/ sfetsos@it.teithe.gr Περιεχόμενα Μαθήματος Πακέτα (Packages) Φωλιασμένες

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Εισαγωγή στον Προγ/μό Η/Υ Εισαγωγή στον Προγ/μό Η/Υ Ενότητα 7 2ο μέρος: Επιπλέον έννοιες σχετικά με αντικείμενα Διδάσκων: Μιχάλης Τίτσιας Περιεχόμενα Τι μπορεί να περιέχει μια τάξη Μέθοδοι τάξης και σταθερές τάξης Πολυμορφισμός

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Διασυνδέσεις / Διεπαφές. Παναγιώτης Σφέτσος, PhD (Object Oriented Programming) Διασυνδέσεις / Διεπαφές PhD http://aetos.it.teithe.gr/~sfetsos/ sfetsos@it.teithe.gr Περιεχόμενα Μαθήματος Διεπαφές/Διασυνδέσεις (Interfaces) 2 Διεπαφές/Διασυνδέσεις (Interfaces)

Διαβάστε περισσότερα

2 ΓΡΑΜΜΙΚΕΣ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

2 ΓΡΑΜΜΙΚΕΣ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ 2 ΓΡΑΜΜΙΚΕΣ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ (Linear Data Structures) Ας θεωρήσουµε µία δοµή δεδοµένων το σύνολο των στοιχείων της οποίας είναι διατεταγµένο µε τέτοιο τρόπο ώστε να ισχύουν τα εξής: (α) υπάρχει ένα µόνο

Διαβάστε περισσότερα

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

Οντοκεντρικός Προγραμματισμός Οντοκεντρικός Προγραμματισμός Ενότητα 2: Η ΓΛΩΣΣΑ JAVA Βασικά Δομικά Στοιχεία ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής ΔΟΜΙΚΑ ΣΤΟΙΧΕΙΑ ΔΟΜΙΚΑ

Διαβάστε περισσότερα

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

Αντικειµενοστραφής Προγραµµατισµός Κλάσεις Αντικειµενοστραφής Προγραµµατισµός Κλάσεις Αντικείµενα Ιεραρχία κλάσεων Κλάσεις. Ιδιότητες Συµπεριφορά Ιδιότητες (Μεταβλητές) Συµπεριφορά (Μέθοδοι) Κληρονοµικότητα Μέθοδοι επικάλυψης Η χρήση του

Διαβάστε περισσότερα

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

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #15 Οι βασικές έννοιες που θα καλύψουμε Ομαδοποίηση αντικειμένων Εισαγωγή στις συλλογές Γενικές κλάσεις Iterators Συλλογές (ειδικά την ArrayList) Συνεχίζουμε την αναφορά στο θέμα της αφαίρεσης (abstraction)

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα ΑΝΑΦΟΡΕΣ new Όπως είδαμε για να δημιουργήσουμε ένα αντικείμενο χρειάζεται να καλέσουμε τη new. Για

Διαβάστε περισσότερα

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

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Κλάσεις και Αντικείμενα Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Κλάσεις Η γενική μορφή μιας κλάσης είναι η εξής: class class-name { private data and

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Constructors Μαθήματα από το lab Ένα πρόγραμμα αποτελείται από διάφορες κλάσεις και αντικείμενα αυτών των κλάσεων. Μία από τις κλάσεις

Διαβάστε περισσότερα

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

Βασικά Στοιχεία της Java Βασικά Στοιχεία της Παύλος Εφραιμίδης 1 Βασικά Στοιχεία της γλώσσας Τύποι Δεδομένων Η έχει δύο κατηγορίες τύπων δεδομένων: πρωτογενείς (primitive) iti τύπους δεδομένων δδ αναφορές 2 Βασικά Στοιχεία της

Διαβάστε περισσότερα

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

Κληρονομικότητα. Παύλος Εφραιμίδης pefraimi <at> ee.duth.gr. Java Κληρονομικότητα 1 Κληρονομικότητα Παύλος Εφραιμίδης pefraimi ee.duth.gr Java Κληρονομικότητα 1 Ιεραρχίες Κλάσεων Στην Java (και γενικότερα στον αντικειμενοστραφή προγραμματισμό) μπορεί από μία να κλάση να δημιουργηθεί

Διαβάστε περισσότερα

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008 ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008 Κατασκευαστές (Constructors) Ειδικός τύπος μεθόδων, οι οποίες: - είναι public και έχουν το ίδιο όνομα με αυτό της κλάσης - χρησιμοποιούνται για να αρχικοποιήσουν κάποιες

Διαβάστε περισσότερα

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

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες: Εργαστήριο Java Διδάσκουσα: Πρέντζα Ανδριάνα aprentza@unipi.gr Εργαστηριακοί Συνεργάτες: Γεωργιοπούλου Ρούλα Λύβας Χρήστος roulageorio@ssl-unipi.gr clyvas@unipi.gr Εργαστήριο 8 Πακέτα (Packages) Access

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Ειδικά Θέματα Προγραμματισμού Ειδικά Θέματα Προγραμματισμού Ενότητα 2: Εισαγωγή στον Αντικειμενοστραφή Προγραμματισμό Μιχάλας Άγγελος Τμήμα Μηχανικών Πληροφορικής ΤΕ Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης

Διαβάστε περισσότερα

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

5. Αντικείμενα και κλάσεις 5. Αντικείμενα και κλάσεις Ολοκληρώνοντας το κεφάλαιο αυτό θα μπορείτε: Να περιγράφετε την έννοια ενός αφηρημένου τύπου δεδομένων Να γράφετε κώδικα για να ορίσετε μία μέθοδο Να χρησιμοποιείτε τη δεσμευμένη

Διαβάστε περισσότερα

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

B. Ενσωμάτωση Ιθαγενών Μεθόδων B. Ενσωμάτωση Ιθαγενών Μεθόδων Στο τέλος αυτού του κεφαλαίου θα μπορείτε: Να δημιουργείτε κώδικα Java που θα φορτώνει βιβλιοθήκες και θα καλεί ιθαγενείς μεθόδους (native methods). Να χρησιμοποιείτε τη

Διαβάστε περισσότερα

. Μεθοδολογία Προγραμματισμού. Abstract Κλάσεις και Interfaces. Νικόλαος Πεταλίδης. Εισαγωγή Εαρινό Εξάμηνο 2014

. Μεθοδολογία Προγραμματισμού. Abstract Κλάσεις και Interfaces. Νικόλαος Πεταλίδης. Εισαγωγή Εαρινό Εξάμηνο 2014 .. Μεθοδολογία Προγραμματισμού Abstract Κλάσεις και Interfaces Νικόλαος Πεταλίδης Τμήμα Μηχανικών Η/Υ ΤΕΙ Κεντρικής Μακεδονίας Εισαγωγή Εαρινό Εξάμηνο 2014 Ν. Πεταλίδης (ΤΕΙ Κεντρικής Μακεδονίας) Μεθοδολογία

Διαβάστε περισσότερα

Παύλος Εφραιµίδης. Java. Κληρονοµικότητα

Παύλος Εφραιµίδης. Java. Κληρονοµικότητα κληρονοµικότητα Παύλος Εφραιµίδης 1 ιεραρχίες κλάσεων Στην (και γενικότερα στον αντικειµενοστρεφή προγραµµατισµό) µπορεί από µία κλάση να δηµιουργηθεί µια νέα κλάση απόγονος που κληρονοµεί όλα τα χαρακτηριστικά

Διαβάστε περισσότερα

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

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C# Εισαγωγή σε αντικειμενοστραφή concepts Και λίγη C# Κλάσεις Κλάση: τύπος δεδομένων που αποτελεί συλλογή πεδίων, ορισμών συναρτήσεων/μεθόδων και ορισμών άλλων τύπων δεδομένων. Αντίστοιχο σκεπτικό με struct

Διαβάστε περισσότερα

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

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2 Ανασκόπηση Μια εφαρμογή Java είναι ένα σύνολο από συνεργαζόμενες κλάσεις Διάλεξη #2: Αντικείμενα, Κλάσεις και Μέθοδοι Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό,, Slide 1 Εισαγωγή στον Αντικειμενοστρεφή

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι new Όπως είδαμε για να δημιουργήσουμε ένα αντικείμενο χρειάζεται να καλέσουμε τη new. Για τον πίνακα είπαμε ότι

Διαβάστε περισσότερα

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( ) ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Μορφές μεταβίβασης ορισμάτων σε συναρτήσεις (και μεθόδους) και οι επιπτώσεις τους Επιστροφή τιμών από κλήση συναρτήσεων Υπερφόρτωση

Διαβάστε περισσότερα

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

Οντοκεντρικός Προγραμματισμός Οντοκεντρικός Προγραμματισμός Ενότητα 2: Η ΓΛΩΣΣΑ JAVA Σύγκριση JAVA-C ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής ΣΥΓΚΡΙΣΗ JAVA - C ΤΥΠΟΙ

Διαβάστε περισσότερα

Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA Τι θα συζητήσουμε σήμερα Πώς υλοποιούμε συσχετίσεις μεταξύ κλάσεων απλές και πολλαπλές συσχετίσεις κληρονομικότητα Static, final Overloading Overriding Hiding

Διαβάστε περισσότερα

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

Μπορείτε να δηλώσετε πίνακα οποιουδήποτε τύπου είτε βασικού είτε κλάσης: 4. Πίνακες Τελειώνοντας αυτό το κεφάλαιο θα μπορείτε: Να δηλώνετε και να δημιουργείτε πίνακες βασικών τύπων, κλάσεων ή άλλων πινάκων Να δηλώνετε την ανάγκη, και να μπορείτε να αρχικοποιήσετε τα στοιχεία

Διαβάστε περισσότερα

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

Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου 7 η Διάλεξη: Σύντομη εισαγωγή στην Java Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου 7 η Διάλεξη: Σύντομη εισαγωγή στην Java Δρ. Απόστολος Γκάμας Λέκτορας (407/80) gkamas@uop.gr Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 1 Εισαγωγή

Διαβάστε περισσότερα

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 9 : ΑΦΗΡΗΜΕΝΕΣ ΚΛΑΣΕΙΣ

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 9 : ΑΦΗΡΗΜΕΝΕΣ ΚΛΑΣΕΙΣ Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 9 : ΑΦΗΡΗΜΕΝΕΣ ΚΛΑΣΕΙΣ INTERFACES ΕΣΩΤΕΡΙΚΕΣ ΚΛΑΣΕΙΣ (INNER CLASSES) Αφηρημένες Κλάσεις (Abstract Classes) (1/6) Οι αφηρημένες κλάσεις χρησιμοποιούνται για την

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Πρόγραµµα 9.1 Πέρασµα δεδοµένων στην µνήµη

Πρόγραµµα 9.1 Πέρασµα δεδοµένων στην µνήµη 9.1 Γενικά Οι εφαρµογές που δηµιουργούνται από ένα προγραµµατιστή µπορούν ανά πασά στιγµή να καταρρεύσουν από κάποιο λάθος κατά την λειτουργία τους. Αυτές οι καταστάσεις συµβαίνουν από αµέλεια του προγραµµατιστή

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Βασικά της γλώσσας JAVA 17 η διάλεξη Π. Σταθοπούλου pstath@ece.upatras.gr ή pstath@upatras.gr Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Φροντιστήριο : ευτέρα 11πµ-12πµ ΗΛ4 Προηγούµενη ιάλεξη

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Διάλεξη 16-17: Πολυμορφισμός (Polymorphism) Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 16-17: Πολυμορφισμός (Polymorphism) Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 16-17: Πολυμορφισμός (Polymorphism) Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: -Υπερφόρτωση (Overloading), Μεθόδων (Method Overloading), Τελεστών (Operator Overloading (C++, C#))

Διαβάστε περισσότερα

Wrapper Classes, Abstract Classes and Interfaces

Wrapper Classes, Abstract Classes and Interfaces Wrapper Classes, Abstract Classes and Interfaces Εβδοµάδα 3: Κλάσεις συσκευαστές, αφηρηµένες κλάσεις και διαπροσωπείες Αντικείµενα και µη-αντικείµενα Η Java παρέχει τύπους αντικειµένων και απλούς τύπους

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Abstract classes, Interfaces ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

Abstract classes, Interfaces ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA Abstract classes, Interfaces ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA Τι θα συζητήσουμε σήμερα Αφαιρέσεις στη Java Abstract μέθοδοι και abstract κλάσεις Interfaces (=διασυνδέσεις, διεπαφές) Instanceof Παραδείγματα κώδικα Αφηρημένες

Διαβάστε περισσότερα

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

Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #12 Διάγραμμα κλάσεων [Class diagram] Διάλεξη #12: Υπο-τύποι και πολυμορφισμός [sub-typing and polymorphism] Database Music Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό,, Slide 1 Εισαγωγή στον Αντικειμενοστρεφή

Διαβάστε περισσότερα

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

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η μέθοδος main(), εμφάνιση μηνυμάτων, Java προγράμματα που εκτελούν αριθμητικές πράξεις Γαβαλάς Δαμιανός

Διαβάστε περισσότερα

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

Εργαστήριο 02: Προγραμματισμός με Γενικούς Τύπους (JAVA Generics) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο 02: Προγραμματισμός με Γενικούς Τύπους (JAVA Generics) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Generic Types Τα Generics έχουν προστεθεί στη JAVA από το 2004 ως μέρος του J2SE 5.0 Με τη χρήση

Διαβάστε περισσότερα

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

Αρχές Τεχνολογίας Λογισμικού Εργαστήριο Αρχές Τεχνολογίας Λογισμικού Εργαστήριο Κωδικός Μαθήματος: TP323 Ώρες Εργαστηρίου: 2/εβδομάδα (Διαφάνειες Νίκου Βιδάκη) 1 JAVA Inheritance Εβδομάδα Νο. 3 2 Προηγούμενο μάθημα (1/2) Τι είναι αντικείμενο?

Διαβάστε περισσότερα

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

Κλάσεις. Κατηγορίες Αντικειµένων. Κλάσεις. Φυσικά Αντικείµενα. Χώρος = Οµάδα Φυσικών Αντικειµένων. Πρόγραµµα = Οµάδα Αντικειµενοστραφής Προγραµµατισµός Αντικείµενα Ιεραρχία κλάσεων. Ιδιότητες Συµπεριφορά Ιδιότητες (Μεταβλητές) Συµπεριφορά (Μέθοδοι) Κληρονοµικότητα Μέθοδοι επικάλυψης Η χρήση του this και του super Αντικειµενοστραφής

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πίνακες Κλάσεις και Αντικείμενα Μαθήματα από το πρώτο εργαστήριο Δημιουργία αντικειμένου Scanner Scanner input = new Scanner(System.in); Το αντικείμενο input

Διαβάστε περισσότερα

Γενικά (για τις γραπτές εξετάσεις)

Γενικά (για τις γραπτές εξετάσεις) Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Διάλεξη #12 η : Επανάληψη Γαβαλάς Δαμιανός dgavalas@aegean.gr Γενικά (για τις γραπτές εξετάσεις) Δεν υπάρχει αυστηρά ορισμένη «ύλη εξετάσεων» (καθώς δεν έχετε

Διαβάστε περισσότερα

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

HelloWorld. Παύλος Εφραιμίδης. Java Το πρόγραμμα HelloWorld 1 HelloWorld Παύλος Εφραιμίδης Java Το πρόγραμμα HelloWorld 1 Το πρόγραμμα HelloWorld.java Σχόλια στη Java /** * The HelloWorld class */ class HelloWorld { public static void main(string[] args) { System.out.println("Hello

Διαβάστε περισσότερα

ΑΠΛΗ ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ

ΑΠΛΗ ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ Μηχανισµός υλοποίησης των σχέσεων γενίκευσης/εξειδίκευσης µεταξύ κλάσεων Η σχέση εξειδίκευσης «υποκλάση-της» (subclass-of)είναι γνωστή σαν σχέση «είναι ένα» (isa) ή «είναι ένα είδος» (ako:

Διαβάστε περισσότερα

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

ΕΠΛ233 Βιβλιοθήκες και Προσδιοριστές Πρόσβασης στην JAVA Βιβλιοθήκες και Προσδιοριστές Πρόσβασης στην JAVA 2 «Μονάδα Μετάφρασης» 2 «Μονάδα Μετάφρασης» Όταν δημιουργείται ένα αρχείο πηγαίου κώδικα στην Java, το αρχείο καλείται µονάδα µετάφρασης (compilation unit)

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Constructors, equals, tostring Αντικείμενα ως παράμετροι ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Constructors, equals, tostring Αντικείμενα ως παράμετροι Constructors (Δημιουργοί) O Constructor είναι μια «μέθοδος» η οποία καλείται όταν δημιουργούμε το αντικείμενο

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Τ.Ε.Ι. Μεσολογγίου, Τµήµα τηλεπικοινωνιακών Συστημάτων & Δικτύων

Τ.Ε.Ι. Μεσολογγίου, Τµήµα τηλεπικοινωνιακών Συστημάτων & Δικτύων Εργαστήριο Java Lab09 Αντικείμενο: Πολυνηματικές εφαρμογές Η χρήση περισσότερων από μιας ροής εντολών μέσα σε ένα πρόγραμμα είναι γνωστή ως multithreading. H κάθε μια ροή εντολών μέσα στο πρόγραμμα ονομάζεται

Διαβάστε περισσότερα

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

Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #13 Wrapper Classes, Abstract Classes and Interfaces Διάλεξη #13: Μεταβλητές/μέθοδοι κλάσης, αφηρημένες κλάσεις και διαπροσωπείες Μεταβλητές /πεδία κλάσης [class variables] Τα αντικείμενα ανήκουν σε κλάσεις

Διαβάστε περισσότερα

Προγράμματα με δομή Κληρονομικότητας

Προγράμματα με δομή Κληρονομικότητας Προγράμματα με δομή Κληρονομικότητας Η μέθοδος print της εφαρμογής DoME Η μέθοδος print στην κλάση Item τυπώνει: title: A Swingin Affair (64 mins) my favorite Sinatra album title: O Brother, Where Art

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι String Interning ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι String Interning new Όπως είδαμε για να δημιουργήσουμε ένα αντικείμενο χρειάζεται να καλέσουμε τη new. Για τον

Διαβάστε περισσότερα

Αντικειμενοστρέφεια. Henri Matisse, Harmony in Red, Κωστής Σαγώνας Νίκος Παπασπύρου

Αντικειμενοστρέφεια. Henri Matisse, Harmony in Red, Κωστής Σαγώνας Νίκος Παπασπύρου Αντικειμενοστρέφεια Henri Matisse, Harmony in Red, 1908 Κωστής Σαγώνας Νίκος Παπασπύρου Ορισμοί αντικειμενοστρέφειας Ποιοι είναι οι ορισμοί των παρακάτω; Αντικειμενοστρεφής

Διαβάστε περισσότερα

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 17/1/08 ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 17/1/08 Constructors (Κατασκευαστές) Ειδικός τύπος μεθόδων που δημιουργούν αντικείμενα μιας κλάσης και: Εκτελούνται κατά την αρχικοποίηση των αντικειμένων

Διαβάστε περισσότερα

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

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6 Ανασκόπηση Μια εφαρµογή Java είναι ένα σύνολο από συνεργαζόµενες κλάσεις Εβδοµάδα 2: Αντικείµενα, Κλάσεις και Μέθοδοι Εισαγωγή στον Προγραµµατισµό,,, Slide 1 Εισαγωγή στον Προγραµµατισµό,,, Slide 2 Ανασκόπηση:

Διαβάστε περισσότερα

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

Οντοκεντρικός Προγραμματισμός Οντοκεντρικός Προγραμματισμός Ενότητα 2: Η ΓΛΩΣΣΑ JAVA Κληρονομικότητα ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ

Διαβάστε περισσότερα

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

(Διαφάνειες Νίκου Βιδάκη) (Διαφάνειες Νίκου Βιδάκη) JAVA Inheritance Εβδομάδα Νο. 3 2 Προηγούμενο μάθημα (1/2) Τι είναι αντικείμενο? Ανάλυση αντικειμένων Πραγματικά αντικείμενα Καταστάσεις Συμπεριφορές Αντικείμενα στον προγραμματισμό

Διαβάστε περισσότερα

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής Ενότητα 5: Δείκτες και Δυναμική Δέσμευση- Αποδέσμευση Μνήμης στη C/ Υλοποίηση ΑΤΔ Συνδεδεμένη Λίστα με δείκτες /Ένα πακέτο για τον ΑΤΔ Συνδεδεμένη Λίστα Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν

Διαβάστε περισσότερα

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

Κλάσεις και αντικείμενα #include <iostream.h< Κλάσεις και αντικείμενα #include class Person private: char name[30]; int age; public: void readdata() cout > name; cout > age; void

Διαβάστε περισσότερα

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

Αντικειμενοστρεφής Προγραμματισμός Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων Αντικειμενοστρεφής Προγραμματισμός 16/4/2018 Δρ. Ανδριάνα Πρέντζα Αναπληρώτρια Καθηγήτρια aprentza@unipi.gr Τύποι της Java Primitives vs References Οι πρωταρχικοί

Διαβάστε περισσότερα

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

Αντικειμενοστραφής Προγραμματισμός Κλάσεις Αντικειμενοστραφής Προγραμματισμός Κλάσεις-Αντικείμενα Ένα παράδειγμα Συναρτήσεις κατασκευής (Constructors) Συνάρτηση καταστροφής (Destructor) Συναρτήσεις πρόσβασης (Access Functions) Συνάρτηση

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Υπερφόρτωση Αντικείμενα σαν ορίσματα ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Υπερφόρτωση Αντικείμενα σαν ορίσματα ΥΠΕΡΦΟΡΤΩΣΗ H κλάση Car Μια κλάση που κρατάει την θέση ενός αυτοκινήτου. Μέθοδος move(): μετακινεί το αυτοκίνητο κατά μία

Διαβάστε περισσότερα

Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA Τι θα συζητήσουμε σήμερα Πώς υλοποιούμε συσχετίσεις μεταξύ κλάσεων απλές και πολλαπλές συσχετίσεις κληρονομικότητα Static, final Overloading Overriding Hiding

Διαβάστε περισσότερα

class object Database Database Item Item [sub-typing and polymorphism] MusicCD Video MusicCD Video

class object Database Database Item Item [sub-typing and polymorphism] MusicCD Video MusicCD Video ιάγραµµα κλάσεων [Class diagram] Εβδοµάδα 2: Υπο-τύποι και πολυµορφισµός [sub-typing and polymorphism] Database Music Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 1 Σχεδίαση-Ανάπτυξη

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας Ένα ιστόγραμμα τιμών μετράει για ένα σύνολο από τιμές πόσες φορές εμφανίστηκε η κάθε τιμή. Για παράδειγμα

Διαβάστε περισσότερα

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

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ Κων. Κόκκινος Μεταβλητές-1 Οι μεταβλητές αποτελούν θέσεις μνήμης στις οποίες αποθηκεύονται τιμές αντίστοιχες

Διαβάστε περισσότερα

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 6/12/07 Πρώτοι αριθμοί ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 6/12/07 Ένας ακέραιος μεγαλύτερος του 1 είναι πρώτος αν έχει ακριβώς δύο διαιρέτες (τη μονάδα και τον εαυτό του). Πρόβλημα: έλεγχος

Διαβάστε περισσότερα

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα Μαθήματα από το πρώτο εργαστήριο Δημιουργία αντικειμένου Scanner Scanner input = new Scanner(System.in); Το

Διαβάστε περισσότερα

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

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5 Περιεχόµενα 1 Εισαγωγή στις οµές εδοµένων 3 2 Στοίβα (Stack) 5 i ΠΕΡΙΕΧΟΜΕΝΑ ΠΕΡΙΕΧΟΜΕΝΑ ii Πληροφορίες Εργαστηρίου Σκοπός του εργαστηρίου Το εργαστήριο οµές εδοµένων αποσκοπεί στην εφαρµογή των τεχνολογιών

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κληρονομικότητα

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

Διαβάστε περισσότερα