Μάθημα 5 - Μελέτη κώδικα Αντικειμενοστρεφής προγραμματισμός

...ασύγχρονα μαθήματα python

Re: Μάθημα 5 - Μελέτη κώδικα Αντικειμενοστρεφής προγραμματισμός

Δημοσίευσηαπό sokoban4ever » 07 Οκτ 2009, 17:31

@AngelBreath
Τη σειρά του βιβλίου που μετάφρασαν τα παιδιά από το forum ακολουθούμε
απλά κάποια κεφάλαια συχγωνέυτικάν σε ένα Μάθημα εδώ στο forum είτε επειδή ήταν απλά είτε επειδή ήταν μικρά
(2 εβδομάδες ήταν το κενό μεταξύ μαθημάτων )
Θέλουμε και μπορούμε να έχουμε μια καλύτερη ζωή και όσο θα ζούμε θα προσπαθούμε να την αποκτήσουμε ακόμα και αν πεθάνουμε προσπαθώντας, και αν κάποια στιγμή λιγίσουμε έχουμε το επίπεδο να πούμε κουράστηκα λίγο να ,να ξαποστάσουμε , ώστε να συνεχίσουμε πάλι δυνατοί ξανά.

Μήνυμα με αγάπη και αληλλεγγύη σε όλους τους ανθρώπους από όλους τους λαούς , ιδίως του Ελληνικού.
Άβαταρ μέλους
sokoban4ever
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 2331
Εγγραφή: 13 Φεβ 2009, 02:22
Εκτύπωση

Re: Μάθημα 5 - Μελέτη κώδικα Αντικειμενοστρεφής προγραμματισμός

Δημοσίευσηαπό AngelBreath » 08 Οκτ 2009, 11:52

Τα αρθρωματα δηλαδη τα διαβαζω κανονικα πριν παω στο μαθημα 5? η θα τα κανουμε μετα? Το ρωταω απλα γιατι παρακολουθω τα μαθηματα, και οταν ειμαι σιγουρος οτι τα καταλαβα προχωρας, και αν δω πως εχω κενο ξαναγυρναω πισω. Οποτε απο τις συναρτησεις στις κλασεις βρηκα τεραστιο κενο.


Υ.Γ Καλα μερικές φορες εκπλήσω και τον εαυτο μου. ΕΧΑΣΑ ολο το μαθημα 4, δεν το ειδα..:) Ειδα το επαναληψη, πηγα στο 5 κατευθειαν γι αυτο χαθηκα.
AngelBreath
babeTUX
babeTUX
 
Δημοσιεύσεις: 46
Εγγραφή: 05 Νοέμ 2008, 23:29
Εκτύπωση

Re: Μάθημα 5 - Μελέτη κώδικα Αντικειμενοστρεφής προγραμματισμός

Δημοσίευσηαπό malos » 08 Οκτ 2009, 22:59

Κάτι άρχισα να καταλαβαίνω :

Κώδικας: Επιλογή όλων
#!/usr/bin/python3
class loipon_exoume_kai_leme:
   def __init__(den_tha_valo_self_etsi_gia_spasimo_afou_meeskise_i_roufiana_kai_episis_gia_na_katalavo_afto_pou_leme_epipleon_metavliti, a):
       den_tha_valo_self_etsi_gia_spasimo_afou_meeskise_i_roufiana_kai_episis_gia_na_katalavo_afto_pou_leme_epipleon_metavliti.kai_edo_tha_valo_mia_tyxaia_mpourda = a
       print(a)
edo_tha_valo_mia_kololista_pou_tha_kalestei_moni_tis = loipon_exoume_kai_leme(['ΠΑΣΟΚ', 'ΝΕΑ ΔΗΜΟΚΡΑΤΙΑ', 'ΚΟΝΟΜΗΣΑΜΕ ΠΑΛΙ'])



ΕΞΟΔΟΣ (κινδύνου :D )

Κώδικας: Επιλογή όλων
malos@palina:~$ python3 peirama.py
['ΠΑΣΟΚ', 'ΝΕΑ ΔΗΜΟΚΡΑΤΙΑ', 'ΚΟΝΟΜΗΣΑΜΕ ΠΑΛΙ']
malos@palina:~$
Επεξεργαστής: AMD Ryzen 9 5900x
Μνήμη Gskill 16gb (2X8gb), 3200 mh, CL 14
Μητρική: Asrock X570 phantom gaming X
Τροφοδοτικό: Corsair 850 platinum
Δίσκος: SSD Corsair MP600 (1 TB)
Άβαταρ μέλους
malos
saintTUX
saintTUX
 
Δημοσιεύσεις: 1230
Εγγραφή: 02 Νοέμ 2008, 12:00
Εκτύπωση

Re: Μάθημα 5 - Μελέτη κώδικα Αντικειμενοστρεφής προγραμματισμός

Δημοσίευσηαπό da_perama1 » 09 Οκτ 2009, 08:50

Δεν ξέρω αν πρέπει να απαντήσω επί της ουσίας. Η ουσία πάντως είναι ότι φτιάχνεις μια class και δεν την χρησιμοποιείς για να παράγει αντικείμενα, οπότε είναι ένα τμήμα κώδικα που παραβλέπεται. Γι αυτό γλύτωσες τα μηνύματα λάθους που θα σου έβγαζε αν την χρησιμοποιούσες. Το μόνο τμήμα του κώδικα που τρέχει είναι η τελευταία γραμμή που είναι εκτός class.
Επειδή όμως μάλλον πρόκειται για αστείο, θα πρότεινα να το κάνεις πιο εμφανές ότι πρόκειται για τέτοιο, γιατί κάποιος που θα το διαβάσει σαν σοβαρό είναι σίγουρο ότι θα μπερδευτεί.
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.04 precise 64bit (el_GR.UTF-8), Ubuntu 3.0.0-17-generic
3 Intel Core i5 CPU 650 3.20GHz ‖ RAM 7783 MiB ‖ Intel DH55TC -
4 Intel Core Processor Integrated Graphics Controller [8086:0042] (rev 02)
5 eth0: Intel 82578DC Gigabit Network Connection [8086:10f0] (rev 06)
da_perama1
punkTUX
punkTUX
 
Δημοσιεύσεις: 289
Εγγραφή: 11 Νοέμ 2008, 20:35
Τοποθεσία: Κέρκυρα
Εκτύπωση

Re: Μάθημα 5 - Μελέτη κώδικα Αντικειμενοστρεφής προγραμματισμός

Δημοσίευσηαπό malos » 09 Οκτ 2009, 09:15

Όχι για σοβαρό το έγραψα. Με αστείο τρόπο βέβαια , αλλά για να δω τις εισαγωγές τιμών και τέτοια.
Γιατί δεν τρέχει η class ; Η def __init__ (βλακεία_αντί_για_self, a) Είναι γραμμένη σε εσοχή !
Μη βλεπεις πως φαίνεται εκεί πάνω. Δεν μπορούσε ο editor του forum να το βγάλει δίπλα επειδή είναι μία γραμμή χωρίς κενά και είναι τεράστια. :D
Sorry που μπερδεύτηκες :) ενώ ασχολήθηκες ευγενικά.
Πάντως νομίζω το κατάλαβα. Αλλιώς μου φαίνεται δεν θα τύπωνε τη λίστα. Στην ουσία έβαλα :

Κώδικας: Επιλογή όλων
#!/usr/bin/python3
class loipon_exoume_kai_leme:
   def __init__(vlakeia_epitidevmeni, a):
       vlakeia_epitidevmeni.ki_alli_vlakeia_epitidevmeni = a
       print(a)
triti_vlakeia_epitdevmeni = loipon_exoume_kai_leme(['ΠΑΣΟΚ', 'ΝΕΑ ΔΗΜΟΚΡΑΤΙΑ', 'ΚΟΝΟΜΗΣΑΜΕ ΠΑΛΙ'])


Τώρα είναι πιο ευανάγωστο (τρομάρα μου :D ). Απλά θέλω να κατανοήσω που έχεις δικαίωμα να βάλεις ότι θες. Π.χ. η επιπλέον μεταβλητή που μπορεί και να μη λέγεται self αλλά καλό είναι να τη λέμε self)
Βλέπεις λάθος και πάλι ; (και συγχώρα με που σε κουράζω :) )
Επεξεργαστής: AMD Ryzen 9 5900x
Μνήμη Gskill 16gb (2X8gb), 3200 mh, CL 14
Μητρική: Asrock X570 phantom gaming X
Τροφοδοτικό: Corsair 850 platinum
Δίσκος: SSD Corsair MP600 (1 TB)
Άβαταρ μέλους
malos
saintTUX
saintTUX
 
Δημοσιεύσεις: 1230
Εγγραφή: 02 Νοέμ 2008, 12:00
Εκτύπωση

Re: Μάθημα 5 - Μελέτη κώδικα Αντικειμενοστρεφής προγραμματισμός

Δημοσίευσηαπό AngelBreath » 09 Οκτ 2009, 13:21

Καλα κανεις και το κουραζεις γιατι οτι κωδικα διαβασεις σε python θα δεις οτι ολα τα κανουν με κλασεις. Αυτο το self μου χει βγαλει την ψυχη, (οπως) και γενικα οι κλασεις. Εχω διαβασει 10 βιβλια python(αγγλικα) και μολις φτανω στις κλασσεις χανομαι. Δεν μπορω να το χωνεψω, δεν ξερω γιατι αλλα ενω νομιζω οτι το καταλαβαινω, τελικα δεν το χω..:) Τωρα ειμαι ακομα στο μαθημα 4, θελω να πιστευω οτι θα δω βελτιωση στην κατανοηση με αυτα τα μαθηματα.
AngelBreath
babeTUX
babeTUX
 
Δημοσιεύσεις: 46
Εγγραφή: 05 Νοέμ 2008, 23:29
Εκτύπωση

Re: Μάθημα 5 - Μελέτη κώδικα Αντικειμενοστρεφής προγραμματισμός

Δημοσίευσηαπό Dimitris » 09 Οκτ 2009, 16:12

Συγγνώμη που παρεμβαίνω (δεν είδα το κεφάλαιο του βιβλίου) αλλά θα δώσω ένα απλό παράδειγμα για τις classes, μιας κι εγώ κάποτε είχα μπερδευτεί.

Κώδικας: Επιλογή όλων
class άνθρωπος:
    def __init__(self, ύψος, βάρος):
        self.ύψος = ύψος
        self.βάρος = βάρος

    def τρώω(self, φαγητό_1, φαγητό_2):
        self.βάρος = self.βάρος + φαγητό_1 + φαγητό_2

    def γυμναστική(self, ώρες):
        self.βάρος = self.βάρος - 0.1*ώρες


Η class είναι κατηγορίες "αντικειμένων". Οι μέθοδοι είναι ενέργειες που μπορούν να εφαρμοσθούν στο αντικείμενο αυτό. Στο παράδειγμά μας, ένας άνθρωπος μπορεί να γεννηθεί (__init__), να φάει (τρώω) και να γυμναστεί (γυμναστική). Κάθε δραστηριότητα δέχεται κάποιες παραμέτρους. Ένας άνθρωπος γεννιεται με κάποιο ύψος (0.5μ) και βάρος(10kg):
Κώδικας: Επιλογή όλων
εγώ = άνθρωπος (0.5, 10)

Όταν τρώει, αλλάζει το βάρος του:
Κώδικας: Επιλογή όλων
μπριζόλα = 0.4 # μάλλον κιλά
σαλάτα = 0.1
εγώ.τρώω(μπριζόλα, σαλάτα)

Και όταν γυμνάζεται χάνει ένα μικρό ποσοστό μόνο (10%)
Κώδικας: Επιλογή όλων
εγώ.γυμναστική(3)


Τα self.xxx είναι οι ιδιότητες του ανθρώπου που αλλάζουν με την εφαρμογή των μεθόδων "τρώω" και "γυμναστική". To ύψος/βάρος είναι μόνο τοπικές μεταβλητής της γέννησης (__init__) ενώ τα self.ύψος, self.βάρος είναι ιδιότητες του εκάστοτε ανθρώπου.
εσύ = άνθρωπος(0.6,12) # αρχικοποιεί διαφορετικά το αντικείμενο εσύ
Άβαταρ μέλους
Dimitris
saintTUX
saintTUX
 
Δημοσιεύσεις: 1357
Εγγραφή: 13 Μάιος 2008, 13:57
Τοποθεσία: Θεσσαλονίκη
Εκτύπωση

Re: Μάθημα 5 - Μελέτη κώδικα Αντικειμενοστρεφής προγραμματισμός

Δημοσίευσηαπό da_perama1 » 09 Οκτ 2009, 20:08

Αν θέλετε ρίξτε μια ματιά εδώ όπου περιγράφονται μάλλον απλοϊκά τα σχετικά με τα αντικείμενα και τη δημιουργία τους.
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.04 precise 64bit (el_GR.UTF-8), Ubuntu 3.0.0-17-generic
3 Intel Core i5 CPU 650 3.20GHz ‖ RAM 7783 MiB ‖ Intel DH55TC -
4 Intel Core Processor Integrated Graphics Controller [8086:0042] (rev 02)
5 eth0: Intel 82578DC Gigabit Network Connection [8086:10f0] (rev 06)
da_perama1
punkTUX
punkTUX
 
Δημοσιεύσεις: 289
Εγγραφή: 11 Νοέμ 2008, 20:35
Τοποθεσία: Κέρκυρα
Εκτύπωση

Re: Μάθημα 5 - Μελέτη κώδικα Αντικειμενοστρεφής προγραμματισμός

Δημοσίευσηαπό malos » 09 Οκτ 2009, 22:23

@AngelBreath .... :D Έλα μωρέ που δεν το ' χεις !!!! Εδώ κοντεύω να το καταλάβω εγώ. Υπάρχει ένα αξίωμα : Αν καταλάβω εγώ κάτι, τότε σίγουρα το καταλαβαίνει ο κάθε άνθρωπος στον πλανήτη :lol:
Διάβασε το σύνδεσμο του da_perama1

@Dimitris μου αρέσει όπως το παρουσιάζεις ;)

@da_perama1 ποιανού είναι αυτή η σελίδα ; Τέλεια μιλάμε !!!!
Όσο για τις βλακείες που έγραψα στον κώδικα, δεν μου είπες ! Πάντως δουλεύει! Αν και δεν ήξερα τι κάνω για να δουλέψει :D
Με το σύνδεσμό σου κάτι καταλαβαίνω ! Τελικά το αντικείμενο στο κώδικα που έγραψα είναι αυτό που ονόμασα triti_vlakeia_epitdevmeni.
Επεξεργαστής: AMD Ryzen 9 5900x
Μνήμη Gskill 16gb (2X8gb), 3200 mh, CL 14
Μητρική: Asrock X570 phantom gaming X
Τροφοδοτικό: Corsair 850 platinum
Δίσκος: SSD Corsair MP600 (1 TB)
Άβαταρ μέλους
malos
saintTUX
saintTUX
 
Δημοσιεύσεις: 1230
Εγγραφή: 02 Νοέμ 2008, 12:00
Εκτύπωση

Re: Μάθημα 5 - Μελέτη κώδικα Αντικειμενοστρεφής προγραμματισμός

Δημοσίευσηαπό sokoban4ever » 09 Οκτ 2009, 22:28

Λοιπόν επαναλαμβάνω απλά
αν έχουμε μια κλάση motorbike η μέθοδος __init__ είναι η πρώτη που θα εκτελεστεί και θα δώσει στο κάθε instance κάποιες ιδιότητες

δηλαδή :


yamaha = mortorbike (red,400)
το yamaha είναι ένα instance της motorbike class και έχει χρώμα κοκκινο και κυβικά 400
έτσι και στο
honda = = mortorbike (black,1100)
το honda είναι ένα instance της motorbike class και έχει χρωμα μάυρο και κυβικά 1100

Tο __init__ της κλάσης motorbike μπορεί να είναι πχ :


Κώδικας: Επιλογή όλων
class motorbike:
    def __init__(self,color,cc):
        self.xroma = color
        self.kibismos= cc

όπου βλέπουμε ξεκάθαρα ότι αμέσως μετά το self. ( self τελεία ) μπορούμε να βάλουμε ότι όνομα θέλουμε
αρκεί να είναι ίδιο με ενα από τα arguments που έχει δηλωθεί από πάνω (στο definition) στις παρενθέσεις της μεθόδου __init__ (AYTA EDW)
εκτός βέβαια το self


self.xroma = color
self.kibismos= cc

και αν το τρέξουμε παίρνουμε τα εξής
Κώδικας: Επιλογή όλων
>>> yamaha=motorbike('red',400)
>>> honda=motorbike('black',1100)
>>> yamaha.kibismos
400
>>> yamaha.xroma
'red'
>>> honda.kibismos
1100
>>> honda.xroma
'black'
Θέλουμε και μπορούμε να έχουμε μια καλύτερη ζωή και όσο θα ζούμε θα προσπαθούμε να την αποκτήσουμε ακόμα και αν πεθάνουμε προσπαθώντας, και αν κάποια στιγμή λιγίσουμε έχουμε το επίπεδο να πούμε κουράστηκα λίγο να ,να ξαποστάσουμε , ώστε να συνεχίσουμε πάλι δυνατοί ξανά.

Μήνυμα με αγάπη και αληλλεγγύη σε όλους τους ανθρώπους από όλους τους λαούς , ιδίως του Ελληνικού.
Άβαταρ μέλους
sokoban4ever
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 2331
Εγγραφή: 13 Φεβ 2009, 02:22
Εκτύπωση

ΠροηγούμενηΕπόμενο

Επιστροφή στο Μαθήματα python