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

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

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

Transcript

1 Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων Αντικειμενοστρεφής Προγραμματισμός 9/5/2016 Δρ. Ανδριάνα Πρέντζα Αναπληρώτρια Καθηγήτρια

2 Κληρονομικότητα

3 Τροποποιητικά πρόσβασης κλάσεων Java Η Java έχει 4 τροποποιητικά πρόσβασης (visibility modifiers) που καθορίζουν τα επίπεδα προστατευμένης πρόσβασης σε αντικείμενα της κλάσης Public οποιοσδήποτε έχει πρόσβαση στα μέλη της κλάσης Προσπελάσιμα από όλες τις κλάσεις όλων των πακέτων Private κρύβει εντελώς τα μέλη από άλλες κλάσεις και υποκλάσεις Προσπελάσιμα μόνο από την ίδια την κλάση Protected κρύβει τα μέλη της κλάσης από κλάσεις που βρίσκονται έξω από το πακέτο της κλάσης Προσπελάσιμα από την ίδια την κλάση και όποια υποκλάση ή όποια κλάση βρίσκεται στο ίδιο πακέτο με τη συγκεκριμένη κλάση Package (Default) τα μέλη είναι προσπελάσιμα από την ίδια την κλάση και οποιαδήποτε άλλη κλάση στο ίδιο πακέτο Για να έχουμε package scope, ένα μέλος δηλώνεται χωρίς κάποιο από τα keywords private, protected ή public

4 Visibility Modifiers: Example

5 Java Visibility Modifiers and Access Privileges

6 Members Visibility Modifiers A class member that is declared as public can be accessed from any class that can access the class of the member We expose methods that are part of the interface of the class by declaring them as public A class member that is declared as private, can be accessed only by code that is within the class of this member We hide the internal implementation of the class by declaring its data variables and auxiliary methods as private Data hiding is essential for encapsulation Members that are declared without a visibility modifier are said to have default visibility Note: If a class has a package scope then even if its members are public there visibility is only at the same package

7 Visibility Modifiers: Example

8 Visibility Modifiers: Example

9 Visibility Modifiers: Example

10 Κληρονομικότητα Κληρονομικότητα Επαναχρησιμοποίηση λογισμικού Δημιουργίας μια νέας κλάσης από υπάρχουσα Απορροφά τα δεδομένα και τη συμπεριφορά της υπάρχουσας κλάσης Την εμπλουτίζει με νέες δυνατότητες Η υποκλάση επεκτείνει την υπερκλάση (Subclass extends superclass) Υποκλάση (Subclass) Πιο εξειδικευμένη ομάδα αντικειμένων Συμπεριφορές κληρονομούνται από την υπερκλάση (superclass) ενδέχεται να χρειάζεται προσαρμογή (customization) Επιπρόσθετες συμπεριφορές

11 ...Εισαγωγή Ιεραρχία κλάσεων Άμεση υπερκλάση (Direct superclass) Κληρονομείται σαφώς (ιεραρχία ενός επιπέδου) Έμμεση υπερκλάση (Indirect superclass) Κληρονομείται από δύο ή περισσότερα επίπεδα Απλή κληρονομικότητα (Single inheritance) Κληρονομεί από ΜΙΑ υπερκλάση Πολλαπλή κληρονομικότητα (Multiple inheritance) Κληρονομεί από πολλές υπερκλάσεις Η Java δεν υποστηρίζει πολλαπλή κληρονομικότητα που λαμβάνει χώρα όταν μία κλάση απορρέει από περισσότερες από μία άμεσες υπερκλάσεις (σε αντίθεση με τη C++)

12 Κληρονομικότητα από μία μόνο κλάση

13 Κληρονομικότητα από μία μόνο κλάση

14 Κληρονομικότητα από μία μόνο κλάση Τι συμβαίνει αν οι κλάσεις Thief και Elf υλοποιούν και οι δύο public void sneakup() Αν έχουν υλοποιηθεί διαφορετικά, ποια μέθοδο sneakup() θα καλέσει η κλάση Bad Elf? Java doesn t know!!!

15 Υπερκλάσεις και υποκλάσεις Υπερκλάσεις και υποκλάσεις Το αντικείμενο μιας κλάσης «είναι-ένα» ( is-a ) αντικείμενο μιας άλλης κλάσης Παράδειγμα: Το τετράγωνο «είναι ένα» τετράπλευρο Η κλάση Rectangle κληρονομεί από την κλάση Quadrilateral Quadrilateral: είναι υπερκλάση Rectangle: είναι υποκλάση Η υπερκλάση τυπικά αναπαριστά ένα μεγαλύτερο σύνολο αντικειμένων από τις υποκλάσεις Παράδειγμα: υπερκλάση: Vehicle (όχημα) Cars, trucks, boats, bicycles, υποκλάση: Car Μικρότερη, πιο εξειδικευμένο υποσύνολο από vehicles

16 Παραδείγματα κληρονομικότητας Υπερκλάση Υποκλάσεις Student Shape Loan Employee GraduateStudent, UndergraduateStudent Circle, Triangle, Rectangle CarLoan, HomeImprovementLoan, MortgageLoan Faculty, Staff BankAccount CheckingAccount, SavingsAccount

17 ...Υπερκλάσεις και υποκλάσεις Ιεραρχία κληρονομικότητας Σχέσεις ιεραρχίας: δενδροειδής δομή ιεραρχίας Κάθε κλάση γίνεται Υπερκλάση Παρέχει μέλη σε άλλες κλάσεις Ή Υποκλάση Κληρονομεί μέλη από άλλες κλάσεις

18 ...Υπερκλάσεις και υποκλάσεις 1. Άμεση υπερκλάση των Employee, Student και Alumnus 2. Έμμεση υπερκλάση όλων των άλλων κλάσεων Ένας Employee είναι ένα CommunityMember Ένας Teacher είναι ένα μέλος Faculty

19 Σύνοψη κληρονομικότητας class A extends B {} == η A είναι υποκλάση της B Η A έχει όλα τα πεδία και μεθόδους που έχει η κλάση B Η κλάση A μπορεί να προσθέσει τα δικά του πεδία και μεθόδους Η κλάση A μπορεί να έχει μόνο ένα γονιό Η κλάση A μπορεί να αντικαταστήσει μία γονική μέθοδο με το να την ξανα-υλοποιήσει Αν η κλάση A δεν υλοποιεί κάτι, τότε η Java ψάχνει τους προγόνους

20 ...Υπερκλάσεις και υποκλάσεις Ένα Triangle είναι ένα TwoDimensionalShape και επίσης, είναι ένα Shape

21 Προστατευμένα (Protected) μέλη protected πρόσβαση Ενδιάμεσο επίπεδο προστασίας, μεταξύ public και private Τα protected μέλη είναι προσβάσιμα από 1. Μέλη της υπερκλάσης 2. Μέλη της υποκλάσης 3. Μέλη κλάσεων στο ίδιο package (friend στη C++) Πρόσβαση της υποκλάσης σε μέλος της υπερκλάσης Με τη λέξη κλειδί super και το dot (.)

22 Παρατήρηση Οι μέθοδοι μιας υποκλάσης δεν μπορούν να προσπελάσουν απευθείας τα private μέλη της υπερκλάσης τους. Μια υποκλάση μπορεί να αλλάξει την κατάσταση των private μεταβλητών στιγμιοτύπου της υπερκλάσης μόνο μέσω των μηprivate μεθόδων που παρέχονται στην υπερκλάση και κληρονομούνται από την υποκλάση

23 Σχέση μεταξύ Υπερκλάσεων και Υποκλάσεων Παράδειγμα (τύποι εργαζόμενων σε μια εφαρμογή μισθοδοσίας): ιεραρχία κληρονομικότητας CommissionEmployee/BasePlusCommissionEmployee CommissionEmployee Όνομα (firstname) Επίθετο (lastname) Αριθμός κοινωνικής ασφάλισης (socialsecuritynumber) Ποσοστό προμήθειας (commisionrate) Μικτές (συνολικές) πωλήσεις (grosssales) BasePlusCommissionEmployee Όνομα Επίθετο Αριθμός κοινωνικής ασφάλισης Ποσοστό προμήθειας Μικτές (συνολικές) πωλήσεις Βασικός μισθός (basicsalary)

24 Δημιουργία και χρήση της κλάσης CommissionEmployee Η κλάση CommissionEmployee Επεκτείνει (Extends) την κλάση Object Λέξη-κλειδί extends Κάθε κλάση στη Java επεκτείνει (extends) μια υπάρχουσα κλάση Εκτός από την Object Κάθε κλάση κληρονομεί τις μεθόδους της Object Μια νέα κλάση εμμέσως επεκτείνει την κλάση Object Αν δεν επεκτείνει μια άλλη κλάση Ο μεταγλωττιστής της Java θέτει ως υπερκλάση μιας κλάσης την Object, όταν η δήλωση της κλάσης δεν επεκτείνει σαφώς κάποια άλλη υπερκλάση

25 1 // Fig. 9.4: CommissionEmployee.java 2 //...Δημιουργία CommissionEmployee και χρήση class represents της κλάσης a commission employee. 3 CommissionEmployee 4 public class CommissionEmployee extends Object 5 { 6 private String firstname; 7 private String lastname; 8 private String socialsecuritynumber; 9 private double grosssales; // gross weekly sales 10 private double commissionrate; // commission percentage // five-argument constructor 13 public CommissionEmployee( String first, String last, String ssn, 14 double sales, double rate ) 15 { 16 // implicit call to Object constructor occurs here 17 firstname = first; 18 lastname = last; 19 socialsecuritynumber = ssn; 20 setgrosssales(sales); // validate and store gross sales 21 setcommissionrate(rate); // validate and store commission rate 22 } // end five-argument CommissionEmployee constructor // set first name 25 public void setfirstname( String first ) 26 { 27 firstname = first; 28 } // end method setfirstname 29 Δήλωση private μεταβλητών στιγμιοτύπου Η κλάση CommissionEmployee επεκτείνει (extends) την κλάση Object Έμμεση κλήση του κατασκευαστή της Object Αρχικοποίηση μεταβλητών στιγμιοτύπου Κλήση μεθόδων setgrosssales και setcommissionrate για επικύρωση δεδομένων Στη πραγματικότητα είναι πλεονασμός να δηλωθεί αυτή η σχέση κληρονομικότητας

26 30 // return first name 31 public String getfirstname() 32 { 33 return firstname; 34 } // end method getfirstname // set last name 37 public void setlastname(string last) 38 { 39 lastname = last; 40 } // end method setlastname // return last name 43 public String getlastname() 44 { 45 return lastname; 46 } // end method getlastname // set social security number 49 public void setsocialsecuritynumber(string ssn) 50 { 51 socialsecuritynumber = ssn; // should validate 52 } // end method setsocialsecuritynumber // return social security number 55 public String getsocialsecuritynumber() 56 { 57 return socialsecuritynumber; 58 } // end method getsocialsecuritynumber 59

27 60 // set gross sales amount 61 public void setgrosssales(double sales) 62 { 63 grosssales = (sales < 0.0)? 0.0 : sales; 64 } // end method setgrosssales // return gross sales amount 67 public double getgrosssales() 68 { 69 return grosssales; 70 } // end method getgrosssales // set commission rate 73 public void setcommissionrate(double rate) 74 { 75 commissionrate = (rate > 0.0 && rate < 1.0)? rate : 0.0; 76 } // end method setcommissionrate // return commission rate 79 public double getcommissionrate() 80 { 81 return commissionrate; 82 } // end method getcommissionrate // calculate earnings Υπολογισμός μισθού 85 public double earnings() 86 { 87 return commissionrate * grosssales; 88 } // end method earnings 89

28 90 // return String representation of CommissionEmployee object 91 public String tostring() 92 { 93 return String.format( "%s: %s %s\n%s: %s\n%s: %.2f\n%s: %.2f", 94 "commission employee", firstname, lastname, 95 "social security number", socialsecuritynumber, 96 "gross sales", grosssales, 97 "commission rate", commissionrate ); 98 } // end method tostring 99 } // end class CommissionEmployee Παράκαμψη (Override) της μεθόδου tostring της κλάσης Object Η μέθοδος tostring της κλάσης Object επιστρέφει ένα String το οποίο περιλαμβάνει το όνομα της κλάσης του αντικειμένου. Εδώ όμως ορίζεται εκ νέου η μέθοδος, και αποτελεί «προσαρμοσμένη» έκδοση της αρχικής. Χρησιμοποιεί τη String μέθοδο format για να επιστρέψει ένα String το οποίο περιέχει πληροφορίες για το Commission Employee. Για να παρακάμψει κάποιος μία μέθοδο υπερκλάσης, πρέπει η υποκλάση να έχει μία μέθοδο που έχει ακριβώς την ίδια υπογραφή (όνομα μεθόδου, αριθμός παραμέτρων, τύποι παραμέτρων και σειρά τύπων παραμέτρων) Η μέθοδος tostring της κλάσης Object δεν έχει παραμέτρους, επομένως ούτε η μέθοδος tostring της CommissionEmployee έχει.

29 Συνηθισμένο προγραμματιστικό σφάλμα Είναι συντακτικό σφάλμα η παράκαμψη μιας μεθόδου με ένα πιο περιοριστικό τροποποιητικό πρόσβασης μια public μέθοδος της υπερκλάσης δεν μπορεί να καταστεί protected ή private μέθοδος στην υποκλάση Μια μέθοδος protected της υπερκλάσης δεν μπορεί να γίνει private μέθοδος στην υποκλάση Κάτι τέτοιο θα χαλούσε τη σχέση είναι-ένα στην οποία απαιτείται όλα τα αντικείμενα της υποκλάσης να μπορούν να αποκριθούν στις κλήσεις μεθόδου που γίνονται στις public μεθόδους που δηλώθηκαν στην υπερκλάση Όταν μια μέθοδος ορίζεται ως public σε μια υπερκλάση, η μέθοδος παραμένει public για όλες τις άμεσες και έμμεσες υποκλάσεις αυτής της κλάσης

30 1 // Fig. 9.5: CommissionEmployeeTest.java Δημιουργία αντικειμένου 2 // Testing class CommissionEmployee. CommissionEmployee 3 4 public class CommissionEmployeeTest 5 { 6 public static void main( String args[] ) 7 { 8 // instantiate CommissionEmployee object 9 CommissionEmployee employee = new CommissionEmployee( 10 "Sue", "Jones", " ", 10000,.06 ); // get commission employee data 13 System.out.println( 14 "Employee information obtained by get methods: \n" ); 15 System.out.printf( "%s %s\n", "First name is", 16 employee.getfirstname() ); 17 System.out.printf( "%s %s\n", "Last name is", 18 employee.getlastname() ); 19 System.out.printf( "%s %s\n", "Social security number is", 20 employee.getsocialsecuritynumber() ); 21 System.out.printf( "%s %.2f\n", "Gross sales is", 22 employee.getgrosssales() ); 23 System.out.printf( "%s %.2f\n", "Commission rate is", 24 employee.getcommissionrate() ); employee.setgrosssales(500); // set gross sales 27 employee.setcommissionrate(.1); // set commission rate 28 Χρήση μεθόδων get της CommissionEmployee για ανάκτηση των μεταβλητών στιγμιοτύπου του αντικειμένου Χρήση μεθόδων set της CommissionEmployee για αλλαγή των μεταβλητών στιγμιοτύπου του αντικειμένου

31 29 System.out.printf( "\n%s:\n\n%s\n", 30 "Updated employee information obtained by tostring", employee) 31 } // end main 32 } // end class CommissionEmployeeTest Employee information obtained by get methods: First name is Sue Last name is Jones Social security number is Gross sales is Commission rate is 0.06 Updated employee information obtained by tostring: commission employee: Sue Jones social security number: gross sales: commission rate: 0.10 Έμμεση κλήση της μεθόδου tostring του αντικειμένου

32 Δημιουργία της κλάσης BasePlusCommissionEmployee χωρίς χρήση κληρονομικότητας Η κλάση BasePlusCommissionEmployee Εμμέσως επεκτείνει την Object Μεγάλο μέρος του κώδικα είναι ίδιο με αυτόν της CommissionEmployee οι private μεταβλητές στιγμιοτύπου οι public μέθοδοι Ο κατασκευαστής Η κλάση BasePlusCommissionEmployee αναπαριστά έναν υπάλληλο που επιπλέον του commission έχει και βασικό μισθό Προσθήκες Η private μεταβλητή στιγμιοτύπου basesalary Οι μέθοδοι setbasesalary και getbasesalary

33 1 // Fig. 9.6: BasePlusCommissionEmployee.java 2 // BasePlusCommissionEmployee class represents an employee that receives 3 // a base salary in addition to commission. 4 5 public class BasePlusCommissionEmployee 6 { 7 private String firstname; 8 private String lastname; 9 private String socialsecuritynumber; 10 private double grosssales; // gross weekly sales 11 private double commissionrate; // commission percentage 12 private double basesalary; // base salary per week // six-argument constructor 15 public BasePlusCommissionEmployee( String first, String last, 16 String ssn, double sales, double rate, double salary ) 17 { 18 // implicit call to Object constructor occurs here 19 firstname = first; 20 lastname = last; 21 socialsecuritynumber = ssn; Προσθήκη της μεταβλητής στιγμιοτύπου basesalary Χρήση της μεθόδου setbasesalary για 22 setgrosssales(sales); // validate and store gross sales επικύρωση 23 setcommissionrate(rate); // validate and store commission rate 24 setbasesalary(salary); // validate and store base salary 25 } // end six-argument BasePlusCommissionEmployee constructor 26

34 27 // set first name 28 public void setfirstname(string first) 29 { 30 firstname = first; 31 } // end method setfirstname // return first name 34 public String getfirstname() 35 { 36 return firstname; 37 } // end method getfirstname // set last name 40 public void setlastname(string last) 41 { 42 lastname = last; 43 } // end method setlastname // return last name 46 public String getlastname() 47 { 48 return lastname; 49 } // end method getlastname // set social security number 52 public void setsocialsecuritynumber(string ssn) 53 { 54 socialsecuritynumber = ssn; // should validate 55 } // end method setsocialsecuritynumber 56

35 57 // return social security number 58 public String getsocialsecuritynumber() 59 { 60 return socialsecuritynumber; 61 } // end method getsocialsecuritynumber // set gross sales amount 64 public void setgrosssales(double sales) 65 { 66 grosssales = (sales < 0.0)? 0.0 : sales; 67 } // end method setgrosssales // return gross sales amount 70 public double getgrosssales() 71 { 72 return grosssales; 73 } // end method getgrosssales // set commission rate 76 public void setcommissionrate(double rate) 77 { 78 commissionrate = (rate > 0.0 && rate < 1.0)? rate : 0.0; 79 } // end method setcommissionrate // return commission rate 82 public double getcommissionrate() 83 { 84 return commissionrate; 85 } // end method getcommissionrate 86

36 87 // set base salary 88 public void setbasesalary(double salary) 89 { 90 basesalary = (salary < 0.0)? 0.0 : salary; 91 } // end method setbasesalary // return base salary 94 public double getbasesalary() 95 { 96 return basesalary; 97 } // end method getbasesalary // calculate earnings 100 public double earnings() 101 { 102 return basesalary + (commissionrate * grosssales); 103 } // end method earnings // return String representation of BasePlusCommissionEmployee 106 public String tostring() 107 { 108 return String.format( 109 "%s: %s %s\n%s: %s\n%s: %.2f\n%s: %.2f\n%s: %.2f", 110 "base-salaried commission employee", firstname, lastname, 111 "social security number", socialsecuritynumber, 112 "gross sales", grosssales, "commission rate", commissionrate, 113 "base salary", basesalary); 114 } // end method tostring 115 } // end class BasePlusCommissionEmployee Η μέθοδος setbasesalary validates επικυρώνει και θέτει τιμή για τη μεταβλητή basesalary Η μέθοδος getbasesalary επιστρέφει την τιμή της μεταβλητής basesalary Ενημέρωση της μεθόδου earnings για τον υπολογισμό των αποδοχών ενός εργαζομένου με βασικό μισθό Ενημέρωση της μεθόδου tostring για εμφάνιση και του βασικού μισθού

37 1 // Fig. 9.7: BasePlusCommissionEmployeeTest.java 2 // Testing class BasePlusCommissionEmployee. 3 4 public class BasePlusCommissionEmployeeTest 5 { 6 public static void main( String args[] ) 7 { 8 // instantiate BasePlusCommissionEmployee object 9 BasePlusCommissionEmployee employee = 10 new BasePlusCommissionEmployee( 11 "Bob", "Lewis", " ", 5000,.04, 300 ); // get base-salaried commission employee data 14 System.out.println( 15 "Employee information obtained by get methods: \n" ); 16 System.out.printf( "%s %s\n", "First name is", 17 employee.getfirstname() ); 18 System.out.printf( "%s %s\n", "Last name is", 19 employee.getlastname() ); 20 System.out.printf( "%s %s\n", "Social security number is", 21 employee.getsocialsecuritynumber() ); 22 System.out.printf( "%s %.2f\n", "Gross sales is", 23 employee.getgrosssales() ); 24 System.out.printf( "%s %.2f\n", "Commission rate is", 25 employee.getcommissionrate() ); 26 System.out.printf( "%s %.2f\n", "Base salary is", 27 employee.getbasesalary() ); 28 Δημιουργία αντικειμένου BasePlusCommissionEmployee Χρήση μεθόδων get της BasePlusCommission Employee s για ανάκτηση των μεταβλητών στιγμιοτύπου του αντικειμένου

38 29 employee.setbasesalary(1000); // set base salary System.out.printf("\n%s:\n\n%s\n", 32 "Updated employee information obtained by tostring", 33 employee.tostring() ); 34 } // end main 35 } // end class BasePlusCommissionEmployeeTest Employee information obtained by get methods: First name is Bob Last name is Lewis Social security number is Gross sales is Commission rate is 0.04 Base salary is Updated employee information obtained by tostring: base-salaried commission employee: Bob Lewis social security number: gross sales: commission rate: 0.04 base salary: Σαφής κλήση της μεθόδου tostring Χρήση των μεθόδων της BasePlusCommissionE mployee s setbasesalary για προσδιορισμό του βασικού μισθού

39 Διαφορές??? Τι διαφορές παρατηρείται μεταξύ των δύο κλάσεων? CommissionEmployee BasePlusCommissionEmployee

40 Παρατηρήσεις Η αντιγραφή και επικόλληση κώδικα από μια κλάση σε μια άλλη μπορεί να διασπείρει σφάλματα σε πολλαπλά αρχεία κώδικα. Για να αποφύγουμε την αναπαραγωγή κώδικα (και τα πιθανά σφάλματα), χρησιμοποιούμε την ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ Με την κληρονομικότητα, οι κοινές μεταβλητές στιγμιότυπου και μέθοδοι όλων των κλάσεων στην ιεραρχία δηλώνονται σε μια υπερκλάση Όταν απαιτούνται αλλαγές για αυτά τα κοινά χαρακτηριστικά, χρειάζεται να κάνουμε αλλαγές μόνο στην υπερκλάση οι υποκλάσεις κληρονομούν τις αλλαγές Χωρίς την κληρονομικότητα, οι αλλαγές θα έπρεπε να γίνουν σε όλα τα αρχεία πηγαίου κώδικα που περιέχουν αντίγραφο του κώδικα αυτού

41 Δημιουργία μιας ιεραρχίας κληρονομικότητας CommissionEmployee BasePlusCommissionEmployee Η κλάση BasePlusCommissionEmployee2 Επεκτείνει την κλάση CommissionEmployee «είναι ένα» CommissionEmployee Έχει μεταβλητή στιγμιοτύπου τη basesalary Κληρονομεί τα public και protected μέλη Ο κατασκευαστής δεν κληρονομείται

42 1 // Fig. 9.8: BasePlusCommissionEmployee2.java 2 // BasePlusCommissionEmployee2 inherits from class CommissionEmployee 3 4 public class BasePlusCommissionEmployee2 extends CommissionEmployee 5 { 6 private double basesalary; // base salary per week Η κλάση 7 BasePluCommissionEm 8 // six-argument constructor ployee2 είναι μια 9 public BasePlusCommissionEmployee2(String first, υποκλάση String της last, 10 String ssn, double sales, double rate, double CommissionEmployee salary ) 11 { 12 // explicit call to superclass CommissionEmployee constructor 13 super( first, last, ssn, sales, rate ); setbasesalary( salary ); // validate and store base salary 16 } // end six-argument BasePlusCommissionEmployee2 constructor // set base salary 19 public void setbasesalary(double salary) 20 { 21 basesalary = (salary < 0.0)? 0.0 : salary; 22 } // end method setbasesalary Καλούμε τον κατασκευαστή της 23 υπερκλάσης χρησιμοποιώντας τη σύνταξη κλήσης κατασκευαστή υπερκλάσης

43 24 // return base salary 25 public double getbasesalary() 26 { 27 return basesalary; 28 } // end method getbasesalary Ο Compiler παράγει σφάλματα επειδή οι μεταβλητές στιγμιοτύπου commissionrate και grosssales της υπερκλάσης είναι private...δημιουργία μιας ιεραρχίας κληρονομικότητας CommissionEmployee BasePlusCommissionEmployee // calculate earnings 31 public double earnings() 32 { 33 // not allowed: commissionrate and grosssales private in superclass 34 return basesalary + (commissionrate * grosssales); 35 } // end method earnings // return String representation of BasePlusCommissionEmployee2 38 public String tostring() 39 { 40 // not allowed: attempts to access private superclass members 41 return String.format( 42 "%s: %s %s\n%s: %s\n%s: %.2f\n%s: %.2f\n%s: %.2f", 43 "base-salaried commission employee", firstname, lastname, 44 "social security number", socialsecuritynumber, 45 "gross sales", grosssales, "commission rate", commissionrate, 46 "base salary", basesalary); 47 } // end method tostring 48 } // end class BasePlusCommissionEmployee2 Ο Compiler παράγει σφάλματα επειδή οι μεταβλητές στιγμιοτύπου firstname, lastname, socialsecuritynumber, grosssales και commissionrate της υπερκλάσης είναι private

44 BasePlusCommissionEmployee2.java:34: commissionrate has private access in CommissionEmployee return basesalary + ( commissionrate * grosssales ); ^ BasePlusCommissionEmployee2.java:34: grosssales has private access in CommissionEmployee return basesalary + ( commissionrate * grosssales ); ^ BasePlusCommissionEmployee2.java:43: firstname has private access in CommissionEmployee "base-salaried commission employee", firstname, lastname, ^ BasePlusCommissionEmployee2.java:43: lastname has private access in CommissionEmployee "base-salaried commission employee", firstname, lastname, ^ BasePlusCommissionEmployee2.java:44: socialsecuritynumber has private access in CommissionEmployee "social security number", socialsecuritynumber, ^ BasePlusCommissionEmployee2.java:45: grosssales has private access in CommissionEmployee "gross sales", grosssales, "commission rate", commissionrate, ^ BasePlusCommissionEmployee2.java:45: commissionrate has private access in CommissionEmployee "gross sales", grosssales, "commission rate", commissionrate, ^ 7 errors

45 Ιεραρχία κληρονομικότητας CommissionEmployee BasePlusCommissionEmployee με χρήση protected μεταβλητών στιγμιοτύπου Χρήση προστατευόμενων (protected) μεταβλητών στιγμιοτύπου Επιτρέπει στην κλάση BasePlusCommissionEmployee να αποκτήσει άμεση πρόσβαση στις μεταβλητές στιγμιοτύπου της υπερκλάσης Τα protected μέλη της υπερκλάσης κληρονομούνται από όλες τις υποκλάσεις αυτής της υπερκλάσης

46 1 // Fig. 9.9: CommissionEmployee2.java 2 // CommissionEmployee2 class represents a commission employee. 3 4 public class CommissionEmployee2 5 { 6 protected String firstname; 7 protected String lastname; 8 protected String socialsecuritynumber; 9 protected double grosssales; // gross weekly sales 10 protected double commissionrate; // commission percentage // five-argument constructor Δήλωση protected μεταβλητών στιγμιοτύπου 13 public CommissionEmployee2(String first, String last, String ssn, 14 double sales, double rate) 15 { 16 // implicit call to Object constructor occurs here 17 firstname = first; 18 lastname = last; 19 socialsecuritynumber = ssn; 20 setgrosssales(sales); // validate and store gross sales 21 setcommissionrate(rate); // validate and store commission rate 22 } // end five-argument CommissionEmployee2 constructor // set first name 25 public void setfirstname(string first) 26 { 27 firstname = first; 28 } // end method setfirstname 29

47 30 // return first name 31 public String getfirstname() 32 { 33 return firstname; 34 } // end method getfirstname // set last name 37 public void setlastname(string last) 38 { 39 lastname = last; 40 } // end method setlastname // return last name 43 public String getlastname() 44 { 45 return lastname; 46 } // end method getlastname // set social security number 49 public void setsocialsecuritynumber(string ssn) 50 { 51 socialsecuritynumber = ssn; // should validate 52 } // end method setsocialsecuritynumber // return social security number 55 public String getsocialsecuritynumber() 56 { 57 return socialsecuritynumber; 58 } // end method getsocialsecuritynumber 59

48 60 // set gross sales amount 61 public void setgrosssales(double sales) 62 { 63 grosssales = (sales < 0.0)? 0.0 : sales; 64 } // end method setgrosssales // return gross sales amount 67 public double getgrosssales() 68 { 69 return grosssales; 70 } // end method getgrosssales // set commission rate 73 public void setcommissionrate(double rate) 74 { 75 commissionrate = (rate > 0.0 && rate < 1.0)? rate : 0.0; 76 } // end method setcommissionrate // return commission rate 79 public double getcommissionrate() 80 { 81 return commissionrate; 82 } // end method getcommissionrate // calculate earnings 85 public double earnings() 86 { 87 return commissionrate * grosssales; 88 } // end method earnings 89

49 90 // return String representation of CommissionEmployee2 object 91 public String tostring() 92 { 93 return String.format("%s: %s %s\n%s: %s\n%s: %.2f\n%s: %.2f", 94 "commission employee", firstname, lastname, 95 "social security number", socialsecuritynumber, 96 "gross sales", grosssales, 97 "commission rate", commissionrate); 98 } // end method tostring 99 } // end class CommissionEmployee2

50 1 // Fig. 9.10: BasePlusCommissionEmployee3.java 2 // BasePlusCommissionEmployee3 inherits from CommissionEmployee2 and has 3 // access to CommissionEmployee2's protected members. 4 5 public class BasePlusCommissionEmployee3 extends CommissionEmployee2 6 { Πρέπει να κληθεί ο 7 private double basesalary; // base salary per week κατασκευαστής της 8 υπερκλάσης 9 // six-argument constructor 10 public BasePlusCommissionEmployee3(String first, String last, 11 String ssn, double sales, double rate, double salary) 12 { 13 super(first, last, ssn, sales, rate); 14 setbasesalary(salary); // validate and store base salary 15 } // end six-argument BasePlusCommissionEmployee3 constructor // set base salary 18 public void setbasesalary(double salary) 19 { 20 basesalary = (salary < 0.0)? 0.0 : salary; 21 } // end method setbasesalary // return base salary 24 public double getbasesalary() 25 { 26 return basesalary; 27 } // end method getbasesalary 28

51 29 // calculate earnings 30 public double earnings() 31 { 32 return basesalary + (commissionrate * grosssales); 33 } // end method earnings // return String representation of BasePlusCommissionEmployee3 36 public String tostring() 37 { 38 return String.format( 39 "%s: %s %s\n%s: %s\n%s: %.2f\n%s: %.2f\n%s: %.2f", 40 "base-salaried commission employee", firstname, lastname, Απευθείας πρόσβαση στις protected μεταβλητές στιγμιοτύπου της υπερκλάσης 41 "social security number", socialsecuritynumber, 42 "gross sales", grosssales, "commission rate", commissionrate, 43 "base salary", basesalary); 44 } // end method tostring 45 } // end class BasePlusCommissionEmployee3

52 1 // Fig. 9.11: BasePlusCommissionEmployeeTest3.java 2 // Testing class BasePlusCommissionEmployee public class BasePlusCommissionEmployeeTest3 5 { 6 public static void main( String args[] ) 7 { 8 // instantiate BasePlusCommissionEmployee3 object 9 BasePlusCommissionEmployee3 employee = 10 new BasePlusCommissionEmployee3( 11 "Bob", "Lewis", " ", 5000,.04, 300 ); // get base-salaried commission employee data 14 System.out.println( 15 "Employee information obtained by get methods: \n" ); 16 System.out.printf( "%s %s\n", "First name is", 17 employee.getfirstname() ); 18 System.out.printf( "%s %s\n", "Last name is", 19 employee.getlastname() ); 20 System.out.printf( "%s %s\n", "Social security number is", 21 employee.getsocialsecuritynumber() ); 22 System.out.printf( "%s %.2f\n", "Gross sales is", 23 employee.getgrosssales() ); 24 System.out.printf( "%s %.2f\n", "Commission rate is", 25 employee.getcommissionrate() ); 26 System.out.printf( "%s %.2f\n", "Base salary is", 27 employee.getbasesalary() ); 28

53 29 employee.setbasesalary(1000); // set base salary System.out.printf( "\n%s:\n\n%s\n", 32 "Updated employee information obtained by tostring", 33 employee.tostring() ); 34 } // end main 35 } // end class BasePlusCommissionEmployeeTest3 Employee information obtained by get methods: First name is Bob Last name is Lewis Social security number is Gross sales is Commission rate is 0.04 Base salary is Updated employee information obtained by tostring: base-salaried commission employee: Bob Lewis social security number: gross sales: commission rate: 0.04 base salary:

54 ...Ιεραρχία κληρονομικότητας ComissionEmployee BasePlusCommissionEmployee με χρήση protected μεταβλητών στιγμιοτύπου Χρήση protected μεταβλητών στιγμιότυπων Πλεονεκτήματα Οι υποκλάσεις μπορούν να τροποποιήσουν τις τιμές απευθείας Ελαφρά αύξηση στην απόδοση Αποφυγή πολλαπλών set/get μεθόδων Μειονεκτήματα Δεν υπάρχει έλεγχος επικύρωσης Η υποκλάση μπορεί να αναθέσει «κακή» τιμή Εξάρτηση από την υλοποίηση Οι μέθοδοι της υποκλάσης εξαρτώνται περισσότερο από την υλοποίηση της υπερκλάσης Αλλαγές στην υλοποίηση της υπερκλάσης μπορεί να οδηγήσουν σε τροποποιήσεις των υποκλάσεων Η έννοια του «Εύθραυστου (ασταθούς) λογισμικού»

55 Παρατηρήσεις Χρησιμοποιούμε το τροποποιητικό πρόσβασης protected όταν μια υπερκλάση πρέπει να παρέχει μια μέθοδο μόνο στις υποκλάσεις της και στις κλάσεις του ίδιου πακέτου, αλλά όχι σε άλλους πελάτες Δηλώνοντας τις μεταβλητές στιγμιότυπου ως private (αντί για protected) επιτρέπει στην υλοποίηση της υπερκλάσης αυτών των μεταβλητών να αλλάζει χωρίς να επηρεάζει τις υλοποιήσεις των υποκλάσεων

56 Αποφυγή σφαλμάτων Όταν είναι δυνατό, μην περιλαμβάνετε protected μεταβλητές στιγμιότυπου σε μια υπερκλάση Αντ αυτού, χρησιμοποιείστε μη-private μεθόδους για την πρόσβαση σε private μεταβλητές στιγμιότυπου

57 Ιεραρχία κληρονομικότητας CommissionEmployee BasePlusCommissionEmployee με χρήση private μεταβλητών στιγμιοτύπου Επανεξέταση ιεραρχίας Χρήση της καλύτερης πρακτικής τεχνολογίας λογισμικού Δηλώνουμε μεταβλητές στιγμιότυπου ως private Παρέχουμε public μεθόδους get και set Χρησιμοποιούμε μέθοδο get για να ανακτήσουμε τις τιμές από μεταβλητές στιγμιότυπου

58 1 // Fig. 9.12: CommissionEmployee3.java 2 // CommissionEmployee3 class represents a commission employee. 3 4 public class CommissionEmployee3 5 { 6 private String firstname; 7 private String lastname; 8 private String socialsecuritynumber; 9 private double grosssales; // gross weekly sales Δήλωση private μεταβλητών στιγμιοτύπου 10 private double commissionrate; // commission percentage // five-argument constructor 13 public CommissionEmployee3(String first, String last, String ssn, 14 double sales, double rate) 15 { 16 // implicit call to Object constructor occurs here 17 firstname = first; 18 lastname = last; 19 socialsecuritynumber = ssn; 20 setgrosssales(sales); // validate and store gross sales 21 setcommissionrate(rate); // validate and store commission rate 22 } // end five-argument CommissionEmployee3 constructor // set first name 25 public void setfirstname(string first) 26 { 27 firstname = first; 28 } // end method setfirstname 29

59 30 // return first name 31 public String getfirstname() 32 { 33 return firstname; 34 } // end method getfirstname // set last name 37 public void setlastname(string last) 38 { 39 lastname = last; 40 } // end method setlastname // return last name 43 public String getlastname() 44 { 45 return lastname; 46 } // end method getlastname // set social security number 49 public void setsocialsecuritynumber(string ssn) 50 { 51 socialsecuritynumber = ssn; // should validate 52 } // end method setsocialsecuritynumber // return social security number 55 public String getsocialsecuritynumber() 56 { 57 return socialsecuritynumber; 58 } // end method getsocialsecuritynumber 59

60 60 // set gross sales amount 61 public void setgrosssales(double sales) 62 { 63 grosssales = (sales < 0.0)? 0.0 : sales; 64 } // end method setgrosssales // return gross sales amount 67 public double getgrosssales() 68 { 69 return grosssales; 70 } // end method getgrosssales // set commission rate 73 public void setcommissionrate(double rate) 74 { 75 commissionrate = (rate > 0.0 && rate < 1.0)? rate : 0.0; 76 } // end method setcommissionrate // return commission rate 79 public double getcommissionrate() 80 { 81 return commissionrate; 82 } // end method getcommissionrate 83

61 84 // calculate earnings 85 public double earnings() 86 { 87 return getcommissionrate() * getgrosssales(); 88 } // end method earnings 89 Χρήση μεθόδων get για ανάκτηση των τιμών των μεταβλητών στιγμιοτύπου 90 // return String representation of CommissionEmployee3 object 91 public String tostring() 92 { 93 return String.format( "%s: %s %s\n%s: %s\n%s: %.2f\n%s: %.2f", 94 "commission employee", getfirstname(), getlastname(), 95 "social security number", getsocialsecuritynumber(), 96 "gross sales", getgrosssales(), 97 "commission rate", getcommissionrate() ); 98 } // end method tostring 99 } // end class CommissionEmployee3

62 1 // Fig. 9.13: BasePlusCommissionEmployee4.java 2 // BasePlusCommissionEmployee4 class inherits from CommissionEmployee3 and 3 // accesses CommissionEmployee3's private data via CommissionEmployee3's Κληρονομεί από την CommissionEmployee3 4 // public methods. 5 6 public class BasePlusCommissionEmployee4 extends CommissionEmployee3 7 { 8 private double basesalary; // base salary per week 9 10 // six-argument constructor 11 public BasePlusCommissionEmployee4(String first, String last, 12 String ssn, double sales, double rate, double salary) 13 { 14 super(first, last, ssn, sales, rate); 15 setbasesalary(salary); // validate and store base salary 16 } // end six-argument BasePlusCommissionEmployee4 constructor // set base salary 19 public void setbasesalary(double salary) 20 { 21 basesalary = (salary < 0.0)? 0.0 : salary; 22 } // end method setbasesalary 23

63 24 // return base salary 25 public double getbasesalary() 26 { 27 return basesalary; 28 } // end method getbasesalary // calculate earnings 31 public double earnings() 32 { Κλήση της overriden μεθόδου earnings της υπερκλάσης από την υποκλάση Χρήση των μεθόδων get για 33 return getbasesalary() + super.earnings(); την ανάκτηση των τιμών των 34 } // end method earnings μεταβλητών στιγμιοτύπου // return String representation of BasePlusCommissionEmployee4 37 public String tostring() 38 { 39 return String.format("%s %s\n%s: %.2f", "base-salaried", 40 super.tostring(), "base salary", getbasesalary()); 41 } // end method tostring 42 } // end class BasePlusCommissionEmployee4 Καλείται η overridden μέθοδος tostring της υπερκλάσης από την υπορκλάση

64 Συνηθισμένο προγραμματιστικό σφάλμα Όταν η μέθοδος μιας υπερκλάσης παρακάμπτεται (overridden) σε μια υποκλάση, η έκδοση της υποκλάσης συχνά καλεί την έκδοση της υπερκλάσης «για να κάνει ένα μέρος της δουλειάς» Εάν δεν χρησιμοποιηθεί πριν από το όνομα της μεθόδου της υπερκλάσης η λέξη-κλειδί super και μετά η τελεία (.) όταν αναφερόμαστε στη μέθοδο της υπερκλάσης, τότε η μέθοδος της υποκλάσης καλεί τον εαυτό της, κι έτσι δημιουργείται σφάλμα «ατέρμονης επανάληψης επιστροφής» (infinite recursion)

65 1 // Fig. 9.14: BasePlusCommissionEmployeeTest4.java 2 // Testing class BasePlusCommissionEmployee public class BasePlusCommissionEmployeeTest4 Δημιουργία αντικειμένου 5 { BasePlusCommissionEmployee4 6 public static void main( String args[] ) 7 { 8 // instantiate BasePlusCommissionEmployee4 object 9 BasePlusCommissionEmployee4 employee = 10 new BasePlusCommissionEmployee4( 11 "Bob", "Lewis", " ", 5000,.04, 300 ); // get base-salaried commission employee data 14 System.out.println( 15 "Employee information obtained by get methods: \n" ); 16 System.out.printf( "%s %s\n", "First name is", 17 employee.getfirstname() ); 18 System.out.printf( "%s %s\n", "Last name is", 19 employee.getlastname() ); 20 Χρήση των System.out.printf( "%s %s\n", "Social security number is", 21 employee.getsocialsecuritynumber() ); 22 System.out.printf( "%s %.2f\n", "Gross sales is", 23 employee.getgrosssales() ); 24 System.out.printf( "%s %.2f\n", "Commission rate is", 25 employee.getcommissionrate() ); 26 System.out.printf( "%s %.2f\n", "Base salary is", 27 employee.getbasesalary() ); 28 κληρονομημένων μεθόδων get για πρόσβαση σε κληρονομημένες private μεταβλητές στιγμιοτύπου Χρήση της μεθόδου get της BasePlusCommissionEmployee4 για πρόσβαση στην private μεταβλητή στιγμιοτύπου

66 29 employee.setbasesalary( 1000 ); // set base salary 30 Χρήση της μεθόδου set της 31 System.out.printf( "\n%s:\n\n%s\n", BasePlusCommissionE 32 "Updated employee information obtained by tostring", mployee4 για 33 employee.tostring() ); τροποποίηση της private 34 } // end main μεταβλητής στγμιοτύπου 35 } // end class BasePlusCommissionEmployeeTest4 basesalary. Employee information obtained by get methods: First name is Bob Last name is Lewis Social security number is Gross sales is Commission rate is 0.04 Base salary is Updated employee information obtained by tostring: base-salaried commission employee: Bob Lewis social security number: gross sales: commission rate: 0.04 base salary:

67 Κατασκευαστές σε υποκλάσεις Δημιουργία στιγμιότυπου αντικειμένου υποκλάσης Αλυσίδα κλήσης κατασκευαστών Ο κατασκευαστής της υποκλάσης καλεί τον κατασκευαστή της υπερκλάσης Έμμεσα (καλώντας την προεπιλεγμένη ή τον χωρίς ορίσματα κατασκευαστή της υπερκλάσης) Άμεσα (μέσω της super) Βάση της ιεραρχίας κληρονομικότητας Ο τελευταίος κατασκευαστής που καλείται σε αυτή την αλυσίδα, είναι ο κατασκευαστής της Object Το σώμα του αρχικού κατασκευαστή υποκλάσης τελειώνει την εκτέλεσή του τελευταίο Παράδειγμα : ιεραρχία CommissionEmployee3- BasePlusCommissionEmployee4 Ο κατασκευαστής της CommissionEmployee3 καλείται προτελευταίος (τελευταίος είναι αυτός της Object) Το σώμα του κατασκευαστή της CommissionEmployee3 CommissionEmployee3 σταματά την εκτέλεσή του δεύτερο (πρώτο είναι αυτό της Object)

68 ...Κατασκευαστές σε 1 // Fig. 9.15: CommissionEmployee4.java 2 // CommissionEmployee4 class represents a commission employee. 3 υποκλάσεις 4 public class CommissionEmployee4 5 { 6 private String firstname; 7 private String lastname; 8 private String socialsecuritynumber; 9 private double grosssales; // gross weekly sales 10 private double commissionrate; // commission percentage // five-argument constructor 13 public CommissionEmployee4(String first, String last, String ssn, 14 double sales, double rate) 15 { 16 // implicit call to Object constructor occurs here 17 firstname = first; 18 lastname = last; 19 socialsecuritynumber = ssn; 20 setgrosssales(sales); // validate and store gross sales 21 setcommissionrate(rate); // validate and store commission rate System.out.printf( 24 "\ncommissionemployee4 constructor:\n%s\n", this ); 25 } // end five-argument CommissionEmployee4 constructor 26 Ο κατασκευαστής παράγει ένα μήνυμα ώστε να ελέγξουμε τη σειρά κλήσης των μεθόδων

69 ...Κατασκευαστές σε 27 // set first name 28 public void setfirstname(string first) 29 { υποκλάσεις 30 firstname = first; 31 } // end method setfirstname // return first name 34 public String getfirstname() 35 { 36 return firstname; 37 } // end method getfirstname // set last name 40 public void setlastname(string last) 41 { 42 lastname = last; 43 } // end method setlastname // return last name 46 public String getlastname() 47 { 48 return lastname; 49 } // end method getlastname // set social security number 52 public void setsocialsecuritynumber(string ssn) 53 { 54 socialsecuritynumber = ssn; // should validate 55 } // end method setsocialsecuritynumber 56

70 ...Κατασκευαστές σε 57 // return social security number 58 public String getsocialsecuritynumber() 59 υποκλάσεις { 60 return socialsecuritynumber; 61 } // end method getsocialsecuritynumber // set gross sales amount 64 public void setgrosssales(double sales) 65 { 66 grosssales = (sales < 0.0)? 0.0 : sales; 67 } // end method setgrosssales // return gross sales amount 70 public double getgrosssales() 71 { 72 return grosssales; 73 } // end method getgrosssales // set commission rate 76 public void setcommissionrate(double rate) 77 { 78 commissionrate = (rate > 0.0 && rate < 1.0)? rate : 0.0; 79 } // end method setcommissionrate 80

71 ...Κατασκευαστές σε 81 // return commission rate 82 public double getcommissionrate() 83 υποκλάσεις { 84 return commissionrate; 85 } // end method getcommissionrate // calculate earnings 88 public double earnings() 89 { 90 return getcommissionrate() * getgrosssales(); 91 } // end method earnings // return String representation of CommissionEmployee4 object 94 public String tostring() 95 { 96 return String.format("%s: %s %s\n%s: %s\n%s: %.2f\n%s: %.2f", 97 "commission employee", getfirstname(), getlastname(), 98 "social security number", getsocialsecuritynumber(), 99 "gross sales", getgrosssales(), 100 "commission rate", getcommissionrate()); 101 } // end method tostring 102 } // end class CommissionEmployee4

72 ...Κατασκευαστές σε 1 // Fig. 9.16: BasePlusCommissionEmployee5.java 2 // BasePlusCommissionEmployee5 class declaration. 3 υποκλάσεις 4 public class BasePlusCommissionEmployee5 extends CommissionEmployee4 5 { 6 private double basesalary; // base salary per week 7 8 // six-argument constructor 9 public BasePlusCommissionEmployee5(String first, String last, 10 String ssn, double sales, double rate, double salary) 11 { 12 super(first, last, ssn, sales, rate); 13 setbasesalary( salary ); // validate and store base salary System.out.printf( 16 "\nbasepluscommissionemployee5 constructor:\n%s\n", this ); 17 } // end six-argument BasePlusCommissionEmployee5 constructor // set base salary 20 public void setbasesalary(double salary) 21 { 22 basesalary = (salary < 0.0)? 0.0 : salary; 23 } // end method setbasesalary 24 Ο κατασκευαστής παράγει ένα μήνυμα ώστε να ελέγξουμε τη σειρά κλήσης των μεθόδων κατασκευαστή

73 ...Κατασκευαστές σε 25 // return base salary 26 public double getbasesalary() 27 { υποκλάσεις 28 return basesalary; 29 } // end method getbasesalary // calculate earnings 32 public double earnings() 33 { 34 return getbasesalary() + super.earnings(); 35 } // end method earnings // return String representation of BasePlusCommissionEmployee5 38 public String tostring() 39 { 40 return String.format( "%s %s\n%s: %.2f", "base-salaried", 41 super.tostring(), "base salary", getbasesalary() ); 42 } // end method tostring 43 } // end class BasePlusCommissionEmployee5

74 ...Κατασκευαστές σε 1 // Fig. 9.17: ConstructorTest.java 2 // Display order in which superclass and subclass constructors are called. 3 υποκλάσεις 4 public class ConstructorTest Δημιουργία αντικειμένου 5 { CommissionEmployee4 6 public static void main( String args[] ) 7 { 8 CommissionEmployee4 employee1 = new CommissionEmployee4( 9 "Bob", "Lewis", " ", 5000,.04 ); System.out.println(); 12 BasePlusCommissionEmployee5 employee2 = 13 new BasePlusCommissionEmployee5( 14 "Lisa", "Jones", " ", 2000,.06, 800 ); System.out.println(); 17 BasePlusCommissionEmployee5 employee3 = 18 new BasePlusCommissionEmployee5( 19 "Mark", "Sands", " ", 8000,.15, 2000 ); 20 } // end main 21 } // end class ConstructorTest Δημιουργία 2 αντικειμένων BasePlusCommissionEmployee5 για επίδειξη της σειράς κλήσης των κατασκευαστών της υπερκλάσης και της υποκλάσης

75 ...Κατασκευαστές σε CommissionEmployee4 constructor: commission employee: Bob Lewis social security number: gross sales: commission rate: 0.04 υποκλάσεις CommissionEmployee4 constructor: base-salaried commission employee: Lisa Jones social security number: gross sales: commission rate: 0.06 base salary: 0.00 BasePlusCommissionEmployee5 constructor: base-salaried commission employee: Lisa Jones social security number: gross sales: commission rate: 0.06 base salary: CommissionEmployee4 constructor: base-salaried commission employee: Mark Sands social security number: gross sales: commission rate: 0.15 base salary: 0.00 BasePlusCommissionEmployee5 constructor: base-salaried commission employee: Mark Sands social security number: gross sales: commission rate: 0.15 base salary: Το σώμα του κατασκευαστή της υποκλάσης BasePlusCommissionEmployee 5 εκτελείται μετά από τη λήξη της εκτέλεσης του κατασκευαστή της υπερκλάσης CommissionEmployee4

76 Μέθοδοι επικάλυψης Όταν μια μέθοδος ορίζεται σε μια υποκλάση και στην υπερκλάση, χρησιμοποιείται η μέθοδος της υποκλάσης. Αυτό επιτρέπει σε μια υποκλάση να αλλάζει, να αντικαθιστά ή να καταργεί τελείως μέρος της συμπεριφοράς ή των ιδιοτήτων των υπερκλάσεων της. Η δημιουργία μιας νέας μεθόδου σε μια υποκλάση, έτσι ώστε να αλλάξει η συμπεριφορά που κληρονομήθηκε από μια υπερκλάση ονομάζεται μέθοδος επικάλυψης (Overriding).

77 Overriding vs. Overloading Διαφορετικά concepts! Overloading: πολλαπλές μέθοδοι στην ίδια κλάση με το ίδιο όνομα αλλά διαφορετικά signatures Overriding: δύο μέθοδοι, η μία σε parent class και η άλλη σε child class που έχουν το ίδιο signature Overloading: επιτρέπει να ορίσουμε μία παρόμοια λειτουργία με διαφορετικούς τρόπους για παρόμοια δεδομένα Overriding : επιτρέπει να ορίσουμε μία παρόμοια λειτουργία με διαφορετικούς τρόπους για διαφορετικά αλλά compatible object types

78 Η χρήση του this και του super Με τη λέξη this αναφερόμαστε σε μεταβλητές του τρέχοντος αντικειμένου μας. public class ΟνομαΚλασης { private int a; public μεθοδοςα( int a){ this.a = 15;... } }

79 Η χρήση του this και του super Σε υποκλάσεις η λέξη this χρησιμοποιείται όταν θέλουμε να αναφερθούμε σε μεταβλητές και μεθόδους του τρέχοντος αντικειμένου μας.

80 Η χρήση του this και του super Η λέξη super χρησιμοποιείται όταν θέλουμε να αναφερθούμε σε μεταβλητές και μεθόδους της αμέσως προηγούμενης υπερκλάσης του αντικειμένου μας.

81 Η χρήση του this και του super Η λέξη super χρησιμοποιείται στη μέθοδο κατασκευής μιας υποκλάσης. Με αυτόν τον τρόπο συνδέουμε τη μέθοδο κατασκευής μιας υποκλάσης με αυτήν της υπερκλάσης της. Για παράδειγμα ας υποθέσουμε τις ClassA και ClassB. Αν ορίσουμε public class ClassB extends ClassA { } public ClassB(int x, String a){ } super(x,a);.. Η μέθοδος κατασκευής της υποκλάσης ClassB χρησιμοποιεί το super(x,a) για να καλέσει μια ανάλογη μέθοδο κατασκευής από την υπερκλάση της ClassA.

82 Keywords this και super

83 Παραδείγματα Ποια είναι η έξοδος του παρακάτω προγράμματος Test? class A { public int x=1; public int y=5; public A() { y=6; } public A(int a) { x=a; } public A(int a, int b) { x=a; y=b; } } class B extends A { public B() {} public B(int a) { super(a); } public B(int a, int b) { super(a,b); } public B(int a, int b, int c) { x=a+b+c; } public B(int a, int b, int c, int d) { super(a,b); y=c+d;} } public class Test { public static void main(string[] args) { B b1 = new B(); System.out.println("b1.x: "+b1.x+" b1.y: "+b1.y);} } 1, 6

84 Παραδείγματα Ποια είναι η έξοδος του παρακάτω προγράμματος Test? class A { public int x=1; public int y=5; public A() { y=6; } public A(int a) { x=a; } public A(int a, int b) { x=a; y=b; } } class B extends A { public B() {} public B(int a) { super(a); } public B(int a, int b) { super(a,b); } public B(int a, int b, int c) { x=a+b+c; } public B(int a, int b, int c, int d) { super(a,b); y=c+d;} } public class Test { public static void main(string[] args) { B b2 = new B(2); System.out.println("b2.x: "+b2.x+" b2.y: "+b2.y);} } 2, 5

85 Παραδείγματα Ποια είναι η έξοδος του παρακάτω προγράμματος Test? class A { public int x=1; public int y=5; public A() { y=6; } public A(int a) { x=a; } public A(int a, int b) { x=a; y=b; } } class B extends A { public B() {} public B(int a) { super(a); } public B(int a, int b) { super(a,b); } public B(int a, int b, int c) { x=a+b+c; } public B(int a, int b, int c, int d) { super(a,b); y=c+d;} } public class Test { public static void main(string[] args) { B b3 = new B(3,4); System.out.println("b3.x: "+b3.x+" b3.y: "+b3.y);} } 3, 4

86 Παραδείγματα Ποια είναι η έξοδος του παρακάτω προγράμματος Test? class A { public int x=1; public int y=5; public A() { y=6; } public A(int a) { x=a; } public A(int a, int b) { x=a; y=b; } } class B extends A { public B() {} public B(int a) { super(a); } public B(int a, int b) { super(a,b); } public B(int a, int b, int c) { x=a+b+c; } public B(int a, int b, int c, int d) { super(a,b); y=c+d;} } public class Test { public static void main(string[] args) { B b4 = new B(1,1,1); System.out.println("b4.x: "+b4.x+" b4.y: "+b4.y);} } 3, 6

87 Παραδείγματα Ποια είναι η έξοδος του παρακάτω προγράμματος Test? class A { public int x=1; public int y=5; public A() { y=6; } public A(int a) { x=a; } public A(int a, int b) { x=a; y=b; } } class B extends A { public B() {} public B(int a) { super(a); } public B(int a, int b) { super(a,b); } public B(int a, int b, int c) { x=a+b+c; } public B(int a, int b, int c, int d) { super(a,b); y=c+d;} } public class Test { public static void main(string[] args) { B b5 = new B(2,2,2,2); System.out.println("b5.x: "+b5.x+" b5.y: "+b5.y);} } 2, 4

Ανάλυση άσκησης. Employee. SalariedEmployee CommissionEmployee HourlyEmployee. BasePlusCommissionEmployee

Ανάλυση άσκησης. Employee. SalariedEmployee CommissionEmployee HourlyEmployee. BasePlusCommissionEmployee Μία εταιρεία πληρώνει τους εργαζόμενους της σε εβδομαδιαία βάση. Οι αποδοχές των εργαζόμενων υπολογίζονται με τέσσερις διαφορετικούς τρόπους : Α) Μισθωτοί (SalariedEmployee), πληρώνονται με σταθερό ποσό

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

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

Αντικειμενοστρεφής Προγραμματισμός Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων Αντικειμενοστρεφής Προγραμματισμός 14/5/2018 Δρ. Ανδριάνα Πρέντζα Αναπληρώτρια Καθηγήτρια aprentza@unipi.gr INTERFACES Μελέτη περίπτωσης: δημιουργία και χρήση

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

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

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

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

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

Αντικειμενοστρεφής Προγραμματισμός Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων Αντικειμενοστρεφής Προγραμματισμός 15/5/2017 Δρ. Ανδριάνα Πρέντζα Αναπληρώτρια Καθηγήτρια aprentza@unipi.gr Τα πλεονεκτήματα της κληρονομικότητας Αποφυγή

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

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

Αντικειμενοστρεφής Προγραμματισμός Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων Αντικειμενοστρεφής Προγραμματισμός 29/5/2017 Δρ. Ανδριάνα Πρέντζα Αναπληρώτρια Καθηγήτρια aprentza@unipi.gr Περίληψη επιτρεπτών εκχωρήσεων μεταξύ μεταβλητών

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

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

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

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

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

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Παναγιώτης Σφέτσος sfetsos@it.teithe.gr ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός Παναγιώτης Σφέτσος sfetsos@it.teithe.gr ΕΡΓΑΣΤΗΡΙΟ - 3 ΘΕΜΑΤΑ: Κλάσεις Αντικείμενα Δομητές/Κατασκευαστές - Μέθοδοι - Παράμετροι

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

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

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

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

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

Αντικειμενοστρεφής Προγραμματισμός Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων Αντικειμενοστρεφής Προγραμματισμός 3/4/2017 Δρ. Ανδριάνα Πρέντζα Αναπληρώτρια Καθηγήτρια aprentza@unipi.gr Γιατί έλεγχος πρόσβασης? Προστασία ιδιωτικής πληροφορίας

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

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

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

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

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

Αντικειμενοστρεφής Προγραμματισμός Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων Αντικειμενοστρεφής Προγραμματισμός 30/5/2016 Δρ. Ανδριάνα Πρέντζα Αναπληρώτρια Καθηγήτρια aprentza@unipi.gr Συλλογή απορριμμάτων Συλλογή απορριμμάτων (Garbage

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

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

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

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

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

Αντικειμενοστρεφής Προγραμματισμός Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων Αντικειμενοστρεφής Προγραμματισμός 23/4/2018 Δρ. Ανδριάνα Πρέντζα Αναπληρώτρια Καθηγήτρια aprentza@unipi.gr Υπερφόρτωση μεθόδων Υπερφόρτωση μεθόδων Πολλαπλές

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Κληρονομικότητα. Κληρονομικότητα (inheritance) είναι ο τρόπος µε τον οποίο μία τάξη μπορεί να κληρονομήσει ιδιότητες και συμπεριφορά από άλλες τάξεις.

Κληρονομικότητα. Κληρονομικότητα (inheritance) είναι ο τρόπος µε τον οποίο μία τάξη μπορεί να κληρονομήσει ιδιότητες και συμπεριφορά από άλλες τάξεις. Κληρονομικότητα (inheritance) είναι ο τρόπος µε τον οποίο μία τάξη μπορεί να κληρονομήσει ιδιότητες και συμπεριφορά από άλλες τάξεις. Μέσω της κληρονομικότητας μπορούμε να δημιουργήσουμε µια νέα τάξη (θυγατρική)

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

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

Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 12: Κληρονομικότητα (Inheritance) Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Κληρονομικότητα και Επαναχρησιμοποίηση - Υποκλάσεις/Υπερκλάσεις - Απόκρυψη ονομάτων - Το super, protected

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

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

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

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

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

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

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

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

Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 7: Ενθυλάκωση (encapsulation), Τροποποιητές(modifiers) Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ενθυλάκωση -Τροποποιητές Πρόσβασης (Access Modifiers), public, protected, private,

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

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

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

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

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 Σχεδίαση-Ανάπτυξη

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Το πρόγραμμα 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 υποστηρίζει

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

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

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

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

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

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

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

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

Η λέξη κλειδί this. Γαβαλάς Δαμιανός dgavalas@aegean.gr Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Διάλεξη #6 η : Η λέξη κλειδί this, υπερφόρτωση μεθόδων, κληρονομικότητα, πολυμορφισμός, υπερκάλυψη, επίπεδα προσπέλασης Γαβαλάς Δαμιανός dgavalas@aegean.gr

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

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

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

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

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

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

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

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

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

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

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

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 8 : ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ & ΠΟΛΥΜΟΡΦΙΣΜΟΣ Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 8 : ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ & ΠΟΛΥΜΟΡΦΙΣΜΟΣ ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ (1/3) Στην αρχή της κληρονομικότητας βασίζεται ο σχεδιασμός και η υλοποίηση συστημάτων Η κληρονομικότητα χρησιμοποιείται

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

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

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

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

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

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

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

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

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

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

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

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

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 9: Κληρονομικότητα (Inheritance)

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 9: Κληρονομικότητα (Inheritance) ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 9: Κληρονομικότητα (Inheritance) Μιχάλης Δρακόπουλος Σχολή Θετικών επιστημών Τμήμα Μαθηματικών ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (Java) Ενότητα 9 Κληρονομικότητα (Inheritance) Υπάρχουν κλάσεις που

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #11 Κληρονομικότητα [inheritance] Διάλεξη #11: Κληρονομικότητα [inheritance] Τι είναι η κληρονομικότητα; Γιατί είναι σημαντική; Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό,, Slide 1 Εισαγωγή στον Αντικειμενοστρεφή

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

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

ΑΡΦΕ ΑΝΣΙΚΕΙΜΕΝΟΣΡΕΥΟΤ ΠΡΟΓΡΑΜΜΑΣΙΜΟΤ. Ιωάννης Φατζηλυγερούδης Αναπληρωτής Καθηγητής Τμήμα Μηχ/κών Η/Υ και Πληροφορικής Πανεπιστήμιο Πατρών ΑΡΦΕ ΑΝΣΙΚΕΙΜΕΝΟΣΡΕΥΟΤ ΠΡΟΓΡΑΜΜΑΣΙΜΟΤ Ιωάννης Φατζηλυγερούδης Αναπληρωτής Καθηγητής Τμήμα Μηχ/κών Η/Υ και Πληροφορικής Πανεπιστήμιο Πατρών ΜΟΡΥΕ ΠΡΟΓΡΑΜΜΑΣΙΜΟΤ Διαδικασιακός ή Διαδικαστικός (Procedural)

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

Σύνθεση και Κληρονομικότητα

Σύνθεση και Κληρονομικότητα Σύνθεση και Κληρονομικότητα Σύνθεση (composition) Κληρονομικότητα (inheritance) Υπερφόρτωση κληρονομημένων μελών Εικονικές συναρτήσεις και Πολυμορφισμός Αφηρημένες (abstract) βασικές κλάσεις 1 Σύνθεση

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

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

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Περισσότερα για τις Κλάσεις, τα Αντικείμενα και τις Μεθόδους ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός Παναγιώτης Σφέτσος sfetsos@it.teithe.gr Περισσότερα για τις Κλάσεις, τα Αντικείμενα και τις Μεθόδους Σύνοψη των βασικών λειτουργιών

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

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

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

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

Wrapper Classes, Abstract Classes and Interfaces

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

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

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

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

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

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

Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java Εξάμηνο Μάθημα Τίτλος 2017 2018 Εαρινό Αντικειμενοστραφής Προγραμματισμός Ι Ύλη εργαστηρίου, Ασκήσεις Java Ημερομηνία Εργαστήριο 5 ο Α. Ύλη εργαστηρίου 5.1 Έννοιες αντικειμενοστραφούς προγραμματισμού,

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

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

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

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

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

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

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

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

Υπερφόρτωση (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 Περιεχόμενα Μαθήματος

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Κατασκευαστές. Μέθοδοι Κατασκευής (Constructors).

Κατασκευαστές. Μέθοδοι Κατασκευής (Constructors). Κατασκευαστές Μέθοδοι Κατασκευής (Constructors). Οι κατασκευαστές (constructors) είναι μέθοδοι που εκτελούνται όταν κατασκευάζεται ένα αντικείμενο. Μια τάξη μπορεί να έχει αρκετούς κατασκευαστές, οι οποίοι

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

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

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

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

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

Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java Εξάμηνο Μάθημα Τίτλος 2017 2018 Εαρινό Αντικειμενοστραφής Προγραμματισμός Ι Ύλη εργαστηρίου, Ασκήσεις Java Ημερομηνία Εργαστήριο 8 ο Α. Ύλη εργαστηρίου 8.1 Αντικειμενοστραφής προγραμματισμός 8.2 Κλάσεις

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

Από τη UML στον Κώδικα. Μέρος Α

Από τη UML στον Κώδικα. Μέρος Α Από τη UML στον Κώδικα Μέρος Α περιεχόμενα παρουσίασης Κλάσεις Ισότητα αντικειμένων Μονόδρομες συσχετίσεις με πολλαπλότητα «ένα» Μονόδρομες συσχετίσεις με πολλαπλότητα «πολλά» Συλλογές από το σχέδιο στον

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

Σύνθεση και Κληρονομικότητα

Σύνθεση και Κληρονομικότητα Σύνθεση και Κληρονομικότητα Σύνθεση (composition) Κληρονομικότητα (inheritance) Υπερφόρτωση κληρονομημένων μελών Εικονικές συναρτήσεις και Πολυμορφισμός Αφηρημένες (abstract) βασικές κλάσεις 1 Σύνθεση

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

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

Διαγράμματα Κλάσεων στη Σχεδίαση Διαγράμματα Κλάσεων στη Σχεδίαση περιεχόμενα παρουσίασης Αφηρημένες κλάσεις Ιδιότητες Λειτουργίες Απλοί τύποι Συσχετίσεις Εξάρτηση Διεπαφές αφηρημένες κλάσεις Οι αφηρημένες κλάσεις δεν μπορούν να δημιουργήσουν

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

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

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

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

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής - Εβδομάδα 1

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής - Εβδομάδα 1 Στόχοι Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής (Αντικειμενοστρεφής Προγραμματισμός) Αντώνιος Συμβώνης www.math.ntua.gr/~symvonis Καλή γνώση βασικών αρχών προγραμματισμού Καλή γνώση βασικών αρχών αντικειμενοστρεφή

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

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

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

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

EPL 603 TOPICS IN SOFTWARE ENGINEERING. Lab 5: Component Adaptation Environment (COPE)

EPL 603 TOPICS IN SOFTWARE ENGINEERING. Lab 5: Component Adaptation Environment (COPE) EPL 603 TOPICS IN SOFTWARE ENGINEERING Lab 5: Component Adaptation Environment (COPE) Performing Static Analysis 1 Class Name: The fully qualified name of the specific class Type: The type of the class

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

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

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

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

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

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

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

Ανάλυση Πληροφοριακών Συστημάτων. Εαρινό Εξάμηνο Lec08 09/04/2019 Διδάσκων: Γεώργιος Χρ. Μακρής

Ανάλυση Πληροφοριακών Συστημάτων. Εαρινό Εξάμηνο Lec08 09/04/2019 Διδάσκων: Γεώργιος Χρ. Μακρής Ανάλυση Πληροφοριακών Συστημάτων Εαρινό Εξάμηνο 2018-2019 Lec08 09/04/2019 Διδάσκων: Γεώργιος Χρ. Μακρής Διαγράμματα Κλάσεων Τα βασικά στοιχεία Διαλέξεις παρουσιάσεις Το υλικό του μαθήματος στηρίζεται

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

3 Αλληλεπίδραση Αντικειμένων

3 Αλληλεπίδραση Αντικειμένων Αφαίρεση και Αρθρωσιμότητα 3 Αλληλεπίδραση Αντικειμένων Πώς συνεργάζονται τα αντικείμενα που δημιουργούμε Αφαίρεση (abstraction) είναι η δυνατότητα να αγνοούμε τις λεπτομέρειες και να εστιάζουμε την προσοχή

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

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

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

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

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

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

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

9:00-10:00 π.μ. (60 λεπτά) Παρασκευή, 14 Οκτωβρίου, 2016

9:00-10:00 π.μ. (60 λεπτά) Παρασκευή, 14 Οκτωβρίου, 2016 Πανεπιστήμιο Κύπρου Πολυτεχνική Σχολή Τμήμα Πολιτικών Μηχανικών και Μηχανικών Περιβάλλοντος ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, 2016 Ακαδημαϊκό Έτος 2016-17, Χειμερινό Εξάμηνο 1 η Ενδιάμεση

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

(Απλή) Κληρονομικότητα

(Απλή) Κληρονομικότητα Πολλαπλή κληρονομικότητα, υςχετίςεισ μεταξύ κλάςεων ΟΝΣΟΚΕΝΣΡΙΚΟ ΠΡΟΓΡ/ΜΟ C++ Μ. Ρήγκου (rigou@ceid.upatras.gr) (Απλή) Κληρονομικότητα Student + calctuition(): double GraduateStudent + calctuition(): double

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

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

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

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

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

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

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

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

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

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

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

8. Μέθοδοι (Methods) 8. Μέθοδοι (Methods) Χειμερινό εξάμηνο 2012 Πέτρος Κωμοδρόμος komodromos@ucy.ac.cy http://www.eng.ucy.ac.cy/petros 1 Θέματα Μέθοδοι που παρέχονται από τη τάξη Math του Java API Χρήση στατικών μεθόδων και

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

5. Ανασκόπηση αντικειμενοστραφούς προγραμματισμού

5. Ανασκόπηση αντικειμενοστραφούς προγραμματισμού 5. Ανασκόπηση αντικειμενοστραφούς προγραμματισμού Χειμερινό εξάμηνο 2013 Πέτρος Κωμοδρόμος komodromos@ucy.ac.cy http://www.eng.ucy.ac.cy/petros 1 Θέματα Αντικειμενοστραφής προγραμματισμός Τάξεις (classes)

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

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

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

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

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

Ειδικά Θέματα Προγραμματισμού Ειδικά Θέματα Προγραμματισμού Ενότητα 6: Threads Μιχάλας Άγγελος Τμήμα Μηχανικών Πληροφορικής ΤΕ Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό

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

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

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

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

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

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

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

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

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

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