Κλάσεις στην Python. Δημιουργία κλάσεων

Σχετικά έγγραφα
Κλάσεις στην Python. Δημιουργία κλάσεων

Εισαγωγή στα Αντικείμενα

Αντικειμενοστρεφής προγραμματισμός Object Oriented Programming (OOP) Σπάχος Κυριάκος Καθηγητής Πληροφορικής ΠΕ19

Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java

Γραφικά υπολογιστών Εργαστήριο 9 Κλάσεις στην Python. Σκοπός της 9ης άσκησης είναι να μάθουμε αντικειμενοστρεφή προγραμματισμό στην Python.

Εισαγωγή στους Υπολογιστές

ΑΠΛΗ ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ

Κλάσεις. Τροποποιητές, ιασυνδέσεις, Πακέτα. Τροποποιητές ελέγχου προσπέλασης µεταβλητών και µεθόδων

ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ (ΟΜΑΔΑ Α ) ΚΑΙ ΜΑΘΗΜΑΤΩΝ ΕΙΔΙΚΟΤΗΤΑΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ (ΟΜΑΔΑ Α ΚΑΙ Β ) ΤΕΤΑΡΤΗ 20 ΙΟΥΝΙΟΥ 2018

ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ: ΕΞΙ (6)

Οντοκεντρικός Προγραμματισμός

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 9 : ΑΦΗΡΗΜΕΝΕΣ ΚΛΑΣΕΙΣ

Σημειώσεις του εργαστηριακού μαθήματος Πληροφορική ΙΙ. Εισαγωγή στην γλώσσα προγραμματισμού

Υπερφόρτωση Μεθόδων και Πέρασμα Ορισμάτων

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

Εισαγωγή στους Υπολογιστές

«ΕΙΔΙΚΑ ΘΕΜΑΣΑ ΣΟΝ ΠΡΟΓΡΑΜΜΑΣΙΜΟ ΤΠΟΛΟΓΙΣΩΝ» Κεφάλαιο 4: Αντικειμενοςτρεφήσ Προγραμματιςμόσ

2.1 Αντικειµενοστρεφής προγραµµατισµός

Θεωρία Πληροφορίας - Κώδικες. Γιαννακόπουλος Θεόδωρος

Κλάσεις και αντικείμενα #include <iostream.h<

Τυπικός ορισμός και επίλυση προβλημάτων με την χρήση του search.py (Ιεραπόστολοι & Κανίβαλοι) Γαρμπής Γιώργος

ΟΜΟΣΠΟΝΔΙΑ ΕΚΠΑΙΔΕΥΤΙΚΩΝ ΦΡΟΝΤΙΣΤΩΝ ΕΛΛΑΔΟΣ (Ο.Ε.Φ.Ε.) ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ 2019 Β ΦΑΣΗ

ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΛ ΤΡΙΤΗ 11 ΙΟΥΝΙΟΥ 2019 ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ

1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι

Αρχές Τεχνολογίας Λογισμικού Εργαστήριο

Γλωσσική Τεχνολογία. Object-Orientation in Python

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #13

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 6/5/2006

Εισαγωγή στον Προγραμματισμό Python Μάθημα 4: Συναρτήσεις (functions) και δομοστοιχεία (modules) στην Python

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

ΑΝΑΛΥΣΗ ΑΠΑΙΤΗΣΕΩΝ ανάλυση απαιτήσεων Σε αυτό το μάθημα θα ασχοληθούμε με : Δημιουργία μοντέλων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

ΟΜΟΣΠΟΝΔΙΑ ΕΚΠΑΙΔΕΥΤΙΚΩΝ ΦΡΟΝΤΙΣΤΩΝ ΕΛΛΑΔΟΣ (Ο.Ε.Φ.Ε.) ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ 2018 Β ΦΑΣΗ

ΥΠΟΛΟΓΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ ΓΙΑ ΣΥΣΤΗΜΑΤΑ ΜΕΤΑΔΟΣΗΣ ΠΛΗΡΟΦΟΡΙΑΣ

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

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Κλάσεις και Αντικείµενα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008

ΣΥΝΟΛΟ ΣΕΛΙ ΩΝ: ΕΠΤΑ (7)

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 8 : ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ & ΠΟΛΥΜΟΡΦΙΣΜΟΣ

Διαγράμματα UML στην Ανάλυση. Μέρος Β Διαγράμματα Κλάσεων Διαγράμματα Αντικειμένων

Πληρουορική Γ Γσμμασίοσ

. Μεθοδολογία Προγραμματισμού. Abstract Κλάσεις και Interfaces. Νικόλαος Πεταλίδης. Εισαγωγή Εαρινό Εξάμηνο 2014

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών: Εργαστηριακή Άσκηση

ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ. Κάθε υποπρόγραμμα έχει μόνο μία είσοδο και μία έξοδο. Κάθε υποπρόγραμμα πρέπει να είναι ανεξάρτητο από τα άλλα.

Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack

Εργαστήριο 02: Προγραμματισμός με Γενικούς Τύπους (JAVA Generics) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι

Σύνθεση και Κληρονομικότητα

ΟΜΑΔΟΠΟΙΗΣΗ ΤΩΝ ΠΑΡΑΤΗΡΗΣΕΩΝ

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

Προγραμματιστικά Εργαλεία και Τεχνολογίες για Επιστήμη Δεδομένων

Εφαρμοσμένη Πληροφορική ΙΙ (Θ) Αντικειμενοστραφής Προγραμματισμός και JavaScript

How to register an account with the Hellenic Community of Sheffield.

Παρουσίαση Libreoffice. Βασίλειος Καραβασίλης Μονάδα Αριστείας ΕΛΛΑΚ ΕΤΕΠΗ 27/04/2015

Εξαιρέσεις Εισαγωγή. Εξαιρέσεις. ηµήτρης Λεβεντέας

ΚΑΤΑΣΚΕΥΑΣΤΕΣ ΑΝΤΙΓΡΑΦΗΣ

Wrapper Classes, Abstract Classes and Interfaces

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

Ανακτήθηκε από την ΕΚΠΑΙΔΕΥΤΙΚΗ ΚΛΙΜΑΚΑ

Βυζαντινός Ρεπαντής Κολλέγιο Αθηνών 2010

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 6/12/07

Σύνθεση και Κληρονομικότητα

ΠΟΛΥΜΟΡΦΙΣΜΟΣ. 4.1 Κληρονομικότητα και Αρχή της Υποκατάστασης

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Ι

ΚΕΦΑΛΑΙΟ 8. Κλάσεις και αντικείμενα. 8.1 Εισαγωγή

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 133: ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΕΡΓΑΣΤΗΡΙΟ 3 Javadoc Tutorial

Προγραμματιστικές τεχνικές

Εισαγωγή στον Προγ/μό Υπολογιστών

Φύλλα εργασίας. MicroWorlds Pro. Πολυμεσικές Εφαρμογές με την χρήση της γλώσσας LOGO Στο Γυμνάσιο. Β. Χ. Χρυσοχοΐδης

(Διαφάνειες Νίκου Βιδάκη)

Προγραμματισμός Υπολογιστών & Εφαρμογές Python. Κ.Π. Γιαλούρης

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα

Ενότητα 5: ΜΕΤΑΒΛΗΤΕΣ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

Γ7.8 Εγγραφές (Structures) Γ Λυκείου Κατεύθυνσης

Βασικά της γλώσσας JAVA

Προγραμματισμός Υπολογιστών Τάξη Γ Αθανασιάδης Χρήστος ΠΕ19 ΑΡΧΗ 1ΗΣ ΣΕΛΙΔΑΣ

Διάλεξη 2. Μεταβλητές - Δομές Δεδομένων - Eίσοδος δεδομένων - Έξοδος: Μορφοποίηση - Συναρτήσεις. Διοργάνωση : ΚΕΛ ΣΑΤΜ

ΑΡΦΕ ΑΝΣΙΚΕΙΜΕΝΟΣΡΕΥΟΤ ΠΡΟΓΡΑΜΜΑΣΙΜΟΤ. Ιωάννης Φατζηλυγερούδης Αναπληρωτής Καθηγητής Τμήμα Μηχ/κών Η/Υ και Πληροφορικής Πανεπιστήμιο Πατρών

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Παναγιώτης Σφέτσος

Δομές Δεδομένων & Αλγόριθμοι

ΣΤΗΛΗ Β ΑΠΟΤΕΛΕΣΜΑ 1. float(10) α pow(2,3) β abs(-10) γ int(5.6) δ. 10 ε. 5.6 Μονάδες 8 ΣΤΗΛΗ Α ΣΥΝΑΡΤΗΣΗ

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι

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

ΕισαγωγήστουςΗ/Υ. PHP Hypertext Preprocessor

Abstract classes, Interfaces ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Στατικές μέθοδοι και μεταβλητές Εσωτερικές κλάσεις

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II

Εισαγωγή στην πληροφορική

Δυναμική μνήμη με πίνακες και λίστες

Εισαγωγή στον Προγ/μό Η/Υ

Σημειωματάριο Δευτέρας 30 Οκτ. 2017

Transcript:

Κλάσεις στην Python Στον προγραμματισμό γενικά προσπαθούμε να αποφεύγουμε τις επαναληπτικές εργασίες. Προσπαθούμε να γράφουμε κώδικα μία φορά και να τον χρησιμοποιούμε ξανά. Η αποφυγή της επανάληψης κώδικα επιτυγχάνεται με την χρήση συναρτήσεων. Οι συναρτήσεις τυποποιούν λειτουργίες. Όποτε το πρόγραμμα μας πρέπει να εκτελέσει αυτές τις λειτουργίες, καλούμε τις συναρτήσεις αυτές, περνώντας τις κατάλληλες παραμέτρους. Η χρήση συναρτήσεων δεν μας δίνει την δυνατότητα να αποθηκεύσουμε μέσα τους πληροφορίες. Οι τιμές των τοπικών τους μεταβλητών χάνονται μετά την επιστροφή εκτός αν περαστούν σαν παράμετροι, οπότε η καλούσα συνάρτηση πρέπει να κρατήσει τις τιμές. Με τον αντικειμενοστραφή προγραμματισμό και την χρήση κλάσεων δίνεται η δυνατότητα διαχείρισης δεδομένων και συναρτήσεων με πολύ ολοκληρωμένο τρόπο. Δημιουργία κλάσεων Μία κλάση είναι ένα πρότυπο. Δεν έχει υπόσταση από μόνη της. Περιγράφει όμως πως μπορεί να λειτουργήσει ένα ή πολλά αντικείμενα που έχουν δημιουργηθεί υλοποιώντας την κλάση. Παράδειγμα 1: Κώδικας για τον ορισμό μίας κλάσης # Defining a class class class_name: [statement 1] [statement 2] [statement 3] [etc.] Παράδειγμα 2: Κώδικας για την δημιουργία της κλάσης Shape: #An example of a class class Shape: def init (self,x,y): description = "This shape has not been described yet" author = "Nobody has claimed to make this shape yet" def area(self): return self.x * self.y 1

def describe(self,text): self.description = text def authorname(self,text): self.author = text def scalesize(self,scale): self.x = self.x * scale self.y = self.y * scale Έχουμε δημιουργήσει μια περιγραφή ενός σχήματος όπως και τις μεταβλητές και τις ενέργειες που μπορούμε να κάνουμε με το Shape. Όμως δεν έχουμε κατασκευάσει ένα πραγματικό σχήμα, αλλά απλά έχουμε ορίσει την περιγραφή του τι είναι ένα Shape. Το Shape έχει πλάτος (x), ύψος (y), και μας δίνει την δυνατότητα να υπολογίσουμε το εμβαδόν και την περίμετρο του. Η συνάρτηση init εκτελείται όταν δημιουργήσουμε ένα στιγμιότυπο (instance) της Shape, δηλαδή, όταν δημιουργήσουμε ένα πραγματικό Shape, σε αντίθεση με το «σχέδιο» που έχουμε εδώ, τότε η init εκτελείται αυτόματα. Το self δείχνει ότι αναφερόμαστε σε στοιχεία της ίδιας της κλάσης. Αποτελεί την πρώτη παράμετρο σε όλες τις λειτουργίες που ορίζονται μέσα σε μια τάξη. Κάθε λειτουργία ή μεταβλητή που δημιουργήθηκε στο πρώτο επίπεδο της εσοχής (δηλαδή, γραμμές κώδικα που ξεκινούν ένα tab δεξιά της θέσης όπου βάζουμε την κλάση Shape. Για πρόσβαση σε αυτές τις λειτουργίες και τις μεταβλητές αλλού μέσα στην τάξη, το όνομά τους θα πρέπει να προηγείται η λέξη self ακολουθούμενη από μία τελεία (π.χ. self.variable_name). Χρήση μίας κλάσης Παράδειγμα 3: Κώδικας για τη δημιουργία αντικειμένου της κλάσης #creating an object rectangle = Shape(100, 45) Η συνάρτηση init καλείται αυτόματα. Δημιουργούμε ένα στιγμιότυπο της κλάσης δίνοντας το όνομά του (σε αυτή την περίπτωση, το Shape) και, στη συνέχεια, σε παρένθεση, οι τιμές για να περάσει στη λειτουργία init. Η συνάρτηση init εκτελείται (χρησιμοποιώντας τις παραμέτρους που δώθηκαν σε παρένθεση) και, στη συνέχεια, κατασκευάζει ένα αντικείμενο της κλάσης, η οποία στην περίπτωση αυτή αποδίδεται στη μεταβλητή rectangle. Το αντικείμενο rectangle αποτελεί αυτοτελή συλλογή μεταβλητών και συναρτήσεων. Με τον ίδιο τρόπο που χρησιμοποιήσαμε την self για να αποκτήσουμε πρόσβαση στις συναρτήσεις και τις μεταβλητές της κλάσης μέσω της self, χρησιμοποιούμε το όνομα που της έχει ανατεθεί τώρα (rectangle) για την πρόσβαση στις λειτουργίες και τις μεταβλητές της κλάσης από έξω από την κλάση. 2

Παράδειγμα 4: Πρόσβαση χαρακτηριστικών εκτός κλάσης #creating an object rectangle=shape(100,45) #finding the area of your rectangle: print(rectangle.area()) #finding the perimeter of your rectangle: print(rectangle.perimeter()) #describing the rectangle rectangle.describe('a wide rectangle') #making the rectangle 50% smaller rectangle.scalesize(0.5) #re-printing the new area of the rectangle print(rectangle.area()) Παράδειγμα 5: Δημιουργία περισσότερων του ενός αντικειμένων long_rectangle = Shape (120,10) fat_rectangle = Shape (130,120) Κληρονομικότητα Παράδειγμα 6: Η κλάση Shape μπορεί να χρησιμοποιηθεί σαν βάση για την δημιουργία παράγωγων κλάσεων με πιο εξειδικευμένα χαρακτηριστικά. #An example of a class class Shape: def init (self,x,y): description = "This shape has not been described yet" author = "Nobody has claimed to make this shape yet" def area(self): return self.x * self.y 3

def describe(self,text): self.description = text def authorname(self,text): self.author = text def scalesize(self,scale): self.x = self.x * scale self.y = self.y * scale Για να ορίσουμε μια νέα κλάση, π.χ. την κλάση Square, δηλαδή τετράγωνο, με βάση την προηγούμενη κλάση Shape, κάνουμε αυτό: Παράδειγμα 7: Κληρονομικότητα #An inherited class class Square(Shape): def init (self,x): self.y = x Ο ορισμός της υποκλάσης γίνεται ακριβώς όπως ορίζεται μια κλάση, με την διαφορά ότι βάζουμε σε παρένθεση μετά το όνομα, το όνομα της μητρικής κλάση από την οποία κληρονομήσαμε. Έτσι έχουμε περιγράψει ένα τετράγωνο πολύ γρήγορα, χρησιμοποιώντας την κλάση Shape. Αυτό συμβαίνει γιατί έχουμε κληρονομήσει τα πάντα, από την κλάση Shape και αλλάξαμε μόνο ότι χρειάζεται να αλλάξει. Σε αυτή την περίπτωση, έχουμε επαναπροσδιορίσει την λειτουργία init του Shape, έτσι ώστε οι τιμές x και y να είναι πάντα ίδιες. Παράδειγμα 8 - DoubleSquare κατηγορία # The shape looks like this: # # # # class DoubleSquare(Square): def init (self,y): self.x = 2 * y 4

Στο παράδειγμα αυτό ορίζουμε ξανά την μέθοδο που υπολογίζει την περίμετρο, έτσι ώστε να μπορέσει να υπολογιστεί και η κοινή πλευρά εύκολα. Λεξικά Παράδειγμα 9: Λεξικό # First, create a dictionary: dictionary = {} # Then, create some instances of classes in the dictionary: dictionary["doublesquare1"] = DoubleSquare(5) dictionary["long_rectangle"] = Shape(600,45) dictionary["doublesquare1"].authorname("the Gingerbread Man") #You can now use them like a normal class: print(dictionary["long_rectangle"].area()) print(dictionary["doublesquare1"].author) Από την ιστοσελίδα A Beginner's Python Tutorial/Classes που βρίσκεται στο link: https://en.wikibooks.org/wiki/a_beginner%27s_python_tutorial/classes 5