Προηγούμενος έλεγχος και από τις δύο πλευρές
Προηγούμενη αναθεώρηση
Επόμενη αναθεώρηση
|
Προηγούμενη αναθεώρηση
|
oopython [2010/07/28 09:48] chiossif |
oopython [2023/02/08 12:09] (τρέχουσα) chiossif [1ο Παράδειγμα] |
===== Αντικειμενοστραφής προγραμματισμός σε Python ===== | ===== Αντικειμενοστραφής προγραμματισμός σε Python ===== |
| |
=== Εισαγωγή === | ==== Εισαγωγή ==== |
| |
Η python είναι μια γλώσσα αντικειμενοστραφούς προγραμματισμού. Αντικειμενοστραφής προγραμματισμός είναι ο προγραμματισμός με την χρήση τάξεων - κατηγοριών - κλάσεων και των εμφανίσεών τους των αντικειμένων. Η ιστορική αναδρομή η οποία ακολουθεί βοηθάει στην κατανόηση αυτών των όρων (αν οι όροι σας είναι οικείοι προχωρήστε στα παραδείγματα εκμάθησης). | Η python είναι μια γλώσσα αντικειμενοστραφούς προγραμματισμού. Αντικειμενοστραφής προγραμματισμός είναι ο προγραμματισμός με την χρήση τάξεων - κατηγοριών - κλάσεων και των εμφανίσεών τους των αντικειμένων. Η ιστορική αναδρομή η οποία ακολουθεί βοηθάει στην κατανόηση αυτών των όρων (αν οι όροι σας είναι οικείοι προχωρήστε στα παραδείγματα εκμάθησης). |
| |
=== Ιστορική αναδρομή στις μεθόδους προγραμματισμού === | ==== Ιστορική αναδρομή στις μεθόδους προγραμματισμού ==== |
| |
Στην αρχή (έως την δεκαετία του 1960) κυριαρχούσε ο γραμμικός τρόπος προγραμματισμού (http://en.wikipedia.org/wiki/Spaghetti_code). Οι προγραμματιστές έγραφαν τις εντολές τους στην σειρά και όποτε χρειαζόταν μια διακλάδωση τότε χρησιμοποιούσαν την εντολή GOTO. Ο κώδικας ήταν συμπαγής εξαιρετικά γρήγορος αλλά είχε τεράστια μεινονεκτήματα ιδίως στην δυνατότητα διαχείρησης, συντήρησης και εκσφαλμάτωσης του. Κύριες γλώσσες γραμμικού προγραμματισμού είναι η Assebly και άλλες γλώσσες της εποχής όπως η Basic και η Fortran V. | Στην αρχή (έως την δεκαετία του 1960) κυριαρχούσε ο γραμμικός τρόπος προγραμματισμού ( http://en.wikipedia.org/wiki/Spaghetti_code ). Οι προγραμματιστές έγραφαν τις εντολές τους στην σειρά και όποτε χρειαζόταν μια διακλάδωση τότε χρησιμοποιούσαν την εντολή GOTO. Ο κώδικας ήταν συμπαγής εξαιρετικά γρήγορος αλλά είχε τεράστια μειονεκτήματα ιδίως στην δυνατότητα διαχείρισης, συντήρησης και εκσφαλμάτωσης του. Κύριες γλώσσες γραμμικού προγραμματισμού είναι η Assembly και άλλες γλώσσες της εποχής όπως η Basic και η Fortran V. |
| |
Την δεκαετία του 1970 επικράτησε ο δομημένος προγραμματισμός (http://en.wikipedia.org/wiki/Structured_programming) ο οποίος κατήργησε την χρήση του GOTO. Αυτό επετεύχθει με την δημιουργία των προγραμματιστικών μονάδων δηλαδή των δομών και των υποπρογραμμάτων. Κάθε φορά που απαιτείται μια πρόσθετη εργασία αντί της διακλάδωσης επιλέγεται η χρήση μιας ομάδας εντολών σαφώς διακριτών από τις υπόλοιπες. Αυτές οι ομάδες είτε είναι τμήματα εντολών ελέγχου ή επανάληψης είτε είναι υποπρογράμματα. Περιέχουν δε οποιοδήποτε πλήθος ή συνδυασμό άλλων εντολών. Γλώσσες δομημένου προγραμματισμού οι οποίες παραμένουν έως σήμερα είναι η C και η Pascal. | Την δεκαετία του 1970 επικράτησε ο δομημένος προγραμματισμός ( http://en.wikipedia.org/wiki/Structured_programming ) ο οποίος κατάργησε την χρήση του GOTO. Αυτό επετεύχθη με την δημιουργία των προγραμματιστικών μονάδων δηλαδή των δομών και των υποπρογραμμάτων. Κάθε φορά που απαιτείται μια πρόσθετη εργασία αντί της διακλάδωσης επιλέγεται η χρήση μιας ομάδας εντολών σαφώς διακριτών από τις υπόλοιπες. Αυτές οι ομάδες είτε είναι τμήματα εντολών ελέγχου ή επανάληψης είτε είναι υποπρογράμματα. Περιέχουν δε οποιοδήποτε πλήθος ή συνδυασμό άλλων εντολών. Γλώσσες δομημένου προγραμματισμού οι οποίες παραμένουν έως σήμερα είναι η C και η Pascal. |
| |
Τέλος από την δεκαετία του 1990 και μετά άρχισε να κυριαρχεί ο αντικειμενοστραφής προγραμματισμός (http://en.wikipedia.org/wiki/Object-oriented_programming). Τώρα οι "ομάδες" του δομημένου ονομάστηκαν κατηγορίες-τάξεις-κλάσεις και εκτός από εντολές (αλγόριθμους) περιέχουν και μεταβλητές (δεδομένα). Στο πλαίσιο λειτουργιών ενός αντικειμένου (ή καλύτερα μιας κατηγορίας) συμπεριλαμβάνονται τόσο οι μέθοδοι (αλγόριθμοι) που το αφορούν με την μορφή υποπρογραμμάτων όσο και τα δεδομένα (μεταβλητές) που το περιγράφουν. Κάθε αντικείμενο είναι η στιγμιαία έκφραση μιας κατηγορίας και περιλαμβάνει το δικά του χαρακτηριστικά στις μεταβλητές της κατηγορίας του και δικαίωμα χρήσης των υποπρογραμμάτων-μεθόδων της. Σήμερα κύριες γλώσσες αντικειμενοστραφούς προγραμματισμού είναι η C++, η Python και η Java. | Τέλος από την δεκαετία του 1990 και μετά άρχισε να κυριαρχεί ο αντικειμενοστραφής προγραμματισμός ( http://en.wikipedia.org/wiki/Object-oriented_programming ). Τώρα οι "ομάδες" του δομημένου ονομάστηκαν κατηγορίες-τάξεις-κλάσεις και εκτός από εντολές (αλγόριθμους) περιέχουν και μεταβλητές (δεδομένα). Στο πλαίσιο λειτουργιών ενός αντικειμένου (ή καλύτερα μιας κατηγορίας) συμπεριλαμβάνονται τόσο οι μέθοδοι (αλγόριθμοι) που το αφορούν με την μορφή υποπρογραμμάτων όσο και τα δεδομένα (μεταβλητές) που το περιγράφουν. Κάθε αντικείμενο είναι η στιγμιαία έκφραση μιας κατηγορίας και περιλαμβάνει το δικά του χαρακτηριστικά στις μεταβλητές της κατηγορίας του και δικαίωμα χρήσης των υποπρογραμμάτων-μεθόδων της. Σήμερα κύριες γλώσσες αντικειμενοστραφούς προγραμματισμού είναι η C++, η Python και η Java. |
| |
=== 1ο Παράδειγμα αντικειμενοστραφούς προγραμματισμού με Python === | ==== 1ο Παράδειγμα ==== |
| |
== Ορισμός κατηγοριών με χαρακτηριστικά και μεθόδους. Δήλωση αντικειμένων και χρήση τους. == | == Ορισμός κατηγοριών με χαρακτηριστικά και μεθόδους. Δήλωση αντικειμένων και χρήση τους. == |
# -*- coding: UTF-8 -*- | # -*- coding: UTF-8 -*- |
#Filename: cycle.py - 1ο/3 μέρη - 1η έκδοση | #Filename: cycle.py - 1ο/3 μέρη - 1η έκδοση |
| |
| from math import pi # θα το χρειαστούμε στον υπολογισμό περιμέτρου |
| |
class cycle: | class cycle: |
'''Αυτή είναι η κατηγορία του κύκλου''' | '''Αυτή είναι η κατηγορία του κύκλου''' |
def Περίμετρος(self): | def Περίμετρος(self): |
return self.rad*2*pi | return self.rad*2*pi |
| |
Αλφα=Κύκλος(5); | Αλφα=Κύκλος(5); |
print('Η ακτίνα του κύκλου είναι:', Αλφα.Ακτίνα()) | print('Η ακτίνα του κύκλου είναι:', Αλφα.Ακτίνα()) |
print('Η περίμετρος του κύκλου είναι:', Βήτα.Περίμετρος()) | print('Η περίμετρος του κύκλου είναι:', Βήτα.Περίμετρος()) |
| |
=== 2ο Παράδειγμα αντικειμενοστραφούς προγραμματισμού με Python === | ==== 2ο Παράδειγμα ==== |
| |
== Κληρονομικότητα και Πολυμορφισμός == | == Κληρονομικότητα και Πολυμορφισμός == |
# -*- coding: UTF-8 -*- | # -*- coding: UTF-8 -*- |
#Filename: Σχολές.py - Έκδοση με Ελληνικά ! | #Filename: Σχολές.py - Έκδοση με Ελληνικά ! |
| |
class Ίδρυμα: | class Ίδρυμα: |
'''Αυτή είναι η κατηγορία ιδρύματος ανώτατης εκπαίδευσης''' | '''Αυτή είναι η κατηγορία ιδρύματος ανώτατης εκπαίδευσης''' |
self.τίτλος=Όνομα | self.τίτλος=Όνομα |
print('Αρχικοποιήθηκε το ίδρυμα :',self.τίτλος) | print('Αρχικοποιήθηκε το ίδρυμα :',self.τίτλος) |
| |
def Όνομα(self): | def Όνομα(self): |
return self.τίτλος | return self.τίτλος |
| |
def Τίτλος(self): # Ίδια με την προηγούμενη αλλά ορατή από την κατηγορία Σχολή | def Τίτλος(self): # Ίδια με την προηγούμενη αλλά ορατή από την κατηγορία Σχολή |
return self.τίτλος | return self.τίτλος |
def Είδος(self): | def Είδος(self): |
return self.είδος | return self.είδος |
| |
class Σχολή(Ίδρυμα): # ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ: Η κατηγορία Σχολή είναι θυγατρική της κατηγορίας Ίδρυμα | class Σχολή(Ίδρυμα): # ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ: Η κατηγορία Σχολή είναι θυγατρική της κατηγορίας Ίδρυμα |
'''Αυτή είναι η κατηγορία σχολής ενός ιδρύματος ανώτατης εκπαίδευσης''' | '''Αυτή είναι η κατηγορία σχολής ενός ιδρύματος ανώτατης εκπαίδευσης''' |
self.τίτλος=ίδρυμα.τίτλος | self.τίτλος=ίδρυμα.τίτλος |
print('Αρχικοποιήθηκε η σχολή :',self.όνομα, 'του ιδρύματος',self.τίτλος) | print('Αρχικοποιήθηκε η σχολή :',self.όνομα, 'του ιδρύματος',self.τίτλος) |
| |
def Όνομα(self): # ΠΟΛΥΜΟΡΦΙΣΜΟΣ: Μέθοδος με ίδιο όνομα με αυτό μητρικής κατηγορίας | def Όνομα(self): # ΠΟΛΥΜΟΡΦΙΣΜΟΣ: Μέθοδος με ίδιο όνομα με αυτό μητρικής κατηγορίας |
return self.όνομα | return self.όνομα |
def Επίπεδο(self): | def Επίπεδο(self): |
return self.επίπεδο | return self.επίπεδο |
| |
ΕΜΠ=Ίδρυμα('ΕΘνικόν Μετσόβιον Πολυτεχνείον') | ΕΜΠ=Ίδρυμα('ΕΘνικόν Μετσόβιον Πολυτεχνείον') |
ΕΜΠ.Βάλε_Είδος('Α.Ε.Ι.') | ΕΜΠ.Βάλε_Είδος('Α.Ε.Ι.') |
print('Το ίδρυμα', ΕΜΠ.Όνομα(),' είναι : ', ΕΜΠ.Είδος()) | print('Το ίδρυμα', ΕΜΠ.Όνομα(),' είναι : ', ΕΜΠ.Είδος()) |
| |
ΣΑΤΜ=Σχολή('Αγρονόμων και Τοπογράφων Μηχανικών',ΕΜΠ) | ΣΑΤΜ=Σχολή('Αγρονόμων και Τοπογράφων Μηχανικών',ΕΜΠ) |
ΣΑΤΜ.Βάλε_Επίπεδο() | ΣΑΤΜ.Βάλε_Επίπεδο() |
print('Η σχολή ', ΣΑΤΜ.Όνομα(), 'του', ΣΑΤΜ.Τίτλος(), 'είναι επιπέδου : ', ΣΑΤΜ.Επίπεδο()) | print('Η σχολή ', ΣΑΤΜ.Όνομα(), 'του', ΣΑΤΜ.Τίτλος(), 'είναι επιπέδου : ', ΣΑΤΜ.Επίπεδο()) |
| |
ΣΗΜΜΗΥ=Σχολή('Ηλεκτρολόγων Μηχανικών και Μηχανικών Ηλεκτρονικών Υπολογιστών',ΕΜΠ) | ΣΗΜΜΗΥ=Σχολή('Ηλεκτρολόγων Μηχανικών και Μηχανικών Ηλεκτρονικών Υπολογιστών',ΕΜΠ) |
ΣΗΜΜΗΥ.Βάλε_Επίπεδο("Masters++ :-) ") | ΣΗΜΜΗΥ.Βάλε_Επίπεδο("Masters++ :-) ") |
print('Η σχολή ', ΣΗΜΜΗΥ.Όνομα(), 'του', ΣΗΜΜΗΥ.Τίτλος(), 'είναι επιπέδου : ', ΣΗΜΜΗΥ.Επίπεδο()) | print('Η σχολή ', ΣΗΜΜΗΥ.Όνομα(), 'του', ΣΗΜΜΗΥ.Τίτλος(), 'είναι επιπέδου : ', ΣΗΜΜΗΥ.Επίπεδο()) |
| |
if ΣΗΜΜΗΥ.Τίτλος() == ΣΑΤΜ.Τίτλος(): | if ΣΗΜΜΗΥ.Τίτλος() == ΣΑΤΜ.Τίτλος(): |
print('Η σχολή ', ΣΑΤΜ.Όνομα(), 'και η σχολή ',ΣΗΜΜΗΥ.Όνομα(), 'είναι στο ',ΣΗΜΜΗΥ.Τίτλος()) | print('Η σχολή ', ΣΑΤΜ.Όνομα(), 'και η σχολή ',ΣΗΜΜΗΥ.Όνομα(), 'είναι στο ',ΣΗΜΜΗΥ.Τίτλος()) |
| |
print('Η σχολή ', ΣΑΤΜ.Όνομα(), 'και η σχολή ',ΣΗΜΜΗΥ.Όνομα()) | print('Η σχολή ', ΣΑΤΜ.Όνομα(), 'και η σχολή ',ΣΗΜΜΗΥ.Όνομα()) |
if ΣΗΜΜΗΥ.Επίπεδο() != ΣΑΤΜ.Επίπεδο(): | if ΣΗΜΜΗΥ.Επίπεδο() != ΣΑΤΜ.Επίπεδο(): |
print (' ΔΕΝ ') | print (' ΔΕΝ ') |
print (' έχουν το ίδιο επίπεδο σπουδών.') | print (' έχουν το ίδιο επίπεδο σπουδών.') |
| |
print('Η σχολή ') | print('Η σχολή ') |
if ΣΗΜΜΗΥ.Επίπεδο() > ΣΑΤΜ.Επίπεδο(): | if ΣΗΜΜΗΥ.Επίπεδο() > ΣΑΤΜ.Επίπεδο(): |
Μελετήστε προσεκτικά το παράδειγμα αυτό και σχολιάστε μόν-οι/ες σας τις έννοιες της κληρονομικότητας και του πολυμορφισμού. | Μελετήστε προσεκτικά το παράδειγμα αυτό και σχολιάστε μόν-οι/ες σας τις έννοιες της κληρονομικότητας και του πολυμορφισμού. |
| |
Καλό κώδικα με Python. | Καλό αντικειμενοστραφή κώδικα με Python. |