XristosTsa έγραψε:
Ποιές οι διαφορές στις συναρτήσεις και στις κλάσεις. Γιατι να χρησιμοποιήσω αντικείμενα-κλάσεις αντι των συναρτήσεων?
Η συνάρτηση είναι ένα τρόπος για να οργανώνουμε το πρόγραμμα μας σε επιμέρους μικρότερα προγράμματα.
Επιπλέον μας δίνει την δυνατότητα οι μεταβλητές να είναι ανεξάρτητες από τις υπόλοιπες που υπάρχουν στο πρόγραμμα μας. Για παράδειγμα:
def petros():
name = 'Petros'
def Giwrgos():
name = 'Giwrgos'
η μεταβλητή name είναι διαφορετική για κάθε συνάρτηση ασχέτως που έχουν το ίδιο όνομα.
Η κάθε συνάρτηση θα πρέπει να υπάρχει και για κάποιον σκοπό.
Για παράδειγμα:
η παραπάνω συνάρτηση μας επιστρέφει το άθροισμα δύο αριθμών. Αυτός είναι ο σκοπός της.
Οι κλάσεις οργανώνουν μεταβλητές και συναρτήσεις (τις οποίες ονομάζουμε μεθόδους) μαζί σαν ένα πακέτο
το οποίο ως στόχο έχουν να χειρίζονται αυτές τις μεταβλητές (τα δεδομένα μας δηλαδή) μέσω κάποιον μεθόδων (Συναρτήσεων).
Η κλάσεις είναι γενικά ορισμένες από τις οποίες μπορούμε να δημιουργήσουμε αντικείμενα (στιγμιότυπα αυτής της κλάσης) όπου κάθε αντικείμενο θα έχει τα δικά του δεδομένα.
Παράδειγμα:
#-----------------Δημιουργία της Κλάσης-----------------#
class Square:
#Constructor.
def __init__(self, length):
self.length = length #Το μέγεθος της πλευράς του τετραγώνου.
self.x = 0 #Τετμημένη του τετραγώνου.
self.y = 0 #Τεταγμένη του τετραγώνου.
#Methods 1.
def getPosition(self):
'''Επιστρέφει την θέση του τετραγώνου στο καρτεσιανό σύστημα.'''
return (self.x, self.y)
#Methods 2.
def getSurface(self):
'''Επιστρέφει το εμβαδόν του τετραγώνου.'''
return self.length ** 2
#-----------------Δημιουργία της Κλάσης-----------------#
#Δημιουργία τετραγώνου πλευράς 5.
square1 = Square(5)
#Δημιουργία τετραγώνου πλευράς 10.
square2 = Square(10)
print( "Το εμβαδόν τετραγώνου πλευράς 5 είναι:",square1.getSurface() )
print( "Το εμβαδόν τετραγώνου πλευράς 10 είναι:",square2.getSurface() )
Η παραπάνω κλάση περιγράφει ένα τετράγωνο και έχει κάποιες μεθόδους που επεξεργάζονται τα δεδομένα ενός τετραγώνου και σε δίνουν κάποια αποτελέσματα.
Όπως βλέπεις τα
square1 και
square2 είναι αντικείμενα αυτής της κλάσης με διαφορετικά δεδομένα, όπου στην συγκεκριμένη περίπτωση οι πλευρές τους είναι διαφορετικές (5 και 10). Αν και τα
x,y τους είναι 0 είναι διαφορετικές μεταβλητές για κάθε αντικείμενο. Αυτό σημαίνει ότι
sqare1.x και
square2.x είναι
διαφορετικές μεταβλητές άρα αν αλλάξεις το περιεχόμενο της μία δεν αλλάζει και στο άλλο!!!
Για να καταλάβεις καλύτερα το πως δουλεύουν οι κλάσεις πρέπει να μάθεις αντικειμενοστραφή προγραμματισμό κάτι το οποίο είναι ένα ολόκληρο ανεξάρτητο μάθημα στο προγραμματισμό και ο καλύτερος τρόπος για να το μάθεις είναι να ασχοληθείς με java.