Μάθημα : Προγραμματισμός Η/Υ

Κωδικός : T522234

T522234 - ΔΗΜΗΤΡΙΟΣ ΜΠΑΜΠΑΣ

Ενότητες μαθήματος

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

Ο Αντικειμενοστρεφής προγραμματισμός αλλάζει την εστίαση του προγραμματισμού από τις διαδικασίες στις έννοιες. Σε αυτές αναθέτει χαρακτηριστικά, τα οποία ονομάζουμε ιδιότητες (attributes), και τα οποία επεξεργάζεται μέσω ειδικών συναρτήσεων που ονομάζουμε μεθόδους. Οι ιδιότητες δεν είναι άλλες από τα σχετικά με το αντικείμενο δεδομένα, και οι μέθοδοι αποτελούν περιγραφές ενεργειών που αφορούν συγκεκριμένα σε αυτές τις ιδιότητες.
Ένα αντικείμενο στον αντικειμενοστρεφή προγραμματισμό είναι ένα αντικείμενο της πραγματικής ζωής που το περιγράφουμε με χρήση κώδικα. π.χ. ένα αυτοκίνητο
Τα χαρακτηριστικά (attributes) ενός αντικειμένου ονομάζονται και ιδιότητες (properties).
Οι ενέργειες που μπορεί να κάνει ένα αντικείμενο ονομάζονται μέθοδοι (methods).
Οι μέθοδοι επιτρέπουν στα αντικείμενα να κάνουν διάφορες ενέργειες, μέσω των οποίων, μπορούμε να ελέγχουμε τις ιδιότητες του αντικειμένου, όπως για παράδειγμα να ελέγχουμε την ταχύτητα του αυτοκινήτου.

Eνα αντικείμενο δημιουργείται από μια ειδική μέθοδο που στην αντικειμενοστρεφή ορολογία ονομάζεται κατασκευαστής (constructor). Η μέθοδος αυτή δεσμεύει μνήμη στον υπολογιστή.
H απόδοση αρχικών τιμών σε ιδιότητες ενός αντικειμένου που δημιουργείται, ονομάζεται αρχικοποίηση (initialization).
H μέθοδος η οποία να καταστρέφει τα αντικείμενα αυτά και να απελευθερώνει την αντίστοιχη μνήμη ονομάζεται αποδομητής (destructor).

Τα πρότυπα που συγκεντρώνουν τα κοινά στοιχεία άλλων αντικειμένων, έχουν ένα ειδικό όνομα και ονομάζονται κλάσεις (classes). Οι κλάσεις μας επιτρέπουν να γνωρίζουμε πράγματα για αντικείμενα που ακόμα δεν έχουν δημιουργηθεί.

Η κλάση γονέας (parent class) και οι υπο-κλάσεις (subclasses).
Οι υποκλάσεις (κλάσεις παιδιά) αυτόματα, έχουν τις ίδιες ιδιότητες και μεθόδους, χωρίς να είναι απαραίτητο να τις ορίσουμε ξανά. Αυτή, η μεταβίβαση ιδιοτήτων και μεθόδων ονομάζεται κληρονομικότητα (inheritance).
Σε κάθε υποκλάση ορίζονται οι ιδιότητες και οι μέθοδοι που δεν καλύπτονται από την πατρική κλάση.

Ορισμός κλάσης στην Python
Ο ορισμός μιας κλάσης γίνεται
class ΟΝΟΜΑ_ΚΛΑΣΗΣ:
           def_init_(ιδιότητες σαν παράμετροι):
                             self.idotita1=idiotita1
                             self.idotita2=idiotita2
                             ......................
                            self.idotitan=idiotitan
         def Μεθοδο1
          ...
        def ΜεθοδοΝ
τα αντικείμενα είναι συγκεκριμένες οντότητες που χαρακτηρίζονται από ιδιότητες και μπορούν να εκτελούν συγκεκριμένες ενέργειες.
Οι ενέργειες που μπορεί να κάνει ένα αντικείμενο ονομάζονται μέθοδοι και δεν είναι τίποτε άλλο παρά συναρτήσεις που ανήκουν σε ένα αντικείμενο

Παράδειγμα
class Foititis:
         def __init__(self, am, onoma, credit):
                self.am=am
                self.onoma=onoma
                self.credits=credit
       def perasa_mathima(self, p):
               self.credit+=p
               return self.credit
foititis1=Foititis('103','konstantinou', 0)
foititis1.perasa_mathima(5)

Παράδειγμα
class Kinito:
                    def __init__(self, marka, model,cpu_cores,cam_resolution):
                                    self.marka=marka
                                    self.model=model
                                    self.cpu_cores=cpu_cores
                                    self.cam_resolution=cam_resolution
                   def fortizi(self):
                                print "το κινητό φορτίζει"
phone1=Kinito('orange','S3',4,10)
phone1.fortizi()

Β1.
Δίνεται η παρακάτω κλάση:
class Student:
            def __init__(self, onoma, vath1, vath2):
                          self.onoma=onoma
                          self.vath1=vath1
                          self.vath2=vath2
όπου onoma είναι το όνομα του σπουδαστή, vath1 η βαθμολογία του στο πρώτο εξάμηνο και vath2 η βαθμολογία του στο δεύτερο εξάμηνο.
α) Να δημιουργήσετε τη μέθοδο με όνομα find_mo(), η οποία θα υπολογίζει και θα επιστρέφει τον μέσο όρο των vath1 και vath2 του σπουδαστή (μον. 4).
β) Να δημιουργήσετε δύο (2) στιγμιότυπα της κλάσης ως εξής: student1, με τιμές των ιδιοτήτων του onoma="Ιωάννου", vath1=7, vath2=6 και student2, με τιμές των ιδιοτήτων του onoma="Αναστασίου", vath1=10, vath2=9 (μον.2).
γ) Να βρείτε και να εμφανίσετε το όνομα του στιγμιοτύπου που έχει τον μεγαλύτερο μέσο όρο με χρήση της μεθόδου find_mo() που περιγράφεται στο ερώτημα α. Στην περίπτωση που και τα δύο (2) στιγμιότυπα έχουν τον ίδιο μέσο όρο, να εμφανίσετε και τα δύο (2) ονόματα των στιγμιοτύπων (μον. 6).

Μονάδες 12
(Ιούνιος 2023)

Λύση

α)

def find_mo(self):
         mo=(self.vath1+self.vath2)/2.0
         return mo
β)

student1=Student ("Ιωάννου", 7, 6 )
student2=Student("Αναστασίου", 10, 9)
γ)

if student1.find_mo()>student2.find_mo():
           print student1.onoma
elif student1.find_mo()<student2.find_mo():
          print student2.onoma
else:
           print student1.onoma, student2.onoma

B2.
Δίνεται η παρακάτω κλάση:
class Ergazomenos :
                         def __init__(self,onoma,epon,etos,misthos):
                                         self.onoma=onoma
                                         self.epon=epon
                                         self.etos=etos
                                         self.misthos=misthos
όπου onoma είναι το όνομα του εργαζομένου, epon είναι το επώνυμό του, etos το έτος γέννησής του και misthos ο μισθός του. Να γραφεί τμήμα προγράμματος σε Python που υλοποιεί τα παρακάτω:
α) Να δημιουργεί μία μέθοδο με όνομα afxisi(), η οποία θα αυξάνει το ν μισθό του εργαζ ομένου κατά 5% και θα εμφανίζει τον καινούριο μισθό με κατάλληλο μήνυμα (μον.8).
β) Να δημιουργεί δύο (2) στιγμιότυπα της κλάσης ως εξής:
erg1 με τιμές των ιδιοτήτων του onoma="Μαρίνα", epon="Παπαδοπούλου", etos=1985 και misthos=900 και
erg2 με τιμές των ιδιοτήτων του onoma="Γεώργιος", epon="Δημητρίου", etos=1990 και misthos=800 (μον. 4).
γ) Για το στιγμιότυπο erg2 να καλεί τη μέθοδο afxisi() (μον. 3).

Μονάδες 15
(Σεπτέμβριος 2022)

Λύση

α)

def afxisi(self):
     self.misthos+=self.misthos*5/100
     print self.misthos
     return self.misthos
β)

erg1=Ergazomenos("Μαρίνα", "Παπαδοπούλου", 1985, 900)
erg2=Ergazomenos("Γεώργιος","Δημητρίου", 1990, 800)
γ)

erg2.afxisi()

Παράδειγμα αντικειμενοστραφούς προγραμματισμού (κώδικας)

class Student:
             def __init__(self, onoma, vath1, vath2):
                      self.onoma=onoma
                      self.vath1=vath1
                      self.vath2=vath2
              def find_mo(self):
                      mo=(self.vath1+self.vath2)/2.0
                      return mo
print 'Spoydasti1 '
student1=Student (raw_input('onoma '),input('vath1 '), input('vath2 ' ))
print 'Spoydasti2 '
student2=Student (raw_input('onoma '),input('vath1 '), input('vath2 ' ))
if student1.find_mo()>student2.find_mo():
           print student1.onoma
elif student1.find_mo()<student2.find_mo():
           print student2.onoma
else:
           print student1.onoma, student2.onoma

Έγγραφα
oop2.pptx

Θέματα από πανελλαδικές 

1. Ένα αντικείμενο δημιουργείται από μία ειδική μέθοδο που ονομάζεται αποδομητής (destructor).
Λάθος
2. Η μεταβίβαση ιδιοτήτων και μεθόδων από κλάση σε υποκλάσεις ονομάζεται κληρονομικότητα.
Σωστό
3. Στον αντικειμενοστραφή προγραμματισμό τα χαρακτηριστικά (attributes) ενός αντικειμένου ονομάζονται και μέθοδοι.
Λάθος
4. Αποδομητής (destructor) ονομάζεται η μέθοδος η οποία καταστρέφει αντικείμενα και ελευθερώνει τη μνήμη. 
Σωστό
5. Ένα  αντικείμενο  δημιουργείται  από  μία  ειδική  μέθοδο  που  στην  αντικειμενοστρεφή  ορολογία  ονομάζεται  κατασκευαστής (constructor).
Σωστό
6. Η  σύνταξη  για  την  κλήση  μίας  μεθόδου  είναι  διαφορετική  από  τη  σύνταξη  για  την  κλήση  μίας  συνάρτησης.
Σωστό

A2.
Δίνεται η παρακάτω κλάση:
class Kinito:
           def __init__(self, marka, model):
                 self.marka=marka
                self.model=model
          def fortizi(self):
                print "το κινητό φορτίζει"
Με βάση την παραπάνω ορισμένη κλάση:
α) Ποιος είναι ο κατασκευαστής (constructor) της κλάσης. (μον. 2)
β) Να προσθέσετε την ιδιότητα cpu_cores που αντιπροσωπεύει το πλήθος των πυρήνων του επεξεργαστή (μον. 2) και την ιδιότητα cam_resolution που αντιπροσωπεύει την ανάλυση της κάμερας σε Mpixel ώστε να αρχικοποιούνται στον κατασκευαστή (μον. 2).
γ) Να δημιουργήσετε ένα στιγμιότυπο της κλάσης, δηλαδή ένα αντικείμενο με όνομα phone1 του οποίου οι τιμές των ιδιοτήτων του θα οριστούν κατά τη δημιουργία του ως εξής: marka = "orange", model = "S3", cpu_cores = 4, cam_resolution = 10. (μον. 4) 
Μονάδες 10
(2018-Ιούνιος)

α) Ο κατασκευαστής της κλάσης είναι η ειδική μέθοδος def __init__(self,marka,model)
β)
class Kinito:
def __init__(self, marka, model,cpu_cores,cam_resolution):
                    self.marka=marka
                    self.model=model
                    self.cpu_cores=cpu_cores
                    self.cam_resolution=cam_resolution
        def fortizi(self):
print "το κινητό φορτίζει"
 
γ)
phone1=Kinito('orange','S3',4,10)
phone1.fortizi()
 
Β1.
∆ίνεται η παρακάτω κλάση:
class Foititis:
             def __init__(self, am, onoma, credits):
                   self.am=am
                   self.onoma=onoma
                   self.credits=credits
όπου am είναι ο αριθμός μητρώου του φοιτητή, onoma το όνομά του και credits ο αριθμός των πιστωτικών μονάδων του.
α) Να αναφέρετε μία ιδιότητα της κλάσης. (μον. 1)
β) Να δημιουργήσετε τη μέθοδο με όνομα perasa_mathima η οποία θα δέχεται παράμετρο p και θα αυξάνει κατά p τα credits του αντικειμένου. (μον. 4) 
γ) Να δημιουργήσετε ένα στιγμιότυπο της κλάσης, δηλαδή ένα αντικείμενο με όνομα foititis1 του οποίου οι τιμές των ιδιοτήτων του θα οριστούν κατά τη δημιουργία του ως εξής: am=103, onoma= “Κωνσταντίνου”, credits=0. (μον. 2)
δ) Για το παραπάνω αντικείμενο να καλέσετε τη μέθοδο perasa_mathima, δίνοντας ως παράμετρο τον αριθμό 5.
(μον. 2)
Μονάδες 9
(2019-Ιούνιος)
 
α) am ή onoma ή credits
β)
def perasa_mathima (self, p):
         self.credits+=p
         return self.credits
γ) foititis1=Foititis(103,“Κωνσταντίνου”,0)
δ) foitits1.perasa_mathima(5)
 
B2.
Δίνεται η παρακάτω κλάση:
class Mathitis:
               def __init__(self,am,onoma,vathmos):
                     self.am=am
                     self.onoma=onoma
                     self.vathmos=vathmos
όπου am είναι ο αριθμός μητρώου του μαθητή, onoma το όνομά του και vathmos ο βαθμός του.
α) Να δημιουργήσετε τη μέθοδο με όνομα tipose() η οποία θα ελέγχει τον βαθμό του αντικειμένου και, αν αυτός είναι μεγαλύτερος ή ίσος του 10, να εμφανίζει το μήνυμα “Προάγεται”, αλλιώς να εμφανίζει το μήνυμα “Παραπέμπεται” (μον.4).
β) Να δημιουργήσετε δύο αντικείμενα της κλάσης ως εξής: mathitis1, με τιμές των ιδιοτήτων του am=103, onoma=”Νικολάου”, vathmos=19 και mathitis2, με τιμές των ιδιοτήτων του am=105, onoma=”Γεωργίου” και vathmos=9 (μον.2).
γ) Για το αντικείμενο mathitis1 να καλέσετε τη μέθοδο tipose() (μον.2).
δ) Να υπολογίσετε και να εμφανίσετε τον μέσο όρο των βαθμών των δύο αντικειμένων (μον.3).
Μονάδες 11
(2022-Ιούνιος)
 
α)
def tipose(self):
       if self.vathmos>=10 :
                   print 'proagetai'
       else:
                   print 'parapempetai'
β)
    mathitis1=Mathitis(103, ”Νικολάου”, 19)
   mathitis2=Mathitis (105, ”Γεωργίου”,9)
γ) mathitis1.tipose()
δ)
   mesos_oros=(mathitis1.vathmos+mathitis2.vathmos)/2.0
   print mesos_oros