Probably true.
> With no regard at all for what data tranformation is really being done, or for the layout of the data.
I agree that OO design is usually not done with regard for the layout of the data.
> Or for that matter, without the basic understanding that where there's one thing, there's probably more than one.
Say what? In C++, you'd simply create another object that is another instance of the Rocket class. Behold, "more than one".
> Though there are a lot of performance penalties for this kind of design, the most significant one is that it doesn't scale. At all. One hundred rockets costs one hundred times as much as one rocket.
Well, see, one hundred rockets have one hundred times the data that one rocket has. I don't see how you can avoid that, no matter how you represent the data or whether you do it as OO or something else.
But you don't duplicate the code 100 times, just the data. You might also have 100 instances of a pointer to a virtual function table, which means you've wasted 100 times the size of one pointer. That's not impressing me with the inefficiency here.
So you can color me unimpressed with this whole argument on lie #2.