Εδώ βλέπετε τις διαφορές μεταξύ της επιλεγμένης έκδοσης και της τρέχουσας έκδοσης της σελίδας.
| Προηγούμενος έλεγχος και από τις δύο πλευρές Προηγούμενη αναθεώρηση Επόμενη αναθεώρηση | Προηγούμενη αναθεώρηση | ||
|
oopython [2020/11/21 09:52] 127.0.0.1 εξωτερική τροποποίηση |
oopython [2023/02/08 12:09] (τρέχουσα) chiossif [1ο Παράδειγμα] |
||
|---|---|---|---|
| Γραμμή 1: | Γραμμή 1: | ||
| + | ===== Αντικειμενοστραφής προγραμματισμός σε Python | ||
| + | ==== Εισαγωγή ==== | ||
| + | |||
| + | Η python είναι μια γλώσσα αντικειμενοστραφούς προγραμματισμού. Αντικειμενοστραφής προγραμματισμός είναι ο προγραμματισμός με την χρήση τάξεων - κατηγοριών - κλάσεων και των εμφανίσεών τους των αντικειμένων. Η ιστορική αναδρομή η οποία ακολουθεί βοηθάει στην κατανόηση αυτών των όρων (αν οι όροι σας είναι οικείοι προχωρήστε στα παραδείγματα εκμάθησης). | ||
| + | |||
| + | ==== Ιστορική αναδρομή στις μεθόδους προγραμματισμού ==== | ||
| + | |||
| + | Στην αρχή (έως την δεκαετία του 1960) κυριαρχούσε ο γραμμικός τρόπος προγραμματισμού ( http:// | ||
| + | |||
| + | Την δεκαετία του 1970 επικράτησε ο δομημένος προγραμματισμός ( http:// | ||
| + | |||
| + | Τέλος από την δεκαετία του 1990 και μετά άρχισε να κυριαρχεί ο αντικειμενοστραφής προγραμματισμός ( http:// | ||
| + | |||
| + | ==== 1ο Παράδειγμα | ||
| + | |||
| + | == Ορισμός κατηγοριών με χαρακτηριστικά και μεθόδους. Δήλωση αντικειμένων και χρήση τους. == | ||
| + | |||
| + | Έστω ότι έχουμε να δουλέψουμε με κύκλους. Για να δούμε ένα παράδειγμα: | ||
| + | |||
| + | # | ||
| + | # -*- coding: UTF-8 -*- | ||
| + | #Filename: cycle.py - 1ο/3 μέρη - 1η έκδοση | ||
| + | | ||
| + | from math import pi # θα το χρειαστούμε στον υπολογισμό περιμέτρου | ||
| + | | ||
| + | class cycle: | ||
| + | ''' | ||
| + | def __init__(self, | ||
| + | self.rad=r | ||
| + | print(' | ||
| + | |||
| + | def perimeter(self): | ||
| + | return self.rad*2*pi | ||
| + | |||
| + | Με την εντολή class ορίζουμε την νέα κατηγορία αντικειμένων cycle. | ||
| + | Το υποπρόγραμμα __init__ (Προσοχή! Δεσμευμένο όνομα) είναι το υποπρόγραμμα το οποίο εκτελείται με ΚΑΘΕ δήλωση ενός αντικειμένου κύκλου. self είναι ΠΑΝΤΑ το πρώτο όρισμα και αντιπροσωπεύει το κάθε αντικείμενο. Η διαδικασία αυτή ορίζει την ακτίνα ενός κύκλου rad ενώ αν δεν υπάρχει τιμή βάζει 1. | ||
| + | Το υποπρόγραμμα perimeter υπολογίζει και επιστρέφει την περίμετρο ενός κύκλου. | ||
| + | |||
| + | Για να δούμε και 2-3 εντολές χρήσης: | ||
| + | |||
| + | #Filename: cycle.py - 2ο/3 μέρη - 1η έκδοση | ||
| + | a=cycle(5); | ||
| + | print(' | ||
| + | print(' | ||
| + | |||
| + | Εδώ ορίζουμε τον κύκλο a με ακτίνα 5. | ||
| + | Εμφανίζουμε στην οθόνη την ακτίνα και την περίμετρό του. | ||
| + | |||
| + | #Filename: cycle.py - 3ο/3 μέρη - 1η έκδοση | ||
| + | b=cycle(); | ||
| + | print(' | ||
| + | print(' | ||
| + | |||
| + | Εδώ ορίζουμε τον κύκλο a χωρίς ρύθμιση της ακτίνας και άρα θα πάρει την τιμή 1. | ||
| + | Εμφανίζουμε στην οθόνη την ακτίνα και την περίμετρό και αυτού του κύκλου. | ||
| + | |||
| + | Παρατήρηση: | ||
| + | Παρατηρούμε ότι η αναφορά στο χαρακτηριστικό rad του αντικειμένου a της κατηγορίας cycle γίνεται με την χρήση του b.rad ενώ για την μέθοδο perimeter χρησιμοποιείται η b.perimeter() (με παρενθέσεις). Επειδή αφενός η δήλωση των χαρακτηριστικών δεν είναι τόσο εμφανής όπως των μεθόδων και αφετέρου δεν είναι εύκολο να θυμόμαστε πάντα αν το στοιχείο rad ή perimeter είναι χαρακτηριστικό ή μέθοδος και άρα θέλει ή δεν θέλει παρένθεση μια καλή πρακτική είναι η εξής: | ||
| + | για όλα τα χαρακτηριστικά τα οποία θέλουμε να είναι διαθέσιμα κατά την χρήση των αντικειμένων που τα περιέχουν φτιάχνουμε ανάλογες μεθόδους απόδοσης ή λήψης τιμής. | ||
| + | Το παραπάνω παράδειγμα μετά και τον εξελληνισμό των αναγνωριστικών του παίρνει την ακόλουθη μορφή: | ||
| + | |||
| + | # | ||
| + | # -*- coding: UTF-8 -*- | ||
| + | #Filename: cycle.py - 1ο/1 μέρη - 2η έκδοση με Ελληνικά ! | ||
| + | from math import pi | ||
| + | class Κύκλος: | ||
| + | ''' | ||
| + | def __init__(self, | ||
| + | self.rad=ρ | ||
| + | print(' | ||
| + | |||
| + | def Βάλε_Ακτίνα(self, | ||
| + | self.rad=ρ | ||
| + | print(' | ||
| + | |||
| + | def Ακτίνα(self): | ||
| + | return self.rad | ||
| + | |||
| + | def Περίμετρος(self): | ||
| + | return self.rad*2*pi | ||
| + | | ||
| + | Αλφα=Κύκλος(5); | ||
| + | print(' | ||
| + | print(' | ||
| + | Βήτα=Κύκλος(); | ||
| + | Βήτα.Βάλε_Ακτίνα(3); | ||
| + | print(' | ||
| + | print(' | ||
| + | |||
| + | ==== 2ο Παράδειγμα | ||
| + | |||
| + | == Κληρονομικότητα και Πολυμορφισμός == | ||
| + | |||
| + | # | ||
| + | # -*- coding: UTF-8 -*- | ||
| + | #Filename: Σχολές.py - Έκδοση με Ελληνικά ! | ||
| + | | ||
| + | class Ίδρυμα: | ||
| + | ''' | ||
| + | def __init__(self, | ||
| + | self.τίτλος=Όνομα | ||
| + | print(' | ||
| + | | ||
| + | def Όνομα(self): | ||
| + | return self.τίτλος | ||
| + | | ||
| + | def Τίτλος(self): | ||
| + | return self.τίτλος | ||
| + | |||
| + | def Βάλε_Είδος(self, | ||
| + | self.είδος=Είδος; | ||
| + | print(' | ||
| + | |||
| + | def Είδος(self): | ||
| + | return self.είδος | ||
| + | | ||
| + | class Σχολή(Ίδρυμα): | ||
| + | ''' | ||
| + | def __init__(self, | ||
| + | self.όνομα=Όνομα | ||
| + | self.τίτλος=ίδρυμα.τίτλος | ||
| + | print(' | ||
| + | | ||
| + | def Όνομα(self): | ||
| + | return self.όνομα | ||
| + | |||
| + | def Βάλε_Επίπεδο(self, | ||
| + | self.επίπεδο=Επίπεδο; | ||
| + | print(' | ||
| + | |||
| + | def Επίπεδο(self): | ||
| + | return self.επίπεδο | ||
| + | | ||
| + | ΕΜΠ=Ίδρυμα(' | ||
| + | ΕΜΠ.Βάλε_Είδος(' | ||
| + | print(' | ||
| + | | ||
| + | ΣΑΤΜ=Σχολή(' | ||
| + | ΣΑΤΜ.Βάλε_Επίπεδο() | ||
| + | print(' | ||
| + | | ||
| + | ΣΗΜΜΗΥ=Σχολή(' | ||
| + | ΣΗΜΜΗΥ.Βάλε_Επίπεδο(" | ||
| + | print(' | ||
| + | | ||
| + | if ΣΗΜΜΗΥ.Τίτλος() == ΣΑΤΜ.Τίτλος(): | ||
| + | print(' | ||
| + | | ||
| + | print(' | ||
| + | if ΣΗΜΜΗΥ.Επίπεδο() != ΣΑΤΜ.Επίπεδο(): | ||
| + | print (' ΔΕΝ ') | ||
| + | print (' έχουν το ίδιο επίπεδο σπουδών.' | ||
| + | | ||
| + | print(' | ||
| + | if ΣΗΜΜΗΥ.Επίπεδο() > ΣΑΤΜ.Επίπεδο(): | ||
| + | print(ΣΗΜΜΗΥ.Όνομα()) | ||
| + | elif ΣΗΜΜΗΥ.Επίπεδο() < ΣΑΤΜ.Επίπεδο(): | ||
| + | print(ΣATM.Όνομα()) | ||
| + | print(' | ||
| + | |||
| + | Μελετήστε προσεκτικά το παράδειγμα αυτό και σχολιάστε μόν-οι/ | ||
| + | |||
| + | Καλό αντικειμενοστραφή κώδικα με Python. | ||