Programming Note--Comparisons With Other Object Notations
OO Modula-2 | C++ | Java | |
---|---|---|---|
Inheritance : Arity | Single | multiple | single, but multiple interfaces |
: syntax | INHERIT | public: | extends |
Assignment semantics | reference | pointer (can be overloaded) | reference |
Predefined Base Class | no | no | Object |
Traced objects tag | TRACED (class) | n/a | all are traced |
Untraced objects tag | UNSAFEGUARDED (module) | all are untraced | n/a |
Class Definition/declaration | CLASS | class | class |
Abstract classes | ABSTRACT | n/a | abstract |
methods | ABSTRACT | virtual; =0 (after heading) | abstract |
Instantiation | declare & CREATE | declare or new, automatic | new |
Automatic Constructor | class body | method of class name | method of class name |
Automatic initialization | class body | constructor initializer clause | use constructor |
Destruction : manual | DESTROY (untraced) | ~ in front of class name | n/a |
: extra steps | FINALLY (untraced) | n/a | Finalize (called on collection) |
Overload constructors, operators | n/a | yes | yes |
Make data attributes immutable | READONLY | const | final (not strictly immutable) |
Override attribute components | n/a | n/a | yes, statically |
Parent permission to override | n/a | virtual | n/a |
keyword | OVERRIDE | virtual (optional) | redeclare in child class |
forbidding of | n/a | n/a | final |
Visibility to clients | REVEAL | public | public (each member) |
to implementation | put in implementation module | private | private (each member) |
to subclasses only | place in declaration | protected | protected |
to friend classes | n/a | friend | n/a |
Object Selection/assertion | GUARD..AS | n/a | n/a |
Class membership | ISMEMBER | n/a | instanceof |
Reference to : empty object | EMPTY | null | null |
: self | SELF | this | this |
Combining OO and Generics | define in generic def mod | use container classes | n/a |