Πολυμορφισμός Αφηρημένες Κλάσεις. Παναγιώτης Σφέτσος, PhD
|
|
- Πολύμνια Μανωλάς
- 8 χρόνια πριν
- Προβολές:
Transcript
1 (Object Oriented Programming) Πολυμορφισμός Αφηρημένες Κλάσεις PhD
2 Περιεχόμενα Μαθήματος Απόκρυψη πεδίων (Hiding Fields) Στατική και Δυναμική Δέσμευση στη Java (Static and dynamic binding) Πολυμορφισμός (Polymorphism) Αφηρημένες κλάσεις (Abstract Classes) 2
3 Απόκρυψη Πεδίων (Hiding Fields) (1/2) Στην υποκλάση ένα πεδίο με το ίδιο όνομα πεδίου της υπερκλάσης κρύβει το πεδίο της υπερκλάσης ακόμη και αν είναι διαφορετικού τύπου. Στην υποκλάση, για να έχουμε πρόσβαση στο πεδίο της υπερκλάσης χρησιμοποιούμε τη super. Η απόκρυψη πεδίων κάνει δύσκολη την αναγνωσιμότητα του κώδικα, για αυτό πρέπει να την αποφεύγουμε. Το πεδίο στην υποκλάση με το ίδιο όνομα της υποκλάσης είναι ένα νέο πεδίο, το πεδίο της υπερκλάσης είναι κρυμμένο και δεν μπορούμε να το υπερβούμε. Δεν υπάρχει υπέρβαση πεδίων, όπως γίνεται με τις μεθόδους. Πρόσβαση σε κρυμμένα πεδία έχουμε με: (α) χρήση αναφοράς υπερκλάσης (δες το παράδειγμα) (β) χρήση casting: System.out.println(((Super)c1).s); (δες στο παράδειγμα) 3
4 Απόκρυψη Πεδίων (Hiding Fields) (2/2) Παράδειγμα class SuperClass { String f = "Yperklasi"; class SubClass extends SuperClass {String f = "Ypoklasi"; public class YpervasiPediou { public static void main(string[] args) { SubClass p1 = new SubClass(); System.out.println(p1.f); SuperClass p2 = new SubClass(); //αναφορά υπερκλάσης System.out.println(p2.f); System.out.println(((SuperClass)p1).f); //casting 4
5 Στατική και Δυναμική Δέσμευση στη Java (Static and dynamic binding) (1/4) Η δέσμευση (binding) αναφέρεται στον συσχετισμό μεταξύ της κλήσης μιας μεθόδου και του ορισμού (κώδικα) της μεθόδου. Static ή Early binding: Η δέσμευση γίνεται κατά τη μεταγλώττιση του προγράμματος. class Employee{... class Misthotos extends Employee{ public void getsalary(){ System.out.println( O misthotos plironetai ); public static void main( String args[]){ Misthotos obj1 = new Misthotos(); //ορισμός αντικειμένου της υποκλάσης obj1.getsalary(); //ο compiler κατά τη μεταγλώττιση καλεί τη μέθοδο //γιατί έχει ξεκάθαρη δέσμευση (static binding) //...καμία υπέρβαση μεθόδου 5
6 Στατική και Δυναμική Δέσμευση στη Java (Static and dynamic binding) (2/4) Dynamic ή Late binding: Η δέσμευση γίνεται κατά τη εκτέλεση του προγράμματος. Το κάθε αντικείμενο έχει πληροφορία για την κλάση του και τον ορισμό (κώδικα) των μεθόδων του. Ο compiler δεν γνωρίζει τη κλήση/δέσμευση κατά την μεταγλώττιση, παράδειγμα η υπέρβαση των μεθόδων στην κληρονομικότητα (δες στον πολυμορφισμό). class Employee{ public void getsalary(){ System.out.println( O Employee plironetai ); Αποτέλεσμα: O misthotos plironetai Πολυμορφισμός της Υποκλάσης class Misthotos extends Employee{ Upcasting και Late binding public void getsalary(){ System.out.println( O misthotos plironetai ); public static void main( String args[]){ Employee obj1 = new Misthotos();//αναφορά υπερκλάσης σε αντικειμένου της //υποκλάσης Method Overriding (στην υποκλάση) obj1.getsalary();//κατά τη μεταγλώττιση δεν γνωρίζει ποια μέθοδο να καλέσει, //γιατί δεν έχει ξεκάθαρη δέσμευση(τελεστής new) (dynamic binding) 6
7 Στατική και Δυναμική Δέσμευση στη Java (Static and dynamic binding) (3/4) Dynamic ή Late binding: Ένα άλλο παράδειγμα αφορά την μέθοδο tostring() στην κληρονομική ιεραρχία: Employee Employee e; name : : getname() gethiringdate() tostring() e = new Oromisthios(); System.out.println(e); e = new Misthotos(); System.out.println(e); Oromisthios hours wagerate : : getpay() tostring() Misthotos annualsalary : : getpay() tostring() Dynamic ή Late binding: O κώδικας που εκτελείται για την tostring() εξαρτάται από την κλάση του αντικειμένου την ώρα της κλήσης (Oromisthios ή Misthotos) και όχι την ώρα της δήλωσης (Employee). Πολυμορφισμός 7
8 Στατική και Δυναμική Δέσμευση στη Java (Static and dynamic binding) (4/4) Στατική vs Δυναμική Δέσμευση Η Στατική δέσμευση συμβαίνει κατά τον χρόνο της μεταγλώττισης, ενώ η Δυναμική κατά τον χρόνο της εκτέλεσης. Στη Java: Η δέσμευση των private, static και final μεθόδων γίνεται κατά την μεταγλώττιση. Η δέσμευση των υπερβατικών μεθόδων (overridden methods) γίνεται κατά την εκτέλεση του προγράμματος. Η δέσμευση των υπερφορτωμένων μεθόδων (overloaded methods) γίνεται κατά την μεταγλώττιση. Στη Java εφαρμόζεται ο μηχανισμός του Dynamic binding για όλες τις μεθόδους (σε αντίθεση με άλλες γλώσσες ) 8
9 Πολυμορφισμός (Polymorphism) Χρησιμοποιούμε Πολυμορφισμό υποκλάσης για να εκτελέσουμε διαφορετικές μορφές της ίδιας μεθόδου. Πολυμορφισμό έχουμε: Όταν ο αποστολέας ενός μηνύματος δεν χρειάζεται να γνωρίζει την κλάση του παραλήπτη (στιγμιότυπου). Όταν μια λειτουργία μπορεί να υλοποιηθεί με το ίδιο όνομα αλλά με διαφορετικό περιεχόμενο σε διαφορετικές κλάσεις (τρόπο λειτουργίας). Στον πολυμορφισμό μια μεταβλητή της υπερκλάσης αναφέρεται σε ένα αντικείμενο της υποκλάσης. Έτσι παρέχεται η δυνατότητα σε μια μεταβλητή αναφοράς αντικειμένου να αλλάζει συμπεριφορά (εκτελεί διαφορετικές μεθόδους) ανάλογα με το αντικείμενο στο οποίο αναφέρεται την κάθε φορά. 9
10 Πολυμορφισμός (Polymorphism) Ο πολυμορφισμός αναφέρεται στη δυνατότητα να χειριζόμαστε αντικείμενα που ανήκουν στην ίδια ιεραρχία κλάσεων, σαν να ήταν αντικείμενα της υπερκλάσης. Για την επίτευξη πολυμορφικής συμπεριφοράς απαιτείται μία ιεραρχία κλάσεων και υπερκαλυπτόμενες μέθοδοι. Θα δούμε παραδείγματα: Πολυμορφισμού υποκλάσης (υπέρβαση μεθόδων) Run Time πολυμορφισμού Πολυμορφισμού Υποκατάστασης Στατικού πολυμορφισμού vs. Δυναμικού πολυμορφισμού Δες τα παραδείγματα (προηγούμενες διαφάνειες (6), (7)) όπου έχουμε αναφορά υπερκλάσης σε αντικείμενο υποκλάσης. 10
11 Τυπικό Παράδειγμα Πολυμορφισμού class Animal { void sound() {System.out.println("Animal Sound"); class Cat extends Animal { void sound() {// Overriding System.out.println("Cat Sound: miaou"); class Dog extends Animal { void sound() {// Overriding System.out.println("Dog Sound: wooof"); class testpoly { public static void main(string[] args) { Animal animal = new Animal(); animal.sound(); Cat cat = new Cat(); cat.sound(); Dog dog = new Dog(); dog.sound(); System.out.println(); System.out.println("Poly-1: Animal c = new Cat();"); System.out.println(" "); Animal c = new Cat(); //ότι η κλάση και όχι η αναφορά c.sound(); // η cat sound() System.out.println(); System.out.println("Poly-2: Animal c = new Dog();"); System.out.println(" "); Animal d = new Dog(); //ότι η κλάση και όχι η αναφορά d.sound(); //dog sound() 11
12 Πολυμορφισμός της Υποκλάσης - Upcasting Downcasting και Late binding (1/3) Mammal Cat Object Animal Dog Reptile Upcasting downcasting Casting: Η ανάθεση του αντικειμένου ενός τύπου σε αναφορά άλλου τύπου. Επιτρέπονται castings μόνο μεταξύ αντικειμένων σε μια ιεραρχία κληρονομικότητας. Upcasting: Η ανάθεση ενός αντικειμένου της υποκλάσης σε αναφορά της υπερκλάσης. Δεν χρειάζεται κάποιο προσδιοριστικό, γιατί η υποκλάση είναι μια εξειδίκευση της υπερκλάσης. π.χ. Animal c = new Cat(); //late binding Δεν αλλάζει το αντικείμενο Cat αλλά το χειρίζεσαι σαν οποιοδήποτε άλλο αντικείμενο της Animal. Κρύβεις τις ιδιότητες της Cat, μέχρι να το κάνεις ξανά downcast σε Cat. Cat c = new Cat(); Το αντικείμενο Cat δεν άλλαξε μετά το System.out.println(c); //Cat@a90653 upcasting, αλλά μετονομάστικε σε Mammal. Mammal m = c; // upcasting Όμως δεν γίνεται cast σε Dog. Οι ορισμοί (1) Mammal m=new Cat(); και System.out.println(m); //Cat@a90653 (2) Mammal m=(mammal)new Cat(); Είναι ισοδύναμοι. Ο (2) δεν απαιτείται. 12
13 Πολυμορφισμός της Υποκλάσης - Upcasting Downcasting και Late binding (2/3) Το downcasting (από την υπερκλάση στην υποκλάση) δεν γίνεται αυτόματα, αλλά ρητά προγραμματιστικά (τον τύπο μέσα σε αγκύλες). Cat c1 = new Cat(); Animal a = c1; Cat c2 = (Cat) a; //αυτόματο upcasting σε Animal // downcasting σε αντικείμενο τύπου Cat Πριν από κάποιο downcasting μπορούμε να ελέγξουμε τον τύπο του αντικειμένου με την instanceof. Π.χ. Cat c1 = new Cat(); Animal a = c1; //upcasting σε Animal // έλεγχος αν το Animal είναι ένα αντικείμενο Cat if(a instanceof Cat) { System.out.println( Einai antikeimeno Cat ); Cat c2 = (Cat)a; //ασφαλές downcasting 13
14 Πολυμορφισμός της Υποκλάσης - Upcasting Downcasting και Late binding (3/3) Upcasting μέσω της κλήσης μεθόδου public static void walk(animal a) { System.out.println( Animal walk "+a); : : Cat c = new Cat(); Dog d = new Dog(); walk(c); // αυτόματο upcast σε Animal walk(d); // αυτόματο upcast σε Animal Downcasting μέσω της κλήσης μεθόδου class Animal { class Dog extends Animal { static void method(animal a) { Dog d=(dog)a; //downcasting System.out.println("ok to downcasting egine"); public static void main (String [] args) { Animal a=new Dog(); Dog.method(a); 14
15 Παράδειγμα Upcasting Downcasting class A { public A() { System.out.println("Domitis A"); public String tostring(){return "tostring() klasis A"; class B extends A { public B() { super(); System.out.println("Domitis public String tostring() { return "Ypervasi-toString() klasis B"; class C extends B { public C() { super(); System.out.println("Domitis public String tostring() { return "Ypervasi-toString() klasis C"; public class TestCasting { public static void main(string[] args) { A a1 = new C(); // ok, upcast System.out.println(a1); //ekteleitai tostring() tis C-klasis B b1 = (B)a1; // ok, downcast System.out.println(b1); // -->>--metonomasia tou // antikeimenou se B1 C c1 = (C)b1; // ok, downcast System.out.println(c1); //-->>--metonomasia tou // antikeimenou se C1 A a2 = new B(); // ok, upcast System.out.println(a2); //ekteleitai tostring() tis B-klasis B b2 = (B)a2; // ok, downcast System.out.println(b2); //-->>--metonomasia tou //antikeimenou se b2 15
16 Παράδειγμα 2 o - RunTime Polymorphism class Human{ public void eat() {System.out.println(" public void drink() {System.out.println(" class Boy1 extends Human{ public void eat(){system.out.println(" public void drink(){system.out.println(" O anthropos troei pizza"); O anthropos pinei byra"); To agori troei pizza"); To agori pinei byra"); public void A_method() { Boy1 b = new Boy1(); Human h=new Boy1(); System.out.println("To antikeimeno (boy) b.eat():"); b.eat(); System.out.println("O Human (super).drink():"); super.drink(); System.out.println("To antikeimeno(human) h.eat():"); h.eat(); //υπέρβαση-overriding, Runtime polymorphism public static void main( String args[]) { Boy1 obj = new Boy1(); obj.a_method(); 16
17 Παράδειγμα 3 o - RunTime Polymorphism Virtual methods (1/3) Πολυμορφισμός με υπέρβαση μεθόδων. Δες την κλήση και χρήση της μεθόδου AddressCheck(). Αυτές οι μέθοδοι λέγονται και Virtual Methods. class Employee { private String name; private String address; private int AFM; public Employee(String name, String address, int afm) { System.out.println("Domitis employee"); this.name = name; this.address = address; this.afm = afm; public void AddressCheck() { System.out.println("H Dieythinsi tou employee " + this.name + " einai: " + this.address); public String tostring(){return name + " " + address + " " + AFM; public String getname() {return name; public String getaddress(){return address; public void setaddress(string a){address = a; public int getafm() {return AFM; 17
18 Παράδειγμα 3 o - RunTime Polymorphism Virtual methods (2/3) class Misthotos extends Employee { private double Misthos; public Misthotos(String n, String a, int afm, double m) { super(n, a, afm); setmisthos(m); public void AddressCheck() { System.out.println("Elegxos dieythinsis misthotou"); System.out.println("H dieythinsi tou misthotou " + getname() + " me etisio mistho= " + Misthos); public double getmisthos() { return Misthos; public void setmisthos(double m) { if(m >= 0.0) { Misthos = m; public double MisthosAnaMina() { return Misthos/12; 18
19 Παράδειγμα 3 o - RunTime Polymorphism Virtual methods (3/3) class VirtualMethodsDemo { public static void main(string [] args) { Misthotos s = new Misthotos("Nikos Nikas", "Tsimiski 32", 4, ); Employee e = new Misthotos("Paulos Pauloy", "Mitropoleos 24", 7, ); System.out.println("\nKlisi tis AddressCheck() me anafora ston misthoto"); s.addresscheck(); System.out.println("O miniaios misthos toy misthotou "+ s.getname()+" einai= "+s.misthosanamina()); System.out.println("\nKlisi tis AddressCheck() me anafora ston employee"); e.addresscheck(); System.out.println(); Virtual Method invocation Κατά την μεταγλώττιση καλείται η AddressCheck() της Employee, ενώ κατά την εκτέλεση η JVM καλεί την AddressCheck() του Μισθωτού. Γιατί δύο ίδια μηνύματα ; 19
20 Πολυμορφισμός Υποκατάστασης (Substitutability) Είδαμε την αρχή της υποκατάστασης της Liskov (ένα αντικείμενο της υποκλάσης μπορεί να κάνει ότι και το αντικείμενο της υπερκλάσης άρα μπορούμε να υποκαταστήσουμε το αντικείμενο της υπερκλάσης με ένα της υποκλάσης). Αν μια αναφορά της υπερκλάσης αναφέρεται σε αντικείμενο της υποκλάσης, τότε εκτελούνται οι μόνο οι μέθοδοι της υπερκλάσης. class Circle { private double radius; public Circle(){; public Circle(double radius) {this.radius = radius; public double getradius() {return this.radius; public double getarea(){return radius * radius * Math.PI; public String tostring() { return "Circle[radius=" + radius + "]"; 20
21 Πολυμορφισμός Υποκατάστασης (Substitutability) class Cylinder extends Circle { private double height; public Cylinder() { super(); height = 1.0; public Cylinder(double height) { super(); this.height = height; public Cylinder(double radius, double height) { super(radius); this.height = height; public double getheight() {return height; public double getvolume() {return getarea()*height; public String tostring() { return "Cylinder[height=" + height + "," + super.tostring() + "]"; 21
22 Πολυμορφισμός Υποκατάστασης (Substitutability) class TestCylinder { public static void main (String[] args) { // Ypokatastasi antikeimenou tis yperklasis me antikeimeno tis ypoklasis Circle c1 = new Cylinder(1.1, 2.2); System.out.println(c1.toString()); // overridden System.out.println("Cylinder area = "+c1.getarea()); // overridden Πολυμορφισμό θα δούμε και στις Αφηρημένες κλάσεις και στις Διεπαφές/Διασυνδέσεις 22
23 Στατικός Πολυμορφισμός Vs Δυναμικός Πολυμορφισμός (1/4) Στατικός Πολυμορφισμός: Υπερφόρτωση Μεθόδων (Method overloading) Δυναμικός Πολυμορφισμός: Υπέρβαση Μεθόδων (Method Overriding) class Employee { public String FirstName; public String LastName; public String GetFullName() {return FirstName + " " + LastName; class Monimos extends Employee { //Overriding method public String GetFullName() {return "Monimos: " + FirstName + " " + LastName; 23
24 Στατικός Πολυμορφισμός Vs Δυναμικός Πολυμορφισμός (2/4) class Oromisthios extends Employee { //overriding method public String GetFullName() {return "Oromisthios: " + FirstName + " " + LastName; class PolyStaticVsDynamic { public static void main(string[] args) { String newline = System.getProperty("line.separator"); System.out.println("Method Overloading : Static Polymorphism in Java"); System.out.println(" "); System.out.println("Methodos Add() - me 2 parametrous(2,4) " + Add(2,4) + newline); System.out.println("Methodos Add() - me 3 parametrous(3,5,7) " + Add(3,5,7) + newline); 24
25 Στατικός Πολυμορφισμός Vs Δυναμικός Πολυμορφισμός (3/4) System.out.println("Method Overriding : Dynamic Polymorphism in Java"); System.out.println(" "); Employee e = new Employee(); e.firstname = "Nikos"; e.lastname = "Nikas"; System.out.println("Antikeimeno typou Employee: " + e.getfullname() + newline); //anafora ston oromisthio e = GetEmployee(2); e.firstname = "Paulos"; e.lastname = "Paulou"; System.out.println("Antikeimeno typou Oromisthiou: " + e.getfullname()+ newline); //point e to PermanentEmployee e = GetEmployee(3); e.firstname = "Kostas"; e.lastname = "Konstantinou"; System.out.println("Antikeimeno typou Monimou: " + e.getfullname() + newline); 25
26 Στατικός Πολυμορφισμός Vs Δυναμικός Πολυμορφισμός (4/4) //Factory pattern: Epistrefei ton ypal. analoga me ton typo pou stelnoume private static Employee GetEmployee(int type) { switch(type) { case 1: return new Employee(); case 2: return new Oromisthios(); case 3: return new Monimos(); return new Employee(); //methods overloadding private static int Add(int x, int y) {return x + y; private static int Add(int x, int y, int z) {return x + y + z; 26
27 Άσκηση -1 (Πολυμορφισμός) Να γίνει το πρόγραμμα που χειρίζεται την πώληση και ενοικίαση κατοικιών. Το πρόγραμμα θα ορίζει την κλάση Katoikia, με private μέλη: (1) Kωδικός, int (1=πώληση, 2=ενοικίαση), (2) Πλήθος Δωματίων, int, (3) Τετραγωνικά μέτρα, double, (4) Διεύθυνση, String, και τις μεθόδους: (1) TyposSynalagis(), που θα επιστρέφει με μήνυμα, τον τύπο της συναλαγής, δηλ. Polisi, Enoikio, ανάλογα με τον κωδικό, (2) Poso(), που θα υπολογίζει το τελικό ποσό συναλλαγής, λαμβάνοντας υπόψιν τα παρακάτω: Αν είναι για ενοίκιο, τότε η τιμή προσαυξάνεται επί δύο (προκαταβολή ενός ενοικίου) συν (+) μισό ενοίκιο (μισή τιμή ενοικίου) σαν προμήθεια. Αν είναι πώληση τότε η τιμή πώλησης επιβαρύνεται με 1200 Ευρώ (προμήθεια). Οι κλάσεις Diamerisma, ExohikiKatoikia και Mesonette κληρονομoύν/εξειδικεύουν την κλάση House και διαθέτουν επιπλέον τα παρακάτω χαρακτηριστικά: Diamerisma: TimiD (double), ExohikiKatoikia: TimiEx (double), Mesonette: TimiM (double) και υλοποιούν με υπέρβαση τις μεθόδους: TyposSynalagis() και Poso(), Στο κυρίως πρόγραμμα δημιουργείστε ένα πίνακα Ν - κατοικιών. Το Ν εισάγεται από το Πληκτρολόγιο. Σε κάθε θέση του πίνακα μπορεί να ανατίθεται αντικείμενο τύπου Diamerisma (60%-στον πίνακα), ExohikiKatoikia (20%-στον πίνακα), ή τύπου Mesonette (20%-στον πίνακα). Το πρόγραμμα εμφανίζει τα χαρακτηριστικά κάθε κατοικίας, καθώς και τα αποτελέσματα των μεθόδων και TyposSynalagis() και Poso(). Ορίστε δομητές και μεθόδους getter(), όπου χρειάζεστε. Όλα τα χαρακτηριστικά να είναι private. Υπερβείτε την μέθοδο tostring() της Object. 27
28 Αφηρημένη Κλάση (abstract class) (1/9) Αφηρημένοι Τύποι Δεδομένων (Abstract Data Types ADT): Αφηρημένες κλάσεις και Διεπαφές/Διασυνδέσεις Αφηρημένη κλάση (abstract class) είναι μια κλάση που αντιπροσωπεύει μια ευρεία κατηγορία τύπων και ορίζεται μόνο για να κληρονομηθεί (επεκταθεί) από θυγατρικές υποκλάσεις (π.χ. liquid, people, mammal, employee, κλπ.) Σύνταξη (η δεσμευμένη λέξη abstract): (1) κλάση: <visibility> abstract class <name> { (2) μέθοδος: <visibility> abstract <type> <name> ([parameters]); Κανόνες και Συνθήκες: Δεν μπορούμε να δημιουργήσουμε αντικείμενα μιας αφηρημένης κλάσης (τελεστής new), αλλά μπορούμε να ορίσουμε δομητές (και να έχουμε πρόσβαση από τους δομητές των υποκλάσεων). Μια αφηρημένη μέθοδος δεν μπορεί να υπάρχει σε μια μη αφηρημένη κλάση. Αν μια υποκλάση δεν υλοποιεί όλες τις αφηρημένες μεθόδους, τότε πρέπει να δηλωθεί abstract. 28
29 Αφηρημένη Κλάση (abstract class) (2/9) Η αφηρημένη κλάση ορίζει απλώς ένα "συμβόλαιο" το οποίο θα πρέπει να ακολουθούν οι υποκλάσεις της όσον αφορά τις υπογραφές των μεθόδων τους. Οι αφηρημένες μέθοδοί της είναι απλώς ένας ορισμός της υπογραφής τους και εναπόκειται στις υποκλάσεις να τις ορίσουν και υλοποιήσουν (συμβόλαιο). Δηλαδή, η αφηρημένη μέθοδος δεν έχει σώμα και τελειώνει με το (;) Οι αφηρημένες μέθοδοι πρέπει να είναι public (ή protected), όχι private. Ο όρος abstract δεν μπορεί να χρησιμοποιηθεί σε στατικές μεθόδους ή δομητές. 29
30 Αφηρημένη Κλάση (abstract class) (3/9) Μία αφηρημένη κλάση μπορεί να έχει και μη αφηρημένες μεθόδους οι οποίες υλοποιούνται στην ίδια την κλάση (αν και μπορούμε να τις υπερβούμε στις υποκλάσεις). Αν δεν περιέχει καμία abstract μέθοδο λειτουργεί μεν σαν υπερκλάση, ωστόσο δεν μπορούμε να ορίσουμε αντικείμενα της (τελεστής new). Μια υποκλάση μπορεί να δηλωθεί abstract, ακόμη και αν η υπερκλάση είναι μη abstract. Μια abstract κλάση μπορεί να χρησιμοποιηθεί σαν τύπος δεδομένων π.χ. Array - αντικειμένων, τότε μπορούμε να χρησιμοποιήσουμε τον τελεστή new. π.χ. People[ ] objs = new People[5]; Μετά γεμίζουμε τον πίνακα με αναφορές αντικειμένων, υποκλάσεων: π.χ. People [0]= new Student(); (πολυμορφική συμπεριφορά) 30
31 Αφηρημένη Κλάση (abstract class) (4/9) Παράδειγμα 1 ο : Δημιουργούμε δύο Shape αντικείμενα: ένα κύκλο και ένα ορθογώνιο που υλοποιούν τις δύο abstract μεθόδους getarea() και getperimeter(). abstract class Shape { private String color; private boolean filled; /** Abstract method getarea */ public abstract double getarea(); /** Abstract method getperimeter */ public abstract double getperimeter(); class Circle extends Shape { private double radius; public Circle(double r) {this.radius = r; public void setradius(double r) {this.radius = r; public double getradius() {return /** Return area */ public double getarea() {return radius * radius * Math.PI; public double getdiameter() {return 2 * /** Return perimeter */ public double getperimeter() {return 2 * radius * Math.PI; public void printcircle() { System.out.println("The radius is + radius); 31
32 Αφηρημένη Κλάση (abstract class) (5/9) class Rectangle extends Shape { private double width; private double height; public Rectangle(double width, double height) { this.width = width; this.height = height; public double getwidth() {return width; public void setwidth(double width) {this.width = width; public double getheight() {return height; public void setheight(double height) {this.height = /** Return area */ public double getarea() {return width * /** Return perimeter */ public double getperimeter() {return 2 * (width + height); class TestShape { public static void main(string[] args) { Shape Object1 = new Circle(8); Shape Object2 = new Rectangle(2, 4); // Display circle displayobject(object1); // Display rectangle displayobject(object2); public static void displayobject( Shape object) { System.out.println("The area is " + object.getarea()); System.out.println("The perimeter is «+ object.getperimeter()); 32
33 Αφηρημένη Κλάση (abstract class) (6/9) Παράδειγμα 2 ο με αφηρημένη κλάση την Employee που περιέχει δύο abstract μεθόδους τις getemptype() και calcsalary(), που θα υλοποιηθούν στις κλάσεις απογόνους. abstract class Employee { protected String name; protected int bonus; //bonus protected int hours; //hours protected int paytype; //0=salary, 1=byhour Employee(String s, int b, int h, int p) {name=s; bonus=b; hours=h; paytype=p; public String getname() {return name; public String getpaytype() { String ptype; if (paytype==0) ptype="misthos"; else Type="Oromisthios"; return ptype; class Administrator extends Employee { Administrator(String s, int b, int h, int p) {super(s,b,h,p); public String getemptype() {return "Dioikitikos Ypalilos"; public void calcsalary() { int s=0; if (paytype==0) s=1200+bonus; //vasikos= bonus else s=(hours*12); //12 Euro per hour System.out.println(" Misthos Dioikitikou= " + s); abstract String getemptype(); abstract void calcsalary(); 33
34 Αφηρημένη Κλάση (abstract class) (7/9) class Technical extends Employee { public Technical(String s, int b, int h, int p) {super(s,b,h,p); public String getemptype() {return "Tehnikos Ypalilos"; public void calcsalary() { int s=0; if (paytype==0) s=800+bonus; //vasikos=800 + bonus else s=(hours*10); //10 Euro per hour System.out.println(" Misthos Tehnikou = "+s); class Company { Employee emp[]= new Employee[4]; public void setemployee(employee e,int a) {emp[a]=e; public void printall() { for (int i=0;i<4;i++) { System.out.println(); System.out.println("Onoma = "+ emp[i].getname()); System.out.println("Typos Ypalilou = "+ emp[i].getemptype()); System.out.println("Typos Pliromis = "+ emp[i].getpaytype()); emp[i].calcsalary(); Οι Αφηρημένες Κλάσεις ωθούν σε αναγκαστική δημιουργία υποκλάσεων και Πολυμορφισμό class TestEmployeeAbstract { public static void main(string[] args) { int a; Employee e1=new Technical("Nikas",1000,10,0); Employee e2=new Administrator("Vasileiou",1000,20,0); Employee e3=new Technical("Paylidis",10,10,1); Employee e4=new Administrator("Apostolatos",10,10,1); Company c=new Company(); c.setemployee(e1,0); c.setemployee(e2,1); c.setemployee(e3,2); c.setemployee(e4,3); c.printall(); 34
35 Αφηρημένη Κλάση (abstract class) (8/9) Παράδειγμα 3 ο με αφηρημένη κλάση την MousikaOrgana που περιέχει μια abstract μέθοδο την play() και μια μέθοδο που δεν είναι αφηρημένη την BrandName(), που θα υλοποιηθούν στις κλάσεις απογόνους. abstract class MousikaOrgana { int i; public abstract void play(); public String BrandName() { return "Mousiko Organo "; class Kithara extends MousikaOrgana { public void play() { System.out.println ("Paizei Kithara"); public String BrandName() { return "Kithara"; class HlektrikiKithara extends Kithara { public void play(){ System.out.println("Paizei Hlektriki Kithara"); public String BrandName() { return "Marka: Gibson"; class KlassikiKithara extends Kithara { public void play(){ System.out.println("Paizei Klassiki Kithara"); public String BrandName() { return "Marka: Ovation"; class Krousta extends MousikaOrgana { public void play(){ System.out.println("Paizei Krousta"); public String BrandName(){ return "Marka: Ludwing"; public class MusicOrgans{ static void tune(mousikaorgana mo) { mo.play() ; 35
36 Αφηρημένη Κλάση (abstract class) (9/9) public static void main(string[] args) { MousikaOrgana[] o = new MousikaOrgana[4]; int i = 0; o[i++] = new Kithara(); o[i++] = new HlektrikiKithara(); o[i++] = new KlassikiKithara(); o[i++] = new Krousta() ; for(i = 0; i < o.length; i++) { tune(o[i]); System.out.println( o[i].brandname() ); 36
37 Άλυτες Ασκήσεις 1 και 2 (Παραλλαγές του 1ου Παραδείγματος) Να γραφεί πρόγραμμα που δημιουργεί την αφηρημένη κλάση Shape, η οποία θα περιέχει τα private μέλη - σημεία Χ και Υ (τύπου double), ένα πλήρη δομητή, αντίστοιχες μεθόδους gettter(), την αφηρημένη μέθοδο area() που θα υλοποιηθεί στις υποκλάσεις και την αντίστοιχη μέθοδο tostring(). Επίσης το πρόγραμμα θα δημιουργεί δύο υποκλάσεις που θα κληρονομούν (extends) την shape: τις Rectangle και Circle. Η Rectangle: θα περιέχει τα private μέλη height και width, ένα πλήρη δομητή, την υλοποίηση της area() (height*width) και την αντίστοιχη μέθοδο tostring(). Η Circle: θα περιέχει το private μέλος ακτίνα (radius), ένα πλήρη δομητή, την υλοποίηση της area() (Math.PI* radius * radius) και την αντίστοιχη μέθοδο tostring(). Στην κλάση AbstractShape (με την main()), θα δημιουργηθούν δύο αντικείμενα των τύπων Rectangle και Circle σε ένα πίνακα αντικειμένων και θα εκτελείται ο υπολογισμός και η εμφάνιση των αποτελεσμάτων (area()) με τα κατάλληλα μηνύματα. Π.χ. αν δώσουμε για το obj-rectangle τις τιμές σημείων 3 και 7 και διαστάσεις 10,10 και για το obj-circle τις τιμέςσημείων 4, 5 και radius=5, θα πάρουμε τα αποτελέσματα: 37
38 Άσκηση - 2 Ορίστε την αφηρημένη κλάση GeometricObject η οποία έχει τα χαρακτηριστικά: (1) color, String, (2) filled,boolean, την μέθοδο isfilled() που επιστρέφει true ή false ανάλογα, και τις αφηρημένες μεθόδους getarea() και getperimiter(). Οι κλάσεις Rectangle, Circle και Cylinder κληρονομoύν/εξειδικεύουν την κλάση GeometricObject και διαθέτουν επιπλέον τα παρακάτω χαρακτηριστικά και μεθόδους: Rectangle : (1) width, int, (2) height, int, και (α) getarea() (width*height) και (β) getperimeter() (2*(width*height)). Circle : (1) radius, double και (α) getarea() (radius * radius * Math.PI;) και (β) getperimeter() (2*(radius*Math.PI)). Cylinder : (1) height, int, (2) radius, double και (α) getarea() (2*getArea()*getPerimiter()* height) και (β) Volume() (getarea()*height). Στο κυρίως πρόγραμμα δημιουργείστε ένα πίνακα Ν σχημάτων. Το Ν εισάγεται από το πληκτρολόγιο. Σε κάθε θέση του πίνακα μπορεί να ανατίθεται αντικείμενο τύπου Rectangle (40%-στον πίνακα), Circle (30%-στον πίνακα), ή τύπου Cylinder (30%-στον πίνακα). Το πρόγραμμα εμφανίζει τα χαρακτηριστικά κάθε σχήματος, καθώς και τα αποτελέσματα των μεθόδων isfilled(), getarea() και getperimiter(). 38
Υπερφόρτωση (Overloading) Υπέρβαση (Overriding) - Upcasting Downcasting Final classes, methods
(Object Oriented Programming) Υπερφόρτωση (Overloading) Υπέρβαση (Overriding) - Upcasting Downcasting Final classes, methods PhD http://aetos.it.teithe.gr/~sfetsos/ sfetsos@it.teithe.gr Περιεχόμενα Μαθήματος
Η λέξη κλειδί this. Γαβαλάς Δαμιανός dgavalas@aegean.gr
Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Διάλεξη #6 η : Η λέξη κλειδί this, υπερφόρτωση μεθόδων, κληρονομικότητα, πολυμορφισμός, υπερκάλυψη, επίπεδα προσπέλασης Γαβαλάς Δαμιανός dgavalas@aegean.gr
Διάλεξη 16-17: Πολυμορφισμός (Polymorphism) Διδάσκων: Παναγιώτης Ανδρέου
Διάλεξη 16-17: Πολυμορφισμός (Polymorphism) Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: -Υπερφόρτωση (Overloading), Μεθόδων (Method Overloading), Τελεστών (Operator Overloading (C++, C#))
Διασυνδέσεις / Διεπαφές. Παναγιώτης Σφέτσος, PhD
(Object Oriented Programming) Διασυνδέσεις / Διεπαφές PhD http://aetos.it.teithe.gr/~sfetsos/ sfetsos@it.teithe.gr Περιεχόμενα Μαθήματος Διεπαφές/Διασυνδέσεις (Interfaces) 2 Διεπαφές/Διασυνδέσεις (Interfaces)
ΑΣΚΗΣΕΙΣ ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ (inheritance)
ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΣΚΗΣΕΙΣ ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ (inheritance) ΑΣΚΗΣΗ-1 η κληρονομεί μια λειτουργικότητα της υπερκλάσης. Π.χ. ορίστε την υπερκλάση Superclass με χαρακτηριστικά (1)
ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Παναγιώτης Σφέτσος sfetsos@it.teithe.gr
ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός Παναγιώτης Σφέτσος sfetsos@it.teithe.gr ΕΡΓΑΣΤΗΡΙΟ - 3 ΘΕΜΑΤΑ: Κλάσεις Αντικείμενα Δομητές/Κατασκευαστές - Μέθοδοι - Παράμετροι
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κληρονομικότητα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κληρονομικότητα Παράδειγμα Στο προηγούμενο παράδειγμα οι φοιτητές και οι καθηγητές είχαν κάποια κοινά στοιχεία Και οι δύο είχαν όνομα Και οι δύο είχαν κάποιο
Βασικές Έννοιες ΟΟΡ, Κληρονομικότητα, Σύνθεση (Inheritance - Composition)
(Object Oriented Programming) Βασικές Έννοιες ΟΟΡ, Κληρονομικότητα, Σύνθεση (Inheritance - Composition) PhD http://aetos.it.teithe.gr/~sfetsos/ sfetsos@it.teithe.gr Βασικές Αρχές και Έννοιες της Αντικειμενοστρεφούς
Εισαγωγή στον Προγ/μό Η/Υ
Εισαγωγή στον Προγ/μό Η/Υ Ενότητα 7 2ο μέρος: Επιπλέον έννοιες σχετικά με αντικείμενα Διδάσκων: Μιχάλης Τίτσιας Περιεχόμενα Τι μπορεί να περιέχει μια τάξη Μέθοδοι τάξης και σταθερές τάξης Πολυμορφισμός
Πακέτα (Packages) Φωλιασμένες ή Εσωτερικές Κλάσεις (Inner Classes) Παναγιώτης Σφέτσος, PhD
(Object Oriented Programming) Πακέτα (Packages) Φωλιασμένες ή Εσωτερικές Κλάσεις (Inner Classes) PhD http://aetos.it.teithe.gr/~sfetsos/ sfetsos@it.teithe.gr Περιεχόμενα Μαθήματος Πακέτα (Packages) Φωλιασμένες
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κληρονομικότητα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κληρονομικότητα Παράδειγμα Στο προηγούμενο παράδειγμα οι φοιτητές και οι καθηγητές είχαν κάποια κοινά στοιχεία Και οι δύο είχαν όνομα Και οι δύο είχαν κάποιο
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κληρονομικότητα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κληρονομικότητα Παράδειγμα Στο παράδειγμα με το τμήμα πανεπιστημίου οι φοιτητές και οι καθηγητές είχαν κάποια κοινά στοιχεία Και οι δύο είχαν όνομα Και οι δύο
ΚΛΑΣΕΙΣ ΜΕΘΟΔΟΙ - ΑΝΤΙΚΕΙΜΕΝΑ
(Object Oriented Programming) ΚΛΑΣΕΙΣ ΜΕΘΟΔΟΙ - ΑΝΤΙΚΕΙΜΕΝΑ ΠΙΝΑΚΕΣ ΑΝΤΙΚΕΙΜΕΝΩΝ ( ή εκεί που φτάσαμε το 1 ο εξάμηνο ) PhD http://aetos.it.teithe.gr/~sfetsos/ sfetsos@it.teithe.gr Κ Λ Α Σ Ε Ι Σ - Ανακεφαλαίωση
ΠΟΛΥΜΟΡΦΙΣΜΟΣ. 4.1 Κληρονομικότητα και Αρχή της Υποκατάστασης
ΠΟΛΥΜΟΡΦΙΣΜΟΣ Λόγω της θεμελιώδους σημασίας της έννοιας του πολυμορφισμού (polymorphism) στην αντικειμενοστρεφή σχεδίαση, κρίνεται σκόπιμο στο σημείο αυτό του βιβλίου να αναλυθεί εκτενέστερα. Ο πολυμορφισμός
ΑΠΛΗ ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ
ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ Μηχανισµός υλοποίησης των σχέσεων γενίκευσης/εξειδίκευσης µεταξύ κλάσεων Η σχέση εξειδίκευσης «υποκλάση-της» (subclass-of)είναι γνωστή σαν σχέση «είναι ένα» (isa) ή «είναι ένα είδος» (ako:
public void printstatement() { System.out.println("Employee: " + name + " with salary: " + salary);
Κληρονομικότητα Η κληρονομικότητα (inheritance) αποτελεί έναν από τους χαρακτηριστικότερους μηχανισμούς των αντικειμενοστρεφών γλωσσών προγραμματισμού. Επιτρέπει την δημιουργία μιας νέας κλάσης απορροφώντας
Κλάσεις. Τροποποιητές, ιασυνδέσεις, Πακέτα. Τροποποιητές ελέγχου προσπέλασης µεταβλητών και µεθόδων
Κλάσεις Τροποποιητές, ιασυνδέσεις, Πακέτα Τροποποιητές ελέγχου προσπέλασης µεταβλητών και µεθόδων Υπάρχουν 4τροποποιητές: default, public, private, protected. Default: εν προηγείται τροποποιητής του ονόµατος
Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 8 : ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ & ΠΟΛΥΜΟΡΦΙΣΜΟΣ
Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 8 : ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ & ΠΟΛΥΜΟΡΦΙΣΜΟΣ ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ (1/3) Στην αρχή της κληρονομικότητας βασίζεται ο σχεδιασμός και η υλοποίηση συστημάτων Η κληρονομικότητα χρησιμοποιείται
Διδάσκων: Παναγιώτης Ανδρέου
Διάλεξη 12: Κληρονομικότητα (Inheritance) Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Κληρονομικότητα και Επαναχρησιμοποίηση - Υποκλάσεις/Υπερκλάσεις - Απόκρυψη ονομάτων - Το super, protected
Οντοκεντρικός Προγραμματισμός
Οντοκεντρικός Προγραμματισμός Ενότητα 2: Η ΓΛΩΣΣΑ JAVA Κληρονομικότητα ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ
Κλάσεις και Αντικείµενα
Κλάσεις και Αντικείµενα Γρηγόρης Τσουµάκας Τµήµα Πληροφορικής, Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης Κλάσεις και Αντικείµενα 2 Τα αντικείµενα σε µια αντικειµενοστρεφή γλώσσα προγραµµατισµού, µοντελοποιούν
Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA
Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA Τι θα συζητήσουμε σήμερα Πώς υλοποιούμε συσχετίσεις μεταξύ κλάσεων απλές και πολλαπλές συσχετίσεις κληρονομικότητα Static, final Overloading Overriding Hiding
Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #12
Διάγραμμα κλάσεων [Class diagram] Διάλεξη #12: Υπο-τύποι και πολυμορφισμός [sub-typing and polymorphism] Database Music Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό,, Slide 1 Εισαγωγή στον Αντικειμενοστρεφή
ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Παναγιώτης Σφέτσος sfetsos@it.teithe.gr
ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός Παναγιώτης Σφέτσος sfetsos@it.teithe.gr ΕΡΓΑΣΤΗΡΙΟ - 4 ΘΕΜΑΤΑ: Κλάσεις Αντικείμενα Δομητές/Κατασκευαστές - Μέθοδοι - Παράμετροι
Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 9 : ΑΦΗΡΗΜΕΝΕΣ ΚΛΑΣΕΙΣ
Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 9 : ΑΦΗΡΗΜΕΝΕΣ ΚΛΑΣΕΙΣ INTERFACES ΕΣΩΤΕΡΙΚΕΣ ΚΛΑΣΕΙΣ (INNER CLASSES) Αφηρημένες Κλάσεις (Abstract Classes) (1/6) Οι αφηρημένες κλάσεις χρησιμοποιούνται για την
02 Αντικειμενοστρεφής Προγραμματισμός
02 Αντικειμενοστρεφής Προγραμματισμός Τεχνολογία Λογισμικού Τμήμα Πληροφορικής & Τηλεπικοινωνιών, ΕΚΠΑ Εαρινό εξάμηνο 2016 17 Δρ. Κώστας Σαΐδης saiko@di.uoa.gr Αντικειμενοστρέφεια Στον προγραμματισμό object
Το πρόγραμμα 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 υποστηρίζει
Σύνθεση και Κληρονομικότητα
Σύνθεση και Κληρονομικότητα Σύνθεση (composition) Κληρονομικότητα (inheritance) Υπερφόρτωση κληρονομημένων μελών Εικονικές συναρτήσεις και Πολυμορφισμός Αφηρημένες (abstract) βασικές κλάσεις 1 Σύνθεση
(Διαφάνειες Νίκου Βιδάκη)
(Διαφάνειες Νίκου Βιδάκη) JAVA Inheritance Εβδομάδα Νο. 3 2 Προηγούμενο μάθημα (1/2) Τι είναι αντικείμενο? Ανάλυση αντικειμένων Πραγματικά αντικείμενα Καταστάσεις Συμπεριφορές Αντικείμενα στον προγραμματισμό
Σύνθεση και Κληρονομικότητα
Σύνθεση και Κληρονομικότητα Σύνθεση (composition) Κληρονομικότητα (inheritance) Υπερφόρτωση κληρονομημένων μελών Εικονικές συναρτήσεις και Πολυμορφισμός Αφηρημένες (abstract) βασικές κλάσεις 1 Σύνθεση
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κληρονομικότητα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κληρονομικότητα Παράδειγμα Στο παράδειγμα με το τμήμα πανεπιστημίου οι φοιτητές και οι καθηγητές είχαν κάποια κοινά στοιχεία Και οι δύο είχαν όνομα Και οι δύο
2.1 Αντικειµενοστρεφής προγραµµατισµός
2.1 Αντικειµενοστρεφής προγραµµατισµός Στον αντικειµενοστρεφή προγραµµατισµό (object oriented programming, OOP) ένα πρόγραµµα υπολογιστή είναι ένα σύνολο αλληλεπιδρώντων αντικειµένων. Μπορεί να ειπωθεί
Abstract classes, Interfaces ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA
Abstract classes, Interfaces ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA Τι θα συζητήσουμε σήμερα Αφαιρέσεις στη Java Abstract μέθοδοι και abstract κλάσεις Interfaces (=διασυνδέσεις, διεπαφές) Instanceof Παραδείγματα κώδικα Αφηρημένες
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 Σχεδίαση-Ανάπτυξη
ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Περισσότερα για τις Κλάσεις, τα Αντικείμενα και τις Μεθόδους
ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός Παναγιώτης Σφέτσος sfetsos@it.teithe.gr Περισσότερα για τις Κλάσεις, τα Αντικείμενα και τις Μεθόδους Σύνοψη των βασικών λειτουργιών
Κατασκευαστές. Μέθοδοι Κατασκευής (Constructors).
Κατασκευαστές Μέθοδοι Κατασκευής (Constructors). Οι κατασκευαστές (constructors) είναι μέθοδοι που εκτελούνται όταν κατασκευάζεται ένα αντικείμενο. Μια τάξη μπορεί να έχει αρκετούς κατασκευαστές, οι οποίοι
Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA
Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA Τι θα συζητήσουμε σήμερα Πώς υλοποιούμε συσχετίσεις μεταξύ κλάσεων απλές και πολλαπλές συσχετίσεις κληρονομικότητα Static, final Overloading Overriding Hiding
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κληρονομικότητα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κληρονομικότητα Η ΜΕΤΑΒΛΗΤΗ THIS Η μεταβλητή this Η μεταβλητή (παράμετρος) this Μια κρυφή παράμετρος η οποία περνάει σε κάθε μέθοδο και κρατάει μια αναφορά
Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java
Εξάμηνο Μάθημα Τίτλος 2017 2018 Εαρινό Αντικειμενοστραφής Προγραμματισμός Ι Ύλη εργαστηρίου, Ασκήσεις Java Ημερομηνία Εργαστήριο 5 ο Α. Ύλη εργαστηρίου 5.1 Έννοιες αντικειμενοστραφούς προγραμματισμού,
Βασικά της γλώσσας JAVA
17 η διάλεξη Π. Σταθοπούλου pstath@ece.upatras.gr ή pstath@upatras.gr Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Φροντιστήριο : ευτέρα 11πµ-12πµ ΗΛ4 Προηγούµενη ιάλεξη
Wrapper Classes Τοποθέτηση Δεδομένων Κλήση Μεθόδων. Παναγιώτης Σφέτσος, PhD
(Object Oriented Programming) Wrapper Classes Τοποθέτηση Δεδομένων Κλήση Μεθόδων PhD http://aetos.it.teithe.gr/~sfetsos/ sfetsos@it.teithe.gr Περιεχόμενα Μαθήματος Wrapper Classes Τοποθέτηση Δεδομένων
Κληρονομικότητα. Παύλος Εφραιμίδης pefraimi <at> ee.duth.gr. Java Κληρονομικότητα 1
Κληρονομικότητα Παύλος Εφραιμίδης pefraimi ee.duth.gr Java Κληρονομικότητα 1 Ιεραρχίες Κλάσεων Στην Java (και γενικότερα στον αντικειμενοστραφή προγραμματισμό) μπορεί από μία να κλάση να δημιουργηθεί
ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Παναγιώτης Σφέτσος
ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός Παναγιώτης Σφέτσος sfetsos@it.teithe.gr Μ έ θ ο δ ο ι Οι μέθοδοι είναι εκείνα τα τμήματα του κώδικα όπου εκτελούνται οι ουσιαστικές
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές)
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές) Κληρονομικότητα Employee name hiringdate getname gethiringdate Οι παράγωγες κλάσεις κληρονομούν τα πεδία
Αντικειµενοστραφής Προγραµµατισµός
Κλάσεις Αντικειµενοστραφής Προγραµµατισµός Κλάσεις Αντικείµενα Ιεραρχία κλάσεων Κλάσεις. Ιδιότητες Συµπεριφορά Ιδιότητες (Μεταβλητές) Συµπεριφορά (Μέθοδοι) Κληρονοµικότητα Μέθοδοι επικάλυψης Η χρήση του
Προγραμματισμός Διαδικτύου
1 Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Προγραμματισμός Διαδικτύου Ενότητα 3 : Κατηγορίες και κληρονομικότητα Ιωάννης Τσούλος 2 Ανοιχτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Τμήμα Μηχανικών Πληροφορικής
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κληρονομικότητα Downcasting Πολυμορφισμός Late Binding
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κληρονομικότητα Downcasting Πολυμορφισμός Late Binding tostring και equals Είπαμε ότι η Java για κάθε αντικείμενο «περιμένει» να δει τις μεθόδους tostring και
Οντοκεντρικός Προγραμματισμός
Οντοκεντρικός Προγραμματισμός Ενότητα 2: Η ΓΛΩΣΣΑ JAVA Βασικά Δομικά Στοιχεία ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής ΔΟΜΙΚΑ ΣΤΟΙΧΕΙΑ ΔΟΜΙΚΑ
Εκτέλεση εξωτερικών προγραμμάτων και εντολών The Java Reflection - Αρχικοποίηση (Initialization)
(Object Oriented Programming) Εκτέλεση εξωτερικών προγραμμάτων και εντολών The Java Reflection - Αρχικοποίηση (Initialization) PhD http://aetos.it.teithe.gr/~sfetsos/ sfetsos@it.teithe.gr Περιεχόμενα Μαθήματος
Αρχές Τεχνολογίας Λογισμικού Εργαστήριο
Αρχές Τεχνολογίας Λογισμικού Εργαστήριο Κωδικός Μαθήματος: TP323 Ώρες Εργαστηρίου: 2/εβδομάδα (Διαφάνειες Νίκου Βιδάκη) 1 JAVA Inheritance Εβδομάδα Νο. 3 2 Προηγούμενο μάθημα (1/2) Τι είναι αντικείμενο?
ΑΤΕΙ Θεσσαλονίκης Τμήμα Πληροφορικής
Αντικειμενοστρεφής Προγραμματισμός adamidis@it.teithe.gr Abstract classes, δομητές και πολυμορφισμός, finalize, downcasting Αφηρημένες (abstract) κλάσεις Είναι πάντα βασικές κλάσεις μιας ιεραρχίας κλάσεων.
1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι
1 ΕΙΣΑΓΩΓΗ Η γλώσσα προγραµµατισµού Java είναι ισχυρά τυποποιηµένη (strongly typed), που σηµαίνει ότι κάθε µεταβλητή και κάθε έκφραση έχει κάποιο τύπο, ο οποίος πρέπει να είναι γνωστός κατά το χρόνο της
Ανάλυση άσκησης. Employee. SalariedEmployee CommissionEmployee HourlyEmployee. BasePlusCommissionEmployee
Μία εταιρεία πληρώνει τους εργαζόμενους της σε εβδομαδιαία βάση. Οι αποδοχές των εργαζόμενων υπολογίζονται με τέσσερις διαφορετικούς τρόπους : Α) Μισθωτοί (SalariedEmployee), πληρώνονται με σταθερό ποσό
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κληρονομικότητα Πολυμορφισμός Late Binding
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κληρονομικότητα Πολυμορφισμός Late Binding Κληρονομικότητα Η κληρονομικότητα είναι κεντρική έννοια στον αντικειμενοστραφή προγραμματισμό. Η ιδέα είναι να ορίσουμε
Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1
Κλάσεις στη Java Παύλος Εφραιμίδης Java Κλάσεις στη Java 1 Κλάσεις στην Java Θα δούμε τη διαδικασία δημιουργίας μιας κλάσης Θα υλοποιήσουμε μια κλάση για τη Δομή Δεδομένων Stack Java Κλάσεις στη Java 2
Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack
Κλάσεις στην Java Κλάσεις στη Java Παύλος Εφραιμίδης Θα δούμε τη διαδικασία δημιουργίας μιας κλάσης Θα υλοποιήσουμε μια κλάση για τη Δομή Δεδομένων Stack Java Κλάσεις στη Java 1 Java Κλάσεις στη Java 2
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κληρονομικότητα Πολυμορφισμός Late Binding Αφηρημένες κλάσεις
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κληρονομικότητα Πολυμορφισμός Late Binding Αφηρημένες κλάσεις Κληρονομικότητα Η κληρονομικότητα είναι κεντρική έννοια στον αντικειμενοστραφή προγραμματισμό.
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
Κληρονομικότητα. Κληρονομικότητα (inheritance) είναι ο τρόπος µε τον οποίο μία τάξη μπορεί να κληρονομήσει ιδιότητες και συμπεριφορά από άλλες τάξεις.
Κληρονομικότητα (inheritance) είναι ο τρόπος µε τον οποίο μία τάξη μπορεί να κληρονομήσει ιδιότητες και συμπεριφορά από άλλες τάξεις. Μέσω της κληρονομικότητας μπορούμε να δημιουργήσουμε µια νέα τάξη (θυγατρική)
Abstract classes, Interfaces ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA
Abstract classes, Interfaces ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA Τι θα συζητήσουμε σήμερα Αφαιρέσεις στη Java Abstract μέθοδοι και abstract κλάσεις Interfaces (=διασυνδέσεις, διεπαφές) Instanceof Παραδείγματα κώδικα Αφηρημένες
Αντικειμενοστρέφεια. Henri Matisse, Harmony in Red, Κωστής Σαγώνας Νίκος Παπασπύρου
Αντικειμενοστρέφεια Henri Matisse, Harmony in Red, 1908 Κωστής Σαγώνας Νίκος Παπασπύρου Ορισμοί αντικειμενοστρέφειας Ποιοι είναι οι ορισμοί των παρακάτω; Αντικειμενοστρεφής
Αντικειμενοστρεφής Προγραμματισμός
Αντικειμενοστρεφής Προγραμματισμός Διδάσκουσα: Αναπλ. Καθηγήτρια Ανδριάνα Πρέντζα aprentza@unipi.gr Εργαστηριακός Συνεργάτης: Δρ. Βασιλική Κούφη vassok@unipi.gr Περιεχόμενα Java Classes Java Objects Java
Κλάσεις. Κατηγορίες Αντικειµένων. Κλάσεις. Φυσικά Αντικείµενα. Χώρος = Οµάδα Φυσικών Αντικειµένων. Πρόγραµµα = Οµάδα
Αντικειµενοστραφής Προγραµµατισµός Αντικείµενα Ιεραρχία κλάσεων. Ιδιότητες Συµπεριφορά Ιδιότητες (Μεταβλητές) Συµπεριφορά (Μέθοδοι) Κληρονοµικότητα Μέθοδοι επικάλυψης Η χρήση του this και του super Αντικειµενοστραφής
I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.
I (JAVA) Ονοματεπώνυμο: Α. Μ.: + ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην. + 1 ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ (σελ. 2/3) 2 ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ (σελ. 3/3)
Αντικειμενοστρεφής Προγραμματισμός
ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΙΚΑ ΜΑΘΗΜΑΤΑ Αντικειμενοστρεφής Προγραμματισμός Ενότητα 7: Βελτίωση Δομής με Κληρονομικότητα Γρηγόρης Τσουμάκας, Επικ. Καθηγητής Άδειες Χρήσης Το παρόν
ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 9: Κληρονομικότητα (Inheritance)
ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 9: Κληρονομικότητα (Inheritance) Μιχάλης Δρακόπουλος Σχολή Θετικών επιστημών Τμήμα Μαθηματικών ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (Java) Ενότητα 9 Κληρονομικότητα (Inheritance) Υπάρχουν κλάσεις που
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές)
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές) Κληρονομικότητα Employee name hiringdate getname gethiringdate Οι παράγωγες κλάσεις κληρονομούν τα πεδία
ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 26/2/2008
ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 26/2/2008 Τμήμα θεωρίας: Κάθε Τρίτη, 11πμ-2μμ, ΑΜΦ22. Διδάσκων: Ντίνος Φερεντίνος email: kpf3@cornell.edu Μάθημα: Θεωρία + προαιρετικό εργαστήριο (5-6 2ωρα εργαστήρια το εξάμηνο,
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Constructors, equals, tostring Constructors (Δημιουργοί) O Constructor είναι μια «μέθοδος» η οποία καλείται όταν δημιουργούμε το αντικείμενο
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Late Binding Αφηρημένες κλάσεις Interfaces διεπαφές
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πολυμορφισμός Late Binding Αφηρημένες κλάσεις Interfaces διεπαφές Κληρονομικότητα HourlyEmployee hours wagerate getpay tostring Employee name hiringdate getname
Παύλος Εφραιµίδης. Java. Κληρονοµικότητα
κληρονοµικότητα Παύλος Εφραιµίδης 1 ιεραρχίες κλάσεων Στην (και γενικότερα στον αντικειµενοστρεφή προγραµµατισµό) µπορεί από µία κλάση να δηµιουργηθεί µια νέα κλάση απόγονος που κληρονοµεί όλα τα χαρακτηριστικά
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Στατικές μέθοδοι και μεταβλητές Εσωτερικές κλάσεις
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Στατικές μέθοδοι και μεταβλητές Εσωτερικές κλάσεις Στατικές μέθοδοι Τι σημαίνει το keyword static στον ορισμό της main μεθόδου? Τι είναι μια στατική μέθοδος?
Προγράμματα με δομή Κληρονομικότητας
Προγράμματα με δομή Κληρονομικότητας Η μέθοδος print της εφαρμογής DoME Η μέθοδος print στην κλάση Item τυπώνει: title: A Swingin Affair (64 mins) my favorite Sinatra album title: O Brother, Where Art
Εργαστήριο 02: Προγραμματισμός με Γενικούς Τύπους (JAVA Generics) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι
Εργαστήριο 02: Προγραμματισμός με Γενικούς Τύπους (JAVA Generics) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Generic Types Τα Generics έχουν προστεθεί στη JAVA από το 2004 ως μέρος του J2SE 5.0 Με τη χρήση
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Παράδειγμα χρήσης κληρονομικότητας
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Παράδειγμα χρήσης κληρονομικότητας Κληρονομικότητα Employee name hiringdate getname gethiringdate Οι παράγωγες κλάσεις κληρονομούν τα πεδία και τις μεθόδους
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές) Ένα μεγάλο παράδειγμα.
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές) Ένα μεγάλο παράδειγμα. Κληρονομικότητα Employee name hiringdate getname gethiringdate Οι παράγωγες κλάσεις
ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008
ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008 Κατασκευαστές (Constructors) Ειδικός τύπος μεθόδων, οι οποίες: - είναι public και έχουν το ίδιο όνομα με αυτό της κλάσης - χρησιμοποιούνται για να αρχικοποιήσουν κάποιες
ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 10/1/08
ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 10/1/08 Συνέχεια Αναδρομής (recursion): Ο αλγόριθμος του Ευκλείδη για τον Μέγιστο Κοινό Διαιρέτη (ΜΚΔ) με αναδρομή: p, αν q=0 (βασική περίπτωση)
ΣΥΣΧΕΤΙΣΕΙΣ ΚΛΑΣΕΩΝ (Class relationships)
ΣΥΣΧΕΤΙΣΕΙΣ ΚΛΑΣΕΩΝ (Class relationships) Σκοπός Σκοπός των συσχετίσεων είναι να αναπαριστούν την αλληλεπίδραση μεταξύ των κλάσεων και των αντικειμένων. Απεικονίζονται διαγραμματικά με μία γραμμή μεταξύ
Αντικειμενοστρεφής Προγραμματισμός
Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων Αντικειμενοστρεφής Προγραμματισμός 16/4/2018 Δρ. Ανδριάνα Πρέντζα Αναπληρώτρια Καθηγήτρια aprentza@unipi.gr Τύποι της Java Primitives vs References Οι πρωταρχικοί
Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2
Ανασκόπηση Μια εφαρμογή Java είναι ένα σύνολο από συνεργαζόμενες κλάσεις Διάλεξη #2: Αντικείμενα, Κλάσεις και Μέθοδοι Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό,, Slide 1 Εισαγωγή στον Αντικειμενοστρεφή
Protected: αν κάποια πεδία και μέθοδοι είναι protected μπορούν να τα δουν όλοι οι απόγονοι της κλάσης. Το βιβλίο δεν το συνιστά.
Protected μέλη Οι παράγωγες κλάσεις έχουν πρόσβαση σε όλα τα public πεδία και μεθόδους της γενικής κλάσης. ΔΕΝ έχουν πρόσβαση στα private πεδία και μεθόδους. Μόνο μέσω public μεθόδων set* και get* Protected:
Διάλεξη 5: Κλάσεις και Αντικείμενα. Διδάσκων: Παναγιώτης Ανδρέου
Διάλεξη 5: Κλάσεις και Αντικείμενα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Κλάσεις και Αντικείμενα - Κατασκευή, Πρόσβαση Αντικειμένων - Διαχείριση Μνήμης, Garbage
I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.
I (JAVA) Ονοματεπώνυμο: Α. Μ.: + ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην. + 1 ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ (σελ. 2/3) 2 ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ (σελ. 3/3)
Μέθοδοι. Μέθοδοι ηµιουργοί, Υπερφόρτωση και Υπέρβαση Μεθόδων
Μέθοδοι Μέθοδοι ηµιουργοί, Υπερφόρτωση και Υπέρβαση Μεθόδων Μέθοδοι Οιµέθοδοικαθορίζουντηνσυµπεριφοράενόςαντικειµένου. Τα βασικά µέρη από τα οποία αποτελείται µία µέθοδος είναι τα εξής: Το όνοµα της µεθόδου
Διάγραμμα Κλάσεων. Class Diagram
Διάγραμμα Κλάσεων Class Diagram Γενικά Ορίζει τις κλάσεις αντικειμένων σε ένα σύστημα, τις μεθόδους και τις συναρτήσεις τους, και τις συσχετίσεις μεταξύ των κλάσεων. Περιγράφουν την δομή και συμπεριφορά
Καλές επιτυχίες παιδιά στα υπόλοιπα μαθήματά σας και καλές γιορτές!!!!
Πανεπιστήμιο Κύπρου Πολυτεχνική Σχολή Τμήμα Πολιτικών Μηχανικών και Μηχανικών Περιβάλλοντος ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, 2016 Ακαδημαϊκό Έτος 2016-17, Χειμερινό Εξάμηνο Τελική Εξέταση
Εξαιρέσεις (Exceptions) Λάθη (Errors) Χειρισμός των Εξαιρέσεων (Exception Handling) Assertions
(Object Oriented Programming) Εξαιρέσεις (Exceptions) Λάθη (Errors) Χειρισμός των Εξαιρέσεων (Exception Handling) Assertions PhD http://aetos.it.teithe.gr/~sfetsos/ sfetsos@it.teithe.gr Περιεχόμενα Μαθήματος
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι new Όπως είδαμε για να δημιουργήσουμε ένα αντικείμενο χρειάζεται να καλέσουμε τη new. Για τον πίνακα είπαμε ότι
Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6
Ανασκόπηση Μια εφαρµογή Java είναι ένα σύνολο από συνεργαζόµενες κλάσεις Εβδοµάδα 2: Αντικείµενα, Κλάσεις και Μέθοδοι Εισαγωγή στον Προγραµµατισµό,,, Slide 1 Εισαγωγή στον Προγραµµατισµό,,, Slide 2 Ανασκόπηση:
Προγραμματισμός ΙΙ. 2. Μέθοδοι. (Java)
Προγραμματισμός ΙΙ 2. Μέθοδοι (Java) Περιεχόμενα Μέθοδοι Πέρασμα αντικειμένου σε μέθοδο Υπερφόρτωση μεθόδων Μέθοδοι κατασκευαστές Υπερφόρτωση κατασκευαστών Επαναχρησιμοποίηση κώδικα Σύνθεση και κληρονομικότητα
Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η
Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η μέθοδος main(), εμφάνιση μηνυμάτων, Java προγράμματα που εκτελούν αριθμητικές πράξεις Γαβαλάς Δαμιανός
Αντικειµενοστρεφής Προγραµµατισµός
16 η διάλεξη Π. Σταθοπούλου pstath@ece.upatras.gr ή pstath@upatras.gr Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Φροντιστήριο : ευτέρα 11πµ-12πµ ΗΛ4 Προηγούµενη ιάλεξη
Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η
Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η μέθοδος main(), εμφάνιση μηνυμάτων, Java προγράμματα που εκτελούν αριθμητικές πράξεις 2 Ανατομία ενός προγράμματος
Ανάλυση Πληροφοριακών Συστημάτων. Εαρινό Εξάμηνο Lec08 09/04/2019 Διδάσκων: Γεώργιος Χρ. Μακρής
Ανάλυση Πληροφοριακών Συστημάτων Εαρινό Εξάμηνο 2018-2019 Lec08 09/04/2019 Διδάσκων: Γεώργιος Χρ. Μακρής Διαγράμματα Κλάσεων Τα βασικά στοιχεία Διαλέξεις παρουσιάσεις Το υλικό του μαθήματος στηρίζεται
Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου
Διάλεξη 3: Προγραμματισμός σε JAVA I Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Στοιχειώδης Προγραμματισμός - Προγραμματισμός με Συνθήκες - Προγραμματισμός με Βρόγχους
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Υπερφόρτωση Αντικείμενα σαν ορίσματα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Υπερφόρτωση Αντικείμενα σαν ορίσματα ΥΠΕΡΦΟΡΤΩΣΗ H κλάση Car Μια κλάση που κρατάει την θέση ενός αυτοκινήτου. Μέθοδος move(): μετακινεί το αυτοκίνητο κατά μία
Διδάσκων: Παναγιώτης Ανδρέου
Διάλεξη 7: Ενθυλάκωση (encapsulation), Τροποποιητές(modifiers) Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ενθυλάκωση -Τροποποιητές Πρόσβασης (Access Modifiers), public, protected, private,
3 Αλληλεπίδραση Αντικειμένων
Αφαίρεση και Αρθρωσιμότητα 3 Αλληλεπίδραση Αντικειμένων Πώς συνεργάζονται τα αντικείμενα που δημιουργούμε Αφαίρεση (abstraction) είναι η δυνατότητα να αγνοούμε τις λεπτομέρειες και να εστιάζουμε την προσοχή
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα ως ορίσματα Αντικείμενα ως ορίσματα Μπορούμε να περνάμε αντικείμενα ως ορίσματα σε μία μέθοδο όπως οποιαδήποτε άλλη μεταβλητή Οποιαδήποτε κλάση