مقارنة بين لغات البرمجة (البرمجة الشيئية)

تقارن هذه المقارنة بين لغات البرمجة كيفية تعامل لغات البرمجة الموجهة للكائنات مثل C++ و Java و Smalltalk و Object Pascal و Perl و Python وغيرها مع هياكل البيانات .

بناء وتدمير الأشياء

بناء دمار
كائنات ABAP data variable type ref to class .
create object variable «exporting parameter = argument».
[1]
[2] [3]
APL (Dyalog) variable←⎕NEW class «parameters» ⎕EX 'variable'
سي++ class variable«(parameters)»;[4] أو [5]
class *variable = new class«(parameters)»;
delete pointer;
سي شارب class variable = new class(parameters); variable.Dispose();[3]
جافا [3]
د destroy(variable);
إي سي class «instance handle» { «properties/data members assignments, instance method overrides» } delete instance handle;
Objective-C ( كاكاو ) class *variable = [[class alloc ] init];أو
class *variable = [[class alloc ] initWithFoo:parameter «bar:parameter ...»];
[variable release];
سويفت let variable = class(parameters)
بايثون variable = class(parameters) del variable[3] (عادة لا تكون هناك حاجة لذلك)
فيجوال بيسك .NET Dim variable As New class(parameters) variable.Dispose()[3]
شوجو Dim variable As New class(parameters) variable = Nil
ايفل create variableأو أو أو
create «{TYPE}» variable.make_foo «(parameters)»
variable := create {TYPE}
variable := create {TYPE}.make_foo «(parameters)»
[3]
بي اتش بي $variable = new class«(parameters)»; unset($variable);[3]
بيرل 5 «my »$variable = class->new«(parameters)»; undef($variable);
راكو «my »$variable = class.new«(parameters)»; $variable.undefine;
روبي variable = class.new«(parameters)» [3]
ويندوز باورشيل $variable = New-Object «-TypeName» class ««-ArgumentList» parameters» Remove-Variable «-Name» variable
أوكامل let variable = new class «parameters»أو [6]
let variable = object members end
[3]
ف# let variable = «new »class(«parameters»)
محادثة قصيرة الفصل عبارة عن كائن.
ما عليك سوى إرسال رسالة إلى الفصل، عادةً #newأو #new:، والعديد من الآخرين، على سبيل المثال:
النقطة  x:  10  y:  20 . 
المصفوفة  مع:  -1  مع:  3  مع:  2 .
جافا سكريبت var variable = new class«(parameters)»أو
var variable = { «key1: value1«, key2: value2 ...»»}
[3]
كائن باسكال ( دلفي ) ClassVar := ClassType.ConstructorName(parameters); ClassVar.Free;
سكالا
val obj = new Object // لا توجد معلمات val obj = new Object ( arg0 ، arg1 ، arg2 ...) val obj = Object ( arg0 ، arg1 ، arg2 ...) // حالة الفئة val obj = new Object ( arg0 ، arg1 ، param1 = value1 ، ...) // معلمات مسماة     
      
      
          
[3]
كوبول INVOKE class "NEW" RETURNING variableأو
MOVE class::"NEW" TO variable
كوبرا variable «as class» = class(parameters) variable.dispose
إيسليب (setq variable (create (class <some-class> [:field-1 value-1 [:field-2 value-2] ..]))) [3]

إعلان الفصل

فصل بروتوكول مساحة الاسم
كائنات ABAP class name definition «inheriting from parentclass». «interfaces: interfaces.» method_and_field_declarations endclass.
class name implementation. method_implementations endclass.
interface name. members endinterface.
APL (Dyalog) :Class name «:parentclass» «,interfaces»
members
:EndClass
:Interface name
members
:EndInterface
:Namespace name
members
:EndNamespace
سي++ class name« : public parentclasses[7]» { members }; namespace name { members }
سي شارب class name« : «parentclass»«, interfaces»» { members } interface name« : parentinterfaces» { members }
د module name;
members
إي سي class name« : base class» { «default member values assignments» «members» } namespace name;
جافا class name« extends parentclass»« implements interfaces» { members } interface name« extends parentinterfaces» { members } package name; members
بي اتش بي namespace name; members
Objective-C @interface name« : parentclass»[8] [9]«< protocols >» { instance_fields } method_and_property_declarations @end
@implementation
name method_implementations @end
@protocol name«< parentprotocols >» members @end [10]
سويفت class name« : «parentclass»«, protocols»» { members } protocol name« : parentprotocols» { members }
بايثون class name«(parentclasses[7])»:
Tab ↹
members
[11] __all__ = [ member1,member2,... ]
فيجوال بيسك .NET Class name« Inherits parentclass»« Implements interfaces»
members
End Class
Interface name« Inherits parentinterfaces»
members
End Interface
Namespace name
members
End Namespace
شوجو Class name« Inherits parentclass»« Implements interfaces»
members
End Class
Interface name« Inherits parentinterfaces»
members
End Interface
Module name
members
End Module
ايفل class name« inherit parentclasses[7]»
members
end
بيرل package name; «@ISA = qw(parentclasses[7]);» members 1; package name; members
راكو class name «is parentclass «is parentclass ...[7]»» «does role «does role ...»» { members } role name «does role «does role ...»» { members } module name { members }
روبي class name« < parentclass»
members
end
module name
members
end
ويندوز باورشيل
أوكامل class name «parameters» = object «(self)» «inherit parentclass «parameters» «inherit parentclass «parameters» ...[7]»» members end module name
members
ف# type name«(parameters)» «as this» = class «inherit parentclass«(parameters)» «as base»» members «interface interface with implementation «interface interface with implementation ...»» end type name = interface members end namespace name
members
محادثة قصيرة [12] [13]
جافا سكريبت (ES6) class name «extends parentclass» { members }
كائن باسكال (دلفي)

ClassName = Class «(ClassParent, Interfaces)»
private
// Private members(include Methods and Fields)
public
// Public members
protected
// Protected members
published
// Published members
end;

package name; members
سكالا
الفئة ConcreteClass ( معلمات المنشئ ) تمتد إلى ParentClass مع Trait1 مع Trait2 مع Trait2 { // أعضاء }  
 
      


تمتد السمة TraitName إلى OtherTrait1 مع OtherTrait2 مع OtherTrait3 { // أعضاء } 
 
    


اسم الحزمة 
كوبول CLASS-ID. name« INHERITS« FROM» parentclasses».
    FACTORY« IMPLEMENTS interfaces».
    class-members
    END FACTORY.
    OBJECT« IMPLEMENTS interfaces».
    instance-members
    END OBJECT.

END CLASS name.

INTERFACE-ID. name« INHERITS« FROM» interfaces».
    members

END INTERFACE name.

كوبرا class name «inherits parentclass» «implements interfaces»
Tab ↹ members
interface name «inherits parentinterfaces»
Tab ↹ members
namespace name
Tab ↹ members
إيسليب (defclass name (base-class) ((x :initform 0 :accessor get-x :initarg x)) (:abstractp nil))

أعضاء الصف

المنشئون والمدمرون

constructor مدمر المُنهي [14]
كائنات ABAP methods constructor «importing parameter = argument»
method constructor. instructions endmethod.
[15]
APL (Dyalog) name
:Implements Constructor «:Base «expr»»
instructions
name
:Implements Destructor
instructions
سي++ class(«parameters») «: initializers[16]» { instructions } ~class() { instructions }
سي شارب class(«parameters») { instructions } void Dispose(){ instructions } ~class() { instructions }
د this(«parameters») { instructions } ~this() { instructions }
إي سي class() { instructions } ~class() { instructions }
جافا class(«parameters») { instructions } void finalize() { instructions }
ايفل [17] [18]
Objective-C (كاكاو) - (id)init { instructions... return self; } or
- (id)initWithFoo:parameter «bar:parameter ...» { instructions... return self; }
- (void)dealloc { instructions } - (void)finalize { instructions }
سويفت init(«parameters») { instructions } deinit { instructions }
بايثون def __init__(self«, parameters»):
Tab ↹ instructions
def __del__(self):
Tab ↹ instructions
فيجوال بيسك .NET Sub New(«parameters»)
instructions
End Sub
Sub Dispose()
instructions
End Sub
Overrides Sub Finalize()
instructions
End Sub
شوجو Sub Constructor(«parameters»)
instructions
End Sub
Sub Destructor()
instructions
End Sub
بي اتش بي function __construct(«parameters») { instructions } function __destruct() { instructions }
بيرل sub new { my ($class«, parameters») = @_; my $self = {}; instructions ... bless($self, $class); return $self; } sub DESTROY { my ($self) = @_; instructions }
راكو submethod BUILD { instructions } or
«multi » method new(««$self: »parameters») { self.bless(*, field1 => value1, ...); ... instructions }
submethod DESTROY { instructions }
روبي def initialize«(parameters)»
instructions
end
ويندوز باورشيل
أوكامل initializer instructions[19]
ف# do instructions or
new(parameters) = expression
[20]
member this.Dispose() = instructions override this.Finalize() = instructions
جافا سكريبت function name(«parameters») { instructions }[21]
جافا سكريبت (ES6) constructor(«parameters») { instructions }
كوبول [22]
كوبرا cue init(parameters)
Tab ↹ base.init
Tab ↹ instructions
def dispose
Tab ↹ instructions
إيسليب (defmethod initialize-object ((instance <class-name>) initvalues)

الحقول

عام خاص محمي صديق
كائنات ABAP public section.[23] data field type type. private section.[23] data field type type. protected section.[23] data field type type. [24]
APL (Dyalog) :Field Public field « value» :Field «Private» field « value»
سي++ public: type field; private: type field; protected: type field; [25]
سي شارب public type field «= value»; private type field «= value»; protected type field «= value»; internal type field «= value»;
د package type field «= value»;
جافا protected type field «= value»; type field «= value»;
إي سي public type field; private type field;
ايفل feature
field: TYPE
feature {NONE}
field: TYPE
feature {current_class}
field: TYPE
feature {FRIEND}
field: TYPE
Objective-C @public type field; @private type field; @protected type field; @package type field;
سويفت
محادثة قصيرة [26]
بايثون self.field = value[27] [28]
فيجوال بيسك .NET Public field As type «= value» Private field As type «= value» Protected field As type «= value» Friend field As type «= value»
شوجو Public field As type «= value» Private field As type «= value» Protected field As type «= value»
بي اتش بي public $field «= value»; private $field «= value»; protected $field «= value»;
بيرل $self->{field} = value;[27]
راكو has« type »$.field« is rw» has« type »$!field
روبي @field = value[27]
ويندوز باورشيل Add-Member
«-MemberType »NoteProperty
«-Name »Bar «-Value »value
-InputObject variable
أوكامل val «mutable» field = value
ف# let «mutable» field = value
جافا سكريبت this.field = value
this["field"] = value
[27]
كوبول جمل حقل رقم المستوى . [29]
كوبرا var field «as type» «= value» var __field «as type» «= value» var _field «as type» «= value»
إيسليب (field :initform value :accessor accessor-name :initarg keyword)

طُرق

الطريقة الأساسية/الفارغة طريقة إرجاع القيمة
كائنات ABAP methods name «importing parameter = argument» «exporting parameter = argument» «changing parameter = argument» «returning value(parameter)»
method name. instructions endmethod.
[30]
[31]
APL (Dyalog) «left argument» name «right arguments»
instructions
result «left argument» name «right arguments»
instructions
سي++ [32]
type foo(«parameters»);

يتم عادةً توفير تنفيذ الأساليب في ملف مصدر منفصل، مع بناء الجملة التالي

type class::foo(«parameters») { instructions }[33]
void foo(«parameters») { instructions } type foo(«parameters») { instructions ... return value; }
سي شارب
د
جافا
إي سي void ««type of 'this'»::»foo(«parameters») { instructions } type ««type of this»::»foo(«parameters») { instructions ... return value; }
ايفل foo ( «parameters» )
do
instructions
end
foo ( «parameters» ): TYPE
do
instructions...
Result := value
end
Objective-C - (void)foo«:parameter «bar:parameter ...»» { instructions } - (type)foo«:parameter «bar:parameter ...»» { instructions... return value; }
سويفت func foo(«parameters») { instructions } func foo(«parameters») -> type { instructions... return value }
بايثون def foo(self«, parameters»):
Tab ↹
instructions
def foo(self«, parameters»):
Tab ↹
instructions
Tab ↹ return
value
فيجوال بيسك .NET Sub Foo(«parameters»)
instructions
End Sub
Function Foo(«parameters») As type
instructions
...
Return value
End Function
شوجو Sub Foo(«parameters»)
instructions
End Sub
Function Foo(«parameters») As type
instructions
...
Return value
End Function
بي اتش بي function foo(«parameters»)«: void» { instructions } function foo(«parameters»)«: type» { instructions ... return value; }
بيرل sub foo { my ($self«, parameters») = @_; instructions } sub foo { my ($self«, parameters») = @_; instructions ... return value; }
راكو «has »«multi »method foo(««$self: »parameters») { instructions } «has «type »»«multi »method foo(««$self: »parameters») { instructions ... return value; }
روبي def foo«(parameters)»
instructions
end
def foo«(parameters)»
instructions
expression resulting in return value
end
or
def foo«(parameters
instructions
return value
end
ويندوز باورشيل Add-Member «-MemberType» ScriptMethod «-Name» foo «-Value» { «param(parameters)» instructions } -InputObject variable Add-Member «-MemberType» ScriptMethod «-Name» foo «-Value» { «param(parameters)» instructions ... return value } -InputObject variable
أوكامل method foo «parameters» = expression
ف# member this.foo(«parameters») = expression
جافا سكريبت this.method = function(«parameters») {instructions}
name«.prototype.method = function(«parameters») {instructions}
[34]
this.method = function(«parameters») {instructions... return value;}
name«.prototype.method = function(«parameters») {instructions... return value;}
[34]
جافا سكريبت (ES6) foo(«parameters») {instructions} foo(«parameters») {instructions... return value;}
كوبول METHOD-ID. foo.
«DATA DIVISION.
LINKAGE SECTION.
parameter declarations»
PROCEDURE DIVISION« USING parameters».
    instructions

END METHOD foo.

METHOD-ID. foo.
DATA DIVISION.
LINKAGE SECTION.
«parameter declarations»
result-var declaration
PROCEDURE DIVISION« USING parameters» RETURNING result-var.
    instructions

END METHOD foo.

كوبرا def foo(parameters)
Tab ↹ instructions
def foo(parameters) as type
Tab ↹ instructions
Tab ↹ return value
إيسليب (defgeneric method (arg1 arg2))
(defmethod method ((arg1 <class1> arg2 <class2>) ...)

ملكيات

كيفية إعلان خاصية باسم "Bar"

تم التنفيذ يدويا

قراءة وكتابة للقراءة فقط للكتابة فقط
كائنات ABAP
APL (Dyalog) :Property Bar
result ← Get
instructions

∇ Set arguments
instructions

:EndProperty Bar
:Property Bar
result ← Get
instructions

:EndProperty Bar
:Property Bar
∇ Set arguments
instructions

:EndProperty Bar
سي++
سي شارب type Bar {
get {
instructions ... return value; }
set {
instructions } }
type Bar { get { instructions ... return value; } } type Bar { set { instructions } }
د @property type bar() { instructions ... return value; }
@property
type bar(type value) { instructions ... return value; }
@property type bar() { instructions ... return value; } @property type bar(type value) { instructions ... return value; }
إي سي property type Bar {
get {
instructions ... return value; }
set {
instructions } }
property type Bar { get { instructions ... return value; } } property type Bar { set { instructions } }
جافا
Objective-C 2.0 (كاكاو) @property (readwrite) type bar;
ثم في الداخل
@implementation
- (type)bar { instructions }
- (void)setBar:(type)value { instructions }
@property (readonly) type bar;
ثم في الداخل
@implementation
- (type)bar { instructions }
سويفت var bar : type { get { instructions } set«(newBar)» { instructions } } var bar : type { instructions }
ايفل feature -- Access
x: TYPE assign set_x
feature -- Settings
set_x (a_x: like x) do instructions ensure x_set: verification end
بايثون def setBar(self, value):
Tab ↹ instructions
def
getBar(self):
Tab ↹
instructions
Tab ↹ return value
bar = property(getBar, setBar)
[35]
def getBar(self):
Tab ↹ instructions
Tab ↹ return value
bar = property(getBar)
def setBar(self, value):
Tab ↹ instructions
bar = property(fset = setBar)
فيجوال بيسك .NET Property Bar() As type
Get
instructions
Return value
End Get
Set (ByVal
Value As type)
instructions
End Set
End Property
ReadOnly Property Bar() As type
Get
instructions
Return value
End Get
End Property
WriteOnly Property Bar() As type
Set (ByVal Value As type)
instructions
End Set
End Property
شوجو ComputedProperty Bar() As type
Get
instructions
Return value
End Get
Set (ByVal
Value As type)
instructions
End Set
End ComputedProperty
ComputedProperty Bar() As type
Get
instructions
Return value
End Get
End ComputedProperty
ComputedProperty Bar() As type
Set (value As type)
instructions
End Set
End ComputedProperty
بي اتش بي function __get($property) {
switch (
$property) {
case
'Bar' : instructions ... return value;
} }
function __set(
$property, $value) {
switch (
$property) {
case
'Bar' : instructions
} }
function __get($property) {
switch ($
property) {
case
'Bar' : instructions ... return value;
} }
function __set($property, $value) {
switch (
$property) {
case
'Bar' : instructions
} }
بيرل sub Bar {
my $self = shift;
if (my $Bar = shift) {
# setter
$self->{Bar} = $Bar;
return $self;
} else {
# getter
return $self->{Bar};
}
}
sub Bar {
my $self = shift;
if (my $Bar = shift) {
# read-only
die "Bar is read-only\n";
} else {
# getter
return $self->{Bar};
}
}
sub Bar {
my $self = shift;
if (my $Bar = shift) {
# setter
$self->{Bar} = $Bar;
return $self;
} else {
# write-only
die "Bar is write-only\n";
}
}
راكو
روبي def bar
instructions
expression resulting in return value
end
def bar=(value)
instructions
end
def bar
instructions
expression resulting in return value
end
def bar=(value)
instructions
end
ويندوز باورشيل Add-Member
«-MemberType »ScriptProperty
«-Name »Bar «-Value »{ instructions ... return value }
«-SecondValue »{ instructions }
-InputObject variable
Add-Member
«-MemberType »ScriptProperty
«-Name »Bar «-Value »{ instructions ... return value}
-InputObject variable
Add-Member
«-MemberType »ScriptProperty
«-Name »Bar -SecondValue { instructions }
-InputObject variable
أوكامل
ف# member this.Bar with get() = expression and set(value) = expression member this.Bar = expression member this.Bar with set(value) = expression
جافا سكريبت (ES6) get bar(«parameters») { instructions ... return value}set bar(«parameters») { instructions } get bar(«parameters») { instructions ... return value} set bar(«parameters») { instructions }
كوبول METHOD-ID. GET PROPERTY bar.
DATA DIVISION.
LINKAGE SECTION.
return-var declaration
PROCEDURE DIVISION RETURNING return-var.
    instructions

END METHOD.
METHOD-ID. SET PROPERTY bar.
DATA DIVISION.
LINKAGE SECTION.
value-var declaration
PROCEDURE DIVISION USING value-var.

    instructions

END METHOD.

METHOD-ID. GET PROPERTY bar.
DATA DIVISION.
LINKAGE SECTION.
return-var declaration
PROCEDURE DIVISION RETURNING return-var.
    instructions

END METHOD.

METHOD-ID. SET PROPERTY bar.
DATA DIVISION.
LINKAGE SECTION.
value-var declaration
PROCEDURE DIVISION USING value-var.
    instructions

END METHOD.

كوبرا pro bar «as type»
Tab ↹ get
Tab ↹Tab ↹ instructions
Tab ↹Tab ↹ return value
Tab ↹ set
Tab ↹Tab ↹ instructions
get bar «as type»
Tab ↹ instructions
Tab ↹ return value
set bar «as type»
Tab ↹ instructions
إيسليب

تم التنفيذ تلقائيا

قراءة وكتابة للقراءة فقط للكتابة فقط
كائنات ABAP
سي++
سي شارب type Bar { get; set; } type Bar { get; private set; } type Bar { private get; set; }
د
جافا
Objective-C 2.0 (كاكاو) @property (readwrite) type bar;
ثم في الداخل@implementation
@synthesize bar;
@property (readonly) type bar;
ثم في الداخل@implementation
@synthesize bar;
سويفت var bar : type let bar : type
ايفل
بايثون @property
def bar(self):
Tab ↹instructions
@bar.setter
def bar(self, value):
Tab ↹instructions
@property
def bar(self):
Tab ↹instructions
bar = property()
@bar.setter
def bar(self, value):
Tab ↹instructions
فيجوال بيسك .NET Property Bar As type« = initial_value» (VB 10)
بي اتش بي
بيرل [36] use base qw(Class::Accessor);
__PACKAGE__->mk_accessors('Bar');
use base qw(Class::Accessor);
__PACKAGE__->mk_ro_accessors('Bar');
use base qw(Class::Accessor);
__PACKAGE__->mk_wo_accessors('Bar');
راكو
روبي attr_accessor :bar attr_reader :bar attr_writer :bar
ويندوز باورشيل
أوكامل
ف# member val Bar = value with get, set
كوبول level-number bar clauses PROPERTY. level-number bar clauses PROPERTY «WITH» NO SET. level-number bar clauses PROPERTY «WITH» NO GET.
كوبرا pro bar from var «as type» get bar from var «as type» set bar from var «as type»

المشغلات المثقلة

المشغلين القياسيين

أحادي ثنائي نداء الوظيفة
كائنات ABAP
سي++ type operator symbol () { instructions } type operator symbol (type operand2) { instructions } type operator () («parameters») { instructions }
سي شارب static type operator symbol(type operand) { instructions } static type operator symbol(type operand1, type operand2) { instructions }
د type opUnary(string s)() if (s == "symbol") { instructions } type opBinary(string s)(type operand2) if (s == "symbol") { instructions }
type opBinaryRight(string s)(type operand1) if (s == "symbol") switch (s) { instructions }
type opCall(«parameters») { instructions }
جافا
Objective-C
سويفت func symbol(operand1 : type) -> returntype { instructions }(خارج الفصل) func symbol(operand1 : type1, operand2 : type2) -> returntype { instructions }(خارج الفصل)
ايفل [37] op_name alias "symbol": TYPE
do instructions end
op_name alias "symbol" (operand: TYPE1): TYPE2
do instructions end
بايثون def __opname__(self):
Tab ↹
instructions
Tab ↹ return
value
def __opname__(self, operand2):
Tab ↹
instructions
Tab ↹ return
value
def __call__(self«, parameters»):
Tab ↹
instructions
Tab ↹ return
value
فيجوال بيسك .NET Shared Operator symbol(operand As type) As type
instructions
End Operator
Shared Operator symbol(operand1 As type, operand2 As type) As type
instructions
End Operator
شوجو Function Operator_name(operand As type) As type
instructions
End Function
بي اتش بي [38] function __invoke(«parameters») { instructions } (PHP 5.3+)
بيرل use overload "symbol" => sub { my ($self) = @_; instructions }; use overload "symbol" => sub { my ($self, $operand2, $operands_reversed) = @_; instructions };
راكو «our «type »»«multi »method prefix:<symbol> («$operand: ») { instructions ... return value; } or
«our «type »»«multi »method postfix:<symbol> («$operand: ») { instructions ... return value; } or
«our «type »»«multi »method circumfix:<symbol1 symbol2> («$operand: ») { instructions ... return value; }
«our «type »»«multi »method infix:<symbol> («$operand1: » type operand2) { instructions ... return value; } «our «type »»«multi »method postcircumfix:<( )> («$self: » «parameters») { instructions }
روبي def symbol
instructions
expression resulting in return value
end
def symbol(operand2)
instructions
expression resulting in return value
end
ويندوز باورشيل
أوكامل
ف# static member (symbol) operand = expression static member (symbol) (operand1, operand2) = expression
كوبول
إيسليب

المفهرسات

قراءة وكتابة للقراءة فقط للكتابة فقط
كائنات ABAP
APL (Dyalog) :Property Numbered Default name
result ← Get
instructions

∇ Set arguments
instructions

:EndProperty Bar
:Property Numbered Default Bar
result ← Get
instructions

:EndProperty Bar
:Property Numbered Default Bar
∇ Set arguments
instructions

:EndProperty Bar
سي++ type& operator[](type index) { instructions } type operator[](type index) { instructions }
سي شارب type this[type index] {
get{
instructions }
set{
instructions } }
type this[type index] { get{ instructions } } type this[type index] { set{ instructions } }
د type opIndex(type index) { instructions }
type opIndexAssign(type value, type index) { instructions }
type opIndex(type index) { instructions } type opIndexAssign(type value, type index) { instructions }
جافا
Objective-C (مترجم Clang الأخير) - (id)objectAtIndexedSubscript:(NSUInteger)index { instructions return value; } or
- (id)objectForKeyedSubscript:(id)index { instructions return value; }
- (void)setObject:(id)value atIndexedSubscript:(NSUInteger)index { instructions } or
- (void)setObject:(id)value forKeyedSubscript:(id)index { instructions }
سويفت subscript (index : type) -> returntype { get { instructions } set«(newIndex)» { instructions } } subscript (index : type) -> returntype { instructions }
ايفل [37] bracket_name alias "[]" (index: TYPE): TYPE assign set_item
do instructions end
set_item (value: TYPE; index: TYPE):
do instructions end
bracket_name alias "[]" (index: TYPE): TYPE
do instructions end
بايثون def __getitem__(self, index):
Tab ↹ instructions
Tab ↹ return value
def __setitem__(self, index, value):
Tab ↹ instructions
def __getitem__(self, index):
Tab ↹ instructions
Tab ↹ return value
def __setitem__(self, index, value):
Tab ↹ instructions
فيجوال بيسك .NET Default Property Item(Index As type) As type
Get
instructions
End Get
Set(ByVal
Value As type)
instructions
End Set
End Property
Default ReadOnly Property Item(Index As type) As type
Get
instructions
End Get
End Property
Default WriteOnly Property Item(Index As type) As type
Set(ByVal
Value As type)
instructions
End Set
End Property
بي اتش بي [39]
بيرل [40]
راكو «our «type »»«multi »method postcircumfix:<[ ]> is rw («$self: » type $index) { instructions ... return value; } or
«our «type »»«multi »method postcircumfix:<{ }> is rw («$self: » type $key) { instructions ... return value; }
«our «type »»«multi »method postcircumfix:<[ ]>(«$self: » type $index) { instructions ... return value; } or
«our «type »»«multi »method postcircumfix:<{ }> («$self: » type $key) { instructions ... return value; }
روبي def [](index)
instructions
expression resulting in return value
end
def []=(index, value)
instructions
end
def [](index)
instructions
expression resulting in return value
end
def []=(index, value)
instructions
end
ويندوز باورشيل
أوكامل
ف# member this.Item with get(index) = expression and set index value = expression member this.Item with get(index) = expression member this.Item with set index value = expression
كوبول
كوبرا pro[index «as type»] as type
Tab ↹ get
Tab ↹Tab ↹ instructions
Tab ↹Tab ↹ return value
Tab ↹ set
Tab ↹Tab ↹ instructions
get[index «as type»] as type
Tab ↹ instructions
Tab ↹ return value
set[index «as type»] as type
Tab ↹ instructions

أنواع القوالب

مسبل المهوى الصاعد
كائنات ABAP
سي++ operator returntype() { instructions }
سي شارب static explicit operator returntype(type operand) { instructions } static implicit operator returntype(type operand) { instructions }
د T opCast(T)() if (is(T == type)) { instructions }
إي سي property T { get { return «conversion code»; } }
جافا
Objective-C
ايفل [37]
بايثون
فيجوال بيسك .NET Shared Narrowing Operator CType(operand As type) As returntype
instructions
End Operator
Shared Widening Operator CType(operand As type) As returntype
instructions
End Operator
بي اتش بي
بيرل
راكو multi method type«($self:)» is export { instructions }
روبي
ويندوز باورشيل
أوكامل
ف#
كوبول

وصول الأعضاء

كيفية الوصول إلى أعضاء الكائن x

عضو الكائن عضو الصف عضو المساحة الاسمية
طريقة مجال ملكية
كائنات ABAP x->methodparameters»).[41] x->field x=>field or x=>methodparameters[41]»).
سي++ x.method(parameters) or
ptr->method(parameters)
x.field or
ptr->field
cls::member ns::member
Objective-C [x method«:parameter «bar:parameter ...»»] x->field x.property (2.0 only) or
[x property]
[cls method«:parameter «bar:parameter ...»»]
محادثة قصيرة x method«:parameter «bar:parameter ...»» cls method«:parameter «bar:parameter ...»»
سويفت x.method(parameters) x.property cls.member
APL (Dyalog) left argument» x.method «right argument(s)» x.field x.property cls.member ns.member
سي شارب x.method(parameters)
جافا
د x.property
بايثون
فيجوال بيسك .NET
شوجو
ويندوز باورشيل [cls]::member
ف# cls.member
إي سي x.method«(parameters)» x.field x.property cls::member ns::member
ايفل x.method«(parameters)» x.field {cls}.member
روبي x.property cls.member
بي اتش بي x->method(parameters) x->field x->property cls::member ns\member
بيرل x->method«(parameters)» x->{field} cls->method«(parameters)» ns::member
راكو x.method«(parameters)» or
x!method«(parameters)»
x.field or
x!field
cls.method«(parameters)» or
cls!method«(parameters)»
ns::member
أوكامل x#method «parameters»
جافا سكريبت x.method(parameters)
x["method"](parameters)
x.field
x["field"]
x.property
x["property"]
cls.member
cls["member"]
كوبول INVOKE x "method" «USING parameters» «RETURNING result» or
x::"method"«(«parameters»)»
property OF x INVOKE cls "method" «USING parameters» «RETURNING result» or
cls::"method"«(«parameters»)» or
property OF cls
كوبرا x.method«(parameters)» x.field x.property cls.member ns.member

توفر العضوية

هل لديه عضو؟ معالج للعضو المفقود
طريقة مجال طريقة مجال
APL (Dyalog) 3=x.⎕NC'method' 2=x.⎕NC'method'
كائنات ABAP
سي++
Objective-C (كاكاو) [x respondsToSelector:@selector(method)] forwardInvocation:
محادثة قصيرة x respondsTo: selector doesNotUnderstand:
سي شارب (باستخدام الانعكاس)
إي سي
جافا
د opDispatch()
ايفل
بايثون hasattr(x, "method") and callable(x.method) hasattr(x, "field") __getattr__()
فيجوال بيسك .NET (باستخدام الانعكاس)
شوجو (باستخدام التأمل الذاتي)
ويندوز باورشيل (باستخدام الانعكاس)
ف# (باستخدام الانعكاس)
روبي x.respond_to?(:method) method_missing()
بي اتش بي method_exists(x, "method") property_exists(x, "field") __call() __get() / __set()
بيرل x->can("method") exists x->{field} التحميل التلقائي
راكو x.can("method") x.field.defined التحميل التلقائي
أوكامل
جافا سكريبت typeof x.method === "function" field in x
كوبول

متغيرات خاصة

الكائن الحالي الكائن الحالي هو الكائن الرئيسي مرجع فارغ السياق الحالي للتنفيذ
محادثة قصيرة self super nil thisContext
كائنات ABAP me super initial
APL (Dyalog) ⎕THIS ⎕BASE ⎕NULL
سي++ *this [42] NULL, nullptr
سي شارب this base[43] null
جافا super[43]
د
جافا سكريبت super[43] (ECMAScript 6) null, undefined[44]
إي سي this null
Objective-C self super[43] nil
سويفت self super[43] nil[45]
بايثون self[46] super(current_class_name, self)[7]
super() (3.x فقط)
None
فيجوال بيسك .NET Me MyBase Nothing
شوجو Me / Self Parent Nil
ايفل Current Precursor «{superclass}» «(args)»[43] [47] Void
بي اتش بي $this parent[43] null
بيرل $self[46] $self->SUPER[43] undef
راكو self SUPER Nil
روبي self super«(args)»[48] nil binding
ويندوز باورشيل $this $NULL
أوكامل self[49] super[50] [51]
ف# this base[43] null
كوبول SELF SUPER NULL
كوبرا this base nil

طرق خاصة

تمثيل السلسلة نسخة الكائن قيمة المساواة مقارنة الأشياء رمز التجزئة معرف الكائن
قابلة للقراءة من قبل الإنسان متوافق مع المصدر
كائنات ABAP
APL (Dyalog) x ⎕SRC x ⎕NS x x = y
سي++ x == y[52] يمكن تحويل المؤشر إلى الكائن إلى معرف عدد صحيح
سي شارب x.ToString() x.Clone() x.Equals(y) x.CompareTo(y) x.GetHashCode() System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(x)
جافا x.toString() x.clone()[53] x.equals(y) x.compareTo(y)[54] x.hashCode() System.identityHashCode(x)
جافا سكريبت x.toString()
د x.toString() or
std.conv.to!string(x)
x.stringof x == y or
x.opEquals(y)
x.opCmp(y) x.toHash()
إي سي x.OnGetString(tempString, null, null) or
PrintString(x)
y.OnCopy(x) x.OnCompare(y) يمكن تحويل مقبض الكائن إلى معرف عدد صحيح
Objective-C (كاكاو) x.description x.debugDescription [x copy][55] [x isEqual:y] [x compare:y][56] x.hash يمكن تحويل المؤشر إلى الكائن إلى معرف عدد صحيح
سويفت x.description[57] x.debugDescription[58] x == y[59] x < y[60] x.hashValue[61] reflect(x).objectIdentifier!.uintValue()
محادثة قصيرة x displayString x printString x copy x = y x hash x identityHash
بايثون str(x)[62] repr(x)[63] copy.copy(x)[64] x == y[65] cmp(x, y)[66] hash(x)[67] id(x)
فيجوال بيسك .NET x.ToString() x.Clone() x.Equals(y) x.CompareTo(y) x.GetHashCode()
ايفل x.out x.twin x.is_equal(y) عندما يكون x هو COMPARABLE، يمكننا ببساطة القيام بذلكx < y عندما يكون x هو HASHABLE، يمكننا استخدامx.hash_code عندما يكون x هو IDENTIFIED، يمكننا استخدامx.object_id
بي اتش بي $x->__toString() clone x[68] x == y spl_object_hash(x)
بيرل "$x"[69] Data::Dumper->Dump([$x],['x'])[70] Storable::dclone($x)[71] Scalar::Util::refaddr( $x )[72]
راكو ~x[69] x.perl x.clone x eqv y x cmp y x.WHICH
روبي x.to_s x.inspect x.dup or
x.clone
x == y or
x.eql?(y)
x <=> y x.hash x.object_id
ويندوز باورشيل x.ToString() x.Clone() x.Equals(y) x.CompareTo(y) x.GetHashCode()
أوكامل Oo.copy x x = y Hashtbl.hash x Oo.id x
ف# string x or x.ToString() or sprintf "%O" x sprintf "%A" x x.Clone() x = y or x.Equals(y) compare x y or x.CompareTo(y) hash x or x.GetHashCode()
كوبول

التلاعب بالنوع

الحصول على نوع الكائن هو مثال لـ (يتضمن الأنواع الفرعية) رفع الصوت التخفيض
فحص وقت التشغيل لا يوجد فحص
كائنات ABAP [73] = ؟=
سي++ typeid(x) dynamic_cast<type *>(&x) != nullptr [74] dynamic_cast<type*>(ptr) (type*) ptr or
static_cast<type*>(ptr)
سي شارب x.GetType() x is type (type) x or x as type
د typeid(x) cast(type) x
دلفي x is type x as type
إي سي x._class eClass_IsDerived(x._class, type) (type) x
جافا x.getClass() x instanceof class (type) x
Objective-C (كاكاو) [x class][75] [x isKindOfClass:[class class]] (type*) x
سويفت x.dynamicType x is type x as! type
x as? type
جافا سكريبت x.constructor (If not rewritten.) x instanceof class [76]
فيجوال بيسك .NET x.GetType() TypeOf x Is type [74] CType(x, type) or TryCast(x, type)
شوجو Introspection.GetType(x) x IsA type CType(x, type)
ايفل x.generating_type attached {TYPE} x attached {TYPE} x as down_x
بايثون type(x) isinstance(x, type) [76]
بي اتش بي get_class(x) x instanceof class
بيرل ref(x) x->isa("class")
راكو x.WHAT x.isa(class) [74] type(x) or
x.type
روبي x.class x.instance_of?(type) or
x.kind_of?(type)
[76]
محادثة قصيرة x class x isKindOf: class
ويندوز باورشيل x.GetType() x -is [type] [74] [type]x or x -as [type]
أوكامل [77] (x :> type)
ف# x.GetType() x :? type (x :?> type)
كوبول x AS type[74]

إدارة المساحة الاسمية

استيراد مساحة الاسم استيراد العنصر
مؤهَل غير مؤهل
كائنات ABAP
سي++ using namespace ns; using ns::item ;
سي شارب using ns; using item = ns.item;
د import ns; import ns : item;
جافا import ns.*; import ns.item;
Objective-C
فيجوال بيسك .NET Imports ns
ايفل
بايثون import ns from ns import * from ns import item
بي اتش بي use ns; use ns\item;
بيرل use ns; use ns qw(item);
راكو
روبي
ويندوز باورشيل
أوكامل open ns
ف#
كوبول

العقود

شرط مسبق شرط لاحق يفحص ثابت حلقة
كائنات ABAP
سي++
سي شارب Spec#:
type foo( «parameters» )
    requires expression
{
    body
}
Spec#:
type foo( «parameters» )
    ensures expression
{
    body
}
جافا
Objective-C
فيجوال بيسك .NET
د f
in { asserts }
body{
instructions }
f
out (result) { asserts }
body{
instructions }
assert(expression) invariant() { expression }
ايفل f
require tag: expression
do end
f
do
ensure
tag: expression
end
f
do
check tag: expression end
end
class X
invariant tag: expression
end
from instructions
invariant
tag: expression
until
expr
loop
instructions
variant
tag: expression
end
بايثون
بي اتش بي
بيرل
راكو PRE { condition } POST { condition }
روبي
ويندوز باورشيل
أوكامل
ف#
كوبول

انظر أيضا

المراجع والملاحظات

  1. ^ parameter = argument يمكن تكرارها إذا كان المنشئ يحتوي على عدة معلمات
  2. ^ SAP احتفظ لنفسه باستخدام التدمير
  3. ^ abcdefghijkl تستخدم هذه اللغة جمع القمامة لتحرير الذاكرة غير المستخدمة.
  4. ^ هذا النحو ينشئ قيمة كائنية بمدة تخزين تلقائية
  5. ^ هذا النحو ينشئ كائنًا بمدة تخزين ديناميكية ويعيد مؤشرًا إليه
  6. ^ يمكن إنشاء كائنات OCaml مباشرة دون المرور عبر فئة.
  7. ^ abcdefg تدعم هذه اللغة الوراثة المتعددة . يمكن أن يكون للفئة أكثر من فئة رئيسية واحدة
  8. ^ عدم توفير فئة رئيسية يجعل الفئة فئة جذرية. في الممارسة العملية، لا يتم ذلك أبدًا تقريبًا. يجب على المرء عمومًا استخدام الفئة الأساسية التقليدية للإطار الذي يستخدمه، والتي تستخدم NSObjectلـ Cocoa وGNUstep، أو Objectغير ذلك.
  9. ^ عادةً @interfaceما يتم وضع الجزء في ملف رأس ، ويتم @interfaceوضع الجزء في ملف كود مصدر منفصل.
  10. ^ البادئات لأسماء الفئات والبروتوكولات المستخدمة تقليديًا كنوع من مساحة الأسماء
  11. ^ في بايثون، الواجهات هي فئات تحتوي طرقها على pass كأجسام لها
  12. ^ الفصل عبارة عن كائن.
    ما عليك سوى إرسال رسالة إلى الفصل الأعلى (st-80) أو إلى مساحة الاسم الوجهة (Visualworks).
  13. ^ مساحة الاسم عبارة عن كائن.
    فقط قم بإرسال رسالة إلى مساحة الاسم الأصلية.
  14. ^ يتم استدعاء المُنهي بواسطة جامع القمامة عندما يكون الكائن على وشك أن يتم جمعه. لا يوجد ضمان بشأن متى سيتم استدعاؤه أو ما إذا كان سيتم استدعاؤه على الإطلاق .
  15. ^ في ABAP، يجب تعريف المنشئ مثل الطريقة (انظر التعليقات حول الطريقة) مع القيود التالية: يجب أن يكون اسم الطريقة "منشئ"، ولا يمكن تعريف سوى معلمات "استيراد"
  16. ^ توجد هنا قائمة اختيارية منفصلة بفواصل لمبدئات الكائنات الأعضاء والفئات الأصلية. صيغة تهيئة الكائنات الأعضاء هي
    "member_name(parameters)"
    يعمل هذا حتى بالنسبة للأعضاء البدائية، وفي هذه الحالة يتم تحديد معلمة واحدة ويتم نسخ هذه القيمة إلى العضو. صيغة تهيئة الفئات الأصلية هي
    "class_name(parameters)".
    إذا لم يتم تحديد مُنشئ لفئة عضو أو فئة رئيسية، فسيتم استخدام المُنشئ الافتراضي .
  17. ^ يمكن استخدام أي إجراء Eiffel كإجراء إنشاء، أو ما يعرف بالمنشئين. راجع فقرة Eiffel في المنشئ (علوم الكمبيوتر) .
  18. ^ يؤدي تنفيذ {DISPOSABLE}.dispose إلى ضمان استدعاء التخلص عند تجميع الكائن.
  19. ^ نادرًا ما يتم استخدام بنية "المُهيئ" هذه. عادةً ما يتم تهيئة الحقول في OCaml مباشرةً في إعلانها. فقط عندما تكون هناك حاجة إلى عمليات إلزامية إضافية يتم استخدام "المُهيئ". يتم تحديد "المعلمات الخاصة بالمُنشئ" في اللغات الأخرى كمعلمات للفئة في OCaml. راجع بناء جملة إعلان الفئة لمزيد من التفاصيل.
  20. ^ يستخدم هذا النحو عادةً لزيادة تحميل المنشئين
  21. ^ في JavaScript، المنشئ هو كائن.
  22. ^ يمكن محاكاة المنشئين باستخدام طريقة المصنع التي تقوم بإرجاع مثيل للفئة.
  23. ^ يجب أن يظهر معرف النطاق مرة واحدة في إعلان الملف، كل إعلانات المتغيرات بعد معرف النطاق هذا لها نطاقه، حتى يتم الوصول إلى معرف نطاق آخر أو نهاية إعلان الفئة
  24. ^ في ABAP، لا يتم إعلان حقول أو طرق معينة على أنها قابلة للوصول بواسطة أشياء خارجية. بدلاً من ذلك، يتم إعلان الفئات الخارجية كأصدقاء لديهم إمكانية الوصول إلى حقول أو طرق الفئة.
  25. ^ في لغة C++، لا يتم إعلان حقول معينة على أنها يمكن الوصول إليها بواسطة أشياء خارجية. بل يتم إعلان الدوال والفئات الخارجية كأصدقاء للوصول إلى حقول الفئة. راجع الدالة الصديقة والفئة الصديقة لمزيد من التفاصيل.
  26. ^ فقط أرسل رسالة إلى الفصل
    الفئة  addInstVarName:  الحقل . 
    الفئة  removeInstVarName:  الحقل .
    
  27. ^ abcd فقط قم بتعيين قيمة له في طريقة
  28. ^ لا تحتوي لغة بايثون على حقول خاصة - كل الحقول متاحة للعامة في جميع الأوقات. توجد اتفاقية مجتمعية لوضع بادئة لتفاصيل التنفيذ بعلامة سفلية واحدة، لكن اللغة لا تطبق هذا.
  29. ^ جميع بيانات الفئة "خاصة" لأن معيار COBOL لا يحدد أي طريقة للوصول إليها.
  30. ^ إعلان وتنفيذ الطرق في ABAP منفصلان. يجب استخدام عبارة methods داخل تعريف الفصل. يجب استخدام method (بدون "s") داخل تنفيذ الفصل. يمكن تكرار المعلمة = argument إذا كان هناك عدة معلمات.
  31. ^ في ABAP، يتم تعريف اسم معلمة الإرجاع صراحةً في توقيع الطريقة ضمن تعريف الفصل
  32. ^ في C++، عادةً ما يكون إعلان الطرق وتنفيذها منفصلين. يتم إعلان الطرق في تعريف الفئة (والذي عادةً ما يتم تضمينه في ملف رأس ) باستخدام بناء الجملة
  33. ^ على الرغم من أنه يمكن تضمين نص الطريقة مع الإعلان داخل تعريف الفئة، كما هو موضح في الجدول هنا، إلا أن هذه ممارسة سيئة بشكل عام. نظرًا لأنه يجب تضمين تعريف الفئة مع كل ملف مصدر يستخدم حقول أو طرق الفئة، فإن وجود كود في تعريف الفئة يتسبب في تجميع كود الطريقة مع كل ملف مصدر، مما يزيد من حجم الكود. ومع ذلك، في بعض الظروف، من المفيد تضمين نص الطريقة مع الإعلان. أحد الأسباب هو أن المترجم سيحاول تضمين الطرق المضمنة في إعلان الفئة؛ لذلك إذا حدثت طريقة قصيرة جدًا من سطر واحد ، فقد يجعل ذلك من الأسرع السماح للمترجم بتضمينها، من خلال تضمين النص مع الإعلان. أيضًا، إذا حدثت فئة أو طريقة قالب ، فيجب تضمين كل الكود مع الإعلان، لأنه فقط باستخدام الكود يمكن إنشاء القالب.
  34. ^ ab فقط قم بتعيين وظيفة لها في طريقة
  35. ^ التنفيذ البديل:
    def  bar (): 
        doc  =  "خاصية bar." 
        def fget  ( self ) : return 
            self._bar  def fset ( self , value ) : self._bar = value return locals ( ) bar = property ( ** bar () )
          
              
         
      
    
  36. ^ هذه الأمثلة تحتاج إلى تثبيت وحدة Class::Accessor
  37. ^ abc على الرغم من أن Eiffel لا يدعم التحميل الزائد للمشغلات، إلا أنه يمكنه تعريف المشغلات
  38. ^ لا يدعم PHP التحميل الزائد للمشغل بشكل أصلي، ولكن يمكن إضافة الدعم باستخدام حزمة PECL "operator".
  39. ^ يجب على الفصل تنفيذ واجهة ArrayAccess.
  40. ^ يجب على الفصل أن يقوم بتحميل '@{}' (إلغاء مرجع المصفوفة) أو الفئة الفرعية لواحدة من Tie::Array أو Tie::StdArray لربط عمليات المصفوفة
  41. ^ ab في ABAP، يجب تمرير الوسائط باستخدام هذا النحو:
    x->method(«exporting parameter = argument» «importing parameter = argument» «changing parameter = argument» «returning value(parameter)»
    parameter = argumentيمكن تكرارها إذا كان هناك عدة معلمات
  42. ^ لا تحتوي لغة C++ على كلمة "super"، وذلك لأن الوراثة المتعددة ممكنة، وبالتالي قد يكون من الغامض تحديد الفئة الأساسية التي تتم الإشارة إليها. وبدلاً من ذلك، BaseClassName::memberيمكن استخدام بناء الجملة للوصول إلى عضو تم تجاوزه في الفئة الأساسية المحددة. توفر Microsoft Visual C++ كلمة أساسية غير قياسية "__super" لهذا الغرض؛ ولكن هذا غير مدعوم في المترجمات الأخرى.[1]
  43. ^ abcdefghi الكلمة الأساسية هنا ليست قيمة ، ولا يمكن استخدامها إلا للوصول إلى طريقة من الفئة العليا.
  44. ^ لكن احذر، ليس لديهم نفس القيمة.
  45. ^ فقط للأنواع الاختيارية
  46. ^ ab في هذه اللغة، يتم تمرير الكائن الحالي إلى طرق المثيل كمعلمة أولى، والتي تسمى تقليديًا "self"، ولكن ليس من الضروري أن تكون هذه هي الحالة.
  47. ^ "Precursor" في لغة Eiffel هي في الواقع استدعاء لطريقة تحمل نفس الاسم في الفئة العليا. لذا فإن Precursor(args) يعادل "super.currentMethodName(args)" في لغة Java. لا توجد طريقة لاستدعاء طريقة تحمل اسمًا مختلفًا في الفئة العليا.
  48. ^ "super" في Ruby، على عكس اللغات الأخرى، هو في الواقع استدعاء لطريقة تحمل نفس الاسم في الفئة العليا. لذا فإن super(args) في Ruby يعادل "super.currentMethodName(args)" في Java. لا توجد طريقة لاستدعاء طريقة تحمل اسمًا مختلفًا في الفئة العليا.
  49. ^ في OCaml، يمكن أن يبدأ إعلان الكائن بشكل اختياري بمعلمة سيتم ربطها بالكائن الحالي. يُطلق على هذه المعلمة اسم "self" تقليديًا، لكن هذا ليس ضروريًا. من الجيد وضع معلمة هناك حتى يتمكن المرء من استدعاء طرقه الخاصة.
  50. ^ في OCaml، يمكن ربط إعلان الميراث ("الوراثة") بشكل اختياري بقيمة، مع بناء الجملة "" ورث معلمات فئة الوالدين"" كـ super"". هنا "super" هو الاسم المعطى للمتغير المرتبط بهذا الكائن الرئيسي. يمكن تسميته بشكل مختلف.
  51. ^ ومع ذلك، إذا كانت القدرة على الحصول على قيمة "اختيارية" في OCaml ضرورية، فقم بلف القيمة داخل نوع option، والقيم هي Noneو Some x، والتي يمكن استخدامها لتمثيل "مرجع فارغ" و"مرجع غير فارغ لكائن" كما هو الحال في اللغات الأخرى.
  52. ^ بافتراض أن "x" و"y" هما الكائنان (وليس المؤشرات). يمكن تخصيصها عن طريق تحميل عامل الكائن بشكل زائد==
  53. ^ يمكن الوصول إليها فقط من داخل الفصل، نظرًا لأن clone()الطريقة الموروثة من Objectمحمية، ما لم تلغِ الفصل الطريقة وتجعلها عامة. إذا كنت تستخدم الطريقة clone()الموروثة من Object، فيجب على الفصل تنفيذ Cloneableالواجهة للسماح بالاستنساخ.
  54. ^ يجب على الفصل تنفيذ الواجهة Comparableلهذه الطريقة لتكون موحدة.
  55. ^ تم تنفيذه بواسطة طريقة الكائنcopyWithZone:
  56. ^ compare: هو الاسم التقليدي لطريقة المقارنة في فئات Foundation. ومع ذلك، لا يوجد بروتوكول رسمي
  57. ^ فقط إذا كان الكائن يتوافق مع Printableالبروتوكول
  58. ^ فقط إذا كان الكائن يتوافق مع DebugPrintableالبروتوكول
  59. ^ فقط إذا كان الكائن يتوافق مع Equatableالبروتوكول
  60. ^ فقط إذا كان الكائن يتوافق مع Comparableالبروتوكول
  61. ^ فقط إذا كان الكائن يتوافق مع hashValueالبروتوكول
  62. ^ يمكن تخصيصها حسب طريقة الكائن__str__()
  63. ^ يمكن تخصيصها حسب طريقة الكائن__repr__()
  64. ^ يمكن تخصيصها حسب طريقة الكائن__copy__()
  65. ^ يمكن تخصيصها حسب طريقة الكائن__eq__()
  66. ^ فقط في Python 2.x وما قبله (تم إزالته في Python 3.0). يمكن تخصيصه بواسطة طريقة الكائن__cmp__()
  67. ^ يمكن تخصيصها بواسطة طريقة الكائن __hash__(). ليست كل الأنواع قابلة للتجزئة (الأنواع القابلة للتغيير لا يمكن تجزئتها عادةً)
  68. ^ يمكن تخصيصها حسب طريقة الكائن__clone()
  69. ^ ab يمكن تخصيصه عن طريق التحميل الزائد لمشغل تحويل سلسلة الكائن
  70. ^ يتطلب هذا المثال استخدام Data ::Dumper
  71. ^ يتطلب هذا المثال استخدام ing Storable
  72. ^ يتطلب هذا المثال استخدام Scalar::Util
  73. ^ يمكن جمع معلومات نوع وقت التشغيل في ABAP باستخدام فئات وصف مختلفة مثل CL_ABAP_CLASSDESCR.
  74. ^ abcde إن الترقية ضمنية في هذه اللغة. يمكن استخدام مثيل النوع الفرعي حيث تكون هناك حاجة إلى النوع الأعلى.
  75. ^ فقط للكائنات غير التابعة لفئة. إذا xكان كائنًا من فئة، [x class]فإنه يرجع فقط x. ستقوم طريقة وقت التشغيل object_getClass(x)بإرجاع فئة xلجميع الكائنات.
  76. ^ abc هذه اللغة مكتوبة بطريقة ديناميكية. لا حاجة إلى التحويل بين الأنواع.
  77. ^ هذه اللغة لا تقدم معلومات عن النوع وقت التشغيل. فهي غير ضرورية لأنها مكتوبة بشكل ثابت ولا يمكن تخفيضها.
Retrieved from "https://en.wikipedia.org/w/index.php?title=Comparison_of_programming_languages_(object-oriented_programming)&oldid=1232098485"
Original text
Rate this translation
Your feedback will be used to help improve Google Translate