Сравнение языков программирования (объектно-ориентированное программирование) - Comparison of programming languages (object-oriented programming)

Этот сравнение языков программирования сравнивает, как объектно-ориентированного программирования языки, такие как C ++, Ява, Болтовня, Object Pascal, Perl, Python и другие манипулируют структуры данных.

Строительство и разрушение объекта

строительстворазрушение
Объекты ABAPданные Переменная введите ссылку на учебный класс .
создать объект Переменная "экспорт параметр = аргумент ».
[1]
[2][3]
APL (Дьялог)Переменная← ⎕НОВИНКА класс «параметры»⎕EX 'Переменная'
C ++ (STL )переменная класса «(параметры)»; или же
учебный класс *Переменная = новыйучебный класс"(параметры)»;
Удалить указатель;
C #переменная класса = новый учебный класс(параметры);Переменная.Dispose ();[3]
Ява[3]
Dразрушать(Переменная);
eCкласс «дескриптор экземпляра» { «Назначение свойств / элементов данных, переопределения метода экземпляра» }Удалить дескриптор экземпляра;
Цель-C (Какао )учебный класс *Переменная = [[учебный класс alloc] init]; или же
учебный класс *Переменная = [[учебный класс alloc] initWithFoo:параметр «бар:параметр ... »];
[Переменная релиз];
Быстрыйпозволять Переменная = учебный класс(параметры)
PythonПеременная = учебный класс(параметры)дель Переменная[3] (Обычно не требуется)
Visual Basic .NETТусклый Переменная Как новый учебный класс(параметры)Переменная.Dispose ()[3]
XojoТусклый Переменная Как новый учебный класс(параметры)переменная = Ноль
ЭйфельСоздайте Переменная или же
Создайте «{ТИП}" Переменная.make_foo «(параметры)» или же
Переменная : = создать {ТИП} или же
Переменная : = create {ТИП}.make_foo «(параметры)»
[3]
PHP$Переменная = новый учебный класс«(параметры)»;не установлено ($Переменная);[3]
Perl 5«мой »$Переменная = учебный класс-> новый«(параметры)»;undef ($Переменная);
Раку«мой »$ Переменная = учебный класс.новый«(параметры)»;$ переменная.undefine;
РубинПеременная = учебный класс.новый«(параметры)»[3]
Windows PowerShell$Переменная = Новый объект «-TypeName" учебный класс ""-ArgumentList»Параметры»Удалить переменную «-Имя" Переменная
OCamlпозволять Переменная = новый класс «параметры» или же
позволять Переменная = объект члены конец[4]
[3]
F #позволять Переменная = «новый "учебный класс(«Параметры»)
БолтовняКласс - это объект.
Просто отправьте сообщение классу, обычно #новый или же #новый:, и многие другие, например:
Точка Икс: 10 y: 20.Множество с: -1 с: 3 с: 2.
JavaScriptвар Переменная = новый класс «(параметры)» или же
вар Переменная = { «Key1: значение1 «, key2: значение2 ... »»}
[3]
Object Pascal (Delphi )ClassVar := ClassType.ConstructorName(параметры);ClassVar.Свободный;
Scala
вал объект = новый Объект // без параметроввал объект = новый Объект(arg0, arg1, arg2...)вал объект = Объект(arg0, arg1, arg2...) // класс случаявал объект = новый Объект(arg0, arg1, param1 = значение1, ...) // именованные параметры
[3]
КОБОЛПРИЗЫВАТЬ учебный класс "НОВЫЙ" ВОЗВРАЩЕНИЕ Переменная или же
ДВИГАТЬСЯ учебный класс::"НОВЫЙ" К Переменная
КобраПеременная "в качестве учебный класс" = учебный класс(параметры)Переменная.dispose
ISLISP(setq Переменная (Создайте (учебный класс <некоторый-класс> [: поле-1 значение-1 [: поле-2 значение-2] ..])))[3]

Объявление класса

учебный класспротоколпространство имен
Объекты ABAPучебный класс имя определение «наследуя от родительский класс ». «интерфейсы: интерфейсы.»Method_and_field_declarations endclass.
учебный класс имя выполнение. method_implementations endclass.
интерфейс имя. члены конечный интерфейс.Нет данных
APL (Диалог):Учебный класс имя ":родительский класс »«,интерфейсы »
члены
: EndClass
:Интерфейс имя
члены
: EndInterface
: Пространство имен имя
члены
: EndNamespace
C ++ (STL)учебный класс имя" : public родительские классы[5]» { члены };пространство имен имя { члены }
C #учебный класс имя" : «Родительский класс» «, интерфейсы »» { члены }интерфейс имя": родительские интерфейсы » { члены }
Dмодуль имя;
члены
eCучебный класс имя": базовый класс » { «Присвоение значений элементам по умолчанию» «члены» }пространство имен имя;
Яваучебный класс имя" расширяет родительский класс »« орудия интерфейсы » { члены }интерфейс имя"расширяет родительские интерфейсы » { члены }упаковка имя; члены
PHPпространство имен имя; члены
Цель-C@интерфейс имя" : родительский класс »[6]«< протоколы >» { instance_fields } method_and_property_declarations @конец
@выполнение
имя method_implementations @конец
[7]
@protocol имя"< родительские протоколы >»Участники @конец[8]
Быстрыйучебный класс имя" : «Родительский класс» «, протоколы »» { члены }протокол имя" : родительские протоколы » { члены }
Pythonучебный класс имя"(родительские классы[5])»:
Вкладка ↹
члены
[9]__all__ = [ member1,member2,... ]
Visual Basic .NETУчебный класс имя" Наследует родительский класс »« Орудия интерфейсы »
члены
Конец класса
Интерфейс имя" Наследует родительские интерфейсы »
члены
Конечный интерфейс
Пространство имен имя
члены
Конец пространства имен
XojoУчебный класс имя" Наследует родительский класс »« Орудия интерфейсы »
члены
Конец класса
Интерфейс имя" Наследует родительские интерфейсы »
члены
Конечный интерфейс
Модуль имя
члены
Конечный модуль
Эйфельучебный класс имя" наследовать родительские классы[5]»
члены
конец
Нет данных
Perlупаковка имя; «@ISA = qw (родительские классы[5]);»Участники 1;упаковка имя; члены
Ракуучебный класс имя "является родительский класс «является родительский класс ...[5]»» «делает роль «делает роль ... »» { члены }роль имя "делает роль «делает роль ... »» { члены }модуль имя { члены }
Рубинучебный класс имя"< родительский класс »
члены
конец
модуль имя
члены
конец
Windows PowerShellНет данных
OCamlучебный класс название «параметры» = объект «(себя)» «наследовать родительский класс «параметры» «наследовать родительский класс «параметры» ...[5]»» Участники конецмодуль имя
члены
F #тип имя"(параметры)»«как это» = класс «наследовать родительский класс «(параметры)» «как база»» Участники «интерфейс интерфейс с выполнение "интерфейс интерфейс с выполнение ..."" конецтип имя = интерфейс члены конецпространство имен имя
члены
Болтовня[10][11]
JavaScript (ES6)учебный класс имя "расширяет родительский класс » { члены }
Object Pascal (Delphi)

ClassName = Класс «(ClassParent, интерфейсы)»
частный
// Частные члены (включая методы и поля)
общественный
// Публичные члены
защищенный
// Защищенные члены
опубликовано
// Опубликованные участники
конец;

упаковка имя; члены
Scala
учебный класс ConcreteClass(конструктор параметры)расширяет ParentClassс Trait1 с Trait2 с Trait2 {// члены}
черта TraitNameрасширяет Другоес Другое с Другое {// члены}
упаковка имя
КОБОЛID КЛАССА. имя"НАСЛЕДОВАНИЕ« ИЗ»Родительские классы».
    ФАБРИКА« ВНЕДРЕНИЯ интерфейсы ».
    одноклассники
    КОНЕЦ ЗАВОДА.
    ОБЪЕКТ« ВНЕДРЕНИЯ интерфейсы ».
    экземпляры-члены
    КОНЕЧНЫЙ ОБЪЕКТ.

КОНЕЦ КЛАССА имя.

ИНТЕРФЕЙС-ID. имя"НАСЛЕДОВАНИЕ« ИЗ»Интерфейсы».
    члены

КОНЕЦ ИНТЕРФЕЙСА имя.

Нет данных
Кобраучебный класс имя "наследует родительский класс »«орудия интерфейсы »
Вкладка ↹ члены
интерфейс имя "наследует родительские интерфейсы »
Вкладка ↹ члены
пространство имен имя
Вкладка ↹ члены
ISLISP(defclass имя (базовый класс) ((x : initform 0 : аксессуар получить-х : initarg Икс)) (: abstractp ноль))

Члены класса

Конструкторы и деструкторы

конструктордеструкторфинализатор[12]
Объекты ABAPконструктор методов «импорт параметр = аргумент »
конструктор метода. инструкции endmethod.
[13]
Нет данных
APL (Диалог) имя
: Реализует Конструктор «:Основание «Expr» »
инструкции
имя
: Реализует деструктор
инструкции
C ++ (STL)учебный класс(«Параметры») «: инициализаторы[14]» { инструкции }~учебный класс() { инструкции }
C #учебный класс(«Параметры») { инструкции }void Dispose () { инструкции }~учебный класс() { инструкции }
Dэто(«Параметры») { инструкции }~ this () { инструкции }
eCучебный класс() { инструкции }~ класс() { инструкции }
Яваучебный класс(«Параметры») { инструкции }void finalize () { инструкции }
Эйфель[15][16]
Objective-C (какао)- (id) init { инструкции... вернуть себя; } или же
- (я бы)initWithFoo:параметр «бар:параметр ... » { инструкции... вернуть себя; }
- (void) dealloc { инструкции }- (недействительно) finalize { инструкции }
Быстрыйв этом(«Параметры») { инструкции }deinit { инструкции }
Pythondef __init __ (self«, параметры »):
Вкладка ↹ инструкции
def __del __ (сам):
Вкладка ↹ инструкции
Visual Basic .NETSub New («Параметры»)
инструкции
Конец подписки
Подразделение ()
инструкции
Конец подписки
Переопределяет подфинализацию ()
инструкции
Конец подписки
XojoПодконструктор («Параметры»)
инструкции
Конец подписки
Суб-деструктор ()
инструкции
Конец подписки
PHPфункция __construct («Параметры») { инструкции }function __destruct () { инструкции }
Perlsub new {my ($ class«, параметры »знак равно мой $ self = {}; инструкции ... bless ($ self, $ class); return $ self; }sub DESTROY {мой ($ self) = @_; инструкции }
Ракуsubmethod BUILD { инструкции } или же
«мульти » метод новый («« $ Self: »Параметры») {self.bless (*, поле1 => значение1, ...); ... инструкции }
submethod DESTROY { инструкции }
Рубинdef инициализировать«(параметры)»
инструкции
конец
Нет данных
Windows PowerShellНет данных
OCamlинициализатор инструкции[17]Нет данных
F #делать инструкции или
новый(параметры) = выражение
[18]
член this.Dispose () = инструкциипереопределить this.Finalize () = инструкции
JavaScriptфункция имя(«Параметры») { инструкции }[19]Нет данных
JavaScript (ES6)конструктор(«Параметры») { инструкции }
КОБОЛНет данных[20]Нет данных
Кобраcue init (параметры)
Вкладка ↹ base.init
Вкладка ↹ инструкции
def избавляться
Вкладка ↹ инструкции
ISLISP(defmethod инициализировать-объект ((экземпляр <имя-класса>) значения инициализации)

Поля

общественныйчастныйзащищенныйдруг
Объекты ABAPпубличный раздел.[21] данные поле тип тип.приватный раздел.[21] данные поле тип тип.защищенный раздел.[21] данные поле тип тип.[22]
APL (Диалог): Поле Public поле " ценить»:Поле «Частный" поле " ценить»
C ++ (STL)общественность: поле типа;частный: поле типа;защищено: поле типа;[23]
C #общественный поле типа «= ценить";частный поле типа «= ценить";защищенный поле типа «= ценить";внутренний поле типа «= ценить";
Dупаковка поле типа «= ценить";
Явазащищенный поле типа «= ценить";поле типа «= ценить";
eCобщественный поле типа;частный поле типа;
Эйфельособенность
поле: ТИП
функция {NONE}
поле: ТИП
особенность {current_class}
поле: ТИП
функция {FRIEND}
поле: ТИП
Цель-C@public поле типа;@частный поле типа;@protected поле типа;@упаковка поле типа;
БыстрыйНет данных
БолтовняНет данных[24]Нет данных
Pythonсебя.поле = ценить[25]Нет данных[26]Нет данных
Visual Basic .NETОбщественные поле В качестве тип "= ценить"Частный поле В качестве тип "= ценить"Защищено поле В качестве тип "= ценить"Друг поле В качестве тип "= ценить"
XojoОбщественные поле В качестве тип "= ценить"Частный поле В качестве тип "= ценить"Защищено поле В качестве тип "= ценить"Нет данных
PHPобщественные $поле "= ценить";частный $поле "= ценить";защищенный $поле "= ценить";
Perl$ self -> {поле} = ценить;[25]Нет данных
Ракуимеет«Тип» $.поле"это rw»имеет«Тип» $!полеНет данных
РубинНет данных@поле = ценить[25]
Windows PowerShellДобавить участников
«-MemberType »Примечание
«-Имя "Бар "-Ценить "ценить
-InputObject Переменная
Нет данных
OCamlНет данныхвал «изменчивый" поле = ценитьНет данных
F #Нет данныхпозволять «изменчивый" поле = ценитьНет данных
JavaScriptэто.поле = ценить
это["поле"] = значение
[25]
КОБОЛНет данныхпредложения поля номера уровня.[27]Нет данныхНет данных
Кобравар поле "в качестве тип" "= ценить"вар __поле "в качестве тип" "= ценить"вар _поле "в качестве тип" "= ценить"
ISLISP(поле : initform ценить : аксессуар имя-доступа : initarg ключевое слово)

Методы

основной / недействительный методметод возврата значения
Объекты ABAPметоды имя "импорт параметр = аргумент »«экспорт параметр = аргумент »«изменение параметр = аргумент »«возвращаемое значение (параметр)»
метод имя. инструкции endmethod.
[28]
[29]
APL (Диалог) «Левый аргумент» имя «правый аргумент»
инструкции
результат «Левый аргумент» имя «правый аргумент»
инструкции
C ++[30]
введите foo(«Параметры»);

Реализация методов обычно предоставляется в отдельном исходном файле со следующим синтаксисом

тип класс::фу(«Параметры») { инструкции }[31]
пустота фу(«Параметры») { инструкции }введите foo(«Параметры») { инструкции ... возвращаться ценить; }
C #
D
Ява
eCпустота «« Тип этого »»::»Foo(«Параметры») { инструкции }типа «тип этого»::»Foo(«Параметры») { инструкции ... возвращаться ценить; }
Эйфельфу ( «Параметры» )
делать
инструкции
конец
фу ( «Параметры» ): ТИП
делать
инструкции...
Результат : = значение
конец
Цель-C- (пустота)foo «:параметр «бар:параметр ... »» { инструкции }- (тип)foo «:параметр «бар:параметр ... »» { инструкции... возвращаться ценить; }
Быстрыйfunc фу(«Параметры») { инструкции }func фу(«Параметры») -> тип { инструкции... возвращаться ценить }
Pythondef фу(себя«, параметры »):
Вкладка ↹
инструкции
def фу(себя«, параметры »):
Вкладка ↹
инструкции
Вкладка ↹ возвращаться
ценить
Visual Basic .NETSub Фу(«Параметры»)
инструкции
Конец подписки
Функция Фу(«Параметры») В качестве тип
инструкции
...
Возвращаться ценить
Конечная функция
XojoSub Фу(«Параметры»)
инструкции
Конец подписки
Функция Фу(«Параметры») В качестве тип
инструкции
...
Возвращаться ценить
Конечная функция
PHPфункция фу(«Параметры»)": пустота" { инструкции }функция фу(«Параметры»)«: тип» { инструкции ... возвращаться ценить; }
Perlсуб фу {мой ($ self«, параметры ») = @_; инструкции }суб фу {мой ($ self«, параметры ») = @_; инструкции ... возвращаться ценить; }
Раку«имеет »«мульти »метод фу(«« $ Self: »Параметры») { инструкции }«имеет "тип """мульти »метод фу(«« $ Self: »Параметры») { инструкции ... возвращаться ценить; }
Рубинdef foo «(параметры)»
инструкции
конец
def foo «(параметры)»
инструкции
выражение, приводящее к возвращаемому значению
конец
или же
def foo «(параметры
инструкции
возвращаться ценить
конец
Windows PowerShellДобавить участников «-MemberType» ScriptMethod «-Имя»Foo«-Ценить» { «парам (параметры)»инструкции } -InputObject ПеременнаяДобавить участников «-MemberType» ScriptMethod «-Имя»Foo«-Ценить» { «парам (параметры)»инструкции ... возвращаться ценить } -InputObject Переменная
OCamlНет данныхметод foo «параметры» = выражение
F #член это.фу(«Параметры») = выражение
JavaScriptэто.метод = функция («Параметры») {инструкции}
имя".прототип.метод = функция («Параметры») {инструкции}
[32]
это.метод = функция («Параметры») {инструкции... возвращаться ценить;}
имя".прототип.метод = функция («Параметры») {инструкции... возвращаться ценить;}
[32]
Javascript (ES6)фу(«Параметры») {инструкции}фу(«Параметры») {инструкции... возвращаться ценить;}
КОБОЛМЕТОД-ИД. фу.
«ОТДЕЛЕНИЕ ДАННЫХ.
РАЗДЕЛ СВЯЗИ.
объявления параметров »
ПРОЦЕДУРА ОТДЕЛЕНИЯ« С ПОМОЩЬЮ параметры ».
    инструкции

КОНЕЦ МЕТОДА фу.

МЕТОД-ИД. фу.
ОТДЕЛЕНИЕ ДАННЫХ.
РАЗДЕЛ СВЯЗИ.
«Объявления параметров»
объявление result-var
ПРОЦЕДУРА ОТДЕЛЕНИЯ« С ПОМОЩЬЮ параметры » ВОЗВРАЩЕНИЕ результат-var.
    инструкции

КОНЕЦ МЕТОДА фу.

Кобраdef фу(параметры)
Вкладка ↹ инструкции
def фу(параметры) в качестве тип
Вкладка ↹ инструкции
Вкладка ↹ возвращаться ценить
ISLISP(defgeneric метод (arg1 arg2))
(defmethod метод ((arg1 arg2 ) ...)

Характеристики

Как объявить свойство с именем «Бар»

Реализовано вручную

читай пишитолько чтениетолько для записи
Объекты ABAPНет данных
APL (Диалог):Свойство Бар
результат ← Получить
инструкции

∇ Установить аргументы
инструкции

: EndProperty Бар
:Свойство Бар
результат ← Получить
инструкции

: EndProperty Бар
:Свойство Бар
∇ Установить аргументы
инструкции

: EndProperty Бар
C ++ (STL)Нет данных
C #тип Бар {
получать {
инструкции ... возвращаться ценить; }
набор {
инструкции } }
тип Бар { получать { инструкции ... возвращаться ценить; } }тип Бар { набор { инструкции } }
D@свойство тип бар() { инструкции ... возвращаться ценить; }
@свойство
тип бар(тип значение) { инструкции ... возвращаться ценить; }
@свойство тип бар() { инструкции ... возвращаться ценить; }@свойство тип бар(тип значение) { инструкции ... возвращаться ценить; }
eCсвойство тип Бар {
получать {
инструкции ... возвращаться ценить; }
набор {
инструкции } }
свойство тип Бар { получать { инструкции ... возвращаться ценить; } }свойство тип Бар { набор { инструкции } }
ЯваНет данных
Objective-C 2.0 (Какао)@property (читать, писать) тип бар;
а потом внутри
@выполнение
- (тип)бар { инструкции }
- (пустота)setBar:(тип)ценить { инструкции }
@property (только чтение) тип бар;
а потом внутри
@выполнение
- (тип)бар { инструкции }
Нет данных
Быстрыйвар бар : тип { получать { инструкции } набор«(newBar)» { инструкции } }вар бар : тип { инструкции }Нет данных
Эйфельособенность -- Доступ
x: ТИП назначать set_x
особенность -- Настройки
set_x (a_x: подобно Икс) делать инструкции гарантировать x_set: проверка конец
Pythondef setBar(себя, ценить):
Вкладка ↹ инструкции
def
getBar(себя):
Вкладка ↹
инструкции
Вкладка ↹ возвращаться ценить
бар = свойство (getBar, setBar)
[33]
def getBar(себя):
Вкладка ↹ инструкции
Вкладка ↹ возвращаться ценить
бар = свойство (getBar)
def setBar(себя, ценить):
Вкладка ↹ инструкции
бар = свойство (fset = setBar)
Visual Basic .NETСвойство Бар() В качестве тип
Получать
инструкции
Возвращаться ценить
Конец получить
Установить (ByVal
Ценить В качестве тип)
инструкции
Конец набора
Конечная собственность
Только для чтения Бар() В качестве тип
Получать
инструкции
Возвращаться ценить
Конец получить
Конечная собственность
WriteOnly свойство Бар() В качестве тип
Установить (ByVal Ценить В качестве тип)
инструкции
Конец набора
Конечная собственность
XojoComputedProperty Бар() В качестве тип
Получать
инструкции
Возвращаться ценить
Конец получить
Установить (ByVal
Ценить В качестве тип)
инструкции
Конец набора
Конец ComputedProperty
ComputedProperty Бар() В качестве тип
Получать
инструкции
Возвращаться ценить
Конец получить
Конец ComputedProperty
ComputedProperty Бар() В качестве тип
Набор (ценить В качестве тип)
инструкции
Конец набора
Конец ComputedProperty
PHPфункция __get ($ свойство) {
выключатель (
$ свойство) {
дело
'Бар' : инструкции ... возвращаться ценить;
} }
функция __set (
$ свойство, $ значение) {
выключатель (
$ свойство) {
дело
'Бар' : инструкции
} }
функция __get ($ свойство) {
переключатель ($
свойство) {
дело
'Бар' : инструкции ... возвращаться ценить;
} }
функция __set ($ свойство, $ значение) {
выключатель (
$ свойство) {
дело
'Бар' : инструкции
} }
Perlсуб Бар {
мой $ self = сдвиг;
если (мой $ Бар = сдвиг) {
# сеттер
$ self -> {Bar} = $ Bar;
return $ self;
} еще {
# получатель
возвращаться $ self -> {Бар};
}
}
суб Бар {
мой $ self = сдвиг;
если (мой $ Бар = сдвиг) {
# только для чтения
умереть «Бар доступен только для чтения»;
} еще {
# получатель
возвращаться $ self -> {Бар};
}
}
суб Бар {
мой $ self = сдвиг;
если (мой $ Бар = сдвиг) {
# сеттер
$ self -> {Bar} = $ Bar;
return $ self;
} еще {
# только для записи
умереть «Бар доступен только для записи»;
}
}
РакуНет данных
Рубинdef бар
инструкции
выражение, приводящее к возвращаемому значению
конец
def бар=(ценить)
инструкции
конец
def бар
инструкции
выражение, приводящее к возвращаемому значению
конец
def бар=(ценить)
инструкции
конец
Windows PowerShellДобавить участников
«-MemberType »ScriptProperty
«-Имя "Бар "-Ценить »{ инструкции ... возвращаться ценить }
«-SecondValue »{ инструкции }
-InputObject Переменная
Добавить участников
«-MemberType »ScriptProperty
«-Имя "Бар "-Ценить »{ инструкции ... возвращаться ценить}
-InputObject Переменная
Добавить участников
«-MemberType »ScriptProperty
«-Имя "Бар -SecondValue { инструкции }
-InputObject Переменная
OCamlНет данных
F #член это.Бар с get () = выражение и установите (ценить) = выражениечлен это.Бар = выражениечлен это.Бар с набором (ценить) = выражение
JavaScript (ES6)получать бар(«Параметры») { инструкции ... возвращаться ценить}set бар(«Параметры») { инструкции } получать бар(«Параметры») { инструкции ... возвращаться ценить}набор бар(«Параметры») { инструкции }
КОБОЛМЕТОД-ИД. ПОЛУЧИТЬ НЕДВИЖИМОСТЬ бар.
ОТДЕЛЕНИЕ ДАННЫХ.
РАЗДЕЛ СВЯЗИ.
объявление return-var
ПРОЦЕДУРА ВОЗВРАТА ОТДЕЛЕНИЯ return-var.
    инструкции

КОНЕЦ МЕТОДА.
МЕТОД-ИД. УСТАНОВИТЬ СВОЙСТВО бар.
ОТДЕЛЕНИЕ ДАННЫХ.
РАЗДЕЛ СВЯЗИ.
объявление value-var
ПРОЦЕДУРА ИСПОЛЬЗОВАНИЯ значение-var.

    инструкции

КОНЕЦ МЕТОДА.

МЕТОД-ИД. ПОЛУЧИТЬ НЕДВИЖИМОСТЬ бар.
ОТДЕЛЕНИЕ ДАННЫХ.
РАЗДЕЛ СВЯЗИ.
объявление return-var
ПРОЦЕДУРА ВОЗВРАТА ОТДЕЛЕНИЯ return-var.
    инструкции

КОНЕЦ МЕТОДА.

МЕТОД-ИД. УСТАНОВИТЬ СВОЙСТВО бар.
ОТДЕЛЕНИЕ ДАННЫХ.
РАЗДЕЛ СВЯЗИ.
объявление value-var
ПРОЦЕДУРА ИСПОЛЬЗОВАНИЯ значение-var.
    инструкции

КОНЕЦ МЕТОДА.

Кобрапрофи бар "в качестве тип"
Вкладка ↹ получать
Вкладка ↹Вкладка ↹ инструкции
Вкладка ↹Вкладка ↹ возвращаться ценить
Вкладка ↹ набор
Вкладка ↹Вкладка ↹ инструкции
получать бар "в качестве тип"
Вкладка ↹ инструкции
Вкладка ↹ возвращаться ценить
набор бар "в качестве тип"
Вкладка ↹ инструкции
ISLISPНет данных

Выполняется автоматически

читай пишитолько чтениетолько для записи
Объекты ABAPНет данных
C ++ (STL)Нет данных
C #тип Бар { получать; набор; }тип Бар { получать; частный набор; }тип Бар {частное получение; набор; }
DНет данных
ЯваНет данных
Objective-C 2.0 (Какао)@property (читать, писать) тип бар;
а потом внутри @выполнение
@синтезировать бар;
@property (только чтение) тип бар;
а потом внутри @выполнение
@синтезировать бар;
Нет данных
Быстрыйвар бар : типпозволять бар : типНет данных
Эйфель
Python@свойство
def бар(себя):
Вкладка ↹инструкции
@бар.setter
def бар(себя, ценить):
Вкладка ↹инструкции
@свойство
def бар(себя):
Вкладка ↹инструкции
бар = свойство ()
@бар.setter
def бар(себя, ценить):
Вкладка ↹инструкции
Visual Basic .NETСвойство Бар В качестве тип"= начальное_значение »(VB 10)
PHP
Perl[34]использовать основание qw(Класс :: Аксессор);
__УПАКОВКА__->mk_accessors('Бар');
использовать основание qw(Класс :: Аксессор);
__УПАКОВКА__->mk_ro_accessors('Бар');
использовать основание qw(Класс :: Аксессор);
__УПАКОВКА__->mk_wo_accessors('Бар');
РакуНет данных
Рубинattr_accessor :барattr_reader :барattr_writer :бар
Windows PowerShell
OCamlНет данных
F #член val Бар = ценить с получить, установить
КОБОЛпредложения столбца с номером уровня СВОЙСТВО.предложения столбца с номером уровня НЕДВИЖИМОСТЬ «БЕЗ КОМПЛЕКТА».предложения столбца с номером уровня НЕДВИЖИМОСТЬ «С» НЕ ПОЛУЧИТЬ.
Кобрапрофи бар из вар «в качестве тип"получать бар из вар «в качестве тип"набор бар из вар «в качестве тип"

Перегруженные операторы

Стандартные операторы

унарныйдвоичныйвызов функции
Объекты ABAPНет данных
C ++ (STL)тип оператор символ () { инструкции }тип оператор символ (тип операнд2) { инструкции }тип оператор () («Параметры») { инструкции }
C #статический тип оператор символ(тип операнда) { инструкции }статический тип оператор символ(тип операнд1, тип операнд2) { инструкции }Нет данных
Dтип opUnary (строка s)() если (s == "символ") { инструкции }тип opBinary (строка s)(тип операнд2) если (s == "символ") { инструкции }
тип opBinaryRight (строка s)(тип операнд1) если (s == "символ") выключатель (s) { инструкции }
тип opCall («Параметры») { инструкции }
ЯваНет данных
Цель-C
Быстрыйfunc символ(операнд1 : тип) -> ответ { инструкции } (вне класса)func символ(операнд1 : Тип 1, операнд2 : type2) -> ответ { инструкции } (вне класса)
Эйфель[35]op_name псевдоним "символ": ТИП
делать инструкции конец
op_name псевдоним "символ" (операнд: TYPE1): ТИП2
делать инструкции конец
Pythondef __opname__(себя):
Вкладка ↹
инструкции
Вкладка ↹ возвращаться
ценить
def __opname__(себя, операнд2):
Вкладка ↹
инструкции
Вкладка ↹ возвращаться
ценить
def __call __ (self«, параметры »):
Вкладка ↹
инструкции
Вкладка ↹ возвращаться
ценить
Visual Basic .NETОбщий оператор символ(операнд В качестве тип) В качестве тип
инструкции
Конечный оператор
Общий оператор символ(операнд1 В качестве тип, операнд2 В качестве тип) В качестве тип
инструкции
Конечный оператор
Нет данных
XojoФункция Operator_имя(операнд В качестве тип) В качестве тип
инструкции
Конечная функция
Нет данных
PHP[36]функция __invoke («Параметры») { инструкции } (PHP 5.3+)
Perlиспользовать перегрузку "символ"=> sub {my ($ self) = @_; инструкции };использовать перегрузку "символ"=> sub {my ($ self, $ operand2, $ operands_reversed) = @_; инструкции };
Раку«наш "тип """мульти »префикс метода: <символ> («$ Операнд: ») { инструкции ... возвращаться ценить; } или же
«наш "тип """мульти »постфикс метода: <символ> («$ Операнд: ») { инструкции ... возвращаться ценить; } или же
«наш "тип """мульти »метод дополнения: <символ1 символ2> («$ Операнд: ») { инструкции ... возвращаться ценить; }
«наш "тип """мульти »инфикс метода: <символ> («$ Operand1: »Тип операнд2) { инструкции ... возвращаться ценить; }«наш "тип """мульти »метод postcircumfix: <()> («$ Self: »« Параметры ») { инструкции }
Рубинdef символ
инструкции
выражение, приводящее к возвращаемому значению
конец
def символ(операнд2)
инструкции
выражение, приводящее к возвращаемому значению
конец
Нет данных
Windows PowerShellНет данных
OCaml
F #статический член (символ) операнд = выражениестатический член (символ) (операнд1, операнд2) = выражениеНет данных
КОБОЛНет данных
ISLISPНет данных

Индексаторы

читай пишитолько чтениетолько для записи
Объекты ABAPНет данных
APL (Диалог): Свойство пронумеровано по умолчанию имя
результат ← Получить
инструкции

∇ Установить аргументы
инструкции

: EndProperty Бар
: Свойство пронумеровано по умолчанию Бар
результат ← Получить
инструкции

: EndProperty Бар
: Свойство пронумеровано по умолчанию Бар
∇ Установить аргументы
инструкции

: EndProperty Бар
C ++ (STL)тип& оператор [] (индекс типа) { инструкции }тип оператор [] (индекс типа) { инструкции }
C #тип это[индекс типа] {
получать{
инструкции }
набор{
инструкции } }
тип это[индекс типа] { получать{ инструкции } }тип это[индекс типа] { набор{ инструкции } }
Dтип opIndex (индекс типа) { инструкции }
тип opIndexAssign (тип значение, индекс типа) { инструкции }
тип opIndex (индекс типа) { инструкции }тип opIndexAssign (тип значение, индекс типа) { инструкции }
ЯваНет данных
Objective-C (недавний компилятор Clang)Нет данных- (id) objectAtIndexedSubscript: (NSUInteger)индекс { инструкции возвращаться ценить; } или же
- (id) objectForKeyedSubscript: (id)индекс { инструкции возвращаться ценить; }
- (void) setObject: (id)ценить atIndexedSubscript: (NSUInteger)индекс { инструкции } или же
- (void) setObject: (id)ценить forKeyedSubscript: (идентификатор)индекс { инструкции }
Быстрыйнижний индекс (индекс : тип) -> ответ { получать { инструкции } набор«(newIndex)» { инструкции } }нижний индекс (индекс : тип) -> ответ { инструкции }
Эйфель[35]скобка псевдоним "[]" (индекс: ТИП): ТИП назначать set_item
делать инструкции конец
set_item (тип ценности; индекс: ТИП):
делать инструкции конец
скобка псевдоним "[]" (индекс: ТИП): ТИП
делать инструкции конец
Pythondef __getitem __ (я, индекс):
Вкладка ↹ инструкции
Вкладка ↹ возвращаться ценить
def __setitem __ (себя, индекс, ценить):
Вкладка ↹ инструкции
def __getitem __ (я, индекс):
Вкладка ↹ инструкции
Вкладка ↹ возвращаться ценить
def __setitem __ (себя, индекс, ценить):
Вкладка ↹ инструкции
Visual Basic .NETЭлемент свойства по умолчанию (Индекс В качестве тип) В качестве тип
Получать
инструкции
Конец получить
Установить (ByVal
Ценить В качестве тип)
инструкции
Конец набора
Конечная собственность
Элемент свойства только для чтения по умолчанию (Индекс В качестве тип) В качестве тип
Получать
инструкции
Конец получить
Конечная собственность
Элемент свойства WriteOnly по умолчанию (Индекс В качестве тип) В качестве тип
Установить (ByVal
Ценить В качестве тип)
инструкции
Конец набора
Конечная собственность
PHP[37]
Perl[38]
Раку«наш "тип """мульти »метод postcircumfix: <[]> равен rw («$ Self: »Введите $ index) { инструкции ... возвращаться ценить; } или же
«наш "тип """мульти »метод postcircumfix: <{}> - это rw («$ Self: »Введите $ key) { инструкции ... возвращаться ценить; }
«наш "тип """мульти »метод postcircumfix: <[]> («$ Self: »Введите $ index) { инструкции ... возвращаться ценить; } или же
«наш "тип """мульти »метод postcircumfix: <{}> («$ Self: »Введите $ key) { инструкции ... возвращаться ценить; }
Нет данных
Рубинdef [] (индекс)
инструкции
выражение, приводящее к возвращаемому значению
конец
def [] = (индекс, значение)
инструкции
конец
def [] (индекс)
инструкции
выражение, приводящее к возвращаемому значению
конец
def [] = (индекс, значение)
инструкции
конец
Windows PowerShellНет данных
OCaml
F #член this.Item с get (индекс) = выражение и установить значение индекса = выражениечлен this.Item с get (индекс) = выражениечлен this.Item с набором значение индекса = выражение
КОБОЛНет данных
Кобраpro [индекс "в качестве тип"] в качестве тип
Вкладка ↹ получать
Вкладка ↹Вкладка ↹ инструкции
Вкладка ↹Вкладка ↹ возвращаться ценить
Вкладка ↹ набор
Вкладка ↹Вкладка ↹ инструкции
получать[индекс "в качестве тип"] в качестве тип
Вкладка ↹ инструкции
Вкладка ↹ возвращаться ценить
набор[индекс "в качестве тип"] в качестве тип
Вкладка ↹ инструкции

Приведение типов

подавленныйприподнятый
Объекты ABAPНет данных
C ++ (STL)оператор ответ() { инструкции }
C #статический явный оператор ответ(тип операнда) { инструкции }статический неявный оператор ответ(тип операнда) { инструкции }
DТ opCast (Т)() Если есть(Т == тип)) { инструкции }
eCсвойство Т {получить {вернуться «Код конверсии»; } }
ЯваНет данных
Цель-C
Эйфель[35]
Python
Visual Basic .NETОбщий оператор сужения CType (операнд В качестве тип) В качестве ответ
инструкции
Конечный оператор
Общий оператор расширения CType (операнд В качестве тип) В качестве ответ
инструкции
Конечный оператор
PHPНет данных
Perl
Ракумульти метод тип"($ self:)» is export { инструкции }
РубинНет данных
Windows PowerShell
OCaml
F #
КОБОЛНет данных

Доступ для членов

Как получить доступ к членам объекта x

член объектачлен классачлен пространства имен
методполесвойство
Объекты ABAPх->методпараметры »).[39]х->полеНет данныхх =>поле или х =>методпараметры[39]»).Нет данных
C ++ (STL)Икс.метод(параметры) или же
ptr->метод(параметры)
Икс.поле или
ptr->поле
cls::членнс::член
Цель-C[Икс метод «:параметр «бар:параметр ... »»]х->полеИкс.свойство (только 2.0) или
[Икс свойство]
[cls метод «:параметр «бар:параметр ... »»]
БолтовняИкс метод «:параметр «бар:параметр ... »»Нет данныхcls метод «:параметр «бар:параметр ... »»
БыстрыйИкс.метод(параметры)Икс.свойствоcls.член
APL (Диалог)левый аргумент » Икс.метод «правильный аргумент (ы)»Икс.полеИкс.свойствоcls.членнс.член
C #Икс.метод(параметры)
ЯваНет данных
DИкс.свойство
Python
Visual Basic .NET
Xojo
Windows PowerShell[cls]::член
F #Нет данныхcls.член
eCИкс.метод «(параметры)»Икс.полеИкс.свойствоcls::членнс::член
ЭйфельИкс.метод «(параметры)»Икс.поле{cls}.членНет данных
РубинНет данныхИкс.свойствоcls.член
PHPх->метод(параметры)х->полех->свойствоcls::членнсчлен
Perlх->метод «(параметры)»x -> {поле}cls->метод «(параметры)»нс::член
РакуИкс.метод «(параметры)" или же
Икс!метод «(параметры)»
Икс.поле или
Икс!поле
cls.метод «(параметры)" или же
cls!метод «(параметры)»
нс::член
OCamlИкс#метод «параметры»Нет данных
JavaScriptИкс.метод(параметры)
Икс["метод"](параметры)
Икс.поле
Икс["поле"]
Икс.свойство
Икс["свойство"]
cls.член
cls["член"]
Нет данных
КОБОЛПРИЗЫВ x "метод" «С ПОМОЩЬЮ параметры »«ВОЗВРАЩЕНИЕ результат »или
Икс::"метод"«(«Параметры»)»
Нет данныхсвойство OF xПРИЗЫВАТЬ cls "метод" «С ПОМОЩЬЮ параметры »«ВОЗВРАЩЕНИЕ результат »или
cls::"метод"«(«Параметры»)" или же
свойство ИЗ cls
Нет данных
КобраИкс.метод «(параметры)»Икс.полеИкс.свойствоcls.членнс.член

Доступность участников

Есть член?Обработчик отсутствующего члена
МетодПолеМетодПоле
APL (Диалог)3 = x.⎕NC 'метод'2 = x.⎕NC 'метод'Нет данных
Объекты ABAPНет данных
C ++ (STL)
Objective-C (какао)[Икс RespondsToSelector: @selector (метод)]Нет данныхforwardInvocation:Нет данных
БолтовняИкс RespondsTo: селекторНет данныхне понимает:Нет данных
C #(используя отражение)
eC
Ява
DopDispatch ()
ЭйфельНет данных
Pythonhasattr (Икс, "метод") и вызываемый (Икс.метод)hasattr (Икс, "поле")__getattr __ ()
Visual Basic .NET(используя отражение)
Xojo(с использованием интроспекции)
Windows PowerShell(используя отражение)
F #(используя отражение)
РубинИкс.respond_to? (:метод)Нет данныхmethod_missing ()Нет данных
PHPmethod_exists (Икс, "метод")property_exists (Икс, "поле")__вызов()__получить набор()
PerlИкс-> может ("метод")существуют Икс->{поле}АВТОЗАГРУЗКА
РакуИкс.может("метод")Икс.поле.определенныйАВТОЗАГРУЗКА
OCamlНет данных
JavaScriptтипИкс.метод === "функция"поле в Икс
КОБОЛНет данных

Специальные переменные

текущий объекттекущий объект с родительский объектпустая ссылкаТекущий контекст исполнения
БолтовнясебясупернольthisContext
Объекты ABAPмнесуперисходный
APL (Диалог)ЭТО⎕БАЗА⎕NULL
C ++ (STL)*это[40]НОЛЬ, nullptr
C #этооснование[41]ноль
Явасупер[41]
D
JavaScriptсупер[41] (ECMAScript 6)ноль, неопределенный[42]
eCэтоноль
Цель-Cсебясупер[41]ноль
Быстрыйсебясупер[41]ноль[43]
Pythonсебя[44]супер(current_class_name, себя)[5]
супер() (Только 3.x)
Никто
Visual Basic .NETМнеMyBaseНичего
XojoЯ / ЯРодительНоль
ЭйфельТекущийПредшественник «{суперкласс}» «(аргументы)»[41][45]Пустота
PHP$ этородитель[41]ноль
Perl$ self[44]$ self-> СУПЕР[41]undef
РакусебяСУПЕРНоль
Рубинсебясупер«(аргументы)»[46]нольпривязка
Windows PowerShell$ это$ NULL
OCamlсебя[47]супер[48]Нет данных[49]
F #этооснование[41]ноль
КОБОЛСЕБЯСУПЕРНОЛЬ
Кобраэтооснованиеноль

Специальные методы

Строковое представлениеКопия объектаРавенство ценностейСравнение объектовХэш-кодID объекта
Человек читаемыйСовместимость с исходным кодом
Объекты ABAPНет данных
APL (Диалог)Икс⎕SRC Икс⎕NS ИксИкс = уНет данных
C ++ (STL)Икс == у[50]указатель на объект можно преобразовать в целочисленный идентификатор
C #Икс.Нанизывать()Икс.Clone ()Икс.Equals (у)Икс.Сравнить с(у)Икс.GetHashCode ()Система.Время выполнения.CompilerServices.RuntimeHelpers.GetHashCode (Икс)
ЯваИкс.нанизывать()Икс.клон ()[51]Икс.equals (у)Икс.сравнить с(у)[52]Икс.хэш-код()Система.identityHashCode(Икс)
JavaScriptИкс.нанизывать()
DИкс.нанизывать() или же
std.conv.нанизывать(Икс)
Икс.stringofИкс == y или
Икс.opEquals (у)
Икс.opCmp (у)Икс.toHash ()
eCИкс.OnGetString (tempString, ноль, ноль) или же
PrintString (Икс)
у.OnCopy (Икс)Икс.OnCompare (у)дескриптор объекта может быть преобразован в целочисленный идентификатор
Objective-C (какао)Икс.описаниеИкс.debugDescription[Икс копия][53][Икс равно:у][Икс сравнивать:у][54]Икс.hashуказатель на объект можно преобразовать в целочисленный идентификатор
БыстрыйИкс.описание[55]Икс.debugDescription[56]Икс == у[57]Икс < у[58]Икс.hashValue[59]отражать(Икс).objectIdentifier!.uintValue ()
БолтовняИкс displayStringИкс printStringИкс копироватьИкс = уИкс хэшИкс identityHash
Pythonул (Икс)[60]репр (Икс)[61]copy.copy (Икс)[62]Икс == у[63]cmp (Икс, у)[64]хэш (Икс)[65]я бы(Икс)
Visual Basic .NETИкс.Нанизывать()Икс.Clone ()Икс.Equals (у)Икс.Сравнить с(у)Икс.GetHashCode ()
ЭйфельИкс.изИкс.близнецИкс.равно(у)Когда x равно СРАВНИМАЯ, можно просто сделать Икс < уКогда x равно HASHABLE, можно использовать Икс.хэш-кодКогда x равно ИДЕНТИФИЦИРОВАННЫЕ, можно использовать Икс.object_id
PHP$ x -> __ toString ()клон Икс[66]Икс == уspl_object_hash (Икс)
Perl"$ x"[67]Данные :: Дампер-> Дамп([$ x],['Икс'])[68]Хранимый:: dclone($ x)[69]Скалярный:: Util:: refaddr( $ x )[70]
Раку~Икс[67]Икс.perlИкс.cloneИкс экв. уИкс cmp уИкс.КОТОРЫЙ
РубинИкс.to_sИкс.осмотретьИкс.dup или же
Икс.clone
Икс == y или
Икс.eql? (у)
Икс <=> уИкс.hashИкс.object_id
Windows PowerShellИкс.Нанизывать()Икс.Clone ()Икс.Equals (у)Икс.Сравнить с(у)Икс.GetHashCode ()
OCamlOo.copy ИксИкс = уHashtbl.hash ИксOo.id Икс
F #нить х или х.Нанизывать() или же sprintf "% O" Иксsprintf "% A" ИксИкс.Clone ()Икс = y или x.Equals (у)сравнивать x y или x.Сравнить с(у)хэш х или х.GetHashCode ()
КОБОЛНет данных

Типовые манипуляции

Получить тип объектаЯвляется экземпляром (включает подтипы)АпкастингПонижение
Проверка времени выполненияНет чека
Объекты ABAPНет данных[71]=?=
C ++ (STL)типичный (Икс)dynamic_cast <тип *>(&Икс) != nullptrНет данных[72]dynamic_cast <тип*>(ptr)(тип*) ptr или
static_cast <тип*>(ptr)
C #Икс.GetType ()Икс является тип(тип) х или х в качестве тип
Dtypeid (Икс)В ролях(тип) Икс
DelphiИкс является типИкс в качестве тип
eCИкс._учебный классeClass_IsDerived (x._class, тип)(тип) Икс
ЯваИкс.getClass ()Икс экземпляр учебный класс(тип) Икс
Objective-C (какао)[Икс учебный класс][73][Икс isKindOfClass: [учебный класс учебный класс]](тип*) Икс
БыстрыйИкс.dynamicTypeИкс является типИкс в качестве! тип
Икс в качестве? тип
JavaScriptИкс.конструктор (Если не переписывать.)Икс экземпляр учебный классНет данных[74]
Visual Basic .NETИкс.GetType ()Тип Икс Является типНет данных[72]CType (Икс, тип) или же TryCast (Икс, тип)
XojoСамоанализ. GetType (x)Икс Это типНет данныхCType (Икс, тип)Нет данных
ЭйфельИкс.generating_typeприкреплен {TYPE} Иксприкреплен {TYPE} Икс в качестве down_x
Pythonтип(Икс)isinstance (Икс, тип)Нет данных[74]
PHPget_class (Икс)Икс экземпляр учебный класс
Perlссылка (Икс)Икс-> isa ("учебный класс")
РакуИкс.КАКИЕИкс.это(учебный класс)Нет данных[72]тип(Икс) или же
Икс.тип
РубинИкс.учебный классИкс.экземпляр?(тип) или же
Икс.Что-то вроде?(тип)
Нет данных[74]
БолтовняИкс учебный классИкс isKindOf: учебный класс
Windows PowerShellИкс.GetType ()Икс -является [тип]Нет данных[72][тип]х или х -в качестве [тип]
OCamlНет данных[75](Икс :> тип)Нет данных
F #Икс.GetType ()Икс :? тип(Икс :?> тип)
КОБОЛНет данныхИкс В КАЧЕСТВЕ тип[72]Нет данных

Управление пространством имен

Импортировать пространство именИмпортировать товар
квалифицированныйнеквалифицированный
Объекты ABAP
C ++ (STL)используя пространство имен нс;с помощью ns :: item ;
C #с помощью нс;с помощью элемент = нс.элемент;
Dимпорт нс;импорт нс : элемент;
Яваимпорт нс.*;импорт нс.элемент;
Цель-C
Visual Basic .NETИмпорт нс
Эйфель
Pythonимпорт нсиз нс импорт *из нс импорт элемент
PHPиспользовать нс;использовать нсэлемент;
Perlиспользовать нс;использовать ns qw (элемент);
Раку
Рубин
Windows PowerShell
OCamlоткрыто нс
F #
КОБОЛНет данных


Контракты

Предварительное условиеПостусловиеПроверятьИнвариантныйПетля
Объекты ABAPНет данных
C ++ (STL)
C #Спецификация #:
введите foo( «Параметры» )
    требует выражение
{
тело
}
Спецификация #:
введите foo( «Параметры» )
    обеспечивает выражение
{
тело
}
ЯваНет данных
Цель-C
Visual Basic .NET
Dж
в { утверждает }
тело{
инструкции }
ж
из (результат) { утверждает }
тело{
инструкции }
утверждать(выражение)invariant () { выражение }
Эйфельж
требовать тег: выражение
действительно конец
ж
делать
гарантировать
тег: выражение
конец
ж
делать
проверить тег: выражение конец
конец
учебный класс Икс
инвариантный тег: выражение
конец
из инструкции
инвариантный
тег: выражение
до того как
expr
петля
инструкции
вариант
тег: выражение
конец
PythonНет данных
PHP
Perl
РакуPRE { условие }ПОЧТОВЫЙ { условие }
РубинНет данных
Windows PowerShell
OCaml
F #
КОБОЛ

Смотрите также

Ссылки и примечания

  1. ^ параметр = аргумент может повторяться, если у конструктора несколько параметров
  2. ^ SAP зарезервировал для себя использование разрушения
  3. ^ а б c d е ж грамм час я j k л Этот язык использует вывоз мусора освободить неиспользуемую память.
  4. ^ Объекты OCaml можно создавать напрямую, не обращаясь к классу.
  5. ^ а б c d е ж грамм Этот язык поддерживает множественное наследование. У класса может быть более одного родительского класса
  6. ^ Отсутствие родительского класса делает класс корневым. На практике это почти никогда не делается. Обычно следует использовать обычный базовый класс используемого фреймворка, который NSObject для Какао и GNUstep, или Объект иначе.
  7. ^ Обычно @интерфейс часть помещается в заголовочный файл, а @интерфейс часть помещается в отдельный файл исходного кода.
  8. ^ Префиксы к именам классов и протоколов, обычно используемые как своего рода пространство имен
  9. ^ В интерфейсах Python есть классы, методы которых имеют проходить как их тела
  10. ^ Класс - это объект.
    Просто отправьте сообщение суперклассу (st-80) или целевому пространству имен (Visualworks).
  11. ^ Пространство имен - это объект.
    Просто отправьте сообщение в родительское пространство имен.
  12. ^ А финализатор вызывается сборщиком мусора, когда объект собирается быть собранным. Нет гарантии, когда он будет вызван или будет ли он вызван вообще.
  13. ^ В ABAP конструктор должен быть определен как метод (см. Комментарии к методу) со следующими ограничениями: имя метода должно быть «конструктор», и могут быть определены только «импортируемые» параметры.
  14. ^ Сюда идет необязательный разделенный запятыми список инициализаторов для объектов-членов и родительских классов. Синтаксис для инициализации объектов-членов:
    "имя члена(параметры)"
    Это работает даже для примитивных членов, и в этом случае указывается один параметр, и это значение копируется в член. Синтаксис для инициализации родительских классов:
    "имя_класса(параметры)".
    Если инициализатор не указан для члена или родительского класса, тогда конструктор по умолчанию используется.
  15. ^ Любая процедура Eiffel может использоваться как процедура создания, также известная как конструкторы. См. Параграф Эйфеля на Конструктор (информатика).
  16. ^ Реализация {ОДНОРАЗОВЫЕ} .dispose гарантирует, что избавляться будет вызываться при сборке мусора.
  17. ^ Эта конструкция «инициализатор» используется редко. Поля в OCaml обычно инициализируются непосредственно в их объявлении. «Инициализатор» используется только при необходимости дополнительных императивных операций. Вместо этого «параметры конструктора» на других языках указываются как параметры класса в OCaml. Подробнее см. Синтаксис объявления класса.
  18. ^ Этот синтаксис обычно используется для перегрузка конструкторы
  19. ^ В JavaScript конструктор это объект.
  20. ^ Конструкторы можно эмулировать с помощью фабричного метода, возвращающего экземпляр класса.
  21. ^ а б c Идентификатор области действия должен появляться один раз в объявлении файла, все объявления переменных после этого идентификатора области имеют его область действия, пока не будет достигнут другой идентификатор области или конец объявления класса.
  22. ^ В ABAP определенные поля или методы не объявляются доступными для внешних объектов. Скорее, внешние классы объявляются друзьями, чтобы иметь доступ к полям или методам класса.
  23. ^ В C ++ определенные поля не объявляются доступными для внешних объектов. Напротив, внешние функции и классы объявляются друзьями, чтобы иметь доступ к полям класса. Видеть функция друга и класс друзей Больше подробностей.
  24. ^ Просто отправьте сообщение классу
    учебный класс addInstVarName: поле.учебный класс removeInstVarName: поле.
  25. ^ а б c d Просто присвойте ему значение в методе
  26. ^ В Python нет частных полей - все поля всегда общедоступны. Существует соглашение сообщества о префиксе деталей реализации одним подчеркиванием, но это не поддерживается языком.
  27. ^ Все данные класса являются «частными», потому что стандарт COBOL не определяет способа доступа к ним.
  28. ^ Объявление и реализация методов в ABAP разделены. методы оператор должен использоваться внутри определения класса. метод (без «s») должен использоваться внутри реализации класса. параметр = аргумент можно повторить, если есть несколько параметров.
  29. ^ В ABAP имя возвращаемого параметра явно определяется в сигнатуре метода в определении класса.
  30. ^ В C ++ методы объявления и реализации обычно разделены. Методы объявлены в определении класса (которое обычно включается в заголовочный файл ) используя синтаксис
  31. ^ Хотя тело метода может быть включенным в объявление внутри определения класса, как показано в таблице, это обычно плохая практика. Поскольку определение класса должно быть включено в каждый исходный файл, в котором используются поля или методы класса, наличие кода в определении класса приводит к компиляции кода метода с каждым исходным файлом, увеличивая размер кода. Тем не менее, в некоторых случаях полезно включать в объявление тело метода. Одна из причин заключается в том, что компилятор попытается в соответствии методы, которые включены в объявление класса; так что если очень короткий одна линия метода, он может ускорить его встраивание компилятором, включив тело вместе с объявлением. Кроме того, если шаблон класс или метод, тогда весь код должен быть включен в объявление, потому что только с кодом можно создать экземпляр шаблона.
  32. ^ а б Просто назначьте ему функцию в методе
  33. ^ Альтернативная реализация:
    def бар():    док = «Барная собственность».    def fget(себя):        возвращаться себя._бар    def fset(себя, ценить):        себя._бар = ценить    возвращаться местные жители()бар = свойство(**бар())
  34. ^ эти примеры нуждаются в Класс :: Аксессор модуль установлен
  35. ^ а б c Хотя Eiffel не поддерживает перегрузку операторов, он может определять операторы
  36. ^ PHP не поддерживает перегрузку операторов изначально, но поддержка может быть добавлена ​​с помощью "операторский" пакет PECL.
  37. ^ Класс должен реализовывать Интерфейс ArrayAccess.
  38. ^ Класс должен перегрузить '@ {}' (разыменование массива) или создать подкласс одного из Tie :: Array или Tie :: StdArray для перехвата операций с массивом.
  39. ^ а б В ABAP аргументы должны передаваться с использованием этого синтаксиса:
    х->метод(«экспорт параметр = аргумент »«импорт параметр = аргумент »«изменение параметр = аргумент »«возвращаемое значение (параметр)»
    параметр = аргумент можно повторить, если есть несколько параметров
  40. ^ В C ++ нет ключевого слова super, поскольку возможно множественное наследование, и поэтому может быть неоднозначно, на какой базовый класс ссылаются. Вместо этого BaseClassName :: member синтаксис может использоваться для доступа к переопределенному члену в указанном базовом классе. Microsoft Visual C ++ предоставляет для этой цели нестандартное ключевое слово «__super»; но это не поддерживается другими компиляторами.[1]
  41. ^ а б c d е ж грамм час я Ключевое слово здесь не ценить, и его можно использовать только для доступа к методу суперкласса.
  42. ^ Но бойтесь, они не имеют одинаковой ценности.
  43. ^ только для необязательных типов
  44. ^ а б В этом языке методам экземпляра передается текущий объект в качестве первого параметра, который условно называется «self», но это не обязательно.
  45. ^ «Предшественник» в Eiffel на самом деле является вызовом одноименного метода в суперклассе. Итак, Preursor (args) эквивалентен super.currentMethodName (args) в Java. Невозможно вызвать метод с другим именем в суперклассе.
  46. ^ «super» в Ruby, в отличие от других языков, на самом деле является вызовом метода с таким же именем в суперклассе. Таким образом, super (args) в Ruby эквивалентен super.currentMethodName (args) в Java. Невозможно вызвать метод с другим именем в суперклассе.
  47. ^ В OCaml объявление объекта может необязательно начинаться с параметра, который будет связан с текущим объектом. Этот параметр обычно называется «self», но это не обязательно. Это хорошая практика - помещать туда параметр, чтобы можно было вызывать свои собственные методы.
  48. ^ В OCaml объявление наследования ("наследование") может дополнительно быть связано со значением с синтаксисом "наследовать parent_class «параметры» в качестве super ". Здесь" super "- это имя, присвоенное переменной, связанной с этим родительским объектом. Ей можно присвоить другое имя.
  49. ^ Однако, если требуется возможность иметь "необязательное" значение в OCaml, поместите это значение в вариант тип, значения которого Никто и Некоторые х, который может использоваться для представления «нулевой ссылки» и «ненулевой ссылки на объект», как в других языках.
  50. ^ предполагая, что «x» и «y» являются объектами (а не указателем). Может быть настроен путем перегрузки объекта == оператор
  51. ^ Доступно только изнутри класса, так как клон () метод, унаследованный от Объект защищен, если класс не переопределит метод и не сделает его общедоступным. При использовании клон () унаследовано от Объект, класс должен реализовывать Клонируемый интерфейс для клонирования.
  52. ^ Класс должен реализовывать интерфейс Сопоставимый для стандартизации этого метода.
  53. ^ Реализуется объектом copyWithZone: метод
  54. ^ сравнивать: - это условное название метода сравнения в классах Foundation. Однако официального протокола не существует.
  55. ^ Только если объект соответствует Для печати протокол
  56. ^ Только если объект соответствует Отладка протокол
  57. ^ Только если объект соответствует Равноправный протокол
  58. ^ Только если объект соответствует Сопоставимый протокол
  59. ^ Только если объект соответствует hashValue протокол
  60. ^ Можно настроить по объекту __str __ () метод
  61. ^ Можно настроить по объекту __repr __ () метод
  62. ^ Можно настроить по объекту __copy __ () метод
  63. ^ Можно настроить по объекту __eq __ () метод
  64. ^ Только в Python 2.x и ранее (удалено в Python 3.0). Можно настроить по объекту __cmp __ () метод
  65. ^ Можно настроить по объекту __hash __ () метод. Не все типы хешируются (изменяемые типы обычно не хешируются)
  66. ^ Можно настроить по объекту __clone () метод
  67. ^ а б Может быть настроен путем перегрузки оператора преобразования строки объекта
  68. ^ Этот пример требует использоватьing Данные :: Дампер
  69. ^ Этот пример требует использоватьing Хранимый
  70. ^ Этот пример требует использоватьing Скаляр :: Утилита
  71. ^ Информация о типах времени выполнения в ABAP может быть собрана с помощью различных классов описания, таких как CL_ABAP_CLASSDESCR.
  72. ^ а б c d е В этом языке неявное преобразование неявно. Экземпляр подтипа может использоваться там, где требуется супертип.
  73. ^ Только для неклассовых объектов. Если Икс это объект класса, [x класс] только возвращается Икс. Метод времени выполнения object_getClass (x) вернет класс Икс для всех объектов.
  74. ^ а б c Этот язык динамически типизирован. Преобразование между типами не требуется.
  75. ^ Этот язык не предоставляет информацию о типе времени выполнения. Он не нужен, потому что он статически типизирован, и его преобразование невозможно.