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

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

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

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

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

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

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

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

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

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

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

Μπορεί να έχεις δίκιο. Είχα δει παλιότερα διάφορες ομιλίες τού Guido και μού είχε μείνει ίσως λανθασμένα αυτή η εντύπωση. Με μια γρήγορη αναζήτηση βρήκα αυτό. Πάντως σε κάθε περίπτωση οι κλάσσεις στην Python άρχισαν να «σοβαρεύουν» με την έκδοση 2.2 και «έστρωσαν» με την έκδοση 3.