Μάθημα : Προγραμματισμός Υπολογιστών Γ' ετος 2025-2026
Κωδικός : 4540050176
-
Θεματικές Ενότητες
-
3.3 Βασικές Ενσωματωμένες συναρτήσεις
-
4.1.2 Δομή επιλογής if
-
4.1.3 Δομή επανάληψης (For-While)
-
4.1.4 For ή While
-
4.2 Συναρτήσεις
-
8.1 Συμβολοσειρές (strings)
-
Λίστες
-
5.1 Δυαδική αναζητηση 5.2 Ταξινόμηση ανταλλαγής (bubble sort)
-
8.3 Στοίβα
-
8.4 Ουρά
-
7.3 Αρθρωματα (Modules)
-
7.3.2 Σύντομη περιγραφή της Πρότυπης βιβλιοθήκης (Standard Library)
-
7.3.3 Πακέτα (Packages)
-
6.Αρχεία
-
11.Αντικειμενοστραφής Προγραμματισμός
-
Τυποι δεδομένων,μεταβλητές, τελεστές,λογικές εκφράσεις
-
3.3 Βασικές Ενσωματωμένες συναρτήσεις
11.Αντικειμενοστραφής Προγραμματισμός
11.1 Η μέθοδος συγγραφής προγραμμάτων, η οποία συνδυάζει δεδομένα και λειτουργικότητα εμπερικλείοντάς τα σε ένα αντικείμενο, ονομάζεται αντικειμενοστραφής προγραμματισμός (object-oriented programming) (Booch, 2007).
Ο Αντικειμενοστρεφής προγραμματισμός αλλάζει την εστίαση του προγραμματισμού από τις διαδικασίες στις έννοιες. Σε αυτές αναθέτει χαρακτηριστικά, τα οποία ονομάζουμε ιδιότητες (attributes), και τα οποία επεξεργάζεται μέσω ειδικών συναρτήσεων που ονομάζουμε μεθόδους. Οι ιδιότητες δεν είναι άλλες από τα σχετικά με το αντικείμενο δεδομένα, και οι μέθοδοι αποτελούν περιγραφές ενεργειών που αφορούν συγκεκριμένα σε αυτές τις ιδιότητες
Αντικείμενο και ιδιότητες
Η μέθοδος προγραμματισμού που λέγεται αντικειμενοστραφής προγραμματισμός (objectoriented programming) έχει ως κεντρική έννοιατην κλάση (class) που ειναι αναπαράσταση μιας κατηγορίας αντικειμένων.
• Κλάση (class) : ένας νέος τύπος δεδομένων που ορίζει τη δομή μιας κατηγορίας αντικειμένων. Περιλαμβάνει δεδομένα και τη συμπεριφορά τους (μεθόδους)
• Στιγμιότυπα (instances) μιας κλάσης είναι αντικείμενα που δημιουργούνται σύμφωνα
με τον ορισμό της κλάσης
Ενα αντικείμενο δημιουργείται από μια ειδική μέθοδο που στην αντικειμενοστρεφή ορολογία ονομάζεται κατασκευαστής (constructor)
Ορισμός κλάσης στην Python και αρχικοποίηση τιμών
Ο ορισμός μιας κλάσης στην Python είναι παρόμοιος με τον αυτόν μιας συνάρτησης . Μόνο που, αντί για τη λέξη def, χρησιμοποιούμε τη λέξη κλειδί class. Για παράδειγμα, αν θέλουμε να ορίσουμε την κλάση όχημα με ορισμένες ιδιότητες και αρχικοποίηση τιμών
class Vehicle:
def__init__( self, color, price, wheels, speed):
self.color=color
self.price=price
self.wheels=wheels
self.speed=speed
Παρατηρούμε ότι οι ιδιότητες της κλάσης εισάγονται σε μια ιδιαίτερη συνάρτηση την __init__ ως παράμετροι. Η συγκεκριμένη έχει μια ιδιαιτερότητα στο όνομα, αφού αρχίζει και τελειώνει με διπλές κάτω παύλες "—".Είναι η μέθοδος που αποτελεί τον κατασκευαστή των αντικειμένων και καλείται επίσης μέθοδος αρχικοποίησης τιμών.Η μέθοδος αρχικοποίησης είναι μια ειδική μέθοδος της οποίας η επίκληση γίνεται αυτόματα, όταν ένα αντικείμενο δημιουργείται.
Για να δημιουργήσουμε τώρα ενα αντικείμενο πρέπει να καλέσουμε την κλάση Vehicle, με ορίσματα ή τιμές για κάθε μία από τις ιδιότητες του αντικειμένου που αντιστοιχούν στις παραμέτρους της μεθόδου—init—. Στο αντικείμενο που δημιουργείται δίνουμε ένα όνομα , όπως για παράδειγμα:
mybeetle = Vehicle('yellow', 2000.00, 4, 80).
Έχουμε τώρα δημιουργήσει ένα όχημα κίτρινο, με τιμή 2000 ευρώ, τέσσερις τροχούς και ταχύτητα 80 χιλιόμετρα την ώρα. Το όνομά του είναι mybeetle. To mybeetle είναι ένα αντικείμενο, ανήκει στην κλάση όχημα (Vehicle) και έχει συγκεκριμένες τιμές για τις ιδιότητες του οχήματος, αυτές που ορίσαμε με την κλήση της. Ένα τέτοιο αντικείμενο ονομάζεται στιγμιότυπο της κλάσης.
Δεν καλέσαμε ονομαστικά τη μέθοδο —init—, απλώς καλέσαμε την κλάση σχεδόν ως συνάρτηση, με τις τιμές που αφορούν το αντικείμενο που θέλουμε να δημιουργήσουμε για τις ιδιότητες της κλάσης, όπως αυτές εμφανίζονται ως μεταβλητές της μεθόδου.
Μέθοδος
Μια επόμενη ερώτηση θα μπορούσε να είναι, τι μπορούμε να κάνουμε με ένα αυτοκίνητο;
Μπορούμε να:
● ξεκινήσουμε
● το επιταχύνουμε
● φρενάρουμε (να το επιβραδύνουμε) κ.λπ.
Στον Αντικειμενοστρεφή προγραμματισμό, αυτές οι ενέργειες ονομάζονται μέθοδοι (methods). Οι μέθοδοι επιτρέπουν στα αντικείμενα να κάνουν διάφορες ενέργειες, μέσω των οποίων, μπορούμε να ελέγχουμε τις ιδιότητες του αντικειμένου, όπως για παράδειγμα να ελέγχουμε την ταχύτητα του αυτοκινήτου.
Η χρήση της παραμέτρου self
Η self εμφανίζεται ως πρώτη παράμετρος σε όλες τις μεθόδους της κλάσης . Αυτή η παράμετρος επιτρέπει στη μέθοδο να αναφέρεται στο ίδιο το αντικείμενο και όχι σε ολόκληρη την κλάση,πράγμα που τουλάχιστον ισχύει στη γενική περίπτωση. Τοποθετώντας στη self το όνομα του αντικειμένου, διασφαλίζουμε ότι μια μέθοδος που θα κληθεί μέσω ενός αντικειμένου, θα επιδράσει μόνο σε αυτό
Ισότητα
Η έννοια της «ισότητας» στα αντικείμενα μπορεί να οριστεί με δύο τρόπους. Δύο αντικείμενα μπορούμε να πούμε ότι είναι ίδια, είτε αν περιέχουν τα ίδια δεδομένα ή αν είναι στην πραγματικότητα το ίδιο αντικείμενο.
Ο γνωστός μας τελεστής == ελέγχει αν δύο αναφορές δείχνουν στο ίδιο ακριβώς αντικείμενο. Για παράδειγμα, κάνουμε τη σύγκριση δύο διαφορετικών αντικειμένων p1 και p2, τα οποία έχουν, όμως, τα ίδια περιεχόμενα. Παρόλο που τα p1 και p2 περιέχουν γνωρίσματα με τις ίδιες τιμές, δεν είναι το ίδιο αντικείμενο και άρα η σύγκριση μέσω του == επιστρέφει «ψευδές».
Αν, ωστόσο, εκχωρήσουμε το p1 στο p2, τότε οι δύο μεταβλητές είναι ψευδώνυμα του ίδιου αντικειμένου και άρα η σύγκρισή τους μέσω του τελεστή == επιστρέφει «αληθές»:
Αυτός ο τύπος ισότητας ονομάζεται ρηχός (shallow equality), γιατί συγκρίνει μόνον τις αναφορές και όχι τα περιεχόμενα των αντικειμένων. Αντικείμενα τα οποία έχουν το ίδιο περιεχόμενο σε πρώτο επίπεδο μπορεί να φαίνονται ως ίσα με βάση το κριτήριο της ρηχής ισότητας, αλλά μπορεί να διαφέρουν βάσει του συνολικού περιεχομένου τους, ακολουθώντας όλες τις αναφορές σε εμφωλευμένα αντικείμενα, σε όλα τα επίπεδα. Για να ελέγξουμε, λοιπόν, δύο αντικείμενα για βαθιά ισότητα (deep equality), πρέπει να συγκρίνουμε, πλήρως, τα περιεχόμενα των αντικειμένων αυτών.
Ασκήσεις εμπέδωσης
Ασκηση 1.
Να ορίσετε κλάση που περιγράφει μια αμαξοστοιχία με όνομα Traino που έχει:
- Τις ιδιότητες όνομα αμαξοστοιχίας, αρ. βαγονιών ,αρ. επιβατών, ταχύτητα.
- Μία μέθοδο αρχικοποίησης των ιδιοτήτων δίνοντας αρχική ταχύτητα 0.
- Μία μέθοδο εμφάνισης των τιμών των ιδιοτήτων της κλάσης.
- Μία μέθοδο τροποποίησης της ταχύτητας της αμαξοστοιχίας σύμφωνα με την τιμή που δέχεται ως παράμετρο
- Mε τις κατάλληλες εντολές να δημιουργήσετε ένα αντικείμενο με όνομα trenoexpress με τιμές στις ιδιότητες ‘Τρίκαλα’,’6’,’110’ Με την βοήθεια της κατάλληλης μεθόδου να εμφανίζονται οι ιδιότητες του αντικειμένου
Απάντηση
class Traino:
def __init__(self,onomasia,ar_vagoniwn,ar_epivatwn):
self.onomasia=onomasia
self.ar_vagoniwn=ar_vagoniwn
self.ar_epivatwn=ar_epivatwn
self.taxitita=0
def display():
print "ONOMASIA :",self.onomasia
print "ARITHMOS BAGONIWN:",self.ar_vagoniwn
print "ARITHMOS EPIBATWN:",self.ar_epivatwn
print "TAXYTHTA :",self.taxitita
def change_speed(self,posotita):
self.taxitita=self.taxitita+posotita
taxiaexpres=Traino('trikala','6','110')
taxiaexpres.change_speed(100)
taxiaexpres.display()
Ασκηση 2
Δίνεται η κάτωθι κλάση:
1.Να γράψετε τις ιδιότητες και τις μεθόδους της κλάσης
2.Να προσθέσετε μια ιδιότητα Χρώμα και να την αρχικοποιήσετε.
3.Να τροποποιήσετε την μέθοδο strofi ώστε να δέχεται ως παράμετρο μια συμβολοσειρά που να ορίζει αν το ποδήλατο στρίβει αριστερά η δεξιά.
4.να δημιουργήσετε τα παρακάτω στιγμιότυπα
Α)Αντικείμενο με όνομα podbounou με τύπο ‘βουνού’ και χρώμα ‘άσπρο’
Β) Αντικείμενο με όνομα podpolis με τύπο ‘πόλης ‘ και χρώμα ‘μπλέ’
5.Να καλέσετε την κατάλληλη μέθοδο έτσι ώστε το αντικείμενο podbounou να στρίψει αριστερά.
- Να καλέσετε την κατάλληλη μέθοδο έτσι ώστε το αντικείμενο podpolis τρέχει με 40χμ /ωρα
def__init__(self,typos):
self.typos=typos
self.taxitita=20
def speed(self,taxitita)
self.taxitita=taxitita
print ‘η ταχυτητα είναι’,self.taxitita
def strofi(self):
print “Το ποδήλατο στρίβει:”
Απάντηση
ΙΔΙΟΤΗΤΕΣ ΚΛΑΣΗΣ: typos,taxitita
ΜΕΘΟΔΟΙ ΚΛΑΣΗΣ:speed(self,taxitita) , strofi(self)
Β)προσθήκη ιδιότητας xroma
def__init__(self,typos,xroma):
self.typos=typos
self.xroma=xroma
self.taxitita=20
Γ) τροποποίηση της μεθόδου strofi:
def strofi(self,turn):
print “Το ποδήλατο στρίβει:”,self.turn
Δ)τα στιγμιότυπα:
PodBounou=Podilato(“Βουνού”,”Άσπρο/Γκρι”)
PodPolis=Podilato(“Πόλης”,”Άσπρο/Μπλε”)
Ε) PodBounou.strofi(“aristera”)
Ζ) PodPolis.speed(40)
Ασκηση 3.
Δίνεται η παρακάτω κλάση:
class ypallilos:
def _ _init_ _ (self, eponymo, onoma,misthos):
self.eponymo=eponymo
self.onoma=onoma
self.misthos=misthos
def afksisemistho(self,amount):
self.misthos=self.misthos+amount
def emfanise_stoixeia(self):
print "Επώνυμο ",self.eponymo
print "Όνομα ",self.onoma
print "Μισθός ",self.misthos
α. Ποιος είναι ο κατασκευαστής (constructor) της κλάσης;
β Ποιες είναι οι ιδιότητες της κλάσης;
γ. Ποιες είναι οι τις μέθοδοι της κλάσης.
δ. Να προσθέσετε την ιδιότητα xronia που θα αφορά τα χρόνια υπηρεσίας του υπαλλήλου και να αρχικοποιείται στον κατασκευαστή (Δεν χρειάζεται να εμφανίζεται στην emfanise_stoixeia()).
ε. Να προσθέσετε μία μέθοδο afxisexronia(self,amount) η οποία να αυξάνει τα χρόνια υπηρεσίας κατά amount.
στ. Να δημιουργήσετε τα παρακάτω στιγμιότυπα της κλάσης: I. Αντικείμενο με όνομα αντικειμένου yp1 και Επώνυμο ΑΝΤΩΝΙΟΥ, όνομα ΑΝΤΩΝΙΟΣ, Μισθό 1500 και χρόνια υπηρεσίας 15.
ζ. Αντικείμενο με όνομα αντικειμένου yp2 και Επώνυμο ΠΑΠΑΔΟΠΟΥΛΟΥ, όνομα ΕΛΕΝΗ, Μισθό 2000 και χρόνια υπηρεσίας 20.
η. Να καλέσετε την κατάλληλη μέθοδο, ώστε ο μισθός της ΠΑΠΑΔΟΠΟΥΛΟΥ να αυξηθεί κατά 200.
Απάντηση
Ασκηση 4
Δίνεται η παρακάτω κλάση:
class Student:
def __init__(self, onoma, vath1, vath2):
self.onoma=onoma
self.vath1=vath1
self.vath2=vath2
όπου onoma είναι το όνομα του σπουδαστή, vath1 η βαθμολογία του στο πρώτο εξάμηνο και vath2 η βαθμολογία του στο δεύτερο εξάμηνο.
α) Να δημιουργήσετε τη μέθοδο με όνομα find_mo(), η οποία θα υπολογίζει και θα επιστρέφει τον μέσο όρο των vath1 και vath2 του σπουδαστή
β) Να δημιουργήσετε δύο (2) στιγμιότυπα της κλάσης ως εξής: student1, με τιμές των ιδιοτήτων του onoma="Ιωάννου", vath1=7, vath2=6 και student2, με τιμές των ιδιοτήτων του onoma="Αναστασίου", vath1=10, vath2=9 .
γ) Να βρείτε και να εμφανίσετε το όνομα του στιγμιοτύπου που έχει τον μεγαλύτερο μέσο όρο με χρήση της μεθόδου find_mo() που περιγράφεται στο ερώτημα α. Στην
περίπτωση που και τα δύο (2) στιγμιότυπα έχουν τον ίδιο μέσο όρο, να εμφανίσετε και τα δύο (2) ονόματα των στιγμιοτύπων .
Απάντηση
def find_mo(self):
return (self.vath1+self.vath2)/2.0
student1=Student('Ιωάννου',7,6)
student2=Student('Αναστασίου',10,9)
mo1=student1.find_mo()
mo2=student2.find_mo()
if mo1>mo2:
print student1.onoma
elif mo1<mo2:
print student2.onoma
else:
print student1.onoma
print student2.onoma
Ασκηση 5
Δίνεται η παρακάτω κλάση:
class Mathitis:
def __init__(self,am,onoma,vathmos):
self.am=am
self.onoma=onoma
self.vathmos=vathmos
όπου am είναι ο αριθμός μητρώου του μαθητή, onoma το όνομά του και vathmos ο βαθμός του.
α) Να δημιουργήσετε τη μέθοδο με όνομα tipose() η οποία θα ελέγχει τον βαθμό του αντικειμένου και, αν αυτός
είναι μεγαλύτερος ή ίσος του 10, να εμφανίζει το μήνυμα “Προάγεται”, αλλιώς να εμφανίζει το μήνυμα “Παραπέμπεται”
β) Να δημιουργήσετε δύο αντικείμενα της κλάσης ως εξής:
mathitis1, με τιμές των ιδιοτήτων του am=103, onoma=”Νικολάου”, vathmos=19 και
mathitis2, με τιμές των ιδιοτήτων του am=105, onoma=”Γεωργίου” και vathmos=9 (μον.2).
γ) Για το αντικείμενο mathitis1 να καλέσετε τη μέθοδο tipose() .
δ) Να υπολογίσετε και να εμφανίσετε τον μέσο όρο των βαθμών των δύο αντικειμένων .
Απαντηση
α. def tipose():
if self.vathmos >= 10:
print “Προάγεται”
else:
print “Παραπέμπτεται”
β. mathitis1 = Mathitis(103,”Νικολάου”,19)
mathitis2 = Mathitis(105,”Γεωργίου”,9)
γ. mathitis1.tipose()
δ. mo = (mathitis1.vathmos + mathitis2.vathmos)/2