Objectmix
Tags Register Mark Forums Read

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?...


Object Mix > Programming Languages > c++ > The C++ Object Model: Good? Bad? Ugly?

c++ comp.lang.c++ usenet archive

Reply

 

LinkBack Thread Tools
  #1  
Old 10-31-2008, 10:02 PM
Junior Member
 
Join Date: Nov 2009
Posts: 0
Application Development is on a distinguished road
Default The C++ Object Model: Good? Bad? Ugly?

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?
Reply With Quote
  #2  
Old 11-01-2008, 03:12 AM
Junior Member
 
Join Date: Nov 2009
Posts: 0
Application Development is on a distinguished road
Default Re: The C++ Object Model: Good? Bad? Ugly?

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
Reply With Quote
  #3  
Old 11-01-2008, 04:32 AM
Junior Member
 
Join Date: Nov 2009
Posts: 0
Application Development is on a distinguished road
Default Re: The C++ Object Model: Good? Bad? Ugly?

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
Reply With Quote
  #4  
Old 11-01-2008, 05:41 AM
Junior Member
 
Join Date: Nov 2009
Posts: 0
Application Development is on a distinguished road
Default Re: The C++ Object Model: Good? Bad? Ugly?

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.



Reply With Quote
  #5  
Old 11-03-2008, 02:32 PM
Junior Member
 
Join Date: Nov 2009
Posts: 0
Application Development is on a distinguished road
Default Re: The C++ Object Model: Good? Bad? Ugly?

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.

Reply With Quote
  #6  
Old 11-03-2008, 02:44 PM
Junior Member
 
Join Date: Nov 2009
Posts: 0
Application Development is on a distinguished road
Default Re: The C++ Object Model: Good? Bad? Ugly?

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?).
Reply With Quote
  #7  
Old 11-03-2008, 02:54 PM
Junior Member
 
Join Date: Nov 2009
Posts: 0
Application Development is on a distinguished road
Default Re: The C++ Object Model: Good? Bad? Ugly?

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.



Reply With Quote
  #8  
Old 11-03-2008, 05:25 PM
Junior Member
 
Join Date: Nov 2009
Posts: 0
Application Development is on a distinguished road
Default Re: The C++ Object Model: Good? Bad? Ugly?

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
Reply With Quote
  #9  
Old 11-03-2008, 05:55 PM
Junior Member
 
Join Date: Nov 2009
Posts: 0
Application Development is on a distinguished road
Default Re: The C++ Object Model: Good? Bad? Ugly?

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.



Reply With Quote
  #10  
Old 11-03-2008, 11:51 PM
Junior Member
 
Join Date: Nov 2009
Posts: 0
Application Development is on a distinguished road
Default Re: The C++ Object Model: Good? Bad? Ugly?

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
Reply With Quote
Reply

Thread Tools



All times are GMT -5. The time now is 12:16 PM.