Download as pdf or txt
Download as pdf or txt
You are on page 1of 26

ΠΛΗ24

ΕΝΟΤΗΤΑ 1: JAVA

Μάθημα 1.2:
Βασικά στοιχεία αντικειμενοστραφούς προγραμματισμού

Βασίλειος Νικάκης
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.2: Βασικά στοιχεία αντικειμενοστραφούς προγραμματισμού 2

ΠΕΡΙΕΧΟΜΕΝΑ
Α. Σκοπός του Μαθήματος
Β.Θεωρία
1. Βασικά στοιχεία αντικειμενοστραφούς προγραμματισμού
1. Η έννοια του αντικειμένου
2. Η έννοια της κλάσης
3. Η έννοια της κληρονομικότητας
4. Η έννοια της διεπαφής
5. Η έννοια του πακέτου
6. Οι 4 βασικοί άξονες του αντικειμενοστραφούς προγραμματισμού
Γ. Ασκήσεις
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.2: Βασικά στοιχεία αντικειμενοστραφούς προγραμματισμού 3

Α. Σκοπός του Μαθήματος

Επίπεδο Α
 Καταννόηση της έννοιας του αντικειμένου
 Καταννόηση της έννοιας της κλάσης
 Καταννόηση της έννοιας της κληρονομικότητας
Eπίπεδο Β
 Καταννόηση της έννοιας του πακέτου
Επίπεδο Γ
 Καταννόηση των 4 βασικών αξόνων του αντικειμενοστραφούς προγραμματισμού
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.2: Βασικά στοιχεία αντικειμενοστραφούς 4
προγραμματισμού

Β. Θεωρία
1. Βασικά στοιχεία αντικειμενοστραφούς προγραμματισμού
1. Η έννοια του αντικειμένου
 Η καταννόηση της έννοιας του αντικειμένου (object) είναι βασική για την
καταννόηση του αντικειμενοστραφούς προγραμματισμού (object-oriented
programming).

 Αντικείμενα υπάρχουν παντού στον πραγματικό κόσμο: θρανία, τηλεοράσεις,


αυτοκίνητα, κτλ. Στον αντικειμενοστραφή προγραμματισμό ένα αντικείμενο δεν
διαφέρει σχεδόν καθόλου με την θεώρηση αυτού στον πραγματικό κόσμο

 Κάθε αντικείμενο διαθέτει τα εξής:


 Τα πεδία (fields) ή χαρακτηριστικά (attributes) του.
 Τις μεθόδους (methods) του που αποτελούν τις ενέργειες που μπορεί να
εκτελέσει.
 Για παράδειγμα το αντικείμενο με όνομα «Rocky», το οποίο είναι σκυλάκι, έχει ως
πεδία το όνομά του (που είναι «Rocky»), το χρώμα του (άσπρο) και την ηλικία του (5
ετών) ενώ ως μεθόδους τις ενέργειες «γάβγισμα», «τρέξιμο» και «κούνημα ουράς».
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.2: Βασικά στοιχεία αντικειμενοστραφούς 5
προγραμματισμού

Β. Θεωρία
1. Βασικά στοιχεία αντικειμενοστραφούς προγραμματισμού
1. Η έννοια του αντικειμένου
 Μπορούμε να φανταστούμε ένα αντικείμενο ως ένα «μπαλάκι» το οποίο έχει στο
κέντρο/εσωτερικό του τα πεδία του και γύρω από αυτό τις μεθόδους του.
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.2: Βασικά στοιχεία αντικειμενοστραφούς 6
προγραμματισμού

Β. Θεωρία
1. Βασικά στοιχεία αντικειμενοστραφούς προγραμματισμού
1. Η έννοια του αντικειμένου
 Βασική επιδίωξη του αντικειμενοστραφούς προγραμματισμού, είναι η επικοινωνία με κάποιο
αντικείμενο να γίνεται μόνο μέσω των μεθόδων του κι όχι με άμεση πρόσβαση στα πεδία του.
 Με τον όρο επικοινωνία αναφερόμαστε στα εξής:
 όταν ζητάμε από το αντικείμενο να μεταβάλλει τις τιμές κάποιων πεδίων του.
 όταν ζητάμε από το αντικείμενο να πληροφορηθούμε (π.χ. να μας εκτυπώσει) τις τιμές
κάποιων πεδίων του.
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.2: Βασικά στοιχεία αντικειμενοστραφούς 7
προγραμματισμού

Β. Θεωρία
1. Βασικά στοιχεία αντικειμενοστραφούς προγραμματισμού
2. Η έννοια της κλάσης
 Στον πραγματικό κόσμο, μπορούμε να βρούμε πολλά αντικείμενα, τα οποία είναι του
ίδιου τύπου. Για παράδειγμα, με μία απλή ματιά στον δρόμο του σπιτιού μας
μπορούμε να δούμε πολλά αυτοκίνητα, δηλαδή πολλά αντικείμενα του τύπου
«Αυτοκίνητο».

 Αυτό που διαφοροποιεί ουσιαστικά το κάθε αντικείμενο ενός τύπου από όλα τα
υπόλοιπα, είναι οι τιμές που έχει τα πεδία του (θα μπορούσαν όμως να υπάρξουν και
δύο διαφορετικά αντικείμενα με ακριβώς ίδιες τιμές σε όλα τα πεδία τους).

 Στον αντικειμενοστραφή προγραμματισμό, ονομάζουμε τον κάθε τύπο αντικειμένων


ως κλάση (class) και λέμε ότι κάθε αντικείμενο αποτελεί ένα στιγμιότυπο
(instance) της κλάσης στην οποία ανήκει.
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.2: Βασικά στοιχεία αντικειμενοστραφούς 8
προγραμματισμού

Β. Θεωρία
1. Βασικά στοιχεία αντικειμενοστραφούς προγραμματισμού
2. Η έννοια της κλάσης
public class Car {

// Fields

private String plateNumber;


private int hp;
private int passengers;
private int speed;

// Methods

// Constructor Method
public Car(String plateNumber, int hp, int passengers) {
this.plateNumber = plateNumber;
this.hp = hp;
this.passengers = passengers;
speed = 0;
}
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.2: Βασικά στοιχεία αντικειμενοστραφούς 9
προγραμματισμού

Β. Θεωρία
1. Βασικά στοιχεία αντικειμενοστραφούς προγραμματισμού
2. Η έννοια της κλάσης
public void speedUp() {
speed += 10;
}

public void slowDown() {


speed -= 10;
}

public void addPassenger() {


if (passengers < 4)
passengers++;
}

public void printStatus() {


System.out.println("plateNumber:" + plateNumber + " hp:" + hp +
" speed:" + speed + " passengers:" + passengers);
}

}
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.2: Βασικά στοιχεία αντικειμενοστραφούς 10
προγραμματισμού

Β. Θεωρία
1. Βασικά στοιχεία αντικειμενοστραφούς προγραμματισμού
2. Η έννοια της κλάσης
public class Main {

public static void main(String[] args) {

// Δημιουργία δύο αυτοκινήτων


Car c1 = new Car("A1254",100,1);
Car c2 = new Car("B1235",120,2);

// Αύξηση της ταχύτητας στο πρώτο 2 φορές


c1.speedUp();
c1.speedUp();

// Αύξηση της ταχύτητας στο δεύτερο 3 φορές


c2.speedUp();
c2.speedUp();
c2.speedUp();

// Επιβίβαση ενός ακόμη επιβάτη στο δεύτερο αυτοκίνητο


c2.addPassenger();
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.2: Βασικά στοιχεία αντικειμενοστραφούς 11
προγραμματισμού

Β. Θεωρία
1. Βασικά στοιχεία αντικειμενοστραφούς προγραμματισμού
2. Η έννοια της κλάσης
// Εκτύπωση της κατάστασης και των δύο αυτοκινήτων
c1.printStatus();
c2.printStatus();
}
}

Το αποτέλεσμα της εκτέλεσης του παραπάνω προγράμματος είναι το ακόλουθο:


plateNumber:A1254 hp:100 speed:20 passengers:1
plateNumber:B1235 hp:120 speed:30 passengers:3
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.2: Βασικά στοιχεία αντικειμενοστραφούς 12
προγραμματισμού

Β. Θεωρία
1. Βασικά στοιχεία αντικειμενοστραφούς προγραμματισμού
3. Η έννοια της κληρονομικότητας
 Η έννοια της κληρονομικότητας (inheritance) αποτελεί ένα από τα βασικότερα
στοιχεία του αντικειμενοστραφούς προγραμματισμού. Όπως και στον πραγματικό
κόσμο, κάποιες κλάσεις αποτελούν υπό-κατηγορίες άλλων κλάσεων.

 Για να είμαστε απολύτως ακριβείς με την ορολογία που χρησιμοποιείται στον


αντικειμενοστραφή προγραμματισμό, ονομάζουμε την κλάση που βρίσκεται
παραπάνω στην ιεραρχία που δημιουργείται από μία κληρονομικότητα υπέρ-κλάση
(super class) ενώ την κλάση που βρίσκεται παρακάτω υπό-κλάση (sub class).
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.2: Βασικά στοιχεία αντικειμενοστραφούς 13
προγραμματισμού

Β. Θεωρία
1. Βασικά στοιχεία αντικειμενοστραφούς προγραμματισμού
3. Η έννοια της κληρονομικότητας
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.2: Βασικά στοιχεία αντικειμενοστραφούς 14
προγραμματισμού

Β. Θεωρία
1. Βασικά στοιχεία αντικειμενοστραφούς προγραμματισμού
3. Η έννοια της κληρονομικότητας
public abstract class Animal {

private String eidos;


private int podia;
private int varos;

public abstract void makeSound();

public abstract class Pet extends Animal {

// Επιπρόσθετο πεδίο
private String name;

// Επιπρόσθετες μέθοδοι της κλάσης Pet, αν κρίνεται αναγκαίο

}
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.2: Βασικά στοιχεία αντικειμενοστραφούς 15
προγραμματισμού

Β. Θεωρία
1. Βασικά στοιχεία αντικειμενοστραφούς προγραμματισμού
3. Η έννοια της κληρονομικότητας
public abstract class WildAnimal extends Animal {

// Επιπρόσθετο πεδίο
private String location;

// Επιπρόσθετες μέθοδοι της κλασης WildAnimal, αν κρίνεται αναγκαίο


}

public class Dog extends Pet {

// Override
public void makeSound() { System.out.println("Bark Bark"); }
}

public class Lion extends WildAnimal {

// Override
public void makeSound() { System.out.println("Roaaarrrrr!"); }

}
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.2: Βασικά στοιχεία αντικειμενοστραφούς 16
προγραμματισμού

Β. Θεωρία
1. Βασικά στοιχεία αντικειμενοστραφούς προγραμματισμού
3. Η έννοια της κληρονομικότητας
 Στην Java όλες οι κλάσεις αποτελούν υπό-κλάσεις της κλάσης Object.
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.2: Βασικά στοιχεία αντικειμενοστραφούς 17
προγραμματισμού

Β. Θεωρία
1. Βασικά στοιχεία αντικειμενοστραφούς προγραμματισμού
4. Η έννοια της διεπαφής
 Στην Java (αλλά και στις περισσότερες γλώσσες αντικειμενοστραφούς
προγραμματισμού) μπορούμε να αναγκάσουμε μία κλάση να έχει κάποιες μεθόδους.
 Αυτό γίνεται ορίζοντας μία διεπαφή (interface) η οποία περιέχει τις υπογραφές των
μεθόδων που επιθυμούμε η κλάση να έχει.
 Λέμε ότι μία κλάση υλοποιεί (implements) μία διεπαφή όταν υλοποιεί (δηλαδή
προσθέτει σώμα) σε όλες τις μεθόδους της διεπαφής.
 Αν μία κλάση υλοποιεί μία διεπαφή, τότε είναι υποχρεωτική η προσθήκη σώματος
σε όλες τις μεθόδους της διεπαφής.
public interface Vehicle {

void speedUp();
void slowDown();
void stop();

}
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.2: Βασικά στοιχεία αντικειμενοστραφούς 18
προγραμματισμού

Β. Θεωρία
1. Βασικά στοιχεία αντικειμενοστραφούς προγραμματισμού
4. Η έννοια της διεπαφής
public class Car implements Vehicle {

// πεδία, μέθοδοι με σώμα του interface Vehicle καθώς και


// τυχόν παραπάνω μέθοδοι της κλάσης Car

public class MotorBike implements Vehicle {

// πεδία, μέθοδοι με σώμα του interface Vehicle καθώς και


// τυχόν παραπάνω μέθοδοι της κλάσης MotorBike
}

public class Bicycle implements Vehicle {

// πεδία, μέθοδοι με σώμα του interface Vehicle καθώς και


// τυχόν παραπάνω μέθοδοι της κλάσης Bicycle
}
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.2: Βασικά στοιχεία αντικειμενοστραφούς 19
προγραμματισμού

Β. Θεωρία
1. Βασικά στοιχεία αντικειμενοστραφούς προγραμματισμού
5. Η έννοια του πακέτου
 Η έννοια του πακέτου (package) αναλύθηκε εκτενώς στο μάθημα 1.1.
 Όπως αναφέρθηκε ένα πακέτο (package) λειτουργεί ως ένας ομαδοποιητής, στον
οποίον τοποθετούμε αρχεία πηγαίου κώδικα (κλάσεις) ή/και άλλα πακέτα.
 Η έννοια του πακέτου αντιστοιχεί στην έννοια του φακέλου (folder) στα λειτουργικά
συστήματα.
 Για να αντιληφθούμε καλύτερα την χρησιμότητα των πακέτων, ας θεωρήσουμε ένα
πρόγραμμα Java για την μηχανογράφηση ενός ζωολογικού κήπου.

 Ας υποθέσουμε ότι έχουμε δημιουργήσει μεταξύ άλλων τις εξής κλάσεις: «Ζώο»,
«Λιοντάρι», «Τίγρης», «Ιπποπόταμος», «Υπάλληλος», «Διοικητικός», «Φροντιστής
Ζώων».

 Μπορούμε για λόγους ευκολίας να ομαδοποιήσουμε τις κλάσεις «Ζώο», «Λιοντάρι»


και Τίγρης» σε ένα πακέτο με την ονομασία «Ζώα» και τις κλάσεις «Υπάλληλος»,
«Διοικητικός» και «Φροντιστής Ζώων» σε ένα πακέτο με την ονομασία «Υπάλληλοι».
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.2: Βασικά στοιχεία αντικειμενοστραφούς 20
προγραμματισμού

Β. Θεωρία
1. Βασικά στοιχεία αντικειμενοστραφούς προγραμματισμού
6. Οι 4 βασικές άξονες του αντικειμενοστραφούς προγραμματισμού
 Κάθε αντικειμενοστραφής γλώσσα προγραμματισμού υποστηρίζει τις παρακάτω
έννοιες:
 1. Ενθυλάκωση (Encapsulation)
 2. Αφαίρεση (Abstraction)
 3. Κληρονομικότητα (Inheritance)
 4. Πολυμορφισμός (Polymorphism)
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.2: Βασικά στοιχεία αντικειμενοστραφούς 21
προγραμματισμού

Β. Θεωρία
1. Βασικά στοιχεία αντικειμενοστραφούς προγραμματισμού
6. Οι 4 βασικές άξονες του αντικειμενοστραφούς προγραμματισμού
 1. Ενθυλάκωση (Encapsulation)
 Σύμφωνα με την έννοια αυτή, αποκρύπτουμε από τον χρήστη των αντικειμένων της
κλάσης, τα πεδία αυτής, με αποτέλεσμα ο χρήστης να μπορεί να επικοινωνεί μόνο
μέσω της διεπαφής της (δηλαδή μέσω των μεθόδων της).

 Για παράδειγμα ο χρήστης για να αυξήσει την ταχύτητα ενός αντικειμένου τύπου
«Αυτοκίνητο» καλεί την μέθοδο «επιτάχυνε».
 Ο χρήστης βλέπει την ταχύτητα να αυξάνεται, αλλά αυτό που στην πραγματικότητα
κάνει η μέθοδος, είναι να προσθέτει έναν θετικό αριθμό στο πεδίο «ταχύτητα» του εν
λόγω αντικειμένου.
 Ο χρήστης δεν γνωρίζει τα πεδία που είναι αποθηκευμένα εσωτερικά στο
αντικείμενο· βλέπει μόνο τις μεθόδους του και επικοινωνεί αποκλειστικά με αυτές.
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.2: Βασικά στοιχεία αντικειμενοστραφούς 22
προγραμματισμού

Β. Θεωρία
1. Βασικά στοιχεία αντικειμενοστραφούς προγραμματισμού
6. Οι 4 βασικές άξονες του αντικειμενοστραφούς προγραμματισμού
 2. Αφαίρεση (Abstraction)
 Ο όρος αυτός αναφέρεται στα πεδία και τις μεθόδους μίας κλάσης τα οποία θα
πρέπει να υλοποιήσει ένας προγραμματιστής.
 Αν σε ένα πρόγραμμα κάποιος θα πρέπει να δημιουργήσει την κλάση «Αυτοκίνητο»,
θα πρέπει να αποφασίσει ποια χαρακτηριστικά (πεδία) και ενέργειες (μεθόδου) είναι
στην πραγματικότητα χρήσιμα.
 Στην ουσία ο προγραμματιστής λειτουργεί αφαιρετικά, υλοποιώντας μόνο ότι είναι
απαραίτητο για την λειτουργία του προγράμματος.
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.2: Βασικά στοιχεία αντικειμενοστραφούς 23
προγραμματισμού

Β. Θεωρία
1. Βασικά στοιχεία αντικειμενοστραφούς προγραμματισμού
6. Οι 4 βασικές άξονες του αντικειμενοστραφούς προγραμματισμού
 3. Κληρονομικότητα (Inheritance)
 Η έννοια της κληρονομικότητας συζητήθηκε εκτενώς παραπάνω.
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.2: Βασικά στοιχεία αντικειμενοστραφούς 24
προγραμματισμού

Β. Θεωρία
1. Βασικά στοιχεία αντικειμενοστραφούς προγραμματισμού
6. Οι 4 βασικές άξονες του αντικειμενοστραφούς προγραμματισμού
 4. Πολυμορφισμός (Polymorphism)
 Πολυμορφισμός τυπικά σημαίνει: «ένα όνομα, πολλές μορφές» (“one name, many
forms”).
 Ουσιαστικά πολυμορφισμός είναι η δυνατότητα δημιουργίας πολλών μεθόδων με το
ίδιο όνομα, οι οποίες όμως έχουν διαφορετική συμπεριφορά.
 Υπάρχουν δύο είδη πολυμορφισμού: ο στατικός πολυμορφισμός (static
polymorphism) και ο δυναμικός πολυμορφισμός (dynamic polymorphism).
 Στατικός πολυμορφισμός: η δυνατότητα ορισμού πολλών μεθόδων με το ίδιο
όνομα στην ίδια κλάση. Η κάθε μέθοδος διαφέρει από τις άλλες στα ορίσματα που
δέχεται.
 Δυναμικός πολυμορφισμός: η δυνατότητα επανορισμού του σώματος μιας
μεθόδου που κληρονομείται. Μία υπό-κλάση η οποία κληρονομεί μία μέθοδο από μία
υπέρ-κλάση, μπορεί να αλλάξει το σώμα της μεθόδου και να την προσαρμόσει
ανάλογα με τις ανάγκες της.
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.2: Βασικά στοιχεία αντικειμενοστραφούς 25
προγραμματισμού

Γ. Ασκήσεις
Ερωτήσεις καταννόησης
 1. Περιγράψτε σε το πολύ 5 γραμμές τις έννοιες της κλάσης και του αντικειμένου.

 2. Περιγράψτε σε το πολύ 5 γραμμές την έννοια της κληρονομικότητας.

 3. Πόσα αντικείμενα μπορείτε να δείτε στην εικόνα της επόμενης σελίδας; Σε ποιά
κλάση πιθανότατα ανήκει το καθένα; Ποιά τα πιθανά πεδία του κάθε αντικειμένου;
Βασίλειος Νικάκης, ΠΛΗ 24, Μάθημα 1.2: Βασικά στοιχεία αντικειμενοστραφούς 26
προγραμματισμού

You might also like