You are on page 1of 2

Eiffel ObjectOrientation Static / Dynamic Typing Generic Classes Inheritance Feature Renaming Method Overloading Operator Overloading Higher

Order Functions Lexical Closures Garbage Collection Uniform Access Class Variables / Methods Reflection Access Control Design by Contract Multithreading Regular Expressions Pointer Arithmetic Language Integration Built-In Security Capers Jones Language Level* Pure Static Yes Multiple Yes No Yes Agents (with version 5) Yes (inline agents) Mark and Sweep or Generational Yes No Yes (as of version 5) Selective Export Yes ImplementationDependent No No C, C++, Java No 15 Pure

Smalltalk Pure

Ruby

Python Hybrid Dynamic N/A Multiple No No Yes Lambda Expressions Yes (since 2.1) Reference Counting No No Yes Name Mangling No Yes Standard Library No C, C++, Java No? N/A

Perl Add-On / Hybrid Dynamic N/A Multiple No No Yes Yes Yes Reference Counting No No Yes None No No Built-in No C, C++ Yes (perlsec) 15

Dynamic N/A Single No No Yes Blocks Yes (blocks) Mark and Sweep or Generational N/A Yes Yes Protected Data, Public Methods No ImplementationDependent No No C No 15

Dynamic N/A Single class, multiple "mixins" Yes No Yes Blocks Yes (blocks) Mark and Sweep Yes Yes Yes public, protected, private Add-on Yes Built-in No C, C++, Java Yes N/A

Object-Orientation Many languages claim to be Object-Oriented. While the exact definition of the term is highly variable depending upon who you ask, there are several qualities that most will agree an Object-Oriented language should have: 1. 2. 3. 4. 5. 6. Encapsulation/Information Hiding Inheritance Polymorphism/Dynamic Binding All pre-defined types are Objects All operations performed by sending messages to Objects All user-defined types are Objects

For the purposes of this discussion, a language is considered to be a "pure" Object-Oriented languages if it satisfies all of these qualities. A "hybrid" language may support some of these qualities, but not all. In particular, many languages support the first three qualities, but not the final three. So how do our languages stack up? Eiffel Encapsulation / Information Hiding Yes Inheritance Yes Polymorphism / Dynamic Binding Yes All pre-defined types are Objects Yes All operations are messages to Objects Yes All user-defined types are Objects Yes Smalltalk Yes Yes Yes Yes Yes Yes Ruby Yes Yes Yes Yes Yes Yes Python No Yes Yes Yes No Yes Perl Yes Yes Yes No No No

You might also like