The C++ Object Model: Good? Bad? Ugly? : c++
This is a discussion on The C++ Object Model: Good? Bad? Ugly? within the c++ forums in Programming Languages category; What I like about the C++ object model: that the data portion of the class IS the object (dereferencing an object gets you the data of a POD object). What I don't like about the C++ object model: that most OO features are not available for class object design without loss of POD-ness. So, I'm more than leaning toward "bad" because of the limitations and that the language doesn't distinguish what is of very key importance. How do you feel about the object model?...
| c++ comp.lang.c++ usenet archive |
![]() |
| | LinkBack | Thread Tools |
|
#1
| |||
| |||
| class IS the object (dereferencing an object gets you the data of a POD object). What I don't like about the C++ object model: that most OO features are not available for class object design without loss of POD-ness. So, I'm more than leaning toward "bad" because of the limitations and that the language doesn't distinguish what is of very key importance. How do you feel about the object model? |
|
#2
| |||
| |||
| On Nov 1, 6:02*am, tonytech08 <tonytec...@gmail.com> wrote: > What I like about the C++ object model: that the data portion of the > class > IS the object (dereferencing an object gets you the data of a POD > object). > > What I don't like about the C++ object model: that most OO features > are not > available for class object design without loss of POD-ness. > > So, I'm more than leaning toward "bad" because of the limitations and > that the language doesn't distinguish what is of very key importance. > How do you feel about the object model? Hi I really don't get completely, what you mean, but for me, the important things about C++ object model are simplicity, efficiency and extenability. For example the representation of concrete classes like Date in memory is exactly like a POD Date struct. The size of object of a derived class is the size of base class sub-object and its data members. The size of an object of a class with virtual functions increases just by the size of virtual v-ptr. The above layout is extended for classes with static members, multiple inheritance, virtual base classes and RTTI. In all, you can see these three items. I hope it helps you. Regards, Saeed Amrollahi |
|
#3
| |||
| |||
| On Nov 1, 4:02*am, tonytech08 <tonytec...@gmail.com> wrote: > What I like about the C++ object model: that the data portion > of the class IS the object (dereferencing an object gets you > the data of a POD object). No it doesn't. > What I don't like about the C++ object model: that most OO > features are not available for class object design without > loss of POD-ness. > So, I'm more than leaning toward "bad" because of the > limitations and that the language doesn't distinguish what is > of very key importance. How do you feel about the object > model? The "object model" in the C++ standard is very low-level. Intentionally. It is designed for you to build on. The object model of the classes you write is for you to design. It can be more OO than many other languages (e.g. Java or C#), when that's appropriate. Just as it can drop the OO model completely when that's appropriate (e.g value objects). The essential point of C++ is that it doesn't impose any application level object model; it lets you use whatever is appropriate. -- James Kanze (GABI Software) email:james.kanze@gmail.com Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34 |
|
#4
| |||
| |||
| On Oct 31, 10:02*pm, tonytech08 <tonytec...@gmail.com> wrote: > What I like about the C++ object model: that the data portion of the > class > IS the object (dereferencing an object gets you the data of a POD > object). Definitely not. Data is just data. The true power of the C++ Object Model is the object's behaviour and extensability. > > What I don't like about the C++ object model: that most OO features > are not > available for class object design without loss of POD-ness. > > So, I'm more than leaning toward "bad" because of the limitations and > that the language doesn't distinguish what is of very key importance. > How do you feel about the object model? Objects sometimes need to do more than just store data. Behaviour is nice to have. That inludes 'behaviour' at construction and expected behaviours through a secure interface. It makes maintaining and extending code easy, simple. Write a program that uses some given polymorphic type hierarchy and have your customer invent / add some new improved class of his own. The customer's new class works with your original program without changing a single line of code (except maybe an include). You can't do that with PODs only. Whats nice is you can bend the language to choose what path you prefer. |
|
#5
| |||
| |||
| On Nov 1, 2:12*am, ebony.s...@gmail.com wrote: > On Nov 1, 6:02*am, tonytech08 <tonytec...@gmail.com> wrote: > > > What I like about the C++ object model: that the data portion of the > > class > > IS the object (dereferencing an object gets you the data of a POD > > object). > > > What I don't like about the C++ object model: that most OO features > > are not > > available for class object design without loss of POD-ness. > > > So, I'm more than leaning toward "bad" because of the limitations and > > that the language doesn't distinguish what is of very key importance. > > How do you feel about the object model? > > Hi > I really don't get completely, what you mean, but for me, the > important things about C++ object model are simplicity, efficiency and > extenability. For example the representation of concrete classes like > Date in memory is exactly like a POD Date struct. "Concrete class"? You are using that to mean "struct". > The size of object > of a derived class is the size of base class sub-object and its data > members. The size of an object of a class with virtual functions > increases just by the size of virtual v-ptr. That's "the problem" I implied: that quickly the object model destroys the concept of a class looking like the data portion in memory. |
|
#6
| |||
| |||
| On Nov 1, 3:32*am, James Kanze <james.ka...@gmail.com> wrote: > On Nov 1, 4:02*am, tonytech08 <tonytec...@gmail.com> wrote: > > > What I like about the C++ object model: that the data portion > > of the class IS the object (dereferencing an object gets you > > the data of a POD object). > > No it doesn't. class SomePODClass { public: int first_int; int second_int; void Func1(){} }; SomePODClass X; int first_int_in_obj = *(int*)&X; // this is not pretty, but true > > > What I don't like about the C++ object model: that most OO > > features are not available for class object design without > > loss of POD-ness. > > So, I'm more than leaning toward "bad" because of the > > limitations and that the language doesn't distinguish what is > > of very key importance. *How do you feel about the object > > model? > > The "object model" in the C++ standard is very low-level. > Intentionally. *It is designed for you to build on. *The object > model of the classes you write is for you to design. *It can be > more OO than many other languages (e.g. Java or C#), when that's > appropriate. *Just as it can drop the OO model completely when > that's appropriate (e.g value objects). *The essential point of > C++ is that it doesn't impose any application level object > model; it lets you use whatever is appropriate. It does restrict usage of OO concepts unless one jettisons the "value object" concept, which is unfortunate (and unnecessary?). |
|
#7
| |||
| |||
| On Nov 1, 4:41*am, Salt_Peter <pj_h...@yahoo.com> wrote: > On Oct 31, 10:02*pm, tonytech08 <tonytec...@gmail.com> wrote: > > > What I like about the C++ object model: that the data portion of the > > class > > IS the object (dereferencing an object gets you the data of a POD > > object). > > Definitely not. Data is just data. The true power of the C++ Object > Model is the object's behaviour and extensability. Depends on how you want to view it. Sure, class = data+behavior, but I wasn't talking about fundamental "definitions" but rather usage of class objects, one aspect of which is manipulating the data directly for, say for example, in a memory management scenario. That one has to be severely restricted from using OO concepts without affecting the representation in memory of the data portion, is unfortunate. I'm not sure how much could be or could have been done to make the situation better. For example, was it really necessary to disallow constructors with initialization lists? I mean, no vptr needed for that! > > > What I don't like about the C++ object model: that most OO features > > are not > > available for class object design without loss of POD-ness. > > > So, I'm more than leaning toward "bad" because of the limitations and > > that the language doesn't distinguish what is of very key importance. > > How do you feel about the object model? > > Objects sometimes need to do more than just store data. Behaviour is > nice to have. That inludes 'behaviour' at construction and expected > behaviours through a secure interface. It makes maintaining and > extending code easy, simple. > > Write a program that uses some given polymorphic type hierarchy and > have your customer *invent / add some new improved class of his own. > The customer's new class works with your original program without > changing a single line of code (except maybe an include). > > You can't do that with PODs only. Whats nice is you can bend the > language to choose what path you prefer. That's only one usage scenario though. A LOT of usefull stuff can be built without heavy class objects "weighed down" with vptrs and other stuff. I of course am referring to that other scenario so talking about the scenario you mentioned isn't relevant. |
|
#8
| |||
| |||
| On Nov 3, 8:44*pm, tonytech08 <tonytec...@gmail.com> wrote: > On Nov 1, 3:32*am, James Kanze <james.ka...@gmail.com> wrote: > > On Nov 1, 4:02*am, tonytech08 <tonytec...@gmail.com> wrote: > > > What I like about the C++ object model: that the data > > > portion of the class IS the object (dereferencing an > > > object gets you the data of a POD object). > > No it doesn't. > > class SomePODClass > { > * public: > * *int first_int; > * *int second_int; > * *void Func1(){} > }; > SomePODClass X; > int first_int_in_obj = *(int*)&X; // this is not pretty, but true But it's only true for POD types, and only because of constraints of C compatiblity. The data portion of the class isn't the object in general. > > > What I don't like about the C++ object model: that most OO > > > features are not available for class object design without > > > loss of POD-ness. > > > So, I'm more than leaning toward "bad" because of the > > > limitations and that the language doesn't distinguish what > > > is of very key importance. *How do you feel about the > > > object model? > > The "object model" in the C++ standard is very low-level. > > Intentionally. *It is designed for you to build on. *The > > object model of the classes you write is for you to design. > > *It can be more OO than many other languages (e.g. Java or > > C#), when that's appropriate. *Just as it can drop the OO > > model completely when that's appropriate (e.g value > > objects). *The essential point of C++ is that it doesn't > > impose any application level object model; it lets you use > > whatever is appropriate. > It does restrict usage of OO concepts unless one jettisons the > "value object" concept, which is unfortunate (and > unnecessary?). It restricts the use of OO concepts to classes designed to be used with OO concepts. It supports non OO concepts as well, which are more appropriate in some cases. -- James Kanze (GABI Software) email:james.kanze@gmail.com Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34 |
|
#9
| |||
| |||
| On Nov 3, 4:25*pm, James Kanze <james.ka...@gmail.com> wrote: > On Nov 3, 8:44*pm, tonytech08 <tonytec...@gmail.com> wrote: > > > > > > > On Nov 1, 3:32*am, James Kanze <james.ka...@gmail.com> wrote: > > > On Nov 1, 4:02*am, tonytech08 <tonytec...@gmail.com> wrote: > > > > What I like about the C++ object model: that the data > > > > portion of the class IS the object (dereferencing an > > > > object gets you the data of a POD object). > > > No it doesn't. > > > class SomePODClass > > { > > * public: > > * *int first_int; > > * *int second_int; > > * *void Func1(){} > > }; > > SomePODClass X; > > int first_int_in_obj = *(int*)&X; // this is not pretty, but true > > But it's only true for POD types, Well that's why I added the parenthetical part in my original post: to make clear I was referring to what I like about the C++ model and wish it wouldn't get abberated so quickly by changing the memory representation of the data portion. 'POD' was very key for my thought, though could have been worded better to show that I guess. > and only because of > constraints of C compatiblity. *The data portion of the class > isn't the object in general. I tend to think of the data portion (noun, vs. behavior=verb) as "the thing" because that's what get's operated on and maybe even directly manipulated. I'm not willing to go to a paradigm that only allows data manipulation via class methods. That is way to high level and constraining for me. A lot of people complain about C and C++ because of the memory management, but for me, that's one of the things I like about it! GC breaks MY programming model for example. > > > > > What I don't like about the C++ object model: that most OO > > > > features are not available for class object design without > > > > loss of POD-ness. > > > > So, I'm more than leaning toward "bad" because of the > > > > limitations and that the language doesn't distinguish what > > > > is of very key importance. *How do you feel about the > > > > object model? > > > The "object model" in the C++ standard is very low-level. > > > Intentionally. *It is designed for you to build on. *The > > > object model of the classes you write is for you to design. > > > *It can be more OO than many other languages (e.g. Java or > > > C#), when that's appropriate. *Just as it can drop the OO > > > model completely when that's appropriate (e.g value > > > objects). *The essential point of C++ is that it doesn't > > > impose any application level object model; it lets you use > > > whatever is appropriate. > > It does restrict usage of OO concepts unless one jettisons the > > "value object" concept, which is unfortunate (and > > unnecessary?). > > It restricts the use of OO concepts to classes designed to be > used with OO concepts. * Not really, since one can have POD classes with methods, just not CERTAIN methods (you are suggesting that "classes designed to be used with OO concepts" are those heavyweight classes that break PODness, right?). You seem to be saying that POD classes are not supported or at least not encouraged. That would be a real downer if true. I'd like to see more support in the langauge for POD classes. I don't know how much can be implemented before it becomes impossible. Certainly initializing constructors can be had? Polymorphism not, but only NOT because of the way C++ implements it? > It supports non OO concepts as well, > which are more appropriate in some cases. |
|
#10
| |||
| |||
| tonytech08 wrote: > On Nov 3, 4:25 pm, James Kanze <james.ka...@gmail.com> wrote: >> It restricts the use of OO concepts to classes designed to be >> used with OO concepts. > > Not really, since one can have POD classes with methods, just not > CERTAIN methods (you are suggesting that "classes designed to be used > with OO concepts" are those heavyweight classes that break PODness, > right?). What's a "heavyweight class"? > You seem to be saying that POD classes are not supported or > at least not encouraged. Where? They are supported, a C struct is also a C++ struct. > That would be a real downer if true. I'd like > to see more support in the langauge for POD classes. I don't know how > much can be implemented before it becomes impossible. Certainly > initializing constructors can be had? Polymorphism not, but only NOT > because of the way C++ implements it? > An instance of a polymorphic class has to contain information about its type, so it can't be the same as a POD class. Constructors and (non-virtual) methods are irrelevant. -- Ian Collins |



