On 4/29/16 6:02 PM, Ian S. King wrote:
I would actually argue that C++, Java and C# are not object-oriented
languages.  They are languages with syntax that supports object-oriented
programming - note that the original C++ was a preprocessor for a C
compiler.

I'll disagree with this on behalf of C# and Java. (C++ I agree with; the OO portions of C++ are very weak. Then there are the metaprogramming facilities which make me wish maybe Strostrup had played with Lisp a bit more...)

C# and Java provide real objects, and real reflective capabilities. They're built on top of a stack-oriented virtual machine runtime (and JIT compilation) that was explicitly designed to support objects as first-class entities. With reflection, one can find out at runtime what methods and fields an object exposes, iterate over them, invoke methods, and use that metadata programmatically for all manner of useful things. Further, C# and Java's objects provide real encapsulation and real run-time safety -- private data is really private, you can't poke at random memory (*). They're not as pure of an OO language as Smalltalk is and they're not nearly as flexible, but few languages are :).

- Josh

(*) well, you can in C# (unsure about Java) but you have to explicitly state that you're doing something unsafe when you do it. It's handy to have available but is rarely needed.

Reply via email to