You are on page 1of 15

Comparison of programming languages

(object-oriented programming)
From Wikipedia, the free encyclopedia
Jump to navigationJump to search
This article may require cleanup to meet Wikipedia's quality
standards. The specific problem is: This article's reference
sectioncontains many footnotes, but lists no external references
or sources. Please help improve this article if you can. (June
2013)(Learn how and when to remove this template message)

Programming language comparisons

 General comparison

 Assignment

 Basic syntax

 Basic instructions

 Comments

 Control flow

 Foreach loops

 While loops

 For loops

 Do-while

 Exception handling

 Enumerated types

 Anonymous functions

 Conditional expressions

 Functional instructions

 Arrays

 Associative arrays

 Scope

 String operations

 String functions

 Higher-order functions

 Type systems

 List comprehension

 Object-oriented programming

 Object-oriented constructors

 Operators

 Evaluation strategy

 List of "Hello World" programs


 Languages with dependent types

 Comparison of type systems

Comparison of individual languages [show]

 v
 t
 e

This comparison of programming languages compares how object-oriented


programming languages such as C++, Java, Smalltalk, Object Pascal, Perl, Python, and
others manipulate data structures.

Contents

 1Object construction and destruction


 2Class declaration
 3Class members
o 3.1Constructors and destructors
o 3.2Fields
o 3.3Methods
o 3.4Properties
 3.4.1Manually implemented
 3.4.2Automatically implemented
o 3.5Overloaded operators
 3.5.1Standard operators
 3.5.2Indexers
 3.5.3Type casts
 4Member access
 5Member availability
 6Special variables
 7Special methods
 8Type manipulation
 9Namespace management
 10Contracts
 11See also
 12References and notes

Object construction and destruction[edit]

construction destruction

data variable type ref to class .


ABAP create object variable [2][3]

Objects
«exporting parameter = argument». [1]
class variable«(parameters)»; or
C++ (STL) class *variable = new class«(parameters delete pointer;
)»;

variable.Dispose
C#
(); [3]

Java class variable = new class(parameters); [3]

destroy(variable
D
);

class «instance
handle» { «properties/data members delete instance
eC
assignments, instance method handle;
overrides»}

class *variable = [[class alloc ]


init]; or
Objective- [variable releas
class *variable = [[class alloc
C (Cocoa) e];
] initWithFoo:parameter «bar:parameter
...»];

Swift let variable = class(parameters)

del variable [3] (No


Python variable = class(parameters)
rmally not needed)

Visual variable.Dispose
Dim variable As New class(parameters)
Basic .NET () [3]

Xojo Dim variable As New class(parameters) variable = Nil

create variable or
[3]
Eiffel create «{TYPE}» variable.make_foo
«(parameters)» or
variable := create {TYPE} or
variable := create {TYPE}.make_foo
«(parameters)»

unset($variable)
PHP $variable = new class«(parameters)»;
; [3]

«my »$variable = class- undef($variable)


Perl 5
>new«(parameters)»; ;

«my »$variable = class.new«(parameters) $variable.undefi


Perl 6
»; ne;

Ruby variable = class.new«(parameters)» [3]

Remove-
Windows $variable = New-Object «-TypeName»
Variable «-Name»
PowerShell class ««-ArgumentList» parameters»
variable

let variable = new class «parameters» or


OCaml
let variable = object members end [4]
[3]

let variable = «new »class(«parameters»


F#
)

The class is an Object.


Just send a message to a class, usually #new or #new: ,
and many others, for example:
Smalltalk

Point x: 10 y: 20.
Array with: -1 with: 3 with: 2.

var variable =
new class«(parameters)» or [3]
JavaScript
var variable =
{ «key1: value1«, key2: value2 ...»»}
Object ClassVar := ClassType.ConstructorName(p
Pascal(Del ClassVar.Free;
arameters);
phi)

val obj = new Object // no parameters


val obj = new Object(arg0, arg1,
arg2...)
val obj = Object(arg0, arg1, arg2...) // [3]
Scala
case class
val obj = new Object(arg0, arg1, param1
= value1, ...) // named parameters

INVOKE class "NEW" RETURNING variable or


COBOL
MOVE class::"NEW" TO variable

Cobra variable «as class» = class(parameters) variable.dispose

(setq variable (create (class <some-


ISLISP class> [:field-1 value-1 [:field-2 [3]

value-2] ..])))

Class declaration[edit]

class protocol namespace

class name definition «inheriting


from parentclass». «interfaces: inte
AB rfaces.» interface name
AP method_and_field_declarations endcla . membersendin N/A
Obj
ects ss. terface.
class name implementation. method_im
plementations endclass.

C+
+ class name« :
namespac
(ST public parentclasses [5] » { members };
e name {
L)
members
}
C#
interface name
module n
class name« : «parentclass»«, interf « :parentinter
D ame;
aces»» { members } faces»
members
{members }

class name« : base class» { «default


namespac
eC member values assignments»
e name;
«members» }

package
Jav name;mem
a
interface name bers
class name« extends parentclass»« im « extendsparen
plements interfaces» { members } tinterfaces»
{members } namespac
PH e name;m
P
embers

@interface name« : parentclass» [6] «< p


@protocol name
Obj rotocols >» { instance_fields }metho
ecti «<parentprotoc
d_and_property_declarations @end [8]

ve- ols >»


C @implementation name
members @end
method_implementations @end [7]

protocol name«
Swi class name« : «parentclass»«, protoc :parentprotoc
ft ols»» { members } ols» {members
}

__all__
=
Pyt class name«(parentclasses[5])»: [9]
[member1
hon Tab ↹ members
,member2
,... ]

Class name« Inherits parentclass»« I


Namespac
Vis mplements interfaces» Interface name
ual e name
members « Inheritspare
Bas members
ic End Class ntinterfaces»
End
.NE members Namespac
T End Interface e

Interface name Module n


Class name« Inherits parentclass»« I
« Inheritspare ame
Xoj mplements interfaces»
ntinterfaces» members
o members
members End
End Class
End Interface Module

class name« inherit parentclasses[5]»


Eiff members N/A
el
end

package
package name; «@ISA =
Perl name;mem
qw(parentclasses[5]);» members 1;
bers

role name
class name «is parentclass «does role module n
Perl [5]
«is parentclass ... »» «does role «does role ame {mem
6
«does role ...»» {members } ...»» {members bers }
}

module n
class name« < parentclass»
Ru ame
members
by members
end
end

Wi
ndo
ws
Po N/A
wer
She
ll

class name «parameters» =


module n
OC object «(self)» «inherit parentclass
ame
aml «parameters» «inheritparentclass
members
«parameters» ...[5]»» members end
type name«(parameters)» «as this» =
class «inherit parentclass«(paramete
rs)» «as base»» members type name = namespac
F# «interface interface with implementa interfacemembe e name
tion rs end members
«interface interface withimplementat
ion ...»» end

Sm
[10] [11]
allt
alk

Jav
aSc class name
ript
«extends parentclass» { members }
(ES
6)

'ClassName = Class' «(ClassParent,


Interfaces)»
private
Obj // Private members(include Methods
ect and Fields)
Pas package
public
cal name;mem
// Public members
(De bers
lphi protected
) // Protected members
published
// Published members
end;

trait TraitName
extends
class ConcreteClass(constructor
OtherTrait1
params)
with
extends ParentClass package
Sca OtherTrait2
la with Trait1 with Trait2 with Trait2 { name
with
// members
OtherTrait3 {
}
// members
}
CLASS-ID. name« INHERITS« FROM»
parentclasses». INTERFACE-
ID.name« INHER
FACTORY« IMPLEMENTS interfaces».
ITS« FROM»
class-members
CO interfaces».
END FACTORY.
BO members N/A
L OBJECT« IMPLEMENTS interfaces».
END
instance-members
INTERFACE name
END OBJECT.
.
END CLASS name.

namespac
interface name
class name «inherits parentclass» e name
Co «inheritsparen
«implements interfaces» T ab
bra tinterfaces»
T ab ↹ members ↹ membe
T ab ↹ members
rs

(defclass name (base-class)


ISL ((x :initform 0 :accessor get-
ISP
x :initarg x)) (:abstractpnil))

Class members[edit]
Constructors and destructors[edit]

constructor destructor finalizer[12]

methods
constructor «importing parameter
ABAP = argument»
Object N/A
method
s
constructor. instructions endmeth
od. [13]

~class()
C++ class(«parameters») «: initialize
{ instructions
(STL) rs [14] » { instructions }
}

void ~class()
class(«parameters»)
C# Dispose(){ ins { instruc
{ instructions }
tructions} tions}
~this()
this(«parameters»)
D { instruc
{ instructions }
tions }

~class()
eC class() { instructions } { instructions
}

void
finalize(
class(«parameters»)
Java )
{ instructions }
{instruct
ions }

[15] [16]
Eiffel

- (id)init
{ instructions... return self; -
-
Object } or
(void)dealloc (void)fin
ive-C - (id)initWithFoo:parameter
(Coco {instructions alize
a) «bar:parameter {instruct
}
...» { instructions... return ions }
self; }

deinit
init(«parameters»)
Swift { instructions
{ instructions }
}

def
__del__(s
Pytho def __init__(self«, parameters»): elf):
n T ab ↹ instructions T ab
↹ instru
ctions

Overrides
Visual Sub New(«parameters») Sub Dispose()
Sub
Basic instructions instructions
.NET Finalize(
End Sub End Sub
)
instructi
ons
End Sub

Sub
Sub Constructor(«parameters»)
Destructor()
Xojo instructions
instructions
End Sub
End Sub

function
function
__destruct()
PHP __construct(«parameters»)
{instructions
{ instructions }
}

sub new { my
sub DESTROY {
($class«, parameters») = @_; my
my ($self) =
Perl $self = {}; instructions
@_; instructio
... bless($self, $class); return
ns }
$self; }

submethod BUILD
{ instructions } or submethod
«multi » method DESTROY
Perl 6
new(««$self: »parameters») { {instructions
self.bless(*, field1 =>value1, }
...); ... instructions }

def initialize«(parameters)»
Ruby instructions N/A
end

Windo
ws N/A
Power
Shell

OCam initializer instructions [17] N/A


l
override
member this.Fina
do instructions or
F# this.Dispose() lize()
new(parameters) = expression [18]
=instructions = instruc
tions

JavaSc function name(«parameters») { ins


N/A
ript tructions } [19]

JavaSc constructor(«parameters»)
ript
{ instructions }
(ES6)

COBO N/A[20] N/A


L

def dispose
cue init(parameters)
T ab
Cobra T ab ↹ base.init
↹ instruction
T ab ↹ instructions
s

(defmethod initialize-object
ISLIS
((instance <class-name>)
P
initvalues)

Fields[edit]

public private protected friend

private protected
AB public
AP section. [21 ]
data section.[21 ] d
section.[21 ] data fie [22]

Obje field type type atafield typ


cts ld type type.
. e type.

C++ private: type protected: t


(ST public: type field; [23]

field; ype field;


L)
internal
protected ty type
C# pe field field
«=value»; «= value
»;

package
public type field private type type
D «= value»; field «=value»; field
«=value»
;

type
protected ty
field
Java pe field
«=value»
«=value»;
;

private type
eC public type field;
field;

feature feature
feature feature {NONE} {current_cla {FRIEND}
Eiffe
l field: TYPE field: TYPE ss}
field:
field: TYPE
TYPE

Obje @package
@private type @protected t
ctive @public type field; type
field; ype field;
-C field;

Swif N/A
t

Sma
[24]
lltal N/A N/A
k

Pyth self.field = value [25] N/A[26] N/A


on
Visu Public field As typ Private field A Protected fi Friend f
al e «= value» s type «=value» eld As type ield As
Basi
«=value» type
c
.NE «= value
T »

Xojo Public field As typ Private field A Protected fi


e «= value» s type «=value» eld As type N/A
«=value»

protected
public $field private $field
PHP $field
«= value»; «= value»;
«= value»;

$self->{field}
Perl N/A
= value; [25]

Perl has« type »$.field« has« type »$!fi


N/A
6 is rw» eld

Rub @field = val


N/A
y ue [25]

Add-Member
«-
Win MemberType »NotePro
dow perty
s «-Name »Bar «- N/A
Pow
erSh Value »value
ell -
InputObject variabl
e

val «mutable
OCa »
N/A N/A
ml field = valu
e
let «mutable»
F# N/A N/A
field = value

Java this.field = value


Scri this["field"] =
pt value [25]

CO level-number field
N/A N/A N/A
BOL clauses. [27]

var __field var _field


Cobr var field «as type»
«as type» «as type»
a «= value»
«=value» «=value»

(field :initform va
lue :accessor acces
ISLI sor-
SP
name :initarg keywo
rd)

Python

Visual
Basic
.NET

Xojo

Windo
ws [cls]::member
Power
Shell

N/
F# A
cls.member

You might also like