مقارنة بين لغات البرمجة (البرمجة الشيئية)
قد تحتاج هذه المقالة إلى التنظيف لتلبية معايير الجودة الخاصة بويكيبيديا . المشكلة المحددة هي: يحتوي قسم المراجع في هذه المقالة على العديد من الحواشي السفلية، لكنه لا يسرد أي مراجع أو مصادر خارجية. ( يونيو 2013 ) |
تقارن هذه المقارنة بين لغات البرمجة كيفية تعامل لغات البرمجة الموجهة للكائنات مثل C++ و Java و Smalltalk و Object Pascal و Perl و Python وغيرها مع هياكل البيانات .
بناء وتدمير الأشياء
| بناء | دمار | |
|---|---|---|
| كائنات ABAP | data variable type ref to class .[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.
|
interface name. members endinterface.
|
— |
| APL (Dyalog) | :Class name «:parentclass» «,interfaces»members:EndClass
|
:Interface namemembers:EndInterface
|
:Namespace namemembers:EndNamespace
|
| سي++ | class name« : public parentclasses[7]» { members };
|
namespace name { members }
| |
| سي شارب | class name« : «parentclass»«, interfaces»» { members }
|
interface name« : parentinterfaces» { members }
| |
| د | module name;
| ||
| إي سي | 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
|
@protocol name«< parentprotocols >» members @end
|
[10] |
| سويفت | class name« : «parentclass»«, protocols»» { members }
|
protocol name« : parentprotocols» { members }
|
|
| بايثون | class name«(parentclasses[7])»:
|
[11] | __all__ = [ member1,member2,... ]
|
| فيجوال بيسك .NET | Class name« Inherits parentclass»« Implements interfaces»
|
Interface name« Inherits parentinterfaces»
|
Namespace name
|
| شوجو | Class name« Inherits parentclass»« Implements interfaces»
|
Interface name« Inherits parentinterfaces»
|
Module name
|
| ايفل | class name« inherit parentclasses[7]»
|
— | |
| بيرل | 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»
|
module name
| |
| ويندوز باورشيل | — | ||
| أوكامل | class name «parameters» = object «(self)» «inherit parentclass «parameters» «inherit parentclass «parameters» ...[7]»» members end
|
module name
| |
| ف# | 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
|
| محادثة قصيرة | [12] | [13] | |
| جافا سكريبت (ES6) | class name «extends parentclass» { members }
|
||
| كائن باسكال (دلفي) |
|
package name; members
| |
| سكالا | الفئة ConcreteClass ( معلمات المنشئ ) تمتد إلى ParentClass مع Trait1 مع Trait2 مع Trait2 { // أعضاء }
|
تمتد السمة TraitName إلى OtherTrait1 مع OtherTrait2 مع OtherTrait3 { // أعضاء }
|
اسم الحزمة
|
| كوبول | CLASS-ID. name« INHERITS« FROM» parentclasses».
FACTORY« IMPLEMENTS interfaces».class-membersEND FACTORY.OBJECT« IMPLEMENTS interfaces».instance-membersEND OBJECT.
|
INTERFACE-ID. name« INHERITS« FROM» interfaces».
members
|
— |
| كوبرا | class name «inherits parentclass» «implements interfaces»
|
interface name «inherits parentinterfaces»
|
namespace name
|
| إيسليب | (defclass name (base-class) ((x :initform 0 :accessor get-x :initarg x)) (:abstractp nil))
|
||
أعضاء الصف
المنشئون والمدمرون
| constructor | مدمر | المُنهي [14] | |
|---|---|---|---|
| كائنات ABAP | methods constructor «importing parameter = argument»[15]
|
— | |
| APL (Dyalog) | ∇ name:Implements Constructor «:Base «expr»»instructions∇
|
∇ name:Implements Destructorinstructions∇
| |
| سي++ | 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
|
- (void)dealloc { instructions }
|
- (void)finalize { instructions }
|
| سويفت | init(«parameters») { instructions }
|
deinit { instructions }
|
|
| بايثون | def __init__(self«, parameters»):
|
def __del__(self):
| |
| فيجوال بيسك .NET | Sub New(«parameters»)
|
Sub Dispose()
|
Overrides Sub Finalize()
|
| شوجو | Sub Constructor(«parameters»)
|
Sub Destructor()
|
|
| بي اتش بي | 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
|
submethod DESTROY { instructions }
|
|
| روبي | def initialize«(parameters)»
|
— | |
| ويندوز باورشيل | — | ||
| أوكامل | initializer instructions[19]
|
— | |
| ف# | do instructions or[20]
|
member this.Dispose() = instructions
|
override this.Finalize() = instructions
|
| جافا سكريبت | function name(«parameters») { instructions }[21]
|
— | |
| جافا سكريبت (ES6) | constructor(«parameters») { instructions }
| ||
| كوبول | — [22] | — | |
| كوبرا | cue init(parameters)
|
def dispose
|
|
| إيسليب | (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
|
feature {NONE}
|
feature {current_class}
|
feature {FRIEND}
|
| 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
|
— | ||
| أوكامل | — | val «mutable» field = value
|
— | |
| ف# | — | let «mutable» 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)»[30]
|
[31] | |
| APL (Dyalog) | ∇ «left argument» name «right arguments»instructions∇
|
∇ result ← «left argument» name «right arguments»instructions∇
| |
سي++ [32]
يتم عادةً توفير تنفيذ الأساليب في ملف مصدر منفصل، مع بناء الجملة التالي
|
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» )
|
foo ( «parameters» ): TYPE
| |
| 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»):
|
def foo(self«, parameters»):
| |
| فيجوال بيسك .NET | Sub Foo(«parameters»)
|
Function Foo(«parameters») As type
| |
| شوجو | Sub Foo(«parameters»)
|
Function Foo(«parameters») As type
| |
| بي اتش بي | 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)»
|
def foo«(parameters)»
| |
| ويندوز باورشيل | 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} [34]
|
this.method = function(«parameters») {instructions... return value;} [34]
| |
| جافا سكريبت (ES6) | foo(«parameters») {instructions}
|
foo(«parameters») {instructions... return value;}
| |
| كوبول | METHOD-ID. foo.
instructions
|
METHOD-ID. foo.
instructions
| |
| كوبرا | def foo(parameters)
|
def foo(parameters) as type
|
|
| إيسليب | (defgeneric method (arg1 arg2))
|
ملكيات
كيفية إعلان خاصية باسم "Bar"
تم التنفيذ يدويا
| قراءة وكتابة | للقراءة فقط | للكتابة فقط | |
|---|---|---|---|
| كائنات ABAP | — | ||
| APL (Dyalog) | :Property Bar∇ result ← Getinstructions∇∇ Set argumentsinstructions∇:EndProperty Bar
|
:Property Bar∇ result ← Getinstructions∇:EndProperty Bar
|
:Property Bar∇ Set argumentsinstructions∇:EndProperty Bar
|
| سي++ | — | ||
| سي شارب | type Bar {
|
type Bar { get { instructions ... return value; } }
|
type Bar { set { instructions } }
|
| د | @property type bar() { instructions ... return value; }
|
@property type bar() { instructions ... return value; }
|
@property type bar(type value) { instructions ... return value; }
|
| إي سي | property type Bar {
|
property type Bar { get { instructions ... return value; } }
|
property type Bar { set { instructions } }
|
| جافا | — | ||
| Objective-C 2.0 (كاكاو) | @property (readwrite) type bar; ثم في الداخل@implementation
|
@property (readonly) type bar; ثم في الداخل@implementation
|
— |
| سويفت | var bar : type { get { instructions } set«(newBar)» { instructions } }
|
var bar : type { instructions }
|
— |
| ايفل | feature -- Access
|
||
| بايثون | def setBar(self, value): [35]
|
def getBar(self):
|
def setBar(self, value):
|
| فيجوال بيسك .NET | Property Bar() As type
|
ReadOnly Property Bar() As type
|
WriteOnly Property Bar() As type
|
| شوجو | ComputedProperty Bar() As type
|
ComputedProperty Bar() As type
|
ComputedProperty Bar() As type
|
| بي اتش بي | function __get($property) {
|
function __get($property) {
|
function __set($property, $value) {
|
| بيرل | sub Bar {
|
sub Bar {
|
sub Bar {
|
| راكو | — | ||
| روبي | def bar
|
def bar
|
def bar=(value)
|
| ويندوز باورشيل | Add-Member
|
Add-Member
|
Add-Member
|
| أوكامل | — | ||
| ف# | 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.
instructions
instructions
|
METHOD-ID. GET PROPERTY bar.
instructions
|
METHOD-ID. SET PROPERTY bar.
instructions
|
| كوبرا | pro bar «as type»
|
get bar «as type»
|
set bar «as type»
|
| إيسليب | — | ||
تم التنفيذ تلقائيا
| قراءة وكتابة | للقراءة فقط | للكتابة فقط | |
|---|---|---|---|
| كائنات ABAP | — | ||
| سي++ | — | ||
| سي شارب | type Bar { get; set; }
|
type Bar { get; private set; }
|
type Bar { private get; set; }
|
| د | — | ||
| جافا | — | ||
| Objective-C 2.0 (كاكاو) | @property (readwrite) type bar; ثم في الداخل@implementation
|
@property (readonly) type bar; ثم في الداخل@implementation
|
— |
| سويفت | var bar : type
|
let bar : type
|
— |
| ايفل | |||
| بايثون | @property
|
@property
|
bar = property()
|
| فيجوال بيسك .NET | Property Bar As type« = initial_value» (VB 10)
|
||
| بي اتش بي | |||
| بيرل [36] | use base qw(Class::Accessor);
|
use base qw(Class::Accessor);
|
use base qw(Class::Accessor);
|
| راكو | — | ||
| روبي | 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 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
|
op_name alias "symbol" (operand: TYPE1): TYPE2
|
|
| بايثون | def __opname__(self):
|
def __opname__(self, operand2):
|
def __call__(self«, parameters»):
|
| فيجوال بيسك .NET | Shared Operator symbol(operand As type) As type
|
Shared Operator symbol(operand1 As type, operand2 As type) As type
|
— |
| شوجو | Function Operator_name(operand As type) As type
|
— | |
| بي اتش بي | [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 infix:<symbol> («$operand1: » type operand2) { instructions ... return value; }
|
«our «type »»«multi »method postcircumfix:<( )> («$self: » «parameters») { instructions }
|
| روبي | def symbol
|
def symbol(operand2)
|
— |
| ويندوز باورشيل | — | ||
| أوكامل | |||
| ف# | static member (symbol) operand = expression
|
static member (symbol) (operand1, operand2) = expression
|
— |
| كوبول | — | ||
| إيسليب | — | ||
المفهرسات
| قراءة وكتابة | للقراءة فقط | للكتابة فقط | |
|---|---|---|---|
| كائنات ABAP | — | ||
| APL (Dyalog) | :Property Numbered Default name∇ result ← Getinstructions∇∇ Set argumentsinstructions∇:EndProperty Bar
|
:Property Numbered Default Bar∇ result ← Getinstructions∇:EndProperty Bar
|
:Property Numbered Default Bar∇ Set argumentsinstructions∇:EndProperty Bar
|
| سي++ | type& operator[](type index) { instructions }
|
type operator[](type index) { instructions }
|
|
| سي شارب | type this[type index] {
|
type this[type index] { get{ instructions } }
|
type this[type index] { set{ instructions } }
|
| د | type opIndex(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
|
- (void)setObject:(id)value atIndexedSubscript:(NSUInteger)index { instructions } or
|
| سويفت | subscript (index : type) -> returntype { get { instructions } set«(newIndex)» { instructions } }
|
subscript (index : type) -> returntype { instructions }
|
|
| ايفل [37] | bracket_name alias "[]" (index: TYPE): TYPE assign set_item
|
bracket_name alias "[]" (index: TYPE): TYPE
|
|
| بايثون | def __getitem__(self, index):
|
def __getitem__(self, index):
|
def __setitem__(self, index, value):
|
| فيجوال بيسك .NET | Default Property Item(Index As type) As type
|
Default ReadOnly Property Item(Index As type) As type
|
Default WriteOnly Property Item(Index As type) As type
|
| بي اتش بي | [39] | ||
| بيرل | [40] | ||
| راكو | «our «type »»«multi »method postcircumfix:<[ ]> is rw («$self: » type $index) { instructions ... return value; } or
|
«our «type »»«multi »method postcircumfix:<[ ]>(«$self: » type $index) { instructions ... return value; } or
|
— |
| روبي | def [](index)
|
def [](index)
|
def []=(index, value)
|
| ويندوز باورشيل | — | ||
| أوكامل | |||
| ف# | 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
|
get[index «as type»] as type
|
set[index «as type»] as type
|
أنواع القوالب
| مسبل | المهوى الصاعد | |
|---|---|---|
| كائنات 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
|
Shared Widening Operator CType(operand As type) As returntype
|
| بي اتش بي | — | |
| بيرل | ||
| راكو | multi method type«($self:)» is export { instructions }
| |
| روبي | — | |
| ويندوز باورشيل | ||
| أوكامل | ||
| ف# | ||
| كوبول | — | |
وصول الأعضاء
كيفية الوصول إلى أعضاء الكائن x
| عضو الكائن | عضو الصف | عضو المساحة الاسمية | |||
|---|---|---|---|---|---|
| طريقة | مجال | ملكية | |||
| كائنات ABAP | x->method(«parameters»).[41]
|
x->field
|
— | x=>field or x=>method(«parameters[41]»).
|
— |
| سي++ | x.method(parameters) or
|
x.field or
|
cls::member
|
ns::member
| |
| Objective-C | [x method«:parameter «bar:parameter ...»»]
|
x->field
|
x.property (2.0 only) or
|
[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.field or
|
cls.method«(parameters)» or
|
ns::member
| |
| أوكامل | x#method «parameters»
|
— | |||
| جافا سكريبت | x.method(parameters)
|
x.field
|
x.property
|
cls.member
|
— |
| كوبول | INVOKE x "method" «USING parameters» «RETURNING result» or
|
— | property OF x
|
INVOKE cls "method" «USING parameters» «RETURNING result» or
|
— |
| كوبرا | 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
| |
| جافا | x.toString()
|
x.clone()[53]
|
x.equals(y)
|
x.compareTo(y)[54]
|
x.hashCode()
|
System
| |
| جافا سكريبت | x.toString()
|
||||||
| د | x.toString() or
|
x.stringof
|
x == y or
|
x.opCmp(y)
|
x.toHash()
|
||
| إي سي | x.OnGetString(tempString, null, null) or
|
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)
| |
| محادثة قصيرة | 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[70]
|
Storable[71]
|
Scalar[72]
| |||
| راكو | ~x[69]
|
x.perl
|
x.clone
|
x eqv y
|
x cmp y
|
x.WHICH
| |
| روبي | x.to_s
|
x.inspect
|
x.dup or
|
x == y or
|
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
|
Oo.id x
| |||
| ف# | string x or x
|
sprintf "%A" x
|
x.Clone()
|
x = y or x
|
compare x y or x
|
hash x or x
|
|
| كوبول | — | ||||||
التلاعب بالنوع
| الحصول على نوع الكائن | هو مثال لـ (يتضمن الأنواع الفرعية) | رفع الصوت | التخفيض | ||
|---|---|---|---|---|---|
| فحص وقت التشغيل | لا يوجد فحص | ||||
| كائنات ABAP | — [73] | = | ؟= | ||
| سي++ | typeid(x)
|
dynamic_cast<type *>(&x) != nullptr
|
— [74] | dynamic_cast<type*>(ptr)
|
(type*) ptr or
|
| سي شارب | 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.class
|
x.instance_of?(type) or
|
— [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#:
|
Spec#:
| |||
| جافا | — | ||||
| Objective-C | |||||
| فيجوال بيسك .NET | |||||
| د | f
|
f
|
assert(expression)
|
invariant() { expression }
|
|
| ايفل | f
|
f
|
f
|
class X
|
from instructions
|
| بايثون | — | ||||
| بي اتش بي | |||||
| بيرل | |||||
| راكو | PRE { condition }
|
POST { condition }
|
|||
| روبي | — | ||||
| ويندوز باورشيل | |||||
| أوكامل | |||||
| ف# | |||||
| كوبول | |||||
انظر أيضا
المراجع والملاحظات
- ^ parameter = argument يمكن تكرارها إذا كان المنشئ يحتوي على عدة معلمات
- ^ SAP احتفظ لنفسه باستخدام التدمير
- ^ abcdefghijkl تستخدم هذه اللغة جمع القمامة لتحرير الذاكرة غير المستخدمة.
- ^ هذا النحو ينشئ قيمة كائنية بمدة تخزين تلقائية
- ^ هذا النحو ينشئ كائنًا بمدة تخزين ديناميكية ويعيد مؤشرًا إليه
- ^ يمكن إنشاء كائنات OCaml مباشرة دون المرور عبر فئة.
- ^ abcdefg تدعم هذه اللغة الوراثة المتعددة . يمكن أن يكون للفئة أكثر من فئة رئيسية واحدة
- ^ عدم توفير فئة رئيسية يجعل الفئة فئة جذرية. في الممارسة العملية، لا يتم ذلك أبدًا تقريبًا. يجب على المرء عمومًا استخدام الفئة الأساسية التقليدية للإطار الذي يستخدمه، والتي تستخدم
NSObjectلـ Cocoa وGNUstep، أوObjectغير ذلك. - ^ عادةً
@interfaceما يتم وضع الجزء في ملف رأس ، ويتم@interfaceوضع الجزء في ملف كود مصدر منفصل. - ^ البادئات لأسماء الفئات والبروتوكولات المستخدمة تقليديًا كنوع من مساحة الأسماء
- ^ في بايثون، الواجهات هي فئات تحتوي طرقها على pass كأجسام لها
- ^ الفصل عبارة عن كائن.
ما عليك سوى إرسال رسالة إلى الفصل الأعلى (st-80) أو إلى مساحة الاسم الوجهة (Visualworks). - ^ مساحة الاسم عبارة عن كائن.
فقط قم بإرسال رسالة إلى مساحة الاسم الأصلية. - ^ يتم استدعاء المُنهي بواسطة جامع القمامة عندما يكون الكائن على وشك أن يتم جمعه. لا يوجد ضمان بشأن متى سيتم استدعاؤه أو ما إذا كان سيتم استدعاؤه على الإطلاق .
- ^ في ABAP، يجب تعريف المنشئ مثل الطريقة (انظر التعليقات حول الطريقة) مع القيود التالية: يجب أن يكون اسم الطريقة "منشئ"، ولا يمكن تعريف سوى معلمات "استيراد"
- ^ توجد هنا قائمة اختيارية منفصلة بفواصل لمبدئات الكائنات الأعضاء والفئات الأصلية. صيغة تهيئة الكائنات الأعضاء هي
"member_name(parameters)"
"class_name(parameters)".
- ^ يمكن استخدام أي إجراء Eiffel كإجراء إنشاء، أو ما يعرف بالمنشئين. راجع فقرة Eiffel في المنشئ (علوم الكمبيوتر) .
- ^ يؤدي تنفيذ {DISPOSABLE}.dispose إلى ضمان استدعاء التخلص عند تجميع الكائن.
- ^ نادرًا ما يتم استخدام بنية "المُهيئ" هذه. عادةً ما يتم تهيئة الحقول في OCaml مباشرةً في إعلانها. فقط عندما تكون هناك حاجة إلى عمليات إلزامية إضافية يتم استخدام "المُهيئ". يتم تحديد "المعلمات الخاصة بالمُنشئ" في اللغات الأخرى كمعلمات للفئة في OCaml. راجع بناء جملة إعلان الفئة لمزيد من التفاصيل.
- ^ يستخدم هذا النحو عادةً لزيادة تحميل المنشئين
- ^ في JavaScript، المنشئ هو كائن.
- ^ يمكن محاكاة المنشئين باستخدام طريقة المصنع التي تقوم بإرجاع مثيل للفئة.
- ^ يجب أن يظهر معرف النطاق مرة واحدة في إعلان الملف، كل إعلانات المتغيرات بعد معرف النطاق هذا لها نطاقه، حتى يتم الوصول إلى معرف نطاق آخر أو نهاية إعلان الفئة
- ^ في ABAP، لا يتم إعلان حقول أو طرق معينة على أنها قابلة للوصول بواسطة أشياء خارجية. بدلاً من ذلك، يتم إعلان الفئات الخارجية كأصدقاء لديهم إمكانية الوصول إلى حقول أو طرق الفئة.
- ^ في لغة C++، لا يتم إعلان حقول معينة على أنها يمكن الوصول إليها بواسطة أشياء خارجية. بل يتم إعلان الدوال والفئات الخارجية كأصدقاء للوصول إلى حقول الفئة. راجع الدالة الصديقة والفئة الصديقة لمزيد من التفاصيل.
- ^ فقط أرسل رسالة إلى الفصل
الفئة addInstVarName: الحقل . الفئة removeInstVarName: الحقل .
- ^ abcd فقط قم بتعيين قيمة له في طريقة
- ^ لا تحتوي لغة بايثون على حقول خاصة - كل الحقول متاحة للعامة في جميع الأوقات. توجد اتفاقية مجتمعية لوضع بادئة لتفاصيل التنفيذ بعلامة سفلية واحدة، لكن اللغة لا تطبق هذا.
- ^ جميع بيانات الفئة "خاصة" لأن معيار COBOL لا يحدد أي طريقة للوصول إليها.
- ^ إعلان وتنفيذ الطرق في ABAP منفصلان. يجب استخدام عبارة methods داخل تعريف الفصل. يجب استخدام method (بدون "s") داخل تنفيذ الفصل. يمكن تكرار المعلمة = argument إذا كان هناك عدة معلمات.
- ^ في ABAP، يتم تعريف اسم معلمة الإرجاع صراحةً في توقيع الطريقة ضمن تعريف الفصل
- ^ في C++، عادةً ما يكون إعلان الطرق وتنفيذها منفصلين. يتم إعلان الطرق في تعريف الفئة (والذي عادةً ما يتم تضمينه في ملف رأس ) باستخدام بناء الجملة
- ^ على الرغم من أنه يمكن تضمين نص الطريقة مع الإعلان داخل تعريف الفئة، كما هو موضح في الجدول هنا، إلا أن هذه ممارسة سيئة بشكل عام. نظرًا لأنه يجب تضمين تعريف الفئة مع كل ملف مصدر يستخدم حقول أو طرق الفئة، فإن وجود كود في تعريف الفئة يتسبب في تجميع كود الطريقة مع كل ملف مصدر، مما يزيد من حجم الكود. ومع ذلك، في بعض الظروف، من المفيد تضمين نص الطريقة مع الإعلان. أحد الأسباب هو أن المترجم سيحاول تضمين الطرق المضمنة في إعلان الفئة؛ لذلك إذا حدثت طريقة قصيرة جدًا من سطر واحد ، فقد يجعل ذلك من الأسرع السماح للمترجم بتضمينها، من خلال تضمين النص مع الإعلان. أيضًا، إذا حدثت فئة أو طريقة قالب ، فيجب تضمين كل الكود مع الإعلان، لأنه فقط باستخدام الكود يمكن إنشاء القالب.
- ^ ab فقط قم بتعيين وظيفة لها في طريقة
- ^ التنفيذ البديل:
def bar (): doc = "خاصية bar." def fget ( self ) : return self._bar def fset ( self , value ) : self._bar = value return locals ( ) bar = property ( ** bar () )
- ^ هذه الأمثلة تحتاج إلى تثبيت وحدة Class::Accessor
- ^ abc على الرغم من أن Eiffel لا يدعم التحميل الزائد للمشغلات، إلا أنه يمكنه تعريف المشغلات
- ^ لا يدعم PHP التحميل الزائد للمشغل بشكل أصلي، ولكن يمكن إضافة الدعم باستخدام حزمة PECL "operator".
- ^ يجب على الفصل تنفيذ واجهة ArrayAccess.
- ^ يجب على الفصل أن يقوم بتحميل '@{}' (إلغاء مرجع المصفوفة) أو الفئة الفرعية لواحدة من Tie::Array أو Tie::StdArray لربط عمليات المصفوفة
- ^ ab في ABAP، يجب تمرير الوسائط باستخدام هذا النحو:
x->method(«exporting parameter = argument» «importing parameter = argument» «changing parameter = argument» «returning value(parameter)»parameter = argumentيمكن تكرارها إذا كان هناك عدة معلمات
- ^ لا تحتوي لغة C++ على كلمة "super"، وذلك لأن الوراثة المتعددة ممكنة، وبالتالي قد يكون من الغامض تحديد الفئة الأساسية التي تتم الإشارة إليها. وبدلاً من ذلك،
BaseClassName::memberيمكن استخدام بناء الجملة للوصول إلى عضو تم تجاوزه في الفئة الأساسية المحددة. توفر Microsoft Visual C++ كلمة أساسية غير قياسية "__super" لهذا الغرض؛ ولكن هذا غير مدعوم في المترجمات الأخرى.[1] - ^ abcdefghi الكلمة الأساسية هنا ليست قيمة ، ولا يمكن استخدامها إلا للوصول إلى طريقة من الفئة العليا.
- ^ لكن احذر، ليس لديهم نفس القيمة.
- ^ فقط للأنواع الاختيارية
- ^ ab في هذه اللغة، يتم تمرير الكائن الحالي إلى طرق المثيل كمعلمة أولى، والتي تسمى تقليديًا "self"، ولكن ليس من الضروري أن تكون هذه هي الحالة.
- ^ "Precursor" في لغة Eiffel هي في الواقع استدعاء لطريقة تحمل نفس الاسم في الفئة العليا. لذا فإن Precursor(args) يعادل "super.currentMethodName(args)" في لغة Java. لا توجد طريقة لاستدعاء طريقة تحمل اسمًا مختلفًا في الفئة العليا.
- ^ "super" في Ruby، على عكس اللغات الأخرى، هو في الواقع استدعاء لطريقة تحمل نفس الاسم في الفئة العليا. لذا فإن super(args) في Ruby يعادل "super.currentMethodName(args)" في Java. لا توجد طريقة لاستدعاء طريقة تحمل اسمًا مختلفًا في الفئة العليا.
- ^ في OCaml، يمكن أن يبدأ إعلان الكائن بشكل اختياري بمعلمة سيتم ربطها بالكائن الحالي. يُطلق على هذه المعلمة اسم "self" تقليديًا، لكن هذا ليس ضروريًا. من الجيد وضع معلمة هناك حتى يتمكن المرء من استدعاء طرقه الخاصة.
- ^ في OCaml، يمكن ربط إعلان الميراث ("الوراثة") بشكل اختياري بقيمة، مع بناء الجملة "" ورث معلمات فئة الوالدين"" كـ super"". هنا "super" هو الاسم المعطى للمتغير المرتبط بهذا الكائن الرئيسي. يمكن تسميته بشكل مختلف.
- ^ ومع ذلك، إذا كانت القدرة على الحصول على قيمة "اختيارية" في OCaml ضرورية، فقم بلف القيمة داخل نوع
option، والقيم هيNoneوSome x، والتي يمكن استخدامها لتمثيل "مرجع فارغ" و"مرجع غير فارغ لكائن" كما هو الحال في اللغات الأخرى. - ^ بافتراض أن "x" و"y" هما الكائنان (وليس المؤشرات). يمكن تخصيصها عن طريق تحميل عامل الكائن بشكل زائد
== - ^ يمكن الوصول إليها فقط من داخل الفصل، نظرًا لأن
clone()الطريقة الموروثة منObjectمحمية، ما لم تلغِ الفصل الطريقة وتجعلها عامة. إذا كنت تستخدم الطريقةclone()الموروثة منObject، فيجب على الفصل تنفيذCloneableالواجهة للسماح بالاستنساخ. - ^ يجب على الفصل تنفيذ الواجهة
Comparableلهذه الطريقة لتكون موحدة. - ^ تم تنفيذه بواسطة طريقة الكائن
copyWithZone: - ^
compare:هو الاسم التقليدي لطريقة المقارنة في فئات Foundation. ومع ذلك، لا يوجد بروتوكول رسمي - ^ فقط إذا كان الكائن يتوافق مع
Printableالبروتوكول - ^ فقط إذا كان الكائن يتوافق مع
DebugPrintableالبروتوكول - ^ فقط إذا كان الكائن يتوافق مع
Equatableالبروتوكول - ^ فقط إذا كان الكائن يتوافق مع
Comparableالبروتوكول - ^ فقط إذا كان الكائن يتوافق مع
hashValueالبروتوكول - ^ يمكن تخصيصها حسب طريقة الكائن
__str__() - ^ يمكن تخصيصها حسب طريقة الكائن
__repr__() - ^ يمكن تخصيصها حسب طريقة الكائن
__copy__() - ^ يمكن تخصيصها حسب طريقة الكائن
__eq__() - ^ فقط في Python 2.x وما قبله (تم إزالته في Python 3.0). يمكن تخصيصه بواسطة طريقة الكائن
__cmp__() - ^ يمكن تخصيصها بواسطة طريقة الكائن
__hash__(). ليست كل الأنواع قابلة للتجزئة (الأنواع القابلة للتغيير لا يمكن تجزئتها عادةً) - ^ يمكن تخصيصها حسب طريقة الكائن
__clone() - ^ ab يمكن تخصيصه عن طريق التحميل الزائد لمشغل تحويل سلسلة الكائن
- ^ يتطلب هذا المثال استخدام Data ::Dumper
- ^ يتطلب هذا المثال استخدام ing Storable
- ^ يتطلب هذا المثال استخدام Scalar::Util
- ^ يمكن جمع معلومات نوع وقت التشغيل في ABAP باستخدام فئات وصف مختلفة مثل CL_ABAP_CLASSDESCR.
- ^ abcde إن الترقية ضمنية في هذه اللغة. يمكن استخدام مثيل النوع الفرعي حيث تكون هناك حاجة إلى النوع الأعلى.
- ^ فقط للكائنات غير التابعة لفئة. إذا
xكان كائنًا من فئة،[x class]فإنه يرجع فقطx. ستقوم طريقة وقت التشغيلobject_getClass(x)بإرجاع فئةxلجميع الكائنات. - ^ abc هذه اللغة مكتوبة بطريقة ديناميكية. لا حاجة إلى التحويل بين الأنواع.
- ^ هذه اللغة لا تقدم معلومات عن النوع وقت التشغيل. فهي غير ضرورية لأنها مكتوبة بشكل ثابت ولا يمكن تخفيضها.
Original text
Rate this translation
Your feedback will be used to help improve Google Translate
