Προς το περιεχόμενο

Το μέλλον των γλωσσών προγραμματισμού


Skeftomilos

Προτεινόμενες αναρτήσεις

Δημοσ.

Xmmm...., telika ontws exoun diafora...

 

Apo to MSDN:

 

Structs vs. Classes

Structs may seem similar to classes, but there are important differences that you should be aware of. First of all, classes are reference types and structs are value types. By using structs, you can create objects that behave like the built-in types and enjoy their benefits as well.

 

Opote, paramenei anepafi i timi....

 

Pantws einai ligo parakseno pou se afinei i glwssa na kaneis implement ena interface...

Δημοσ.

H απάντηση ειναι , οτι λόγω boxing (που αναφέρθηκε ώς πλεονέκτημα), το c "αντιγράφεται" και δεν ειναι το πραγματικό c. Αρα η αλλαγή γινεται στο αντίγραφο οποτε παραμένει 1000.

Δημοσ.

Φοβερό quiz bandito! Πραγματικά πολύ χρήσιμο να το ξέρει κανείς. :grin:

 

Θα πω τώρα μια γνώμη που μπορεί να είναι και λάθος. Μία οντότητα όπως Employee ή Clerk πρέπει να είναι Class και όχι Struct. Υποψήφιες για Struct είναι αυτές που ονομάζω "σύνθετες τιμές", για παράδειγμα το Color. Ένα χρώμα αποτελείται από συντελεστές RGB (Red, Green, Blue), και μπορεί να έχει και άλλες παραγόμενες ιδιότητες όπως Brightness, Hue και Saturation. Αν όμως έχουμε δύο αντικείμενα με ιδιότητα "Χρώμα", ακόμα κι αν έχουν το ίδιο χρώμα (π.χ. κόκκινο) δεν έχει νόημα να μοιράζονται την ίδια τιμή δι αναφοράς. Σε αυτή την περίπτωση αν αλλάζαμε το χρώμα του ενός αντικειμένου ( Object1.Color.Brightness += 10; ) θα άλλαζε και το χρώμα του άλλου, κάτι που δε θέλουμε προφανώς.

 

Άλλες σύνθετες τιμές κατάλληλες για Struct είναι τα Size, Point και Rectangle. Κατά τη γνώμη μου και το Font είναι καλός υποψήφιος για Struct αλλά η Microsoft προτίμησε να το κάνει Class, ίσως για compatibility με τη VB6.

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

 

Υπάρχουν στιγμές που το θέλουμε. Ανάλογα με το τι θέλουμε να φτιάξουμε.

Anyway κατά τη γνώμη μου είναι χαζό να χρησιμοποιούμε structs όταν υπάρχουν τα classes.

Δημοσ.

Χμ, έχεις ένα δίκιο. Ο garbage collector είναι ταχύτατος και μπορεί να "μαζεύει" εκατοντάδες χιλιάδες αντικείμενα το δευτερόλεπτο, επομένως αν θέλει κανείς μπορεί να χρησιμοποιεί παντού αντικείμενα χωρίς πολλές τύψεις. :) Καμία σχέση με τη VB6 με memory management μαύρο χάλι. :neutral:

Δημοσ.

Άσε που αποδεδειγμένα οι καινούργιοι compilers (gcc) μικρά σε δομή classes τα μετατρέπουν κατά το compile σε inline κώδικα οπότε η πτώση ταχύτητας απλά δεν υπάρχει.

Ακόμη και αν χρησιμοποιείς γλώσσα με vm (Java,C# ... ) όπως ήδη είπες το garbage collection για μικρά classes είναι πολύ γρήγορο.

Δημοσ.

Για παράδειγμα σου λέω ότι σε ένα project (C++) είχα ένα class που είχε 2-3 parent classes και έκανε πάρα πολλούς υπολογσιμούς (100% CPU). Περίμενα μεγάλη πτώση της ταχύτητας υπολογισμών λόγω εκτέλεσης και διαχείρισης μιας τεράστιας λίστας objects του class αυτού. Εντυπωσιάστηκα με την ταχήτυτα... δεν το περίμενα... μπορούσε να αρχικοποιήσει 300000 objects το δευτερόλεπτο σε έναν PIII 933 !!!

O αρχικός κώδικας που είχε γραφτεί για τους υπλογισμούς ήταν procedural πάνω σε μια λίστα με new /delete structs, έβγαζε τα ίδια νούμερα!

Δημοσ.
Για παράδειγμα σου λέω ότι σε ένα project (C++) είχα ένα class που είχε 2-3 parent classes και έκανε πάρα πολλούς υπολογσιμούς (100% CPU). Περίμενα μεγάλη πτώση της ταχύτητας υπολογισμών λόγω εκτέλεσης και διαχείρισης μιας τεράστιας λίστας objects του class αυτού. Εντυπωσιάστηκα με την ταχήτυτα... δεν το περίμενα... μπορούσε να αρχικοποιήσει 300000 objects το δευτερόλεπτο σε έναν PIII 933 !!!

O αρχικός κώδικας που είχε γραφτεί για τους υπλογισμούς ήταν procedural πάνω σε μια λίστα με new /delete structs' date=' έβγαζε τα ίδια νούμερα![/quote']

 

Δεν κάνουν και τιποτα μαγικό οι compilers.

Και οι κλάσεις σε επίπεδο compiler δεν ειναι τιποτα μαγικό.

Ανάλογα με το case το new μπορεί να είναι φτηνότερο απο το malloc, και τούμπαλιν. Αν κάτι μπορεις να το κάνεις με malloc / realloc (αν μπορεις, δεν ειναι πάντα ευκολο) η ταχύτητα θα ειναι σιγουρα καλυτερη.

 

@skeftomilos

... VB6 με memory management ...

 

Την ποια; :)

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...