Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Ποτε και πως χρησιμοποιουμε κλασεις...???

Îåêßíçóå áðü ôï ìÝëïò kallileo. Τελευταία δημοσίευση από το μέλος KelMan στις 26-09-2007, 09:18. Υπάρχουν 10 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  24-09-2007, 16:35 35330

    Ποτε και πως χρησιμοποιουμε κλασεις...???

    Αφου καταλαβα τι κανει περιπου κανει το Interface συνεχιζω...
    Ας πουμε οτι εχω project οπου εχω καποιους πωλητες που πουλανε καποια προιοντα. Οποτε έχω μια λιστα απο προιοντα και μια λιστα απο πωλητες. Εμενα με ενδιαφερει να καταχωρω σε μια βαση δεδομενων την πωληση που αποτελειται απο το προιον που πωληθηκε και τον πωλητη ας πουμε. Επισης να μπορω να κανω προσθετω/διαγραφω/επεξεργαζομαι πωλητες και προιοντα.
    Οι πωλητες και προιοντα εχουν το καθενα καποιες ιδιοτητες(ονομα, αριθμος, τηλ.,χωρας προελευσης και λοιπα).
    Για το κανω εγω που δεν ειμαι ακομα και πολυ σχετικος με αντικειμενοστραφη θα μπορουσα απο την λιστα να διαλεγω των πωλητη και το προιον και να φτιάχνω την παραγγελιά.

    Αν τωρα θελω να προσθεσω εναν πωλητη θα μπορουσα απλα να τον προσθεσω κατευθειαν στην βαση.
    Γιατι δηλαδη να χρησιμοποιησω μια κλαση "πωλητη" οπως βλεπω οτι κανουν π.χ στην C# με fields τις ιδιοτητες και τα χαρακτιριστικα του πωλητη?

    Γενικα ποια θα ηταν η σωστη προσεγγιση? Επισης ποτε θα μπορουσα να χρησιμοποιω struct αντι για κλαση?

    Δεν ξερω αν το παραδειγμα ειναι επιτυχες αλλα εγω καπως ετσι το σκεφτομαι.
    Ελπιζω να καταλαβατε τι εννοω...
  •  24-09-2007, 20:26 35352 σε απάντηση της 35330

    Απ: Ποτε και πως χρησιμοποιουμε κλασεις...???

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

    Αν έχεις στο μυαλό σου τον SQL Server τότε μιλάμε για μια σχεσιακή βάση δεδομένων.
    Δεν είναι το μοναδικό μοντέλο που ακολουθείται... (http://en.wikipedia.org/wiki/Database_model)

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

    Το αν θα επιλέξεις, κλάσεις για να τα βάλεις μέσα, structures (φαντάζομαι οτι εννοείς την δομή struct στην C), απλά μεταβλήτες σε σειρά, λίστα, στοίβα ή οτιδήποτε άλλο, είναι θέμα προσωπικής επιλογής και πολλές φορές .... μόδας....

    Πριν βιαστούν να με "κακολογήσουνε" κάποιοι συνάδελφοι φανατικοί οπαδοί του Οbject Oriented μοντέλου.... να πω οτι σε πάρα πολύ σύνθετες και συχνά μεταβαλλόμενες καταστάσεις το Οbject Orient μοντέλο (κατά την ταπεινη μου άποψη πάντα) παρουσιάζει μερικές δυσκολίες στη συντήρηση.



    Nothing to declare...
  •  24-09-2007, 23:25 35358 σε απάντηση της 35352

    Απ: Ποτε και πως χρησιμοποιουμε κλασεις...???

    Aκριβως για αυτο μιλαω...για τις μεταβλητες οπως λες και συ. Ας αφησουμε την βαση. Απλα δεν το εξεφρασα καλα.

    Αυτο που με ενδιαφερει ειναι το θεμα του γιατι να μην το βαλω σε μεταβλητες αλλα σε ενα object μιας κλασης.
  •  24-09-2007, 23:57 35362 σε απάντηση της 35358

    Απ: Ποτε και πως χρησιμοποιουμε κλασεις...???

    Τα αντικείμενα είναι πολύ μεγάλο θέμα και δεν είναι εύκολο να εξηγήσει κανείς σε μερικές γραμμές τί κάνουν. Σίγουρα δεν είναι θέμα προτίμησης ή μόδας, αλλά η βάση της σχεδίασης των περισσότερων εφαρμογών τα τελευταία 10-15 χρόνια, ενώ εμφανίστηκαν πριν από τουλάχιστον 20 χρόνια. Ο λόγος που τα χρησιμοποιούμε είναι για να απλοποιήσουμε τις εφαρμογές και να κάνουμε ευκολότερη τη συντήρηση τους. Αυτό δεν σημαίνει ότι μία κακογραμμένη εφαρμογή θα είναι πιο εύκολη στη συντήρηση. Σημαίνει ότι μία σωστά σχεδιασμένη εφαρμογη θα είναι πολύ ευκολότερο να τροποποιηθεί σε σχέση με άλλες μορφές σχεδίασης.

    Το σημαντικότερο που πρέπει να έχεις υπόψη είναι ότι τα αντικείμενα περιέχουν δεδομένα αλλά κυρίως συμπεριφορά. Δεν είναι απλά structures ή μεταβλητές. Σε συνδυασμό με τη χρήση inheritance αυτό βοηθάει στην σημαντική απλοποίηση του κώδικα. Σκέψου για παράδειγμα ότι έχεις ένα χαρτοφυλάκιο με μετοχές, ομόλογα, παράγωγα και δεν συμμαζεύτεται και θέλεις να υπολογίσεις την συνολική αξία του. Η αξία του κάθε προϊόντος υπολογίζεται με διαφορετικό τρόπο. Οι μετοχές έχουν μία τρέχουσα τιμή η οποία προέρχεται από το χρηματιστήριο, η αξία των ομολόγων υπολογίζεται βάση της ημερομηνίας λήξης τους και το αν έχουν πληρωθεί κουπόνια. Για τα δομημένα ομόλογα, άσε μην τα . Χρησιμοποιώντας αντικείμενα, μπορείς να πεις ότι έχεις διαφορετικούς τύπους προϊόντων οι οποίοι βασίζοντασε ένα βασικό τύπο τον BaseProduct ο οποίος ορίζει τη συνάρτηση GetPrice. Ο κάθε τύπος προϊόντος μετά αντικαθιστά την GetPrice με τη δική του έκδοση η οποία υπολογίζει την αξία βάση τρέχουσας τιμής, ημερομηνίας λήξης, θέσης των άστρων ή τιμής του πετρελαίου. Για να υπολογίσεις τη συνολική αξία, καλείς κάθε αντικέιμενο στο χαρτοφυλάκιο και του ζητάς να σου επιστρέψει την αξία του και τα προσθέτεις. Όταν προσθέσεις ένα νέο προϊόν, ο κώδικας σου δεν θα αλλάξει γιατί δεν θα καταλάβει καν τη διαφορά. Όπως πριν έβλεπε αντικείμενα τύπου BaseProduct, θα συνεχίσει να βλέπει αντικείμενα BaseProduct.
    Αν δεν είχες αντικείμενα, θα έπρεπε σε ένα loop να ελέγχεις τον τύπο κάθε αντικειμένου και αντίστοιχα να υπολογίσεις εσύ την αξία. Κάθε φορά που θα πρόσθετες ένα προϊόν θα έπρεπε να αλλάξεις τον κώδικα σου για να προσθέσεις τον τρόπο υπολογισμού για το καινούριο αντικείμενο. Για φαντάσου να το κάνεις αυτό για χρηματιστηριακά προϊόντα! Ξέρεις πόσο εύκολο είναι να υπολογίσεις την αξία ενός ομολόγου? Ενός δομημένου ομολόγου?

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

     


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  25-09-2007, 08:46 35369 σε απάντηση της 35352

    Απ: Ποτε και πως χρησιμοποιουμε κλασεις...???

    Thiseas:

    Το αν θα επιλέξεις, κλάσεις για να τα βάλεις μέσα, structures (φαντάζομαι οτι εννοείς την δομή struct στην C), απλά μεταβλήτες σε σειρά, λίστα, στοίβα ή οτιδήποτε άλλο, είναι θέμα προσωπικής επιλογής και πολλές φορές .... μόδας....
    Πριν βιαστούν να με "κακολογήσουνε" κάποιοι συνάδελφοι φανατικοί οπαδοί του Οbject Oriented μοντέλου.... να πω οτι σε πάρα πολύ σύνθετες και συχνά μεταβαλλόμενες καταστάσεις το Οbject Orient μοντέλο (κατά την ταπεινη μου άποψη πάντα) παρουσιάζει μερικές δυσκολίες στη συντήρηση.


    Thiseas δεν διαφωνώ με την ουσία της άποψης σου. Απλώς να τονίσω ότι στο 99,999% των εφαρμογών που αναπτύσουμε το Οbject Oriented μοντέλο είναι μονόδρομος. Πόσο συχνά θα φτιάξει κάποιος από εμάς driver ή κάτι τέτοιο. Σε όλες τις εμπορικο-λογιστικο-πελατο-διαχειρισιακο-διαδικασιακές εφαρμογές που καλούμαστε να υλοποιήσουμε οι κλάσεις είναι ιδανικές για να ενσωματώσουν το business logic της εφαρμογής και όλα εκείνα τα σύνθετα business rules που αν δεν τα διαχειρίζεσαι όλα μαζί κάπου κεντρικά σίγουρα θα χάσεις τη μπάλα!!!!

    Manos
  •  25-09-2007, 09:01 35370 σε απάντηση της 35369

    Απ: Ποτε και πως χρησιμοποιουμε κλασεις...???

    Μα και στους drivers, υπάρχουν frameworks για τον ευκολότερο προγραμματισμό χρησιμοποιώντας objects! Έχω χρησιμοποιήσει στο παρελθόν τα προϊόντα της Compuware τα οποία σου δίνουν δύο frameworks, ένα σε C και ένα σε C++ με objects.

    Τα frameworks είναι ο λόγος που τα αντικείμενα είναι μονόδρομος. Δεν υπάρχει πλέον framework ή βιβλιοθήκη η οποία να μην χρησιμοποιεί αντικείμενα - εκτός και αν απευθύνεται σε χρήστες C. Στο χώρο της Java, δεν τίθεται καν θέμα τί θα χρησιμοποιήσει κανείς. Στο χώρο της Microsoft η μη-object λογική επέζησε επειδή το IDE δεν έκανε εύκολη τη χρήση τους σε σενάρια data-binding. Η Microsoft είχε πολύ ωραία εργαλεία για να δείχνει πίνακες (κλασσικές client-server εφαρμογές) αλλά τίποτε το visual για αντικείμενα. Αυτό άλλαξε με το .NET και αλλάζει σε κάθε έκδοση του Visual Studio.

    Για δοκίμασε να πιάσεις δουλειά σε μία εταιρεία η οποία αναπτύσει εφαρμογές με το Customer Care Framework της Microsoft χωρίς να ξέρεις αντικείμενα ή patterns! Όλες οι βιβλιοθήκες που βγαίνουν πλέον στο χώρο της MS αλλά και τα προϊόντα απαιτούν όχι απλά κατανόηση των αντικειμένων αλλά και πολύ πιο προχωρημένων εννοιών όπως τα design patterns. Διαφορετικά είναι αδύνατη η χρήση τους.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  25-09-2007, 10:41 35373 σε απάντηση της 35370

    Απ: Ποτε και πως χρησιμοποιουμε κλασεις...???

    Για να επιστρέψω σε μια πιό απλή απάντηση στο αρχικό ερώτημα του συναδέλφου μας, θα πω το εξής υπεραπλουστευμένο:

    Μια function είναι για μας ένα blackbox που δέχεται παραμέτρους και υπολογίζει ένα αποτέλεσμα. Ολοι χρησιμοποιούμε functions, ή αλλιώς methods, και δεν τέθηκε ποτέ ερώτημα για τη χρησιμότητά τους γιατί αλλιώς θα γράφαμε σεντόνια από κώδικα που θα επαναλαμβαναν διεργασίες συνεχώς και θα ήταν από δυσανάγνωστα ως εντελώς μη συντηρήσιμα.

    Μια κλαση είναι για εμάς ένα ακόμα μεγαλύτερο blackbox που περιέχει methods, properties και από αυτή δημιουργούνται objects. Αν το δούμε έτσι, θα καταλάβουμε αυτόματα που βοηθάει εκείνη η περίεργη έννοια που λέγεται "encapsulation". Αυτό που κάνει μια κλάση (σε πρώτο επίπεδο) είναι να "κρύβει" ακόμα περισσότερες λεπτομέρειες από τον έξω κόσμο, βοηθώντας μας να επικεντρωθούμε στην ουσία αυτού που θέλουμε να φτιάξουμε χωρίς κάθε φορά που θέλουμε να αλλάξουμε λειτουργικότητα σε πιό υψηλό επίπεδο να "ανακατεύουμε" όλο μας τον κώδικα.

    Υπεραπλουστευμένο, αλλά πιστεύω οτι δίνει μια απάντηση στην αρχική απορία.

     


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  25-09-2007, 19:18 35410 σε απάντηση της 35373

    Απ: Ποτε και πως χρησιμοποιουμε κλασεις...???

    Guys... συγγνώμη,... ωραία η θεωρία περι Object Orientation αλλα αν διαβάσει κανείς το αρχικό Post νομίζω οτι καταλαβαίνει το εξής ερώτημα:

    Διαβάζω data. Πού τα βάζω?
    Σε κλάσεις, σε struct και με βάση ποιά κρητίρια τα επιλέγω....?

    Δεν λέω,... όμορφα τα ωραία λόγια... περι inheritance, encapsulation κλπ κλπ, αλλά μήπως μπερδεύουμε το business logic με το data logic και κατά συνέπεια τον φίλο μας?

    Αν όμως μετά την αναδιατύπωση εννοούμε "Πότε και Γιατί χρησιμοποιώ κλάσεις?" ή καλύτερα "Τι ειναι το object oriented model?" τότε.... "πάσο", else "μέσα"!


    Nothing to declare...
  •  25-09-2007, 20:01 35415 σε απάντηση της 35410

    Απ: Ποτε και πως χρησιμοποιουμε κλασεις...???

    Δεν νομίζω ότι τίθεται θέμα περι logic ή όχι. Προφανώς όμως για να δώσουμε στον φίλο μας να καταλάβει γιατι είναι καλύτερο να χρησιμοποιήσει objects, πρέπει να του δώσουμε και ορισμένα πλεονεκτήματα .. Άλλωστε και σε "data logic" όπως λες, έχουμε objects.. Και πολλά μάλιστα! Smile


    Παναγιώτης Κεφαλίδης

    "Για να επιτύχεις, θα πρέπει το πάθος σου για την επιτυχία να είναι μεγαλύτερο απο τον φόβο σου για την αποτυχία"

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Παρακαλώ διαβάστε τους όρους χρήσης.
  •  25-09-2007, 23:35 35424 σε απάντηση της 35415

    Απ: Ποτε και πως χρησιμοποιουμε κλασεις...???

    Βασικα διαβαζω ενα βιβλιο C#. Εχω καταλαβει σε θεωρητικη βαση τι κανουν οι περισσοτερες εννοιες απλα δεν εχω ακομη την εμπειρια να καταλαβω πως μπορω να βασισω ενα ολοκληρο project σε OO μοντελο.
    Μαλλον πρεπει να ασχοληθω με ενα πραγματικο μικρο ptoject και δοκιμασω καποια πραγματα εκει.
    Κατι σαν αυτο που περιεγραψα στην αρχη σκεφτομαι να κανω για αυτο ρωτησα αν μπορω να το χρησιμοποιω σε αυτο τον τομεα.
  •  26-09-2007, 09:18 35428 σε απάντηση της 35424

    Απ: Ποτε και πως χρησιμοποιουμε κλασεις...???

    Απ' ό,τι έχω παρατηρήσει σε όσους ασχολούνται για πρώτη φορά με τον ΟΟ προγραμματισμό, συνήθως σε πρώτη φάση απλά χρησιμοποιείς τις κλάσεις. Εξοικιώνεσαι δηλαδή με τα concepts (properties, methods, events, inheritance, κλπ) χρησιμοποιώντας τις υπάρχουσες κλάσεις που σου δίνει το περιβάλλον. Σε δεύτερη φάση, αρχίζεις να φτιάχνεις τις πρώτες κλάσεις σου και σε τρίτη φάση πλέον αρχίζεις να σχεδιάζεις τις εφαρμογές σου με πιο OO τρόπο, "κουμπώνοντας" το δικό σου μικρό ή μεγάλο framework.

    Ουσιαστικά το μεγάλο βήμα είναι από την δεύτερη στη τρίτη φάση. Είναι κάτι σαν satori! Μετά αντιμετωπίζεις τα προβλήματα με διαφορετικό τρόπο Big Smile Πρακτικά είναι εξαιρετικά δύσκολο να αρχίζεις να σχεδιάζεις OO εφαρμογές από την μια στιγμή στην άλλη. Σιγά-σιγά όμως θα βρεις την άκρη. Όρεξη για διάβασμα να έχεις...


    Vir prudens non contra ventum mingit
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems