10. Αντικειμενοστραφής Προγραμματισμός (Object Oriented Programming - OOP)

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

Download "10. Αντικειμενοστραφής Προγραμματισμός (Object Oriented Programming - OOP)"

Transcript

1 10. Αντικειμενοστραφής Προγραμματισμός (Object Oriented Programming - OOP) Χειμερινό εξάμηνο 2016 Πέτρος Κωμοδρόμος komodromos@ucy.ac.cy 1

2 Θέματα Έλεγχος πρόσβασης στα μέλη μιας τάξης Η χρήση του κλειδιού (keyword) this Συναρτήσεις κατασκευής αντικειμένων (constructors) Μέθοδοι set και get Σύνθεση (composition) Συλλογή απορριμμάτων (garbage collection) Στατικές και μη μετατρεπόμενες μεταβλητές και μέθοδοι (static and final variables and methods) Συμπερίληψη (encapsulation) και απόκρυψη πληροφοριών (data hiding) Αφαιρετικότητα δεδομένων (data abstraction and abstract data types) Έλεγχος πρόσβασης σε πακέτα (package access) 2

3 Κληρονομικότητα (inheritance) Υπερτάξεις (superclasses) και υποτάξεις (subclasses) Προστατευόμενα (protected) μέλη τάξεων Πλήρως περιορισμένα (private) μέλη τάξεων Επαναχρησιμοποίηση λογισμικού (software resusability) Πρόσβαση μελών υπερτάξεων με το κλειδί (keyword) super Συναρτήσεις κατασκευής αντικειμένων (constructors) υπερτάξεων Αξιοποίηση μεθόδων υπερτάξεων Μέθοδοι της τάξης Object Πολυμορφικότητα (polymorphism) Αόριστες τάξεις και μέθοδοι (abstract classes and methods) Τελικές μέθοδοι και τάξεις (final methods and classes) Δομές διασυνδέσεις (interfaces) 3

4 1 // Fig. 8.1: Time1.java 2 // Time1 class declaration maintains the time in 24-hour format. 3 4 public class Time1 5 6 private int hour; // private int minute; // private int second; // // set a new time value using universal time; ensure that 11 // the data remains consistent by setting invalid values to zero 12 public void settime( int h, int m, int s ) hour = ( ( h >= 0 && h < 24 )? h : 0 ); // validate hour 15 minute = ( ( m >= 0 && m < 60 )? m : 0 ); // validate minute 16 second = ( ( s >= 0 && s < 60 )? s : 0 ); // validate second 17 // end method settime 18 Έλεγχος πρόσβασης στα μέλη μιας τάξης (κλάσης) private instance variables Declare public method settime Validate parameter values before setting instance variables 4

5 19 // convert to String in universal-time format (HH:MM:SS) 20 public String touniversalstring() return String.format( "%02d:%02d:%02d", hour, minute, second ); 23 // end method touniversalstring // convert to String in standard-time format (H:MM:SS AM or PM) 26 public String tostring() return String.format( "%d:%02d:%02d %s", 29 ( ( hour == 0 hour == 12 )? 12 : hour % 12 ), 30 minute, second, ( hour < 12? "AM" : "PM" ) ); 31 // end method tostring 32 // end class Time1 format strings 5

6 1 // Fig. 8.2: Time1Test.java 2 // Time1 object used in an application. 3 4 public class Time1Test 5 6 public static void main( String args[] ) 7 8 // create and initialize a Time1 object 9 Time1 time = new Time1(); // invokes Time1 constructor // output string representations of the time 12 System.out.print( "The initial universal time is: " ); 13 System.out.println( time.touniversalstring() ); 14 System.out.print( "The initial standard time is: " ); 15 System.out.println( time.tostring() ); 16 System.out.println(); // output a blank line 17 Create a Time1 object Call tostring method 6

7 18 // change time and output updated time 19 time.settime( 13, 27, 6 ); 20 System.out.print( "Universal time after settime is: " ); 21 System.out.println( time.touniversalstring() ); 22 System.out.print( "Standard time after settime is: " ); 23 System.out.println( time.tostring() ); 24 System.out.println(); // output a blank line // set time with invalid values; output updated time 27 time.settime( 99, 99, 99 ); 28 System.out.println( "After attempting invalid settings:" ); 29 System.out.print( "Universal time: " ); 30 System.out.println( time.touniversalstring() ); 31 System.out.print( "Standard time: " ); 32 System.out.println( time.tostring() ); 33 // end main 34 // end class Time1Test The initial universal time is: 00:00:00 The initial standard time is: 12:00:00 AM Universal time after settime is: 13:27:06 Standard time after settime is: 1:27:06 PM Call settime method Call settime method with invalid values After attempting invalid settings: Universal time: 00:00:00 Standard time: 12:00:00 AM 7

8 Παρατηρήσεις Ο χρήστης μίας τάξης πρέπει να γνωρίζει μόνο τα δημόσια (public) μέλη της τάξης και όχι και την εσωτερική δομή και λειτουργία των δεδομένων και μεθόδων, τα οποία πρέπει να έχουν την ευελιξία να τροποποιηθούν Οι τιμές των μεταβλητών μίας τάξης (instance variables) μπορούν να οριστούν είτε όταν ορίζονται οι μεταβλητές είτε σε μία μέθοδο κατασκευής αντικειμένων (constructor method) Αν μια τάξη δεν παρέχει συνάρτηση κατασκευής (constructor) ο μεταγλωττιστής (compiler) παρέχει ένα (προεπιλεγμένο) default constructor Αν μία τάξη δεν παρέχει κάποιους constructors, τότε η χρήση του new καλεί έμμεσα τον default constructor της τάξης για να οριστούν οι αρχικές τιμές του αντικειμένου με τα προεπιλεγόμενα μεγέθη Η μέθοδος format της τάξης String δίνει αντίστοιχες δυνατότητες με την μέθοδο printf επιστρέφοντας ένα κατάλληλα μορφοποιημένο string 8

9 1 // Fig. 8.3: MemberAccessTest.java 2 // Private members of class Time1 are not accessible. 3 public class MemberAccessTest 4 5 public static void main( String args[] ) 6 7 Time1 time = new Time1(); // create and initialize Time1 object 8 9 time.hour = 7; // error: hour has private access in Time1 10 time.minute = 15; // error: minute has private access in Time1 11 time.second = 30; // error: second has private access in Time1 12 // end main 13 // end class MemberAccessTest Attempting to access private instance variables MemberAccessTest.java:9: hour has private access in Time1 time.hour = 7; // error: hour has private access in Time1 ^ MemberAccessTest.java:10: minute has private access in Time1 time.minute = 15; // error: minute has private access in Time1 ^ MemberAccessTest.java:11: second has private access in Time1 time.second = 30; // error: second has private access in Time1 ^ 3 errors 9

10 Κωδικοί πρόσβασης (access modifiers) private: πρόσβαση μόνο μέσα από την ίδια την τάξη (data hiding) μέθοδοι set και get protected: πρόσβαση μέσα από την τάξη, οποιαδήποτε υποτάξη (its subclasses), και τάξεις που ορίζονται στο ίδιο πακέτο package: πρόσβαση μέσα από την τάξη και τάξεις που ορίζονται στο ίδιο πακέτο. Αυτό είναι το κατά συνθήκη επίπεδο πρόσβασης (default access level) όταν δεν καθορίζεται κάτι διαφορετικό public: υπάρχει πρόσβαση από οποιαδήποτε τάξη 10

11 Η χρήση του κλειδιού (keyword) this Το this είναι μία αναφορά (reference) του κάθε αντικειμένου στον εαυτό του Οι μη στατικές (non-static ή non-class) μέθοδοι έμμεσα χρησιμοποιούν το this όταν αναφέρονται σε μεταβλητές και μεθόδους του αντικειμένου. Έτσι το this μπορεί να χρησιμοποιηθεί για την πρόσβαση σε μεταβλητές ενός αντικειμένου που τις κρύβουν τοπικές μεταβλητές με το ίδιο όνομα Η κάθε μέθοδος μίας τάξης έμμεσα χρησιμοποιεί το this για να καθορίσει το συγκεκριμένο αντικείμενο της τάξης στο οποίο ενεργεί Ένα αρχείο.java μπορεί να περιέχει περισσότερες από μία τάξεις Όμως μία τάξη με δημόσια πρόσβαση (public) πρέπει να είναι σε αρχείο με το ίδιο όνομα με αυτή. Έτσι μόνο μία τάξη σε ένα αρχείο μπορεί να είναι δημόσια (public). Η Java εξοικονομεί χώρο διατηρώντας μόνο ένα αντίγραφο της κάθε μεθόδου ανά τάξη, η οποία καλείται από κάθε αντικείμενο της τάξης. Το κάθε αντικείμενο έχει τα δικά του αντίγραφα των μη στατικών μεταβλητών 11

12 1 // Fig. 8.4: ThisTest.java Outline 2 // this used implicitly and explicitly to refer to members of an object. 3 4 public class ThisTest 5 6 public static void main( String args[] ) 7 8 SimpleTime time = new SimpleTime( 15, 30, 19 ); 9 System.out.println( time.buildstring() ); 10 // end main 11 // end class ThisTest // class SimpleTime demonstrates the "this" reference 14 class SimpleTime private int hour; // private int minute; // private int second; // // if the constructor uses parameter names identical to 21 // instance variable names the "this" reference is 22 // required to distinguish between names 23 public SimpleTime( int hour, int minute, int second ) this.hour = hour; // set "this" object's hour 26 this.minute = minute; // set "this" object's minute 27 this.second = second; // set "this" object's second 28 // end SimpleTime constructor Declare instance variables Create new SimpleTime object Method parameters shadow instance variables Using this to access the object s instance variables 12

13 30 // use explicit and implicit "this" to call touniversalstring 31 public String buildstring() return String.format( "%24s: %s\n%24s: %s", 34 "this.touniversalstring()", this.touniversalstring(), 35 "touniversalstring()", touniversalstring() ); 36 // end method buildstring // convert to String in universal-time format (HH:MM:SS) 39 public String touniversalstring() // "this" is not required here to access instance variables, 42 // because method does not have local variables with same 43 // names as instance variables 44 return String.format( "%02d:%02d:%02d", 45 this.hour, this.minute, this.second ); 46 // end method touniversalstring 47 // end class SimpleTime Using this explicitly and implicitly to call touniversalstring Use of this not necessary here this.touniversalstring(): 15:30:19 touniversalstring(): 15:30:19 13

14 Μέθοδοι κατασκευής αντικειμένων (constructors) Μπορούν να παρέχονται πολλοί διαφορετικοί ορισμοί μεθόδων κατασκευής (constructors), δηλαδή να υπερφορτωθούν οι μέθοδοι κατασκευής (overloaded constructors), ώστε να μπορούν να αρχικοποιηθούν (initialized) κατάλληλα τα μέλη του αντικειμένου Ο κατάλληλος constructor καλείται βάσει του αριθμού και τύπου των παραμέτρων που χρησιμοποιούνται κατά την κατασκευή του αντικειμένου (όταν χρησιμοποιείται το new) Ένας constructor μπορεί να καλέσει οποιαδήποτε μέθοδο της τάξης. Μια μέθοδος δεν μπορεί άμεσα να καλέσει κάποιο constructor της τάξης Επίσης, η αναφορά this μπορεί να χρησιμοποιηθεί σε κάποιο constructor, ώστε να αξιοποιηθούν εντολές που δίδονται σε άλλο constructor, καλώντας τον, όμως η κλήση πρέπει να είναι η πρώτη εντολή στο σώμα του constructor No argument constructor είναι μέθοδος κατασκευής (constructor) χωρίς παραμέτρους Όταν ένα αντικείμενο έχει μία αναφορά (reference) σε κάποιο άλλο αντικείμενο, τότε έχει πρόσβαση σε οποιαδήποτε μέλος (μεταβλητή ή μέθοδο) του δεύτερου αντικειμένου 14

15 Default και No-Argument Constructors Η κάθε τάξη πρέπει να έχει τουλάχιστο ένα constructor, και αν κανένας δεν ορίζεται ρητά, τότε ο μεταγλωττιστής δημιουργεί ένα default constructor ο default constructor δεν έχει παραμέτρους και απλά δίνει αρχικές τιμές στις μεταβλητές τις default τιμές, οι οποίες είναι μηδέν αν είναι primitive τύπου, false αν είναι boolean τύπου, και null αν είναι αναφορές (references) σε αντικείμενα ή πίνακες Αν οριστεί έστω και ένας constructor, τότε ο default ορισμός των μεταβλητών ενός αντικειμένου, ο οποίος γίνεται όταν ο constructor κληθεί χωρίς παραμέτρους, γίνεται από τον no-argument constructor, εφόσον αυτός έχει οριστεί Η Java επιτρέπει σε άλλες μεθόδους να έχουν το όνομα της τάξης να έχουν το όνομα της τάξης, πέραν από τους constructors, φτάνει να ορίζεται ο τύπος της επιστρεφόμενης μεταβλητής (return type) 15

16 Set και Get μέθοδοι Χρήση μεθόδων set και get για την πρόσβαση στις μεταβλητές ενός αντικειμένου μειώνει τις πιθανότητες σφαλμάτων και απλοποιεί πιθανές μελλοντικές αλλαγές Set μέθοδοι Χρησιμοποιούνται για να οριστούν τιμές στις μεταβλητές ενός αντικειμένου (instance variables) Προτιμότερο είναι να ελέγχουν τις νέες τιμές που θα ορίσουν αν είναι επιτρεπτές και μέσα σε λογικά όρια Get μέθοδοι Παρέχουν πρόσβαση στις τιμές των μεταβλητών ενός αντικειμένου Μπορούν να χρησιμοποιηθούν για να μορφοποιηθούν κατάλληλα οι επιστρεφόμενες τιμές Παροχή public μεθόδων, όπως οι μέθοδοι set και get, για να τροποποιήσουμε ή να αποκτήσουμε τις τιμές private μεταβλητών ενός αντικειμένου αποκρύπτει περιττές τεχνικές λεπτομέρειες υλοποίησης της τάξης και επιτρέπει ευκολότερα μελλοντικές αλλαγές 16

17 1 // Fig. 8.5: Time2.java 2 // Time2 class declaration with overloaded constructors. 3 4 public class Time2 5 6 private int hour; // private int minute; // private int second; // // Time2 no-argument constructor: initializes each instance variable 11 // to zero; ensures that Time2 objects start in a consistent state 12 public Time2() this( 0, 0, 0 ); // invoke Time2 constructor with three arguments 15 // end Time2 no-argument constructor // Time2 constructor: hour supplied, minute and second defaulted to 0 18 public Time2( int h ) this( h, 0, 0 ); // invoke Time2 constructor with three arguments 21 // end Time2 one-argument constructor // Time2 constructor: hour and minute supplied, second defaulted to 0 24 public Time2( int h, int m ) this( h, m, 0 ); // invoke Time2 constructor with three arguments 27 // end Time2 two-argument constructor 28 Invoke three-argument constructor No-argument constructor 17

18 29 // Time2 constructor: hour, minute and second supplied 30 public Time2( int h, int m, int s ) settime( h, m, s ); // invoke settime to validate time 33 // end Time2 three-argument constructor // Time2 constructor: another Time2 object supplied 36 public Time2( Time2 time ) // invoke Time2 three-argument constructor 39 this( time.gethour(), time.getminute(), time.getsecond() ); 40 // end Time2 constructor with a Time2 object argument // Set Methods 43 // set a new time value using universal time; ensure that 44 // the data remains consistent by setting invalid values to zero 45 public void settime( int h, int m, int s ) sethour( h ); // set the hour 48 setminute( m ); // set the minute 49 setsecond( s ); // set the second 50 // end method settime Call settime method Constructor takes a reference to another Time2 object as a parameter Could have directly accessed instance variables of object time here 18

19 52 // validate and set hour 53 public void sethour( int h ) hour = ( ( h >= 0 && h < 24 )? h : 0 ); 56 // end method sethour // validate and set minute 59 public void setminute( int m ) minute = ( ( m >= 0 && m < 60 )? m : 0 ); 62 // end method setminute // validate and set second 65 public void setsecond( int s ) second = ( ( s >= 0 && s < 60 )? s : 0 ); 68 // end method setsecond // Get Methods 71 // get hour value 72 public int gethour() return hour; 75 // end method gethour 19

20 77 // get minute value 78 public int getminute() return minute; 81 // end method getminute // get second value 84 public int getsecond() return second; 87 // end method getsecond // convert to String in universal-time format (HH:MM:SS) 90 public String touniversalstring() return String.format( 93 "%02d:%02d:%02d", gethour(), getminute(), getsecond() ); 94 // end method touniversalstring // convert to String in standard-time format (H:MM:SS AM or PM) 97 public String tostring() return String.format( "%d:%02d:%02d %s", 100 ( (gethour() == 0 gethour() == 12)? 12 : gethour() % 12 ), 101 getminute(), getsecond(), ( gethour() < 12? "AM" : "PM" ) ); 102 // end method tostring 103 // end class Time2 20

21 1 // Fig. 8.6: Time2Test.java 2 // Overloaded constructors used to initialize Time2 objects. 3 4 public class Time2Test 5 6 public static void main( String args[] ) 7 8 Time2 t1 = new Time2(); // 00:00:00 9 Time2 t2 = new Time2( 2 ); // 02:00:00 10 Time2 t3 = new Time2( 21, 34 ); // 21:34:00 11 Time2 t4 = new Time2( 12, 25, 42 ); // 12:25:42 12 Time2 t5 = new Time2( 27, 74, 99 ); // 00:00:00 13 Time2 t6 = new Time2( t4 ); // 12:25: System.out.println( "Constructed with:" ); 16 System.out.println( "t1: all arguments defaulted" ); 17 System.out.printf( " %s\n", t1.touniversalstring() ); 18 System.out.printf( " %s\n", t1.tostring() ); 19 Call overloaded constructors 21

22 20 System.out.println( 21 "t2: hour specified; minute and second defaulted" ); 22 System.out.printf( " %s\n", t2.touniversalstring() ); 23 System.out.printf( " %s\n", t2.tostring() ); System.out.println( 26 "t3: hour and minute specified; second defaulted" ); 27 System.out.printf( " %s\n", t3.touniversalstring() ); 28 System.out.printf( " %s\n", t3.tostring() ); System.out.println( "t4: hour, minute and second specified" ); 31 System.out.printf( " %s\n", t4.touniversalstring() ); 32 System.out.printf( " %s\n", t4.tostring() ); System.out.println( "t5: all invalid values specified" ); 35 System.out.printf( " %s\n", t5.touniversalstring() ); 36 System.out.printf( " %s\n", t5.tostring() ); 37 22

23 23

24 Σύνθεση αντικειμένων (Composition) Μια τάξη μπορεί να οριστεί να έχει σαν μέλη της αναφορές (references) σε αντικείμενα άλλων τάξεων Αυτό αναφέρεται σαν μία σχέση ΕΧΕΙ ΕΝΑ (HAS A relationship) 24

25 1 // Fig. 8.7: Date.java 2 // Date class declaration. 3 4 public class Date 5 6 private int month; // private int day; // 1-31 based on month 8 private int year; // any year 9 10 // constructor: call checkmonth to confirm proper value for month; 11 // call checkday to confirm proper value for day 12 public Date( int themonth, int theday, int theyear ) month = checkmonth( themonth ); // validate month 15 year = theyear; // could validate year 16 day = checkday( theday ); // validate day System.out.printf( 19 "Date object constructor for date %s\n", this ); 20 // end Date constructor 21 25

26 22 // utility method to confirm proper month value 23 private int checkmonth( int testmonth ) if ( testmonth > 0 && testmonth <= 12 ) // validate month 26 return testmonth; 27 else // month is invalid System.out.printf( 30 "Invalid month (%d) set to 1.", testmonth ); 31 return 1; // maintain object in consistent state 32 // end else 33 // end method checkmonth // utility method to confirm proper day value based on month and year 36 private int checkday( int testday ) int dayspermonth[] = 39 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ; 40 Validates month value Validates day value 26

27 41 // check if day in range for month 42 if ( testday > 0 && testday <= dayspermonth[ month ] ) 43 return testday; // check for leap year 46 if ( month == 2 && testday == 29 && ( year % 400 == 0 47 ( year % 4 == 0 && year % 100!= 0 ) ) ) 48 return testday; System.out.printf( "Invalid day (%d) set to 1.", testday ); 51 return 1; // maintain object in consistent state 52 // end method checkday // return a String of the form month/day/year 55 public String tostring() return String.format( "%d/%d/%d", month, day, year ); 58 // end method tostring 59 // end class Date Check if the day is February 29 on a leap year 27

28 1 // Fig. 8.8: Employee.java 2 // Employee class with references to other objects. 3 4 public class Employee 5 6 private String firstname; 7 private String lastname; 8 private Date birthdate; 9 private Date hiredate; // constructor to initialize name, birth date and hire date 12 public Employee( String first, String last, Date dateofbirth, 13 Date dateofhire ) firstname = first; 16 lastname = last; 17 birthdate = dateofbirth; 18 hiredate = dateofhire; 19 // end Employee constructor // convert Employee to String format 22 public String tostring() return String.format( "%s, %s Hired: %s Birthday: %s", 25 lastname, firstname, hiredate, birthdate ); 26 // end method tostring 27 // end class Employee Employee contains references to two Date objects Implicit calls to hiredate and birthdate s tostring methods 28

29 1 // Fig. 8.9: EmployeeTest.java 2 // Composition demonstration. 3 4 public class EmployeeTest 5 6 public static void main( String args[] ) 7 8 Date birth = new Date( 7, 24, 1949 ); 9 Date hire = new Date( 3, 12, 1988 ); 10 Employee employee = new Employee( "Bob", "Blue", birth, hire ); System.out.println( employee ); 13 // end main 14 // end class EmployeeTest Date object constructor for date 7/24/1949 Date object constructor for date 3/12/1988 Blue, Bob Hired: 3/12/1988 Birthday: 7/24/1949 Create an Employee object Display the Employee object 29

30 Συλλογή απορριμμάτων (garbage collection) και η μέθοδος finalize Garbage collection Η Java Virtual Machine (JVM) σημειώνει υποψήφιο για garbage collection όποιο αντικείμενο για το οποίο δεν υπάρχει καμία αναφορά (reference) σε αυτό O garbage collector της JVM επανακτά για χρήση τη μνήμη την οποία χρησιμοποιούσαν τα αντικείμενα αυτά για να την χρησιμοποιήσει στη δημιουργία άλλων αντικειμένων Μέθοδος finalize Όλες οι τάξεις στη Java έχουν στη μέθοδο finalize την οποία κληρονομούν από την τάξη Object, την οποία όμως σπάνια χρησιμοποιούν Η μέθοδος finalize καλείται από τον garbage collector όταν επανακτά τη μνήμη που κατείχε το αντίστοιχο αντικείμενο Η μέθοδος finalize δεν επιστρέφει τίποτα (δηλαδή έχει return type void) και δεν παίρνει καθόλου παραμέτρους Σπάνια χρησιμοποιείται, γιατί δεν εκτελείται σε συγκεκριμένη χρονική στιγμή 30

31 Στατικά μέλη τάξεων (static/class members) Στατικές μεταβλητές (static fields or class variables) Χρησιμοποιούνται για δεδομένα και πληροφορίες που αφορούν όλη την τάξη ώστε: o o Όλα τα αντικείμενα να μοιράζονται αυτά τα κοινά δεδομένα και πληροφορίες Να μπορούν να χρησιμοποιηθούν χωρίς την ανάγκη ύπαρξης αντικειμένων της τάξης Η πρόσβαση σε αυτά γίνεται με το όνομα της τάξης ή ενός αντικειμένου της τάξης ακολουθούμενο από ένα dot (.) και το όνομα της στατικής μεταβλητής Πρέπει να δοθούν αρχικές τιμές στον ορισμό τους (declarations), αλλιώς ο μεταγλωττιστής τους δίνει τις προεπιλεγμένες τιμές (default values) Στατικές μέθοδοι (static methods) Δεν έχουν πρόσβαση σε μη στατικά μέλη της τάξης (non-static class members) αφού δεν μπορούν να χρησιμοποιήσουν την αναφορά this 31

32 1 // Fig. 8.12: Employee.java 2 // Static variable used to maintain a count of the number of 3 // Employee objects in memory. 4 5 public class Employee 6 7 private String firstname; 8 private String lastname; 9 private static int count = 0; // number of objects in memory // initialize employee, add 1 to static count and 12 // output String indicating that constructor was called 13 public Employee( String first, String last ) firstname = first; 16 lastname = last; count++; // increment static count of employees 19 System.out.printf( "Employee constructor: %s %s; count = %d\n", 20 firstname, lastname, count ); 21 // end Employee constructor 22 Declare a static field Increment static field 32

33 23 // subtract 1 from static count when garbage 24 // collector calls finalize to clean up object; 25 // confirm that finalize was called 26 protected void finalize() count--; // decrement static count of employees 29 System.out.printf( "Employee finalizer: %s %s; count = %d\n", 30 firstname, lastname, count ); 31 // end method finalize // get first name 34 public String getfirstname() return firstname; 37 // end method getfirstname // get last name 40 public String getlastname() return lastname; 43 // end method getlastname // static method to get static count value 46 public static int getcount() return count; 49 // end method getcount 50 // end class Employee Declare method finalize Declare static method getcoun to get static field count 33

34 1 // Fig. 8.13: EmployeeTest.java 2 // Static member demonstration. 3 4 public class EmployeeTest 5 6 public static void main( String args[] ) 7 8 // show that count is 0 before creating Employees 9 System.out.printf( "Employees before instantiation: %d\n", 10 Employee.getCount() ); // create two Employees; count should be 2 13 Employee e1 = new Employee( "Susan", "Baker" ); 14 Employee e2 = new Employee( "Bob", "Blue" ); 15 Call static method getcount using class name Employee Create new Employee objects 34

35 16 // show that count is 2 after creating two Employees 17 System.out.println( "\nemployees after instantiation: " ); 18 System.out.printf( "via e1.getcount(): %d\n", e1.getcount() ); 19 System.out.printf( "via e2.getcount(): %d\n", e2.getcount() ); Call static method getcount outside objects 20 System.out.printf( "via Employee.getCount(): %d\n", 21 Employee.getCount() ); // get names of Employees Call static method getcount inside objects 24 System.out.printf( "\nemployee 1: %s %s\nemployee 2: %s %s\n\n", 25 e1.getfirstname(), e1.getlastname(), 26 e2.getfirstname(), e2.getlastname() ); // in this example, there is only one reference to each Employee, 29 // so the following two statements cause the JVM to mark each 30 // Employee object for garbage collection 31 e1 = null; 32 e2 = null; 33 Remove references to objects, JVM will mark them for garbage collection Call static method gc of class System to indicate that garbage collection should be attempted 34 System.gc(); // ask for garbage collection to occur now 35 35

36 36 // show Employee count after calling garbage collector; count 37 // displayed may be 0, 1 or 2 based on whether garbage collector 38 // executes immediately and number of Employee objects collected 39 System.out.printf( "\nemployees after System.gc(): %d\n", 40 Employee.getCount() ); 41 // end main 42 // end class EmployeeTest Call static method getcount Employees before instantiation: 0 Employee constructor: Susan Baker; count = 1 Employee constructor: Bob Blue; count = 2 Employees after instantiation: via e1.getcount(): 2 via e2.getcount(): 2 via Employee.getCount(): 2 Employee 1: Susan Baker Employee 2: Bob Blue Employee finalizer: Bob Blue; count = 1 Employee finalizer: Susan Baker; count = 0 Employees after System.gc(): 0 Η στατική μέθοδος gc of της τάξης System απλά ζητά από τον garbage collector να επανακτήσει τη μνήμη από αντικείμενα που είναι υποψήφια για garbage collection. Όμως, αν και πότε θα συμβεί αυτό δεν είναι γνωστό. 36

37 Εισαγωγή στατικών μελών (static import) Οι δηλώσεις εισαγωγής (static import declarations) δίνουν τη δυνατότητα αναφοράς, από μία τάξη, σε εισαγόμενα στατικά μέλη μιας άλλης τάξης ως να είχαν οριστεί στην ίδια την τάξη Εισαγωγή συγκεκριμένου στατικού μέλους κάποιας άλλης τάξης import static packagename.classname.staticmembername; Εισαγωγή όλων των στατικών μελών κάποιας άλλης τάξης import static packagename.classname.*; Δεν επιτρέπεται η εισαγωγή στατικών μεθόδων που έχουν την ίδια υπογραφή (signature) ή στατικών μεταβλητών με το ίδιο όνομα με άλλα στατικά μέλη της ίδιας ή μιας άλλης (τα μέλη της οποία εισάγονται στατικά) τάξης 37

38 1 // Fig. 8.14: StaticImportTest.java 2 // Using static import to import static methods of class Math. 3 import static java.lang.math.*; 4 5 public class StaticImportTest 6 7 public static void main( String args[] ) 8 Use Math s static methods and instance variable without preceding them with Math. 9 System.out.printf( "sqrt( ) = %.1f\n", sqrt( ) ); 10 System.out.printf( "ceil( -9.8 ) = %.1f\n", ceil( -9.8 ) ); 11 System.out.printf( "log( E ) = %.1f\n", log( E ) ); 12 System.out.printf( "cos( 0.0 ) = %.1f\n", cos( 0.0 ) ); 13 // end main 14 // end class StaticImportTest sqrt( ) = 30.0 ceil( -9.8 ) = -9.0 log( E ) = 1.0 cos( 0.0 ) =

39 Σταθερές (τελικές) μεταβλητές (final instance variables) Δηλώνονται σαν σταθερές μεταβλητές με τη χρήση του keyword final Οι τιμές των σταθερών μεταβλητών, οι οποίες δεν μπορούν να τροποποιηθούν, ορίζονται: είτε κατά τον ορισμό των μεταβλητών (initialized at their declaration) o όταν η τιμή με την οποία ορίζεται μία σταθερή μεταβλητή (final field) γίνεται κατά τον ορισμό της τότε πρέπει να οριστεί και σαν στατική (static) αφού η τιμή της δεν μπορεί να τροποποιηθεί και θα είναι έτσι κοινή για όλα τα αντικείμενα. είτε μέσα στις μεθόδους κατασκευής (constructors) 39

40 1 // Fig. 8.15: Increment.java 2 // final instance variable in a class. 3 4 public class Increment 5 6 private int total = 0; // total of all increments 7 private final int INCREMENT; // constant variable (uninitialized) 8 9 // constructor initializes final instance variable INCREMENT 10 public Increment( int incrementvalue ) INCREMENT = incrementvalue; // initialize constant variable (once) 13 // end Increment constructor // add INCREMENT to total 16 public void addincrementtototal() total += INCREMENT; 19 // end method addincrementtototal // return String representation of an Increment object's data 22 public String tostring() return String.format( "total = %d", total ); 25 // end method toincrementstring 26 // end class Increment Initialize final instance variable inside a constructor Declare final instance variable 40

41 1 // Fig. 8.16: IncrementTest.java 2 // final variable initialized with a constructor argument. 3 4 public class IncrementTest 5 6 public static void main( String args[] ) 7 8 Increment value = new Increment( 5 ); 9 10 System.out.printf( "Before incrementing: %s\n\n", value ); for ( int i = 1; i <= 3; i++ ) value.addincrementtototal(); 15 System.out.printf( "After increment %d: %s\n", i, value ); 16 // end for 17 // end main 18 // end class IncrementTest Before incrementing: total = 0 Create an Increment object Call method addincrementtototal After increment 1: total = 5 After increment 2: total = 10 After increment 3: total = 15 41

42 Επαναχρησιμοποίηση λογισμικού (software reusability) Ταχεία ανάπτυξη λογισμικού (rapid application development RAD) Επαναχρησιμοποίηση ελεγμένου για λάθη και απόδοση λογισμικού (software reusability) επιταχύνει σημαντικά την ανάπτυξη ψηλής ποιότητας λογισμικού και μειώνει τις πιθανότητες σφαλμάτων και μειωμένης απόδοσης Java s API Παρέχει ένα ολόκληρο πλαίσιο μέσα από το οποίο οι προγραμματιστές μπορούν να αξιοποιήσουν υπάρχουσες βιβλιοθήκες λογισμικού και να αναπτύξουν ταχέως λογισμικό ψηλής απόδοσης Διαθέσιμα πακέτα και τάξεις Java: o o java.sun.com/j2se/5.0/docs/api/index.html java.sun.com/j2se/5.0/download.html Αποφύγετε την επανεφεύρεση ενός τροχού 42

43 Αφαιρετικότητα δεδομένων (Data Abstraction) και Συμπερίληψη (Encapsulation) Αφαιρετικότητα δεδομένων (data abstraction) Απόκρυψη πληροφοριών (information hiding) o Μια τάξη πρέπει να αποκρύπτει τεχνικές λεπτομέρειες υλοποίησης των δυνατοτήτων και εργασιών που προσφέρει, ώστε να είναι εύκολα τροποποιήσιμη στο μέλλον χωρίς εξάρτηση από τάξεις που την χρησιμοποιούν Μια αντικειμενοστραφής γλώσσα, όπως η Java, δίνει σημασία στα δεδομένα (data) και τις λειτουργίες που πρέπει να υποστηρίζουν Ένα τύπος δεδομένων (abstract data types - ADTs) καθορίζει: τον τρόπο εκπροσώπησης των δεδομένων (data representation) και τις επιτρεπόμενες ενέργειες οι οποίες μπορεί να εκτελεστούν σε αυτό τον τύπο δεδομένων Με τη Java ένας προγραμματιστής μπορεί να ορίσει νέους τύπους δεδομένων εξασφαλίζοντας ευελιξία επεκτασιμότητας 43

44 Δημιουργία πακέτων (packages) Για να είναι άμεσα επαναχρησιμοποιήσιμη μία τάξη: Πρέπει να δηλωθεί σαν δημόσια τάξη (public class) Να οριστεί σε ένα πακέτο (package declaration) o o ο ορισμός του πακέτου πρέπει να μπει στην κορυφή του αρχείου με τον κώδικα και να είναι η πρώτη εκτελέσιμη εντολή στο αρχείο καλά είναι να ακολουθείται η άτυπη σύμβαση για την ονομασία πακέτων ξεκινώντας με το internet domain name σε ανάποδη σειρά π.χ.: com.deitel.jhtp6.ch08 το όνομα ενός πακέτου διαχωρίζει τάξεις με το ίδιο όνομα 44

45 Δημιουργία και χρήση πακέτων (packages) Μεταγλώττιση μίας τάξης ώστε να μπει σε κατάλληλο για το πακέτο δομή αρχείων π.χ.: το πακέτο com.deitel.jhtp6.ch08 πρέπει να μπει στο directory com/ deitel/ jhtp6/ ch08/ χρησιμοποιώντας την επιλογή d δημιουργείται αυτή η δομή o javac command-line option Μία τελεία (.) μετά το d αντιπροσωπεύει το παρόν directory Εισαγωγή τάξεων από ένα πακέτο σε ένα πρόγραμμα Εισαγωγή μίας τάξης π.χ.: import java.util.random; Εισαγωγή όλων των τάξεων από ένα πακέτο π.χ.: import java.util.*; 45

46 Χρήση πακέτων Ο class loader εντοπίζει τις τάξεις που χρειάζεται ο μεταγλωττιστής ψάχνοντας πρώτα τις standard Java τάξεις που προσφέρονται με το JDK ακολούθως άλλα πιθανά πακέτα και τέλος σύμφωνα με το classpath στα directories ή τα archive files o όπου τα archive files έχουν επέκταση ονόματος.jar ή.zip π.χ. οι standard τάξεις είναι στο αρχείο rt.jar Για να χρησιμοποιηθεί άλλο classpath από το παρόν directory χρησιμοποιείται η επιλογή -classpath με τον javac compiler ή ορίζεται η μεταβλητή περιβάλλοντος environment variable CLASSPATH o χρήση τελείας (.) στο classpath προσθέτει και το παρόν directory Η JVM επίσης πρέπει να εντοπίσει τις τάξεις κατά την εκτέλεση, όπως και ο μεταγλωττιστής με τους ίδιους πιο πάνω τρόπους 46

47 1 // Fig. 8.18: Time1.java 2 // Time1 class declaration maintains the time in 24-hour format. 3 package com.deitel.jhtp6.ch08; 4 5 public class Time1 6 7 private int hour; // private int minute; // private int second; // // set a new time value using universal time; perform 12 // validity checks on the data; set invalid values to zero 13 public void settime( int h, int m, int s ) hour = ( ( h >= 0 && h < 24 )? h : 0 ); // validate hour 16 minute = ( ( m >= 0 && m < 60 )? m : 0 ); // validate minute 17 second = ( ( s >= 0 && s < 60 )? s : 0 ); // validate second 18 // end method settime 19 package declaration Time1 is a public class so it can be used by importers of this package 47

48 20 // convert to String in universal-time format (HH:MM:SS) 21 public String touniversalstring() return String.format( "%02d:%02d:%02d", hour, minute, second ); 24 // end method touniversalstring // convert to String in standard-time format (H:MM:SS AM or PM) 27 public String tostring() return String.format( "%d:%02d:%02d %s", 30 ( ( hour == 0 hour == 12 )? 12 : hour % 12 ), 31 minute, second, ( hour < 12? "AM" : "PM" ) ); 32 // end method tostring 33 // end class Time1 48

49 1 // Fig. 8.19: Time1PackageTest.java 2 // Time1 object used in an application. 3 import com.deitel.jhtp6.ch08.time1; // import class Time1 4 5 public class Time1PackageTest 6 7 public static void main( String args[] ) 8 9 // create and initialize a Time1 object 10 Time1 time = new Time1(); // calls Time1 constructor // output string representations of the time 13 System.out.print( "The initial universal time is: " ); 14 System.out.println( time.touniversalstring() ); 15 System.out.print( "The initial standard time is: " ); 16 System.out.println( time.tostring() ); 17 System.out.println(); // output a blank line 18 Single-type import declaration Refer to the Time1 class by its simple name 49

50 19 // change time and output updated time 20 time.settime( 13, 27, 6 ); 21 System.out.print( "Universal time after settime is: " ); 22 System.out.println( time.touniversalstring() ); 23 System.out.print( "Standard time after settime is: " ); 24 System.out.println( time.tostring() ); 25 System.out.println(); // output a blank line // set time with invalid values; output updated time 28 time.settime( 99, 99, 99 ); 29 System.out.println( "After attempting invalid settings:" ); 30 System.out.print( "Universal time: " ); 31 System.out.println( time.touniversalstring() ); 32 System.out.print( "Standard time: " ); 33 System.out.println( time.tostring() ); 34 // end main 35 // end class Time1PackageTest The initial universal time is: 00:00:00 The initial standard time is: 12:00:00 AM Universal time after settime is: 13:27:06 Standard time after settime is: 1:27:06 PM After attempting invalid settings: Universal time: 00:00:00 Standard time: 12:00:00 AM 50

51 Πρόσβαση επιπέδου package Μέθοδοι και μεταβλητές που ορίζονται χωρίς κάποια συγκεκριμένη δήλωση όσο αφορά την πρόσβαση (without access modifier) του δίνει αυτόματα package access πρόσβαση Έτσι, αν ένα πρόγραμμα αποτελείται από πολλές τάξεις από το ίδιο πακέτο, υπάρχει πρόσβαση τόσο στις μεθόδους όσο και στις μεταβλητές με package access 51

52 1 // Fig. 8.20: PackageDataTest.java 2 // Package-access members of a class are accessible by other classes 3 // in the same package. 4 5 public class PackageDataTest 6 7 public static void main( String args[] ) 8 9 PackageData packagedata = new PackageData(); // output String representation of packagedata 12 System.out.printf( "After instantiation:\n%s\n", packagedata ); // change package access data in packagedata object 15 packagedata.number = 77; 16 packagedata.string = "Goodbye"; // output String representation of packagedata 19 System.out.printf( "\nafter changing values:\n%s\n", packagedata ); 20 // end main 21 // end class PackageDataTest 22 Can directly access package-access members 52

53 23 // class with package access instance variables 24 class PackageData int number; // package-access instance variable 27 String string; // package-access instance variable // constructor 30 public PackageData() number = 0; 33 string = "Hello"; 34 // end PackageData constructor // return PackageData object String representation 37 public String tostring() return String.format( "number: %d; string: %s", number, string ); 40 // end method tostring 41 // end class PackageData After instantiation: number: 0; string: Hello Package-access instance variables After changing values: number: 77; string: Goodbye 53

54 Κληρονομικότητα (Inheritance) Με την κληρονομικότητα επιτυγχάνεται επαναχρησιμοποίηση λογισμικού Δημιουργία νέων τάξεων από υπάρχουσες αξιοποιώντας υπάρχουσες μεταβλητές (δεδομένα) και μεθόδους (συμπεριφορά) τροποποιώντας και επεκτείνοντας κάποιες μεθόδους (συμπεριφορά) και εμπλουτίζοντας τις με νέες, πιο εξειδικευμένες, μεταβλητές και μεθόδους Μια υποτάξη (subclass) επεκτείνει (extends) μια υπερτάξη (superclass) Ιεραρχία τάξεων (class hierarchy) Άμεση υπερτάξη (direct superclass) Έμμεση υπερτάξη (indirect superclass) Απλή κληρονομικότητα (single inheritance) Πολλαπλή κληρονομικότητα (multiple inheritance) o o δεν επιτρέπεται στη Java πολλαπλή κληρονομικότητα όμως εναλλακτικά η Java δίνει τη δυνατότητα υλοποίησης πολλαπλών intefaces 54

55 Υπερτάξεις (superclasses) και υποτάξεις (subclasses) Το αντικείμενο μίας τάξης είναι αντικείμενο μιας άλλης τάξης σχέση ΕΙΝΑΙ ( IS A ) π.χ. μια δοκός (Beam) είναι ένα δομικό στοιχείο (StructuralElement) o Η τάξη Beam κληρονομεί από την τάξη StructuralElement StructuralElement: superclass (υπερτάξη) Beam: subclass (υποτάξη) Η υπερτάξη αντιπροσωπεύει συνήθως μεγαλύτερες ομάδες αντικειμένων από ότι οι υποτάξεις, οι οποίες είναι πιο εξειδικευμένες Μια υπερτάξη προμηθεύει μέλη στις υποτάξεις της Μια υπερτάξη κληρονομεί μέλη από τις υπερτάξεις της Όλες οι τάξεις στην Java έχουν υπερτάξη την Object (java.lang) 55

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

57 Παράδειγμα: Ιεραρχία κληρονομικότητας της υπερτάξης CommunityMembers 57

58 Παράδειγμα: Ιεραρχία κληρονομικότητας της υπερτάξης Shapes 58

59 Μέλη προστατευμένης πρόσβασης (protected members) Έχουν πρόσβαση στα προστατευμένα (protected) μέλη μιας τάξης: Μέλη εκείνης της τάξης (class members) Μέλη οποιαδήποτε υποτάξης της (subclass members) Μέλη τάξεων στο ίδιο πακέτο (class members in the same package) Πρόσβαση από υποτάξη σε μέλη υπερτάξης της: super ακολουθούμενο από τελεία (.) και το όνομα του μέλους Μέθοδοι υποτάξεων δεν έχουν άμεση πρόσβαση σε private μέλη υπερτάξεων, εκτός έμμεσα μέσω non private μεθόδων της υπερτάξης που κληρονομούνται στην υποτάξη Μία μέθοδος υπερτάξης η οποία επαναορίζετε στην υποτάξη (method overridden) δεν μπορεί να οριστεί με αυστηρότερο επίπεδο πρόσβασης από ότι είχε οριστεί στην υπερτάξη Μια μέθοδος που ορίζεται σαν public σε μια υπερτάξη πρέπει να παραμείνει public σε όλες τις άμεσες ή έμμεσες υποτάξεις 59

60 Κληρονομικότητα στη Java Μια υποτάξη (subclass) κληρονομεί τα χαρακτηριστικά (δεδομένα) και τη συμπεριφορά (μεθόδους) των υπερτάξεων (superclasses) της. Η κληρονομικότητα (inheritance) είναι από τα πιο βασικά στοιχεία του αντικειμενοστραφούς προγραμματισμού (Object Oriented Programming - OOP), επιτρέποντας την επέκταση υπαρχόντων τάξεων. Στην Java μία τάξη επεκτείνει μια άλλη τάξη χρησιμοποιώντας στον ορισμό της το keyword extends ακολουθούμενο από το όνομα της τάξης που επεκτείνει π.χ.: class Pixel extends Point Ένα αντικείμενο μίας υποτάξης μπορεί να χρησιμοποιηθεί σε οποιαδήποτε μέθοδο που αναμένει σαν παράμετρο ένα αντικείμενο κάποιας υπερτάξης της, ενώ το αντίστροφο δεν ισχύει. Αυτή η δυνατότητα είναι που επιτρέπει τον πολυμορφισμό, ένα ακόμη σημαντικό χαρακτηριστικό του αντικειμενοστραφούς προγραμματισμού 60

61 Ιεραρχία αντικειμένων Όλες οι τάξεις έχουν κάποια άμεση υπερτάξη εκτός από την Object Η κάθε τάξη κληρονομεί τις μεθόδους της τάξης Object Αν μια τάξη δεν επεκτείνει άμεσα κάποια άλλη τάξη τότε είναι υποτάξη της τάξης Object 61

62 Μέθοδοι κατασκευής αντικειμένων σε υποτάξεις (Constructors in Subclasses) Καθώς δημιουργείται ένα νέο αντικείμενο μιας υποτάξης οι μέθοδοι κατασκευής (constructors) αντικειμένων καλούνται με την εξής σειρά: Η μέθοδος κατασκευής της υποτάξης καλεί άμεσα (με το super) ή έμμεσα τη μέθοδο κατασκευής της υπερτάξης της, κ.ο.κ, μέχρι να κληθεί η μέθοδος κατασκευής της τάξης Object. Έτσι τελευταία καλείται η μέθοδος κατασκευής της τάξης Object Ενώ, τελευταία τελειώνει την εκτέλεση όλων των εντολών της ( επιστρέφει ) η μέθοδος κατασκευής της υποτάξης Ακόμη και όταν ένας constructor δεν ορίσει συγκεκριμένη τιμή σε κάποια μεταβλητή του υπό κατασκευή αντικειμένου, η μεταβλητή παίρνει την προεπιλεγμένη αρχική τιμή (δηλαδή 0 για primitive numeric data types, false για booleans, και null για references). 62

63 class Point private double x, y; Point() System.out.println(" In default constructor of Point class"); x = y = 100.0; Παράδειγμα: Point.java Point(double x, double y) System.out.println(" In constructor Point(double x, double y)"); this.x = x; this.y = y; public void set(double x, double y) System.out.println(" In set method of Point"); this.x = x; this.y = y; public String tostring() System.out.print(" In tostring method of Point class"); return ("x = " + x + " y = " + y); 63

64 class Pixel extends Point private int color; Pixel.java Pixel() System.out.println(" In default constructor of Pixel class"); color = ; Pixel(double x, double y, int color) super(x,y); System.out.println(" In Pixel(double x, double y, int color) "); this.color = color; public void set(double x, double y, int color) System.out.println(" In set of Pixel class calling Point's set"); super.set(x,y); this.color = color; public String tostring() System.out.print(" In tostring method of Pixel class"); return ("color = " + color ); 64

65 class InheritanceEx1 public static void main(string args[]) Pixel p1; p1 = new Pixel(); p1.set(1.11, 0.22, ); System.out.println(); InheritanceEx1.java Point p2 = new Point(200,25.7); Pixel p3 = new Pixel(3.33,9.6, ); Point p4 = new Pixel(); System.out.println(); System.out.println("\n p1: " + p1); System.out.println("\n p2: " + p2); System.out.println("\n p3: " + p3); System.out.println("\n p4: " + p4); System.out.println(); 65

66 > java InheritanceEx1.java 66

67 Κληρονομικότητα και ανάπτυξη σύγχρονου λογισμικού Κληρονομώντας από υπάρχουσες τάξεις (superclasses) Πρόσθεση επιπρόσθετων μελών Επαναπροσδιορισμός των μελών των υπερτάξεων Καμία αναγκαιότητα άμεσης πρόσβασης σε κώδικα υπερτάξεων o Μπορεί να χρησιμοποιηθεί το αντίστοιχο bytecode 67

68 Μέθοδοι τάξης Object tostring: επιστρέφει ένα string το οποίο αντιπροσωπεύει το αντικείμενο clone: για αντιγραφή μέλους-προς-μέλος ενός αντικειμένου σε ένα νέο αντικείμενο που επιστρέφεται από τη μέθοδο equals: χρησιμοποιείται για να συγκρίνει δύο αντικείμενα για ισότητα σύμφωνα με συγκεκριμένα κριτήρια ισότητας finalize: χρησιμοποιείται για να αποδεσμεύσει κάποιους πόρους (resources) τα οποία δεσμεύτηκαν για χρήση από το αντικείμενο προτού η μνήμη για το τελευταίο απελευθερωθεί (garbage collected) getclass: επιστρέφει ένα αντικείμενο της τάξης class, το οποίο περιέχει όλες τις πληροφορίες για την τάξη ενός αντικειμένου hashcode: επιστρέφει μια τιμή hashcode για χρήση σε κάποιο hashtable notify, notifyall, wait: χρησιμοποιούνται για multithreading 68

69 Μέθοδοι της τάξης Object που κληρονομούνται, άμεσα ή έμμεσα, από όλες τις τάξεις Method Description Clone This protected method, which takes no arguments and returns an Object reference, makes a copy of the object on which it is called. When cloning is required for objects of a class, the class should override method clone as a public method and should implement interface Cloneable (package java.lang). The default implementation of this method performs a socalled shallow copy instance variable values in one object are copied into another object of the same type. For reference types, only the references are copied. A typical overridden clone method s implementation would perform a deep copy that creates a new object for each reference type instance variable. There are many subtleties to overriding method clone. You can learn more about cloning in the following article: java.sun.com/developer/jdctechtips/2001/tt0306.html 69

70 Method Description Equals This method compares two objects for equality and returns true if they are equal and false otherwise. The method takes any Object as an argument. When objects of a particular class must be compared for equality, the class should override method equals to compare the contents of the two objects. The method s implementation should meet the following requirements: It should return false if the argument is null. It should return true if an object is compared to itself, as in object1.equals( object1 ). It should return true only if both object1.equals( object2 ) and object2.equals( object1 ) would return true. For three objects, if object1.equals( object2 ) returns true and object2.equals( object3 ) returns true, then object1.equals( object3 ) should also return true. If equals is called multiple times with the two objects and the objects do not change, the method should consistently return true if the objects are equal and false otherwise. A class that overrides equals should also override hashcode to ensure that equal objects have identical hashcodes. The default equals implementation uses operator == to determine whether two references refer to the same object in memory. Section demonstrates class String s equals method and differentiates between comparing ΠΠΜ 401: Ανάπτυξη String Λογισμικού objects Εφαρμογών with Μηχανικής == and with equals. 70

71 Method Description finalize This protected method (introduced in Section 8.10 and Section 8.11) is called by the garbage collector to perform termination housekeeping on an object just before the garbage collector reclaims the object s memory. It is not guaranteed that the garbage collector will reclaim an object, so it cannot be guaranteed that the object s finalize method will execute. The method must specify an empty parameter list and must return void. The default implementation of this method serves as a placeholder that does nothing. getclass Every object in Java knows its own type at execution time. Method getclass (used in Section 10.5 and Section 21.3) returns an object of class Class (package java.lang) that contains information about the object s type, such as its class name (returned by Class method getname). You can learn more about class Class in the online API documentation at java.sun.com/j2se/5.0/docs/api/java/lang/class.html. 71

72 Method hashcode notify, notifyall, wait tostring Description A hashtable is a data structure (discussed in Section 19.10) that relates one object, called the key, to another object, called the value. When initially inserting a value into a hashtable, the key s hashcode method is called. The hashcode value returned is used by the hashtable to determine the location at which to insert the corresponding value. The key s hashcode is also used by the hashtable to locate the key s corresponding value. Methods notify, notifyall and the three overloaded versions of wait are related to multithreading, which is discussed in Chapter 23. In J2SE 5.0, the multithreading model has changed substantially, but these features continue to be supported. This method (introduced in Section 9.4.1) returns a String representation of an object. The default implementation of this method returns the package name and class name of the object s class followed by a hexadecimal representation of the value returned by the object s hashcode method. 72

73 Πολυμορφισμός (Polymorphism) Επιτρέπει πιο γενικό προγραμματισμό και επιτυγχάνεται επεκτασιμότητα του λογισμικού. Η ίδια κλήση μίας μεθόδου μπορεί να προκαλέσει διαφορετική εκτέλεση Όταν καλείται μια μέθοδος μέσω μιας αναφοράς σε αντικείμενο υπερτάξης, η επιλογή της μεθόδου εξαρτάται από τον τύπο του αντικειμένου στο οποίο πραγματικά αναφέρεται η αναφορά (reference) Ο πολυμορφισμός στην Java είναι δυνατός αφού μία υποτάξη μπορεί να χρησιμοποιηθεί στη θέση μίας υπερτάξης, αφού έχει τα χαρακτηριστικά και τη συμπεριφορά της. Μια αναφορά σε μια υπερτάξη μπορεί να αναφέρεται σε αντικείμενο υποτάξης Αυτό είναι δυνατό γιατί ένα αντικείμενο υποτάξης είναι επίσης ένα πλήρες αντικείμενο υπερτάξης συν τα επιπλέον στοιχεία της υποτάξης 73

74 Ο πολυμορφισμός επιτρέπει στον προγραμματιστή την γενικότερη αντιμετώπιση όσο αφορά την συμπεριφορά (δηλαδή τις μεθόδους) μιας τάξης παρέχοντας τη δυνατότητα να καθοριστούν πιο συγκεκριμένες συμπεριφορές για τα αντικείμενα υποτάξεων Ένα χαρακτηριστικό του πολυμορφισμού είναι η δυνατότητα η απόφαση για τη μέθοδο που θα κληθεί να παίρνεται δυναμικά κατά την εκτέλεση του προγράμματος ανάλογα με το αντικείμενο με το οποίο καλείται η μέθοδος: Αυτή η ιδιότητα ονομάζεται late binding (ή dynamic binding) αφού καθυστερεί ο μεταγλωττιστής την απόφαση για τη συγκεκριμένη μέθοδο που θα κληθεί μέχρι την ώρα της εκτέλεσης Σε αντίθεση με το static binding η απόφαση για το ποια ακριβώς μέθοδος θα κληθεί παίρνεται κατά τη μεταγλώττιση 74

75 Αν και ένα αντικείμενο μίας υποτάξης μπορεί να χρησιμοποιηθεί σαν αντικείμενο υπερτάξης, δηλαδή να χρησιμοποιηθεί μία αναφορά (reference) για υπερτάξη σε αυτό, το αντίθετο δεν είναι δυνατόν, εκτός και αν χρησιμοποιηθεί explicit casting. Αν ένα αντικείμενο οριστεί σε μια αναφορά (reference) που είναι τύπου υπερτάξης, τότε για να χρησιμοποιηθούν μέθοδοι της υποτάξης πρέπει το αντικείμενο να γίνει ρητά cast πίσω στην υποτάξη. Η σύνταξη για το casting μεταξύ δύο αντικειμένων είναι παρόμοια με αυτή μεταξύ δύο primitive τύπων δεδομένων Επιτρέπονται castings μόνο μεταξύ αντικειμένων μέσα από μια ιεραρχία κληρονομικότητας. Για την αποφυγή μη επιτρεπτών castings μπορεί να χρησιμοποιηθεί ο τελεστής instanceof για να επιβεβαιώσει εκ των προτέρων τον τύπο του αντικειμένου. 75

76 Καλείται η μέθοδος που αντιστοιχεί στην τάξη του πραγματικού αντικειμένου και όχι από την τάξη της αναφοράς (reference) που αναφέρεται στο αντικείμενο και μπορεί να είναι τύπου υπερτάξης του αντικειμένου Ενώ καθώς καλείται μία μέθοδος η απόφαση για το ποια μέθοδος θα κληθεί εξαρτάται από την τάξη που αντιστοιχεί στο αντικείμενο και όχι στο reference, όταν γίνεται πρόσβαση σε μεταβλητή κάποιου αντικειμένου η απόφαση είναι βάσει του τύπου του reference στο αντικείμενο και όχι του τύπου του αντικειμένου Οι υποτάξεις μπορούν να προσθέσουν άλλα μέλη, μεταβλητές ή/και μεθόδους. Μεταβλητές της υποτάξης με το ίδιο όνομα με μεταβλητές της υπερτάξης κρύβουν (hide) τις τελευταίες, οι οποίες όμως υπάρχουν και μόνο έμμεση πρόσβαση έχουμε σε αυτές. 76

77 Παρομοίως μια υποτάξη μπορεί να κληρονομήσει και να χρησιμοποιήσει ή επαναορίσει (κρύβοντας) τις μεθόδους των υπερτάξεων. Τελικές (final) ή στατικές (static) μέθοδοι δεν μπορούν να επαναοριστούν και συνεπώς δεν μπορούν να αποκρυφτούν. Πρόσβαση σε κρυμμένες (hidden) μεταβλητές και μεθόδους μιας υπερτάξης, λόγω επανορισμού σε υποτάξεις, γίνεται με χρήση του super keyword, το οποίο είναι μια έμμεση αναφορά σε μέλη κάποιας υπερτάξης του αντικειμένου που κάλεσε τη μέθοδο Μια μέθοδος υποτάξης μπορεί να έχει όνομα ίδιο με μέθοδο υπερτάξης και διαφορετικές παραμέτρους υπερφορτώνοντας ουσιαστικά τη μέθοδο (function overloading). Όμως μια μέθοδος υποτάξης με το ίδιο όνομα και παραμέτρους (same signature) με μέθοδο υπερτάξης πρέπει να έχει και τον ίδιο τύπο επιστρεφόμενης τιμής (return type) 77

78 Μέθοδοι νέων υποτάξεων μπορούν να καλέσουν με τον ίδιο τρόπο μεθόδους που ορίστηκαν σε υπερτάξεις χωρίς να χρειάζονται αλλαγές στο αρχικό λογισμικό. Η επαναοριζόμενη μέθοδος (overriding method) μπορεί να έχει διαφορετικό επίπεδο πρόσβασης (access specifier) μόνο εφόσον αυτό επιτρέπει περισσότερη πρόσβαση από ότι το επίπεδο πρόσβασης της μεθόδου της υπερτάξης που επαναορίζει Μπορεί να έχει διαφορετικό ορισμό throws από αυτό της μεθόδου της υπερτάξης αλλά όχι κάποιο που δεν συμπεριλαμβάνεται σε αυτά που δηλώθηκαν για τη μέθοδο της υπερτάξης 78

79 Ο τελεστής instanceof μπορεί να χρησιμοποιηθεί για να ελεγχθεί αν ένα αντικείμενο είναι συγκεκριμένης τάξης Αν μία αναφορά σε μια υποτάξη αποθηκευτεί σε μία μεταβλητή άμεσης ή έμμεσης υπερκλάσεως της, το οποίο είναι επιτρεπτό, τότε είναι επιτρεπτό η αναφορά στη συνέχεια να αποθηκευτεί σε μεταβλητή της υποτάξης αφού όμως πρώτα γίνει ρητή μετατροπή (explicit downcasting). Πριν να γίνει τέτοια μετατροπή μπορεί να χρησιμοποιηθεί ο τελεστής instanceof για να επιβεβαιωθεί η τάξη του αντικειμένου Αν το downcasting ενός αντικειμένου δεν είναι επιτρεπτό, τότε συμβαίνει ένα ClassCastException 79

80 Μετατροπές αναφορών και μέθοδοι getclass και getname Η μετατροπή downcasting: Μετατρέπει μια αναφορά σε υπερτάξη σε αναφορά σε υποτάξη Είναι επιτρεπτή όταν το αντικείμενο έχει σχέση is-a με την υποτάξη Μέθοδος getclass Κληρονομείται από την τάξη Object Επιστρέφει ένα αντικείμενο τύπου Class Μέθοδος getname της τάξης Class Επιστρέφει το όνομα της τάξης 80

81 class Point private double x, y; Point() this(0,0); Point(double x, double y) this.x = x; this.y = y; Point(Point p) x = p.x; y = p.y; public double getx() return x ; Point.java public double gety() return y ; public void setx(double newx) x = newx; public void sety(double newy) y = newy; public String tostring() return ("x = " + x + " y = " + y); 81

82 class Shape Point center; Shape.java Shape() center = new Point(); Shape(Point p) center = new Point(p); public String tostring() return (" Center: " + center); 82

83 class Circle extends Shape double radius; Circle.java Circle() radius = 0; Circle(Point p, double r) super(p); radius = r; public String tostring() return (" Circle: " + super.tostring() + " Radius = " + radius); 83

84 class TestShapes1 public static void main(string args[]) System.out.println("\n *** TestShapes1 ***"); TestShapes1.java Shape s1 = new Shape(); System.out.println("\n Shape 1: " + s1); Point p2 = new Point(4.7, -12.5); Shape s2 = new Shape(p2); System.out.println("\n Shape 2: " + s2); Circle c1 = new Circle(); System.out.println("\n Circle c1: " + c1); s1 = new Circle(p2, 7.5); System.out.println("\n Shape s1: " + s1 + "\n"); 84

85 85

86 Αόριστες τάξεις και μέθοδοι (Abstract Classes and Methods) Τάξεις οι οποίες είναι πολύ γενικές για να μπορούν να προσδιοριστούν πραγματικά αντικείμενα Χρησιμοποιούνται σαν γενικές υπερτάξεις για συγκεκριμένα ορισμένες υποτάξεις (concrete subclasses) με πραγματικά αντικείμενα, έτσι ώστε να μπορούν να οριστούν αναφορές του τύπου των αόριστων (ή αφηρημένων) υπερτάξεων Ορίζονται με χρήση του keyword abstract Είτε για να οριστεί μια τάξη σαν abstract o οι οποίες περιέχουν συνήθως μία ή περισσότερες αόριστες μεθόδους Είτε για να οριστεί μια μέθοδος σαν abstract o Όλες οι ορισμένες υποτάξεις πρέπει να επαναορίσουν όλες τις αόριστες μεθόδους που κληρονομούν από τις υπερτάξεις, αλλιώς και η υποτάξη πρέπει να είναι abstract 86

87 Μια abstract τάξη ορίζει κοινά χαρακτηριστικά και συμπεριφορά διαφόρων τάξεων σε μια ιεραρχία τάξεων. Συνήθως περιέχει μία ή περισσότερες abstract μεθόδους τις οποίες οι υποτάξεις πρέπει απαραίτητα να ορίσουν για να είναι εκείνες ορισμένες (concrete) και όχι αόριστες (abstract). Οι μεταβλητές (instance variables) και οι υπόλοιπες μη abstract μέθοδοι (δηλαδή οι concrete μέθοδοι μιας abstract τάξης) κληρονομούνται και χρησιμοποιούνται κανονικά. Προσπάθεια να δημιουργηθεί αντικείμενο μιας abstract τάξης προκαλεί λάθος κατά τη μεταγλώττιση (compilation error) Αν δεν οριστούν σε μία υποτάξη όλες οι abstract μέθοδοι μιας υπερτάξης πρέπει η υποτάξη να δηλωθεί σαν abstract 87

88 class Point private double x, y; Point() this(0,0); Point(double x, double y) this.x = x; this.y = y; Point(Point p) x = p.x; y = p.y; public double getx() return x ; Point.java public double gety() return y ; public void setx(double newx) x = newx; public void sety(double newy) y = newy; public String tostring() return ("x = " + x + " y = " + y); 88

89 abstract class Shape Point center; Shape.java Shape() center = new Point(); Shape(Point p) center = new Point(p); public String tostring() return (" Center: " + center); 89

90 class Circle extends Shape double radius; Circle.java Circle() radius = 0; Circle(Point p, double r) super(p); radius = r; public String tostring() return (" Circle: " + super.tostring() + " Radius = " + radius); 90

91 class Rectangle extends Shape double width, height; Rectangle.java Rectangle() width = height = 0; Rectangle(Point p, double w, double h) super(p); width = w; height = h; public String tostring() return (" Rectangle: " + super.tostring() + " Width = " + width + " height = " + height ); 91

92 class TestShapes2 TestShapes2.java public static void main(string args[]) System.out.println("\n *** TestShapes2: Testing arrays of Shapes ***"); // Shape s2 = new Shape(); Shape is abstract; cannot be instantiated Shape shapes[]; shapes = new Shape[4]; Point p1 = new Point(1.15, -1.25); Point p2 = new Point(24.7, -12.5); shapes[0] = new Circle(p1, 5.75); shapes[1] = new Rectangle(p2, 22.25, 14.7); shapes[2] = new Circle(); shapes[3] = new Rectangle(new Point(4.85, 16.3), 6.4, 31.2); System.out.println("\n Printing Shapes: "); for(int i=0; i<shapes.length ; i++) System.out.println("\n Shape " + i + ": " + shapes[i] + "\n"); 92

93 93

94 Τελικές μέθοδοι και τάξεις (final methods and classes) Τελικές μέθοδοι (final methods) Δεν μπορεί να επαναοριστεί (overridden) σε μία υποτάξη Μέθοδοι με private πρόσβαση ή/και static τύπου είναι έμμεσα final Οι κλήσεις σε final μεθόδους ξεκαθαρίζονται κατά τη μεταγλώττιση (static binding), ενώ μπορούν να βελτιστοποιηθούν με inlining του κώδικα o Inlining κάποιων μεθόδων βελτιώνει την απόδοση αποφεύγοντας κλήσεις μεθόδων Τελικές τάξεις (final classes) Δεν μπορούν να επεκταθούν (extended) από υποτάξεις Όλες οι μέθοδοι σε μια τελική τάξη είναι έμμεσα τελικές 94

95 Διαδυνδέσεις - Interfaces Τα interfaces (διαδυνδέσεις) ενώ είναι παρόμοια με τις τάξεις, περιέχουν μόνο κάποιες σταθερές και απλές δηλώσεις (declarations) για τις μεθόδους χωρίς να τις ορίζουν, δηλαδή έχουν μόνο abstract methods Όλα τα δεδομένα είναι έμμεσα public, static και final Όλες οι μέθοδοι είναι έμμεσα public abstract methods Μία διασύνδεση (interface) ορίζεται χρησιμοποιώντας το keyword interface Τάξεις μπορούν να υλοποιήσουν ένα ή περισσότερα interfaces Αν μία τάξη δεν ορίσει όλες τις μεθόδους ενός interface που υλοποιεί τότε πρέπει να δηλωθεί σαν abstract Μία διασύνδεση (interface) συνήθως ορίζεται σε αρχείο με ίδιο όνομα με αυτό και με.java επέκταση 95

96 Χρήση διασυνδέσεων (interfaces) δίνει τη δυνατότητα σε διάφορες τάξεις να μοιράζονται κοινές μεθόδους και σταθερές χωρίς απαραίτητα να ανήκουν στην ίδια ιεραρχία. Για να υλοποιήσει μια μέθοδος μία διασύνδεση (interface) πρέπει να το δηλώσει με το keyword implements Επιτρέπεται η υλοποίηση πολλαπλών interfaces, το οποίο καλύπτει τυχόν κενά από την απαγόρευση πολλαπλών άμεσων υπερτάξεων π.χ.: public class ClassName extends SuperclassName implements FirstInterface, SecondInterface, Μία διασύνδεση επεκτείνεται χρησιμοποιώντας το keyword extends Επιτρέπεται επέκταση πολλαπλών διασυνδέσεων Είναι περιττό να οριστεί μια μέθοδος ενός interface σαν public και abstract, όπως είναι περιττό να οριστεί κάποια σταθερά ενός interface σαν public, static και final. 96

97 Ένα interface καθορίζει κάποιες μεθόδους για τις οποίες δεν δίνει την υλοποίηση αλλά απλά την περιγραφή. Κάθε τάξη που στη συνέχεια υλοποιεί (implements) το interface ορίζει τις εντολές της κάθε μεθόδου (concrete methods) που έχει οριστεί στο interface Με τη χρήση των interfaces πετυχαίνεται κοινή συμπεριφορά όλων των τάξεων που υλοποιούν κάποιο interface και έτσι μπορούν αντικείμενα τέτοιων τάξεων να καλέσουν μεθόδους πολυμορφικά χρησιμοποιώντας αναφορά του τύπου του interface βάσει όμως της τάξης του πραγματικού αντικειμένου, και όχι του interface. Παρουσίαση διασυνδέσεων (interfaces) με UML Τα interfaces ξεχωρίζουν από τις τάξεις βάζοντας τη λέξη interface μέσα σε («και») πάνω από το όνομα του interface Η σχέση μεταξύ ενός interface και της τάξης (class) που το υλοποιεί ονομάζεται realization 97

98 Με τις διασυνδέσεις (interfaces), όπως και με την κληρονομικότητα (inheritance) πετυχαίνουμε μία is-a σχέση. Ένα αντικείμενο μιας τάξης που υλοποιεί ένα interface μπορούμε να το χειριστούμε σαν αντικείμενο του συγκεκριμένου τύπου interface Ένα αντικείμενο μιας υποτάξης μιας τάξης που υλοποιεί ένα interface μπορούμε επίσης να το χειριστούμε σαν αντικείμενο του συγκεκριμένου τύπου interface Μία αναφορά σε αντικείμενο υποτάξης μπορεί να αποθηκευτεί σε μεταβλητή του τύπου ενός interface αν κάποια υπερτάξη το κάνει implement Οι ιδιότητες του πολυμορφισμού ισχύουν και μεταξύ διασυνδέσεων (interfaces) και των τάξεων που τα υλοποιούν και των υποτάξεων τους 98

99 Χρησιμοποιώντας μία αναφορά τύπου διασύνδεσης (interface) μπορούμε πολυμορφικά να καλέσουμε οποιαδήποτε μέθοδο ορίζεται στο interface declaration καθώς και στη τάξη Object Όλες οι μέθοδοι της τάξης Object μπορούν να κληθούν χρησιμοποιώντας μία αναφορά τύπου interface. Μία αναφορά αναφέρεται σε ένα αντικείμενο και όλα τα αντικείμενα κληρονομούν τις μεθόδους της τάξης Object. Με τα interfaces μπορούν να οριστούν κάποιες σταθερές που να είναι κοινές σε πολλές τάξεις Αυτές οι σταθερές είναι έμμεσα public, static και final Χρησιμοποιώντας δήλωση στατικής εισαγωγής (static import declaration) επιτρέπει χρήση αυτών των σταθερών απλά με το όνομα τους 99

100 Η διασύνδεση (interface) Payable Περιέχει τη μέθοδο getpaymentamount Την οποία υλοποιεί (implements) οι τάξεις Invoice και Employee 100

101 Geometry.java interface Geometry public void print(); 101

102 class Point implements Geometry private double x, y; Point.java Point() x = y = 100.0; Point(double x, double y) this.x = x; this.y = y; public void print() System.out.print(" x = " + x + " y = " + y ); 102

103 class InterfacesExample1 public static void main(string args[]) Point p1; p1 = new Point(); Point p2 = new Point(2.2, 0.44); InterfacesExample1.java System.out.print("\n p1: "); p1.print(); System.out.print("\n p2: "); p2.print(); System.out.println(); 103

104 java InterfacesExample1 104

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Εργαστήριο Ανάπτυξης Εφαρμογών Βάσεων Δεδομένων. Εξάμηνο 7 ο

Εργαστήριο Ανάπτυξης Εφαρμογών Βάσεων Δεδομένων. Εξάμηνο 7 ο Εργαστήριο Ανάπτυξης Εφαρμογών Βάσεων Δεδομένων Εξάμηνο 7 ο Procedures and Functions Stored procedures and functions are named blocks of code that enable you to group and organize a series of SQL and PL/SQL

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΕΙΣΑΓΩΓΗ ΣΤΟN ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΕΙΣΑΓΩΓΗ ΣΤΟN ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΙΣΑΓΩΓΗ ΣΤΟN ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ Εμβέλεια Μεταβλητών Εμβέλεια = το τμήμα του προγράμματος στο οποίο έχει ισχύ ή είναι ορατή η μεταβλητή.

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 133: ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΕΡΓΑΣΤΗΡΙΟ 3 Javadoc Tutorial ΕΡΓΑΣΤΗΡΙΟ 3 Javadoc Tutorial Introduction Το Javadoc είναι ένα εργαλείο που παράγει αρχεία html (παρόμοιο με τις σελίδες στη διεύθυνση http://docs.oracle.com/javase/8/docs/api/index.html) από τα σχόλια

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Καλές επιτυχίες παιδιά στα υπόλοιπα μαθήματά σας και καλές γιορτές!!!!

Καλές επιτυχίες παιδιά στα υπόλοιπα μαθήματά σας και καλές γιορτές!!!! Πανεπιστήμιο Κύπρου Πολυτεχνική Σχολή Τμήμα Πολιτικών Μηχανικών και Μηχανικών Περιβάλλοντος ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, 2018 Ακαδημαϊκό Έτος 2018-19, Χειμερινό Εξάμηνο Τελική Εξέταση

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

Καλές επιτυχίες παιδιά στα υπόλοιπα μαθήματά σας και καλές γιορτές!!!!

Καλές επιτυχίες παιδιά στα υπόλοιπα μαθήματά σας και καλές γιορτές!!!! Πανεπιστήμιο Κύπρου Πολυτεχνική Σχολή Τμήμα Πολιτικών Μηχανικών και Μηχανικών Περιβάλλοντος ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, 2016 Ακαδημαϊκό Έτος 2016-17, Χειμερινό Εξάμηνο Τελική Εξέταση

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

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

02 Αντικειμενοστρεφής Προγραμματισμός 02 Αντικειμενοστρεφής Προγραμματισμός Τεχνολογία Λογισμικού Τμήμα Πληροφορικής & Τηλεπικοινωνιών, ΕΚΠΑ Εαρινό εξάμηνο 2016 17 Δρ. Κώστας Σαΐδης saiko@di.uoa.gr Αντικειμενοστρέφεια Στον προγραμματισμό object

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

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

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

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

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

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

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

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

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

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

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

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

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

The Simply Typed Lambda Calculus

The Simply Typed Lambda Calculus Type Inference Instead of writing type annotations, can we use an algorithm to infer what the type annotations should be? That depends on the type system. For simple type systems the answer is yes, and

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

17TimeThis.h function returns reference pointer to same object { return *this; }

17TimeThis.h function returns reference pointer to same object { return *this; } Προαπαιτούµενη Κάθε οµάδα θα πρέπει να εµπλουτίσει το ίδιο πρόγραµµα, που έκανε την προηγούµενη φορά, προσθέτοντας στην κλάση του έναν ή περισσότερους υπερφορτωµένους τελεστές (όπως , ++, +,-,+=..)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Δομές Δεδομένων - Εργαστήριο 2. Λίστες Λίστες Λίστες (Lists) : Συλλογή δεδομένων σε δυναμικά δεσμευμένους κόμβους. Κάθε κόμβος περιέχει συνδέσεις προς άλλους κόμβους. Προσπέλαση -στού κόμβου διατρέχοντας όλους τους προηγούμενους. Πολλές παραλλαγές

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

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

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

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

7.1 Εισαγωγή 7.2 const Αντικείµενα και const Συναρτήσεις 7.3 Σύνθεση: Αντικείµενα ως µέλη τάξης 7.4 friend Συναρτήσεις και τάξεις 7.

7.1 Εισαγωγή 7.2 const Αντικείµενα και const Συναρτήσεις 7.3 Σύνθεση: Αντικείµενα ως µέλη τάξης 7.4 friend Συναρτήσεις και τάξεις 7. Πανεπιστήµιο Πατρών Τµήµα Μηχανικών Ηλεκτρονικών Υπολογιστών και Πληροφορικής ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΙΙ (C++) Τάξεις και Αφαίρεση εδοµένων 1 Τάξεις Μέρος ΙΙ 7.1 Εισαγωγή 7.2 const Αντικείµενα και

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

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

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

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

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

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Μέθοδοι που επιστρέφουν αντικείμενα Deep and Shallow Copies

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Μέθοδοι που επιστρέφουν αντικείμενα Deep and Shallow Copies ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Μέθοδοι που επιστρέφουν αντικείμενα Deep and Shallow Copies Μαθήματα από το εργαστήριο Όταν η εκφώνηση σας ζητάει να φτιάξετε μία μέθοδο που παίρνει

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

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

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

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

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

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

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

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

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

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

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

Αντικείμενα στη Java. Παύλος Εφραιμίδης. Java Αντικείμενα στη Java 1 Αντικείμενα στη Java Παύλος Εφραιμίδης Java Αντικείμενα στη Java 1 Αντικείμενα (Objects) στην Java Ένα πρόγραμμα Java κατά την εκτέλεσή του δημιουργεί αντικείμενα τα αντικείμενα αλληλεπιδρούν, στέλνοντας

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

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

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

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

Instruction Execution Times

Instruction Execution Times 1 C Execution Times InThisAppendix... Introduction DL330 Execution Times DL330P Execution Times DL340 Execution Times C-2 Execution Times Introduction Data Registers This appendix contains several tables

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Αντικείμενα (Objects) στην Java. Αντικείμενα στη Java. Δημιουργία Αντικειμένων. Δηλώσεις Μεταβλητών (2) Ο τελεστής new (1)

Αντικείμενα (Objects) στην Java. Αντικείμενα στη Java. Δημιουργία Αντικειμένων. Δηλώσεις Μεταβλητών (2) Ο τελεστής new (1) Αντικείμενα (Objects) στην Java Αντικείμενα στη Java Παύλος Εφραιμίδης Ένα πρόγραμμα Java κατά την εκτέλεσή του δημιουργεί αντικείμενα τα αντικείμενα αλληλεπιδρούν, στέλνοντας μηνύματα το ένα στο άλλο

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

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 19/5/2007

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 19/5/2007 Οδηγίες: Να απαντηθούν όλες οι ερωτήσεις. Αν κάπου κάνετε κάποιες υποθέσεις να αναφερθούν στη σχετική ερώτηση. Όλα τα αρχεία που αναφέρονται στα προβλήματα βρίσκονται στον ίδιο φάκελο με το εκτελέσιμο

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

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

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

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

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

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

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

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

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

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

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

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Έλεγχος ισότητας String Interning Αποαναφοροποίηση - dereferencing

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Έλεγχος ισότητας String Interning Αποαναφοροποίηση - dereferencing ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Έλεγχος ισότητας String Interning Αποαναφοροποίηση - dereferencing ΕΛΕΓΧΟΣ ΙΣΟΤΗΤΑΣ Έλεγχος ισότητας Έχουμε πει ότι όταν ελέγχουμε ισότητα μεταξύ αντικειμένων

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Εισαγωγή στη Java III Ισότητα Strings class StringTest public static void main(string args[]) String x1 = "java"; String y1 = "java"; System.out.println("1.

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

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

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Συναρτήσεις Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Συναρτήσεις Ως τώρα γράφαμε όλα τα προγράμματα μας μέσα στην main..1

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

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

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

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

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

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

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

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

Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 6: Αφαιρετικότητα, Βιβλιοθήκες Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Αφαιρετικότητα -Βιβλιοθήκες (packages) Διδάσκων: Παναγιώτης Ανδρέου ΕΠΛ233 Αντικειμενοστρεφής Προγραμματισμός

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

SOAP API. https://bulksmsn.gr. Table of Contents

SOAP API. https://bulksmsn.gr. Table of Contents SOAP API https://bulksmsn.gr Table of Contents Send SMS...2 Query SMS...3 Multiple Query SMS...4 Credits...5 Save Contact...5 Delete Contact...7 Delete Message...8 Email: sales@bulksmsn.gr, Τηλ: 211 850

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

Διάλεξη 5: Κλάσεις και Αντικείμενα. Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 5: Κλάσεις και Αντικείμενα. Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 5: Κλάσεις και Αντικείμενα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Κλάσεις και Αντικείμενα - Κατασκευή, Πρόσβαση Αντικειμένων - Διαχείριση Μνήμης, Garbage

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

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

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

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

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

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 4 : CLASSES Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 4 : CLASSES Κων. Κόκκινος Αντικειμενοστραφής Προγραμματισμός Η ιδέα του αντικειμενοστραφούς προγραμματισμού Αυτόνομες οντότητες Στιγμιότυπα οντοτήτων Παράδειγμα

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

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

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

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

(C) 2010 Pearson Education, Inc. All rights reserved.

(C) 2010 Pearson Education, Inc. All rights reserved. Connectionless transmission with datagrams. Connection-oriented transmission is like the telephone system You dial and are given a connection to the telephone of fthe person with whom you wish to communicate.

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

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

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

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

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 6/5/2006

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 6/5/2006 Οδηγίες: Να απαντηθούν όλες οι ερωτήσεις. Ολοι οι αριθμοί που αναφέρονται σε όλα τα ερωτήματα είναι μικρότεροι το 1000 εκτός αν ορίζεται διαφορετικά στη διατύπωση του προβλήματος. Διάρκεια: 3,5 ώρες Καλή

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

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

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

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

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

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

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

ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ

ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2017-2018 ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ ΜΑΘΗΜΑ: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Εισαγωγή ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ Ένα πρόγραμμα σε C περιλαμβάνει μια ή περισσότερες συναρτήσεις

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

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

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

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