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.