Εδώ βλέπετε τις διαφορές μεταξύ της επιλεγμένης έκδοσης και της τρέχουσας έκδοσης της σελίδας.
Προηγούμενος έλεγχος και από τις δύο πλευρές Προηγούμενη αναθεώρηση | Επόμενη αναθεώρηση Επόμενος έλεγχος και από τις δύο πλευρές | ||
oopython [2021/01/26 03:08] 62.210.151.70 παλαιότερη έκδοση επαναφέρθηκε (2010/08/01 15:09) |
oopython [2021/01/30 13:59] 62.210.151.70 παλαιότερη έκδοση επαναφέρθηκε (2010/08/01 11:33) |
||
---|---|---|---|
Γραμμή 1: | Γραμμή 1: | ||
+ | ===== Αντικειμενοστραφής προγραμματισμός σε Python | ||
+ | ==== Εισαγωγή ==== | ||
+ | |||
+ | Η python είναι μια γλώσσα αντικειμενοστραφούς προγραμματισμού. Αντικειμενοστραφής προγραμματισμός είναι ο προγραμματισμός με την χρήση τάξεων - κατηγοριών - κλάσεων και των εμφανίσεών τους των αντικειμένων. Η ιστορική αναδρομή η οποία ακολουθεί βοηθάει στην κατανόηση αυτών των όρων (αν οι όροι σας είναι οικείοι προχωρήστε στα παραδείγματα εκμάθησης). | ||
+ | |||
+ | ==== Ιστορική αναδρομή στις μεθόδους προγραμματισμού ==== | ||
+ | |||
+ | Στην αρχή (έως την δεκαετία του 1960) κυριαρχούσε ο γραμμικός τρόπος προγραμματισμού ( http:// | ||
+ | |||
+ | Την δεκαετία του 1970 επικράτησε ο δομημένος προγραμματισμός ( http:// | ||
+ | |||
+ | Τέλος από την δεκαετία του 1990 και μετά άρχισε να κυριαρχεί ο αντικειμενοστραφής προγραμματισμός ( http:// | ||
+ | |||
+ | ==== 1ο Παράδειγμα | ||
+ | |||
+ | == Ορισμός κατηγοριών με χαρακτηριστικά και μεθόδους. Δήλωση αντικειμένων και χρήση τους. == | ||
+ | |||
+ | Έστω ότι έχουμε να δουλέψουμε με κύκλους. Για να δούμε ένα παράδειγμα: | ||
+ | |||
+ | # | ||
+ | # -*- coding: UTF-8 -*- | ||
+ | #Filename: cycle.py - 1ο/3 μέρη - 1η έκδοση | ||
+ | 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. |