Εισαγωγή στον αντικειμενοστραφή προγραμματισμό

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Κληρονομικότητα. Εισαγωγή  Κληρονομικότητα (Inheritance) καλείται ο μηχανισμός με τον οποίο μία νέα κλάση που ονομάζεται παράγωγη (derived class) δημιουργείται.
Advertisements

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Μέθοδοι που επιστρέφουν αντικείμενα Copy Constructor Deep and Shallow Copies.
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Πινακες (Arrays) Σημασια Συνταξη Αρχικοποιηση Προσβαση Παραμετροι
Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού
Κεφάλαιο 6 Threads. 2 Στον παραδοσιακό προγραμματισμό όταν ένα πρόγραμμα εκτελείται ονομάζεται process (διεργασία) και οι εντολές του εκτελούνται σειριακά.
Μάθημα : Βασικά Στοιχεία της Γλώσσας Java
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Constructors, equals, toString Αντικείμενα ως παράμετροι.
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Εισαγωγή στον Προγραμματισμό, Αντώνιος Συμβώνης, ΣΕΜΦΕ, ΕΜΠ, Slide 1 Εβδομάδα 3: Υλοποίηση μεθόδων.
Γλωσσική Τεχνολογία Object-Orientation in Python.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πίνακες Κλάσεις και Αντικείμενα.
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Φροντιστήρια Εισηγητής: Σπύρος Αργυρόπουλος Μέλος ΕΤΕΠ Εργαστήριο Προγραμματισμού & Τεχνολογίας Ευφυών Συστημάτων.
Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 1 Εβδομάδα 2: Υπο-τύποι και πολυμορφισμός [sub-typing and polymorphism]
Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής Αντώνιος Συμβώνης, ΕΜΠ, Slide 1 Week 4: Exceptions Εβδομάδα 4: Εξαιρέσεις [Exceptions]
Αντικείμενα, Κλάσεις και Μέθοδοι
Επανάληψη βασικών αρχών του αντικειμενοστρεφούς προγραμματισμού
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Στατικές μέθοδοι και μεταβλητές Εσωτερικές κλάσεις.
Σύγκριση Java και C++ Μεταπτυχιακό Εφαρμοσμένης Πληροφορικής - Αλέξανδρος Χατζηγεωργίου, Νοέμβριος 2004.
Προγραμματισμός ΙΙ Διάλεξη #6: Απλές Δομές Ελέγχου Δρ. Νικ. Λιόλιος.
ΣΥΝΑΡΤΗΣΕΙΣ.
Αντικειμενοστρεφής Προγραμματισμός ΚΛΑΣΕΙΣ ΙΙ. Υπερφόρτωση (Overloading) Όταν το ίδιο όνομα συνάρτησης (μεθόδου) χρησιμοποιείται για περισσότερες από.
Προγραμματισμός ΙΙ Διάλεξη #5: Εντολές Ανάθεσης Εντολές Συνθήκης Δρ. Νικ. Λιόλιος.
Εισαγωγή στον Προγραμματισμό, Αντώνιος Συμβώνης, ΣΕΜΦΕ, ΕΜΠ, Slide 1 Εβδομάδα 11: Εκτέλεση Java χωρίς το BlueJ.
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Κληρονομικότητα.
Εισαγωγή στον αντικειμενοστραφή προγραμματισμό Κλάσεις και αντικείμενα Κλάσεις και αντικείμενα Κατασκευαστές κλάσεων (constructors) Κατασκευαστές κλάσεων.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές.
1 Εισαγωγή στη Java Χρήσιμες Διευθύνσεις Χαρακτηριστικά της Java Εργαλεία της Java Εργαλεία της Java Μεταγλώττιση στοιχειωδών εφαρμογών.
Ποιότητα Λογισμικού Ενότητα 2: Παραμετρικοί έλεγχοι στο JUnit. Διδάσκων: Γεώργιος Κακαρόντζας, Καθηγητής Εφαρμογών. Τμήμα Μηχανικών Πληροφορικής, Τεχνολογικής.
ΑΝΑΚΕΦΑΛΑΙΩΣΗ 26 Οκτωβρίου Αντικειμενοστρεφής Προγραμματισμός Ένα νέο προγραμματιστικό μοντέλο (paradigm) το οποίο στηρίζεται στις κλάσεις και τα.
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Τάξεις και Αφαίρεση Δεδομένων.
Applets Εκμεταλλεύονται τo γραφικό υπόβαθρο που παρέχουν οι browsers, έχοντας έτσι τη δυνατότητα προβολής γραφικών και τη δυνατότητα υλοποίησης ενός γραφικού.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Copy Constructor Deep and Shallow Copies.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πολυμορφισμός – Αφηρημένες κλάσεις Interfaces (διεπαφές)
Τμήμα Πληροφορικής και Τηλεπικοινωνιών
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Τάξεις και Αφαίρεση Δεδομένων.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές.
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Τάξεις και Αφαίρεση Δεδομένων.
Threads Στον παραδοσιακό προγραμματισμό όταν ένα πρόγραμμα εκτελείται ονομάζεται process (διεργασία) και οι εντολές του εκτελούνται σειριακά η μία μετά.
1 Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής Πανεπιστήμιο Πατρών ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Τάξεις και Αφαίρεση Δεδομένων.
Applets Εκτελούνται από τον appletviewer και από Java enabled web browsers Εκμεταλλεύονται τo γραφικό υπόβαθρο που παρέχουν οι browsers, έχοντας έτσι τη.
1 Κεφάλαιο 2 Εισαγωγή στον αντικειμενοστραφή προγραμματισμό.
Κεφάλαιο 4 Εξαιρέσεις. Όταν σε ένα πρόγραμμα συμβεί κάποιο λάθος, ο κώδικας εγείρει (throw) μία εξαίρεση. Στη Java oι εξαιρέσεις εκπροσωπούνται από αντικείμενα.
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 9: Κληρονομικότητα. Διδάσκων: Νικόλαος Θ Λιόλιος, Καθηγητής. Τμήμα.
Μέθοδοι Μέθοδοι Δημιουργοί, Υπερφόρτωση και Υπέρβαση Μεθόδων.
Κεφάλαιο 3 Τύποι Δεδομένων - Τελεστές. Πρωτογενείς τύποι δεδομένων: int, float, double, chars ΤύποςΌνομαΜέγεθος byte 8-bit signed, short 16-bit.
Εισαγωγή στη Java (Μέρος B’) Για όσους γνωρίζουν C++ Βασίλης Στούμπος
Δικτυακός Προγραμματισμός (Θ) Ενότητα 1: Εισαγωγή - Επανάληψη από τη Java Ιωάννης Βογιατζής Τμήμα Μηχανικών Πληροφορικής ΤΕ Ανοικτά Ακαδημαϊκά Μαθήματα.
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Αντικειμενοστραφής Προγραμματισμός Ι Ενότητα 8: Κατασκευαστές. Διδάσκων: Νικόλαος Θ Λιόλιος, Καθηγητής. Τμήμα.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα.
Αντικειμενοστραφής Προγραμματισμός Ι
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πολυμορφισμός – Αφηρημένες κλάσεις Interfaces (διεπαφές) Ένα μεγάλο παράδειγμα.
Αντικειμενοστραφής Προγραμματισμός ΙΙ
ΜΕΤΑΒΛΗΤΕΣ-ΣΤΑΘΕΡΕΣ -ΕΚΦΡΑΣΕΙΣ
ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ
Οντοκεντρικός Προγραμματισμός
Βασικές έννοιες Αντικειμενοστραφούς Προγραμματισμού ΙΙ
Βασικές ένοιες Αντικειμενοστραφούς Προγραμματισμού
Κατανεμημένα Συστήματα
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Κλάσεις και αντικείμενα
Βασικές έννοιες Αντικειμενοστραφούς Προγραμματισμού ΙΙ
Wrapper Classes, Abstract Classes and Interfaces
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Εισαγωγή στον Προγ/μό Υπολογιστών
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Μεταγράφημα παρουσίασης:

Εισαγωγή στον αντικειμενοστραφή προγραμματισμό Κλάσεις και αντικείμενα Κληρονομικότητα (inheritance) Υπερκάλυψη (overriding) Υπερφόρτωση (overloading) Κατασκευαστές κλάσεων (constructors) Προσδιοριστές πρόσβασης (access specifiers) Τροποποιητές (modifiers) Διασυνδέσεις (interfaces) Πακέτα (packages)

Κλάσεις Σε αντικειμενοστραφείς γλώσσες προγραμματισμού δίνεται η δυνατότητα σχεδιάσης νέων και σύνθετων τύπων δεδομένων Κλάση: σύνθετη δομή δεδομένων σχεδιασμένη από τον προγραμματιστή Μια κλάση περιέχει ως μέλη της μεταβλητές (member variables) και συναρτήσεις-μέθοδοι (member functions) Ορισμός κλάσης: class myClass { Δήλωση μεθόδων και μεταβλητών . . . }

Κλάσεις και Αντικείμενα Το αντικείμενο αυτό καθ' εαυτό είναι μια οντότητα στη μνήμη η οποία περιέχει δεδομένα καθώς και μεθόδους. Mέσω των μεθόδων μπορούμε να επικοινωνήσουμε με το αντικείμενο και να αλλάξουμε τα δεδομένα του. Αντίθετα η κλάση είναι απλώς ένα πρότυπο για την δημιουργία αντιγράφων του ίδιου αντικειμένου. Μια κλάση είναι το αντίστοιχο των τύπων δεδομένων για τις μεταβλητές (στον δομημένο προγραμματισμό). Οι γνωστοί τύποι δεδομένων int, float, double, char θεωρούνται πρωτογενείς τύποι δεδομένων.

Ένα παράδειγμα κλάσης (μητρώο εργαζομένων) class EmployeeRecord { String name; String address; int salary; public void setSalary (int employeeSalary ) { salary = employeeSalary; } public int getSalary ( ) { return salary; } } Πρότυπο δημιουργίας μητρώου εργαζομένων: Ονοματεπώνυμο Διεύθυνση Μηνιαίες αποδοχές Το πρότυπο (κλάση) καθορίζει τη δομή του μητρώου κάθε εργαζομένου (αντικείμενο)

Πρόσβαση σε δεδομένα και μεθόδους αντικειμένων κλάσεων (που έχουν δηλωθεί public) <object>.<member variable> Π.χ. someEmployeeRecord.salary = 1500; ( ανάθεση της τιμής 1500 στη μεταβλητή salary ) Κλήση μεθόδων: <object>.<member function> Π.χ. 1. income=someEmployeeRecord.getSalary( ); ( Η μεταβλητή income λαμβάνει την τιμή που επιστρέφει η getSalary ( ) ) 2. someEmployeeRecord.setSalary(1500); (εκτέλεση της μεθόδου setSalary περνώντας ως όρισμα την τιμή 1500)

Παράδειγμα class Employee { int salary; int bonus; public void setSalary (int employeeSalary ) { salary = employeeSalary } int getSalary ( ) { return salary; } } Employee John; John =new Employee ( ); //Sos αγνοείτε πάντα τις εντολές με κόκκινο !!!!!!!!! //Είναι απαραίτητες αλλά εξηγούνται σε επόμενες // διαφάνειες!!! John.setSalary (1200); John.bonus = 500; int someSalary =John.getSalary ( );

Κληρονομικότητα (inheritance) Συχνά δημιουργούμε κλάσεις που εμπεριέχουν δεδομένα και μεθόδους που έχουν οριστεί σε προϋπάρχουσες κλάσεις Βολική η δημιουργία μιας νέας κλάσης (υποκλάση) που εμπεριέχει τη λειτουργικότητα μιας της προϋπάρχουσας κλάσης (υπερκλάση) Ορισμός μιας υποκλάσης: με τη χρήση της δεσμευμένης λέξης extends

Ένα παράδειγμα κληρονομικότητας class Parent { int a; public void foo () {…..} } class Child extends Parent int b; public void test( ); Parent Child Child myChild; myChild = new Child( ); myChild.foo(); myChild.a = someInteger ; // Please ignore this red line for now Έγκυρες κλήσεις, εφόσον η κλάση Child κληρονομεί μεταβλητές και μεθόδους της κλάσης Parent

Υπερκάλυψη μεταβλητών και μεθόδων (overriding) Child myChild; myChild = new Child(); //ignore!! myChild.foo(); Εκτελείται η συνάρτηση foo() που ορίστηκε στο σώμα της υποκλάσης Child. Η συνάρτηση foo() που ορίστηκε στην κλάση Parent παρακάμπτεται. Πώς καλούμε μέσα από την κλάση Child τη foo() της κλάσης Parent; class Parent { public void foo() { ……. } } class Child extends Parent { διαφοροποιημένος κώδικας }

Η λέξη super Η δεσμευμένη λέξη super προσφέρει πρόσβαση σε μεταβλητές και μεθόδους της υπερκλάσης class Parent { public void foo( ) {……..} } class Child extends Parent public void foo( ) {……} Παράκαμψη της foo( ) της υπερκλάσης public void someChildFunction( ) super.foo( ); Εκτελείται ο κώδικας της foo( ) της κλάσης Parent

Η δεσμευμένη λέξη this Η δεσμευμένη λέξη this αποτελεί έναν τρόπο αναφοράς στο τρέχον αντικείμενο. Χρήσιμη για τον διαχωρισμό μεταβλητών-μελών από ορίσματα συναρτήσεων σε περίπτωση που τα ονόματά τους ταυτίζονται. class EmployeeRecord { int salary; public void setInt (int salary) { this.salary = salary; } }

Υπερφόρτωση (overloading) Στις object oriented γλώσσες επιτρέπεται ο ορισμός μίας μεθόδου με τo ίδιο όνομα δύο ή περισσότερες φορές αρκεί να έχουν διαφορετικές λίστες παραμέτρων.   class number { int a;   void add(int x) { a += x; } void add(int x, int y) { a = x+y; void add(number n) { a += n.getA(); int getA() { return a; Number N1, N2; N1 = new number(); N2 = new number(); N1.add(3); // καλεί την 1η add N1.add(3, 5); // καλεί την 2η add N1.add(N2); // καλεί την 3η add

Σχέση κλάσεων-αντικειμένων int a int Ορισμός μεταβλητής αντίστοιχου τύπου Τύπος Δεδομένων Κλάση: σύνθετος τύπος δεδομένων Αντικείμενο: στιγμιότυπο (instance) μιας κλάσης Employee John=new Employee( ) Class Employee{…..} Αρχικοποίηση αντικειμένου κλάσης Ορισμός κλάσης

Κατασκευαστές (Constructors) Συναρτήσεις που εκτελούνται κατά την αρχικοποίηση του αντικειμένου μιας κλάσης. Χρησιμοποιούνται για την απόδοση τιμών στις μεταβλητές-μέλη ενός αντικειμένου κατά τη δημιουργία του. Έχουν το ίδιο όνομα με την κλάση την οποία αρχικοποιούν. Οι κατασκευαστές ΔΕΝ ΕΠΙΣΤΡΕΦΟΥΝ ΤΙΜΗ.

Παραδείγματα κατασκευαστών class Rectangle { int height; int width; public Rectangle ( ) height = 1; width = 1; } class Rectangle { int height; int width; public Rectangle (int rectHeight, int rectWidth) height = rectHeight; width = rectWidth; }

Πολλαπλοί κατασκευαστές Για μια κλάση μπορούν να οριστούν περισσότεροι του ενός κατασκευαστές και να επιλεγεί ένας από αυτούς κατά την αρχικοποίηση (constructor overloading) Αν ο προγραμματιστής δεν ορίσει κατασκευαστή, υφίσταται ο default constructor (κατασκευαστής χωρίς ορίσματα). Υλοποίηση ενός κατασκευαστή από τον προγραμματιστή αυτομάτως αναιρεί τον default constructor.

Παράδειγμα πολλαπλών κατασκευαστών α) myClass Test1 = new myClass( ); Καλείται ο constructor χωρίς ορίσματα (default constructor), συνεπώς: a = 0 b = 0 class myClass { int a; int b; myClass() a = 0; b = 0; } myClass( int alpha, int beta ) a = alpha; b=beta; β) myClass Test2 = new myClass( 2 , 3 ); a = 2 b = 3

Διαδικασία αρχικοποίησης υποκλάσης Επιτελείται διαδοχική εκτέλεση των κατασκευαστών με τρόπο ιεραρχικό (από τις υπερκλάσεις προς τις υποκλάσεις). class Parent { Parent( ) {………} } class Child extends Parent Child( ) {……..} Parent ( ) Child ( ) Κατά τη δημιουργία ενός νέου αντικειμένου μιας υποκλάσης. Πχ. Child Nik = new Child( ); Eκτελείται αρχικά πάντα ο default constructor της υπερκλάσης (εκτός κι αν ο προγραμματιστής αλλάξει τη συμπεριφορά του constructor της υποκλάσης)

Αρχικοποίηση υποκλάσεων (πολλαπλοί κατασκευαστές) Αρχικοποίηση υποκλάσεων (πολλαπλοί κατασκευαστές) class Child extends Parent { Child( ) { } Child (int alpha, int beta) { super (alpha,beta); } } class Parent { int a; int b; Parent ( ) a = 0; b = 0; } Parent(int alpha, int beta) a = alpha; b = beta; Child myChild = new Child(); Καλεί τον default constructor του Parent, άρα α = b = 0 Child myChild = new Child ( 1 , 2 ); a = 1, b = 2

Καταστροφή αντικειμένων Σε αντίθεση με τη γλώσσα C, στη Java η κατάργηση αντικειμένων δεν επιτελείται από το χρήστη αλλά από το rutime system της Java. Garbage collector: Εντοπίζει αντικείμενα που δεν πρόκειται να ξαναχρησιμοποιηθούν στο μέλλον και τα καταργεί, αποδεσμεύοντας τη μνήμη που καταλαμβάνουν.

Προσδιοριστές πρόσβασης Καθορίζουν τα δικαιώματα πρόσβασης στις μεταβλητές και στις μεθόδους της κλάσης public: ορατά από οποιασδήποτε κλάση private: ορατά μόνο από την κλάση στην οποία ανήκουν protected: ορατά από την κλάση στην οποια ανήκουν και από υποκλάσεις της Χωρίς δήλωση: ορατά από κλάσεις που ανήκουν στο ίδιο package

Παράδειγμα Παρατηρήσεις: class A { private int a; public int getInt() {return a;} } class B private int b; void foo() A myA = new A(); b = myA .a; ΛΑΘΟΣ b = myA .getInt(); ΣΩΣΤΟ Παρατηρήσεις: Αν και η μεταβλητή a είναι private, η τιμή της μπορεί να παραληφθεί από την κλάση B μέσω της public συνάρτησης getInt (). Συνήθως οι μεταβλητές δηλώνονται private και οι όποιες τροποποιήσεις των τιμών τους επιτελούνται από μεθόδους που ορίζονται public. Δηλ. οι public μέθοδοι ορίζουν ένα interface, αποκρύπτοντας την εσωτερική δομή της κλάσης

Προσδιοριστές πρόσβασης σε κλάσεις public: κλάση ορατή απο οποιαδήποτε άλλη κλάση Χωρίς δήλωση: κλάση ορατή μόνο από κλάσεις που ανήκουν στο ίδιο package

Ο τροποποιητής final α) Για μεταβλητές: Δεν αλλάζει η τιμή τους μετά την αρχικοποίησή τους β) Για μεθόδους: Δεν παρακάμπτονται σε υποκλάσεις γ) Για κλάσεις: Δεν κληρονομούνται

Παραδείγματα private final int a = 5; a = 6 ; ΛΑΘΟΣ class A { public final void foo(); } class B extends A public void foo( ) {...} ΛΑΘΟΣ final class A { ….. } class B extends A { …} ΛΑΘΟΣ

Ο τροποποιητής abstract Σε κλάσεις που κληρονομούνται (παρέχουν κοινό εννοιολογικό υπόβαθρο στις υποκλάσεις τους), συχνά ορίζουμε κενές συναρτήσεις που υλοποιούνται στις υποκλάσεις abstract <returned type> methodName( ) ; Οι abstract συναρτήσεις παρακάμπτονται σε υποκλάσεις Κλάσεις μέσα στις οποίες δηλώνεται έστω και μία abstract μέθοδος, χαρακτηρίζονται επίσης abstract. abstract public class A { abstract public void foo ( ); } ΔΕΝ μπορούμε να αρχικοποιήσουμε abstract κλάσεις.

Παράδειγμα abstract public class Shape { abstract public void Draw ( ); } public class Circle extends Shape public void Draw ( ) { κώδικας σχεδίασης κύκλου} public class Rectangle extends Shape { { κώδικας σχεδίασης ορθογωνίου}

Ο τροποποιητής static Κάθε αντικείμενο έχει τις δικές του μεταβλητές και μεθόδους ΟΜΩΣ: Μεταβλητές και μέθοδοι που δηλώνονται ως static είναι κοινές για όλα τα αντικείμενα της ίδιας κλάσης Για τη χρήση static μεταβλητών και μεθόδων ΔΕ χρειάζεται η δημιουργία στιγμιοτύπου κλάσης. Μέθοδοι που έχουν δηλωθεί static βλέπουν και τροποποιούν ΜΟΝΟ static μεταβλητές.

Παράδειγμα class myClass { public static int a = 1; } myClass first = new myClass ( ); myClass second = new myClass ( ); first.a = 2 ; Η μεταβλητή a παίρνει την τιμή 2 και στα δύο αντικείμενα δηλ. ισχύει first.a = 2 KAI second.a = 2

Interfaces Πολλαπλή κληρονομικότητα: Σχηματισμός μιας υποκλάσης χρησιμοποιώντας περισσότερες από μία υπερκλάσεις. ΔΕΝ ΥΠΟΣΤΗΡΙΖΕΤΑΙ ΣΤΗ JAVA class Child extrends Parent1 extends Parent2 ΛΑΘΟΣ Εναλλακτική προσέγγιση: η χρήση των interfaces ( κλάσεις που περιέχουν μόνο abstract μεθόδους ) Οι abstract μέθοδοι των interfaces υλοποιούνται στις υποκλάσεις που τα υλοποιούν. Ορισμός ενός interface: <access specifier> interface myInterface { <access specifier> <returned type> functionOne( ); Δεν είναι αναγκαίο να <access specifier> <returned type> functionTwo( ); δηλωθούν ρητά ως abstract. } Ορισμός υποκλάσης που υλοποιεί ένα interface: class myClass extends someParentClass implements myInterface Υποκλάση που υλοποιεί ένα interface πρέπει να υλοποιεί όλες τις μεθόδους που ορίζονται σε αυτό.

Interfaces - Παράδειγμα public interface myInterface { public void foo( ); public void foo2( String str ); } public class Test extends someParentClass implements myInterface public void foo ( ) { Function code here…} public void foo2 ( String str )

Πακέτα (packages) Kλάσεις συναφούς λειτουργικότητας ομαδοποιούνται σε πακέτα (packages) Κλάσεις του ίδιου πακέτου βρίσκονται στο ίδιο directory Η δήλωση του πακέτου στο οποίο ανήκει μια κλάση γίνεται στην αρχή του πηγαίου κώδικα package <packageName>; Ένα πακέτο έχει το ίδιο όνομα με το όνομα του directory στο οποίο αποθηκεύονται οι κλάσεις του. Κλάσεις ενσωματωμένες σα packages προσαρτώνται στον κώδικα άλλων κλάσεων με τη δήλωση import <packageName>.<className>;

Παράδειγμα Folder 1 A11.java A12.java Folder 2 A21.java A22.java package Folder2; class A21 { Class implementation} A22.java: import Folder1.A11; class A22 A11.java: package Folder1; class A11 { Class Implementation…..} A12.java: class A12 { class implementation……}