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

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

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

Δημοσίευσηαπό Ilias95 » 26 Ιουν 2014, 16:45

lucinos έγραψε:Όμως (και κατά την γνώμη μου άριστα) η Python δεν άλλαξε χαρακτήρα. Η Python παραμένει Python και οι κλάσσεις δεν είναι το ισχυρό χαρακτηριστικό. Το ισχυρό χαρακτηριστικό τής γλώσσας είναι οι συναρτήσεις.


Πάλι δεν λες γιατί, κατά τη γνώμη σου δεν είναι το δυνατό της σημείο.

Είναι μία γλώσσα που υποστηρίζει πλήρως τον OOP έχοντας μάλιστα και χαρακτηριστικά που άλλες γλώσσες δεν υποστηρίζουν όπως πχ. multiple inheritance. Αυτό που δεν σε αναγκάζει να κάνεις είναι strong encapsulation με restrictive access modifiers αλλά αυτό δεν είναι απαραίτητα κακό.

lucinos έγραψε:Αυτό ακόμα και αν δεν ξέρεις ιστορία είναι οφθαλμοφανές στην Python2. πχ

Δεν λέει κάτι αυτό. Και στην java τα primitive types δεν είναι objects. Γι' αυτό υπάρχουν οι primitive wrapper classes.

lucinos έγραψε:Η Python σχεδιάστηκε αρχικά δίχως κλάσσεις.

Αυτό δεν το ξέρω. Πηγή;

lucinos έγραψε:Ένας προγραμματιστής ποτέ δεν χρειάζεται να φτιάξει μια κλάσση για τον εαυτό του (μιλώ για την Python πάντα).

  • Αν χρησιμοποιήσεις κάποιο toolkit για να κάνεις GUI εφαρμογές αναγκαστικά θα δημιουργήσεις κλάσεις.
  • Αν χρησιμοποιήσεις κάποιο framework για να χτίσεις web εφαρμογές (που είναι και το σημείο που χρησιμοποιείται περισσότερο η python) αναγκαστικά θα δημιουργήσεις κλάσεις.
  • Αν θες να φτιάξεις μια δομή δικού σου τύπου με συγκεκριμένα χαρακτηριστικά πράγμα πολύ συχνό "αναγκαστικά" θα δημιουργήσεις κλάσεις.
  • Αν ψάξεις τον κώδικα οποιασδήποτε δημοφιλούς εφαρμογής γραμμένης σε python στο github πχ. είμαι σίγουρος ότι σε σχεδόν όλες θα δεις να χρησιμοποιούνται κλάσεις.

Οπότε δεν μπορώ να καταλάβω που το στηρίζεις το ότι ένας προγραμματιστής δεν δημιουργεί κλάσεις.

lucinos έγραψε:Υπάρχει πάντα κάτι έτοιμο που είναι αρκετό.

Υπάρχουν έτοιμες δομές που να περιγράφουν ανθρώπους, αυτοκίνητα, σπίτια, καράβια, οδοντόβουρτσες, μολύβια και σκαντζόχοιρους; Δεν νομίζω. Αν χρειαστείς μια τέτοια δομή στο πρόγραμμα σου τι κάνεις;

lucinos έγραψε:Εδώ φαίνεται και ένας προσωπικός μου κανόνας για τις κλάσσεις. Είναι πιστεύω λάθος να βάζουμε μη τετριμμένο κώδικα στις κλάσσεις. Αυτός που κοιτάει μια κλάσση θέλει να δει τι μεθόδους περιέχει. Ο όποιος κώδικας «κάνει δουλειά» πρέπει πάντα να βρίσκεται σε συναρτήσεις έξω από τις κλάσσεις. (διαφορετικά συσκοτίζει την κλάσση)

Αυτό όπως είπες όμως είναι η προσωπική σου άποψη. Νομίζω ότι συνηθίζεται περισσότερο ότι συναρτήσεις έχουν σχέση με μια κλάση ενσωματώνονται σ' αυτήν σαν static methods ώστε να είναι πιο οργανωμένος και κατανοητός ο κώδικας και να είναι πολύ πιο εύκολα διαχειρίσιμο το module. Και οι δύο τεχνικές έχουν valid points παρ' όλα αυτά.
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

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

Δημοσίευσηαπό lucinos » 27 Ιουν 2014, 06:30

Ilias95 έγραψε:
  • Αν ψάξεις τον κώδικα οποιασδήποτε δημοφιλούς εφαρμογής γραμμένης σε python στο github πχ. είμαι σίγουρος ότι σε σχεδόν όλες θα δεις να χρησιμοποιούνται κλάσεις.

Εδώ προφανώς συμφωνούμε, αλλά εδώ και πάλι οι κλάσσεις είναι «έτοιμες».

  • Αν χρησιμοποιήσεις κάποιο toolkit για να κάνεις GUI εφαρμογές αναγκαστικά θα δημιουργήσεις κλάσεις.
  • Αν χρησιμοποιήσεις κάποιο framework για να χτίσεις web εφαρμογές (που είναι και το σημείο που χρησιμοποιείται περισσότερο η python) αναγκαστικά θα δημιουργήσεις κλάσεις.

Εδώ δεν θα διαφωνήσω ισχυρά, καθώς δεν έχω ασχοληθεί ούτε με GUI ούτε με web. Και επίσης έχω δει αρκετές αναφορές ότι είναι πολύ χρήσιμες. Ακόμα και εδώ όμως πιστεύω ότι πρώτα κανείς θα εξαντλήσει τις έτοιμες λύσεις και δεν πρέπει να δημιουργεί κλάσσεις για ψύλλου πήδημα.

  • Αν θες να φτιάξεις μια δομή δικού σου τύπου με συγκεκριμένα χαρακτηριστικά πράγμα πολύ συχνό "αναγκαστικά" θα δημιουργήσεις κλάσεις.

Εδώ έχουμε την μεγαλύτερη διαφωνία. Όχι αυτός δεν είναι σημαντικός λόγος να φτιάξεις κλάσση. Αντιθέτως πιστεύω είναι συνταγή για κακό κώδικα. Ο κόσμος αντί να χρησιμοποιήσει απλά τις γνωστές απλές δομές (λίστες, πλειάδες, λεξικά, σύνολα) πάει και φτιάχνει κλάσσεις από κάποιου είδους «αυτοματισμό». Και νομίζει ότι έτσι είναι καλύτερος προγραμματιστής. Αυτό το βρίσκω τρομακτική καταστροφή. Τα προγράμματα γίνονται μεγαλύτερα, δυσνόητα και δυσκολότερα στην χρήση γιατί ξαφνικά πρέπει να ψάχνεις τι ιδιαιτερότητες έχει η κλάσση που ο κάθε μουρλός είχε την ιδέα να φτιάξει, έτσι για να φανεί φοβερός προγραμματισταράς. Και παιδευόμαστε για να χρησιμοποιήσουμε τον κώδικα με τα απέραντα MuffinHash (την έκφραση την κλέβω από το προηγούμενο βίντεο) εκεί που απλά θα μπορούσαμε πχ να χρησιμοποιούμε ένα λεξικό.

Υπάρχουν έτοιμες δομές που να περιγράφουν ανθρώπους, αυτοκίνητα, σπίτια, καράβια, οδοντόβουρτσες, μολύβια και σκαντζόχοιρους; Δεν νομίζω. Αν χρειαστείς μια τέτοια δομή στο πρόγραμμα σου τι κάνεις;

Αυτά που έγραψα παραπάνω. Το γεγονός ότι έχεις ένα «ουσιαστικό», δεν σημαίνει καθόλου ότι είναι καλή ιδέα να φτιάξεις μια κλάσση. Πάρε το παράδειγμα με τα τετραδόνια που έδωσα. Η κλάσση αυτή δεν έχει την «υπογραφή» δεν-είναι-κλάσση όπως την εξηγεί ο τύπος στο βίντεο που έδειξα. Ακόμα και έτσι όμως, αυτό δεν είναι καθόλου αρκετό για να δικαιολογήσει κλάσση. Στην συγκεκριμένη περίπτωση η δημιουργία κλάσσης είναι όντως εξαιρετικά χρήσιμη, αλλά όχι για δομικές ανάγκες. Ο μόνος λόγος που είναι πραγματικά χρήσιμη είναι για να δουλεύει με κοινούς τελεστές (πράγμα που πχ μια πλειάδα δεν θα μπορούσε να έχει).

Η περίπτωση εξαιρετικά χρήσιμης κλάσσης που μού έρχεται πρώτη στο μυαλό είναι οι πίνακες τού numpy. Εδώ η υπερφόρτωση τελεστών είναι ένα μπόνους αλλά ο λόγος που τις καθιστά απαραίτητες δεν είναι αυτός αλλά είναι η πρόσβαση που σου δίνουν σε κάτι που δεν θα μπορούσε να γίνει σε Python αλλά κάποιοι έπρεπε να λερώσουν τα χέρια τους σε κατώτερες γλώσσες όπως η Fortran. Ο τελικός χρήστης-προγραμματιστής συνδυάζει τα πλεονεκτήματα τής Python με τής Fortran.

lucinos έγραψε:Η Python σχεδιάστηκε αρχικά δίχως κλάσσεις.

Αυτό δεν το ξέρω. Πηγή;

Μπορεί να έχεις δίκιο. Είχα δει παλιότερα διάφορες ομιλίες τού Guido και μού είχε μείνει ίσως λανθασμένα αυτή η εντύπωση. Με μια γρήγορη αναζήτηση βρήκα αυτό. Πάντως σε κάθε περίπτωση οι κλάσσεις στην Python άρχισαν να «σοβαρεύουν» με την έκδοση 2.2 και «έστρωσαν» με την έκδοση 3.
Spoiler: show
Γνώσεις → Linux: Μέτριος ┃ Προγραμματισμός: Μέτριος ┃ Αγγλικά: Μέτριος
Λειτουργικό → Ubuntu 11.04 natty 64-bit (el_GR.UTF-8)
Προδιαγραφές → CPU: 4x Intel Core i5 CPU 750 2.67GHz ‖ RAM 3953 MiB ‖ ASRock P55DE3
Κάρτες γραφικών: nVidia G92 [GeForce GTS 250] ⎨10de:0615⎬ (rev a2)
Δίκτυα: eth0: Realtek RTL8111/8168B PCI Express Gigabit Ethernet controller ⎨10ec:8168⎬ (rev 03)
Άβαταρ μέλους
lucinos
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 828
Εγγραφή: 12 Δεκ 2010, 22:04
Εκτύπωση

Προηγούμενη

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