Сравнение языков программирования (объектно-ориентированное программирование) - Comparison of programming languages (object-oriented programming)
Эта статья может требовать уборка встретиться с Википедией стандарты качества. Конкретная проблема: Эта статья справочный раздел содержит много сносок, но не содержит внешних ссылок или источников. (июнь 2013) (Узнайте, как и когда удалить этот шаблон сообщения) |
Этот сравнение языков программирования сравнивает, как объектно-ориентированного программирования языки, такие как 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. | интерфейс имя. члены конечный интерфейс. | Нет данных |
APL (Диалог) | :Учебный класс имя ":родительский класс »«,интерфейсы » члены : EndClass | :Интерфейс имя члены : EndInterface | : Пространство имен имя члены : EndNamespace |
C ++ (STL) | учебный класс имя" : public родительские классы [5]» { члены }; | пространство имен имя { члены } | |
C # | учебный класс имя" : «Родительский класс» «, интерфейсы »» { члены } | интерфейс имя": родительские интерфейсы » { члены } | |
D | модуль имя; | ||
eC | учебный класс имя": базовый класс » { «Присвоение значений элементам по умолчанию» «члены» } |
| пространство имен имя; |
Ява | учебный класс имя" расширяет родительский класс »« орудия интерфейсы » { члены } | интерфейс имя"расширяет родительские интерфейсы » { члены } | упаковка имя; члены |
PHP | пространство имен имя; члены | ||
Цель-C | @интерфейс имя" : родительский класс » [6]«< протоколы >» { instance_fields } method_and_property_declarations @конец [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) |
| упаковка имя; члены | |
Scala | учебный класс ConcreteClass(конструктор параметры)расширяет ParentClassс Trait1 с Trait2 с Trait2 {// члены} | черта TraitNameрасширяет Другоес Другое с Другое {// члены} | упаковка имя |
КОБОЛ | ID КЛАССА. имя"НАСЛЕДОВАНИЕ« ИЗ»Родительские классы». ФАБРИКА« ВНЕДРЕНИЯ интерфейсы ». одноклассники КОНЕЦ ЗАВОДА. ОБЪЕКТ« ВНЕДРЕНИЯ интерфейсы ». экземпляры-члены КОНЕЧНЫЙ ОБЪЕКТ.
| ИНТЕРФЕЙС-ID. имя"НАСЛЕДОВАНИЕ« ИЗ»Интерфейсы». члены
| Нет данных |
Кобра | учебный класс имя "наследует родительский класс »«орудия интерфейсы » | интерфейс имя "наследует родительские интерфейсы » | пространство имен имя |
ISLISP | (defclass имя (базовый класс) ((x : initform 0 : аксессуар получить-х : initarg Икс)) (: abstractp ноль)) |
Члены класса
Конструкторы и деструкторы
конструктор | деструктор | финализатор[12] | |
---|---|---|---|
Объекты ABAP | конструктор методов «импорт параметр = аргумент » [13] | Нет данных | |
APL (Диалог) | ∇ имя : Реализует Конструктор «:Основание «Expr» » инструкции ∇ | ∇ имя : Реализует деструктор инструкции ∇ | |
C ++ (STL) | учебный класс(«Параметры») «: инициализаторы [14]» { инструкции } | ~учебный класс() { инструкции } | |
C # | учебный класс(«Параметры») { инструкции } | void Dispose () { инструкции } | ~учебный класс() { инструкции } |
D | это(«Параметры») { инструкции } | ~ this () { инструкции } | |
eC | учебный класс() { инструкции } | ~ класс() { инструкции } | |
Ява | учебный класс(«Параметры») { инструкции } | void finalize () { инструкции } | |
Эйфель | [15] | [16] | |
Objective-C (какао) | - (id) init { инструкции... вернуть себя; } или же | - (void) dealloc { инструкции } | - (недействительно) finalize { инструкции } |
Быстрый | в этом(«Параметры») { инструкции } | deinit { инструкции } | |
Python | def __init __ (self«, параметры »): | def __del __ (сам): | |
Visual Basic .NET | Sub New («Параметры») | Подразделение () | Переопределяет подфинализацию () |
Xojo | Подконструктор («Параметры») | Суб-деструктор () | |
PHP | функция __construct («Параметры») { инструкции } | function __destruct () { инструкции } | |
Perl | sub new {my ($ class«, параметры »знак равно мой $ self = {}; инструкции ... bless ($ self, $ class); return $ self; } | sub DESTROY {мой ($ self) = @_; инструкции } | |
Раку | submethod BUILD { инструкции } или же | submethod DESTROY { инструкции } | |
Рубин | def инициализировать«(параметры)» | Нет данных | |
Windows PowerShell | Нет данных | ||
OCaml | инициализатор инструкции [17] | Нет данных | |
F # | делать инструкции или [18] | член this.Dispose () = инструкции | переопределить this.Finalize () = инструкции |
JavaScript | функция имя(«Параметры») { инструкции } [19] | Нет данных | |
JavaScript (ES6) | конструктор( «Параметры») { инструкции } | ||
КОБОЛ | Нет данных[20] | Нет данных | |
Кобра | cue 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 | Добавить участников | Нет данных | ||
OCaml | Нет данных | вал «изменчивый" поле = ценить | Нет данных | |
F # | Нет данных | позволять «изменчивый" поле = ценить | Нет данных | |
JavaScript | это.поле = ценить [25] | |||
КОБОЛ | Нет данных | предложения поля номера уровня.[27] | Нет данных | Нет данных |
Кобра | вар поле "в качестве тип" "= ценить" | вар __поле "в качестве тип" "= ценить" | вар _поле "в качестве тип" "= ценить" | |
ISLISP | (поле : initform ценить : аксессуар имя-доступа : initarg ключевое слово) |
Методы
основной / недействительный метод | метод возврата значения | ||
---|---|---|---|
Объекты ABAP | методы имя "импорт параметр = аргумент »«экспорт параметр = аргумент »«изменение параметр = аргумент »«возвращаемое значение (параметр)» [28] | [29] | |
APL (Диалог) | ∇ «Левый аргумент» имя «правый аргумент» инструкции ∇ | ∇ результат ← «Левый аргумент» имя «правый аргумент» инструкции ∇ | |
C ++[30]
Реализация методов обычно предоставляется в отдельном исходном файле со следующим синтаксисом
| пустота фу(«Параметры») { инструкции } | введите foo(«Параметры») { инструкции ... возвращаться ценить; } | |
C # | |||
D | |||
Ява | |||
eC | пустота «« Тип этого »»::»Foo(«Параметры») { инструкции } | типа «тип этого»::»Foo(«Параметры») { инструкции ... возвращаться ценить; } | |
Эйфель | фу ( «Параметры» ) | фу ( «Параметры» ): ТИП | |
Цель-C | - (пустота)foo «:параметр «бар:параметр ... »» { инструкции } | - (тип)foo «:параметр «бар:параметр ... »» { инструкции... возвращаться ценить; } | |
Быстрый | func фу(«Параметры») { инструкции } | func фу(«Параметры») -> тип { инструкции... возвращаться ценить } | |
Python | def фу(себя«, параметры »): | def фу(себя«, параметры »): | |
Visual Basic .NET | Sub Фу(«Параметры») | Функция Фу(«Параметры») В качестве тип | |
Xojo | Sub Фу(«Параметры») | Функция Фу(«Параметры») В качестве тип | |
PHP | функция фу(«Параметры»)": пустота" { инструкции } | функция фу(«Параметры»)«: тип» { инструкции ... возвращаться ценить; } | |
Perl | суб фу {мой ($ self«, параметры ») = @_; инструкции } | суб фу {мой ($ self«, параметры ») = @_; инструкции ... возвращаться ценить; } | |
Раку | «имеет »«мульти »метод фу(«« $ Self: »Параметры») { инструкции } | «имеет "тип """мульти »метод фу(«« $ Self: »Параметры») { инструкции ... возвращаться ценить; } | |
Рубин | def foo «(параметры)» | def foo «(параметры)» | |
Windows PowerShell | Добавить участников «-MemberType» ScriptMethod «-Имя»Foo«-Ценить» { «парам (параметры)»инструкции } -InputObject Переменная | Добавить участников «-MemberType» ScriptMethod «-Имя»Foo«-Ценить» { «парам (параметры)»инструкции ... возвращаться ценить } -InputObject Переменная | |
OCaml | Нет данных | метод foo «параметры» = выражение | |
F # | член это.фу(«Параметры») = выражение | ||
JavaScript | это.метод = функция («Параметры») {инструкции} [32] | это.метод = функция («Параметры») {инструкции... возвращаться ценить;} [32] | |
Javascript (ES6) | фу(«Параметры») {инструкции} | фу(«Параметры») {инструкции... возвращаться ценить;} | |
КОБОЛ | МЕТОД-ИД. фу. инструкции
| МЕТОД-ИД. фу. инструкции
| |
Кобра | def фу(параметры) | def фу(параметры) в качестве тип | |
ISLISP | (defgeneric метод (arg1 arg2)) |
Характеристики
Как объявить свойство с именем «Бар»
Реализовано вручную
читай пиши | только чтение | только для записи | |
---|---|---|---|
Объекты ABAP | Нет данных | ||
APL (Диалог) | :Свойство Бар ∇ результат ← Получить инструкции ∇ ∇ Установить аргументы инструкции ∇ : EndProperty Бар | :Свойство Бар ∇ результат ← Получить инструкции ∇ : EndProperty Бар | :Свойство Бар ∇ Установить аргументы инструкции ∇ : EndProperty Бар |
C ++ (STL) | Нет данных | ||
C # | тип Бар { | тип Бар { получать { инструкции ... возвращаться ценить; } } | тип Бар { набор { инструкции } } |
D | @свойство тип бар() { инструкции ... возвращаться ценить; } | @свойство тип бар() { инструкции ... возвращаться ценить; } | @свойство тип бар(тип значение) { инструкции ... возвращаться ценить; } |
eC | свойство тип Бар { | свойство тип Бар { получать { инструкции ... возвращаться ценить; } } | свойство тип Бар { набор { инструкции } } |
Ява | Нет данных | ||
Objective-C 2.0 (Какао) | @property (читать, писать) тип бар; а потом внутри @выполнение | @property (только чтение) тип бар; а потом внутри @выполнение | Нет данных |
Быстрый | вар бар : тип { получать { инструкции } набор«(newBar)» { инструкции } } | вар бар : тип { инструкции } | Нет данных |
Эйфель | особенность -- Доступ | ||
Python | def setBar(себя, ценить): [33] | def getBar(себя): | def setBar(себя, ценить): |
Visual Basic .NET | Свойство Бар() В качестве тип | Только для чтения Бар() В качестве тип | WriteOnly свойство Бар() В качестве тип |
Xojo | ComputedProperty Бар() В качестве тип | ComputedProperty Бар() В качестве тип | ComputedProperty Бар() В качестве тип |
PHP | функция __get ($ свойство) { | функция __get ($ свойство) { | функция __set ($ свойство, $ значение) { |
Perl | суб Бар { | суб Бар { | суб Бар { |
Раку | Нет данных | ||
Рубин | def бар | def бар | def бар=(ценить) |
Windows PowerShell | Добавить участников | Добавить участников | Добавить участников |
OCaml | Нет данных | ||
F # | член это.Бар с get () = выражение и установите (ценить) = выражение | член это.Бар = выражение | член это.Бар с набором (ценить) = выражение |
JavaScript (ES6) | получать бар(«Параметры») { инструкции ... возвращаться ценить}set бар(«Параметры») { инструкции } | получать бар(«Параметры») { инструкции ... возвращаться ценить} | набор бар(«Параметры») { инструкции } |
КОБОЛ | МЕТОД-ИД. ПОЛУЧИТЬ НЕДВИЖИМОСТЬ бар. инструкции
инструкции
| МЕТОД-ИД. ПОЛУЧИТЬ НЕДВИЖИМОСТЬ бар. инструкции
| МЕТОД-ИД. УСТАНОВИТЬ СВОЙСТВО бар. инструкции
|
Кобра | профи бар "в качестве тип" | получать бар "в качестве тип" | набор бар "в качестве тип" |
ISLISP | Нет данных |
Выполняется автоматически
читай пиши | только чтение | только для записи | |
---|---|---|---|
Объекты ABAP | Нет данных | ||
C ++ (STL) | Нет данных | ||
C # | тип Бар { получать; набор; } | тип Бар { получать; частный набор; } | тип Бар {частное получение; набор; } |
D | Нет данных | ||
Ява | Нет данных | ||
Objective-C 2.0 (Какао) | @property (читать, писать) тип бар; а потом внутри @выполнение | @property (только чтение) тип бар; а потом внутри @выполнение | Нет данных |
Быстрый | вар бар : тип | позволять бар : тип | Нет данных |
Эйфель | |||
Python | @свойство | @свойство | бар = свойство () |
Visual Basic .NET | Свойство Бар В качестве тип"= начальное_значение »(VB 10) | ||
PHP | |||
Perl[34] | использовать основание qw(Класс :: Аксессор); | использовать основание qw(Класс :: Аксессор); | использовать основание qw(Класс :: Аксессор); |
Раку | Нет данных | ||
Рубин | 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 == "символ") { инструкции } | тип opCall («Параметры») { инструкции } |
Ява | Нет данных | ||
Цель-C | |||
Быстрый | func символ(операнд1 : тип) -> ответ { инструкции } (вне класса) | func символ(операнд1 : Тип 1, операнд2 : type2) -> ответ { инструкции } (вне класса) | |
Эйфель[35] | op_name псевдоним "символ": ТИП | op_name псевдоним "символ" (операнд: TYPE1): ТИП2 | |
Python | def __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) = @_; инструкции }; | |
Раку | «наш "тип """мульти »префикс метода: <символ> («$ Операнд: ») { инструкции ... возвращаться ценить; } или же | «наш "тип """мульти »инфикс метода: <символ> («$ Operand1: »Тип операнд2) { инструкции ... возвращаться ценить; } | «наш "тип """мульти »метод postcircumfix: <()> («$ Self: »« Параметры ») { инструкции } |
Рубин | def символ | def символ(операнд2) | Нет данных |
Windows PowerShell | Нет данных | ||
OCaml | |||
F # | статический член (символ) операнд = выражение | статический член (символ) (операнд1, операнд2) = выражение | Нет данных |
КОБОЛ | Нет данных | ||
ISLISP | Нет данных |
Индексаторы
читай пиши | только чтение | только для записи | |
---|---|---|---|
Объекты ABAP | Нет данных | ||
APL (Диалог) | : Свойство пронумеровано по умолчанию имя ∇ результат ← Получить инструкции ∇ ∇ Установить аргументы инструкции ∇ : EndProperty Бар | : Свойство пронумеровано по умолчанию Бар ∇ результат ← Получить инструкции ∇ : EndProperty Бар | : Свойство пронумеровано по умолчанию Бар ∇ Установить аргументы инструкции ∇ : EndProperty Бар |
C ++ (STL) | тип& оператор [] (индекс типа) { инструкции } | тип оператор [] (индекс типа) { инструкции } | |
C # | тип это[индекс типа] { | тип это[индекс типа] { получать{ инструкции } } | тип это[индекс типа] { набор{ инструкции } } |
D | тип opIndex (индекс типа) { инструкции } | тип opIndex (индекс типа) { инструкции } | тип opIndexAssign (тип значение, индекс типа) { инструкции } |
Ява | Нет данных | ||
Objective-C (недавний компилятор Clang) | Нет данных | - (id) objectAtIndexedSubscript: (NSUInteger)индекс { инструкции возвращаться ценить; } или же | - (void) setObject: (id)ценить atIndexedSubscript: (NSUInteger)индекс { инструкции } или же |
Быстрый | нижний индекс (индекс : тип) -> ответ { получать { инструкции } набор«(newIndex)» { инструкции } } | нижний индекс (индекс : тип) -> ответ { инструкции } | |
Эйфель[35] | скобка псевдоним "[]" (индекс: ТИП): ТИП назначать set_item | скобка псевдоним "[]" (индекс: ТИП): ТИП | |
Python | def __getitem __ (я, индекс): | def __getitem __ (я, индекс): | def __setitem __ (себя, индекс, ценить): |
Visual Basic .NET | Элемент свойства по умолчанию (Индекс В качестве тип) В качестве тип | Элемент свойства только для чтения по умолчанию (Индекс В качестве тип) В качестве тип | Элемент свойства WriteOnly по умолчанию (Индекс В качестве тип) В качестве тип |
PHP | [37] | ||
Perl | [38] | ||
Раку | «наш "тип """мульти »метод postcircumfix: <[]> равен rw («$ Self: »Введите $ index) { инструкции ... возвращаться ценить; } или же | «наш "тип """мульти »метод postcircumfix: <[]> («$ Self: »Введите $ index) { инструкции ... возвращаться ценить; } или же | Нет данных |
Рубин | 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) | Икс.метод(параметры) или же | Икс.поле или | 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.метод «(параметры)" или же | нс::член | |
OCaml | Икс#метод «параметры» | Нет данных | |||
JavaScript | Икс.метод(параметры) | Икс.поле | Икс.свойство | cls.член | Нет данных |
КОБОЛ | ПРИЗЫВ x "метод" «С ПОМОЩЬЮ параметры »«ВОЗВРАЩЕНИЕ результат »или | Нет данных | свойство OF x | ПРИЗЫВАТЬ cls "метод" «С ПОМОЩЬЮ параметры »«ВОЗВРАЩЕНИЕ результат »или | Нет данных |
Кобра | Икс.метод «(параметры)» | Икс.поле | Икс.свойство | cls.член | нс.член |
Доступность участников
Есть член? | Обработчик отсутствующего члена | |||
---|---|---|---|---|
Метод | Поле | Метод | Поле | |
APL (Диалог) | 3 = x.⎕NC 'метод' | 2 = x.⎕NC 'метод' | Нет данных | |
Объекты ABAP | Нет данных | |||
C ++ (STL) | ||||
Objective-C (какао) | [Икс RespondsToSelector: @selector (метод)] | Нет данных | forwardInvocation: | Нет данных |
Болтовня | Икс RespondsTo: селектор | Нет данных | не понимает: | Нет данных |
C # | (используя отражение) | |||
eC | ||||
Ява | ||||
D | opDispatch () | |||
Эйфель | Нет данных | |||
Python | hasattr (Икс, "метод") и вызываемый (Икс.метод) | hasattr (Икс, "поле") | __getattr __ () | |
Visual Basic .NET | (используя отражение) | |||
Xojo | (с использованием интроспекции) | |||
Windows PowerShell | (используя отражение) | |||
F # | (используя отражение) | |||
Рубин | Икс.respond_to? (:метод) | Нет данных | method_missing () | Нет данных |
PHP | method_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 () | Система | |
Ява | Икс.нанизывать() | Икс.клон () [51] | Икс.equals (у) | Икс.сравнить с(у) [52] | Икс.хэш-код() | Система | |
JavaScript | Икс.нанизывать() | ||||||
D | Икс.нанизывать() или же | Икс.stringof | Икс == y или | Икс.opCmp (у) | Икс.toHash () | ||
eC | Икс.OnGetString (tempString, ноль, ноль) или же | у.OnCopy (Икс) | Икс.OnCompare (у) | дескриптор объекта может быть преобразован в целочисленный идентификатор | |||
Objective-C (какао) | Икс.описание | Икс.debugDescription | [Икс копия] [53] | [Икс равно:у] | [Икс сравнивать:у] [54] | Икс.hash | указатель на объект можно преобразовать в целочисленный идентификатор |
Быстрый | Икс.описание [55] | Икс.debugDescription [56] | Икс == у [57] | Икс < у [58] | Икс.hashValue [59] | отражать(Икс) | |
Болтовня | Икс 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] | Данные :: Дампер [68] | Хранимый [69] | Скалярный [70] | |||
Раку | ~Икс [67] | Икс.perl | Икс.clone | Икс экв. у | Икс cmp у | Икс.КОТОРЫЙ | |
Рубин | Икс.to_s | Икс.осмотреть | Икс.dup или же | Икс == y или | Икс <=> у | Икс.hash | Икс.object_id |
Windows PowerShell | Икс.Нанизывать() | Икс.Clone () | Икс.Equals (у) | Икс.Сравнить с(у) | Икс.GetHashCode () | ||
OCaml | Oo.copy Икс | Икс = у | Hashtbl | Oo.id Икс | |||
F # | нить х или х | sprintf "% A" Икс | Икс.Clone () | Икс = y или x | сравнивать x y или x | хэш х или х | |
КОБОЛ | Нет данных |
Типовые манипуляции
Получить тип объекта | Является экземпляром (включает подтипы) | Апкастинг | Понижение | ||
---|---|---|---|---|---|
Проверка времени выполнения | Нет чека | ||||
Объекты ABAP | Нет данных[71] | = | ?= | ||
C ++ (STL) | типичный (Икс) | dynamic_cast <тип *>(&Икс) != nullptr | Нет данных[72] | dynamic_cast <тип*>(ptr) | (тип*) ptr или |
C # | Икс.GetType () | Икс является тип | (тип) х или х в качестве тип | ||
D | typeid (Икс) | В ролях(тип) Икс | |||
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] | ||
PHP | get_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 # | Спецификация #: | Спецификация #: | |||
Ява | Нет данных | ||||
Цель-C | |||||
Visual Basic .NET | |||||
D | ж | ж | утверждать(выражение) | invariant () { выражение } | |
Эйфель | ж | ж | ж | учебный класс Икс | из инструкции |
Python | Нет данных | ||||
PHP | |||||
Perl | |||||
Раку | PRE { условие } | ПОЧТОВЫЙ { условие } | |||
Рубин | Нет данных | ||||
Windows PowerShell | |||||
OCaml | |||||
F # | |||||
КОБОЛ |
Смотрите также
Ссылки и примечания
- ^ параметр = аргумент может повторяться, если у конструктора несколько параметров
- ^ SAP зарезервировал для себя использование разрушения
- ^ а б c d е ж грамм час я j k л Этот язык использует вывоз мусора освободить неиспользуемую память.
- ^ Объекты OCaml можно создавать напрямую, не обращаясь к классу.
- ^ а б c d е ж грамм Этот язык поддерживает множественное наследование. У класса может быть более одного родительского класса
- ^ Отсутствие родительского класса делает класс корневым. На практике это почти никогда не делается. Обычно следует использовать обычный базовый класс используемого фреймворка, который
NSObject
для Какао и GNUstep, илиОбъект
иначе. - ^ Обычно
@интерфейс
часть помещается в заголовочный файл, а@интерфейс
часть помещается в отдельный файл исходного кода. - ^ Префиксы к именам классов и протоколов, обычно используемые как своего рода пространство имен
- ^ В интерфейсах Python есть классы, методы которых имеют проходить как их тела
- ^ Класс - это объект.
Просто отправьте сообщение суперклассу (st-80) или целевому пространству имен (Visualworks). - ^ Пространство имен - это объект.
Просто отправьте сообщение в родительское пространство имен. - ^ А финализатор вызывается сборщиком мусора, когда объект собирается быть собранным. Нет гарантии, когда он будет вызван или будет ли он вызван вообще.
- ^ В ABAP конструктор должен быть определен как метод (см. Комментарии к методу) со следующими ограничениями: имя метода должно быть «конструктор», и могут быть определены только «импортируемые» параметры.
- ^ Сюда идет необязательный разделенный запятыми список инициализаторов для объектов-членов и родительских классов. Синтаксис для инициализации объектов-членов:
"имя члена(параметры)"
"имя_класса(параметры)".
- ^ Любая процедура Eiffel может использоваться как процедура создания, также известная как конструкторы. См. Параграф Эйфеля на Конструктор (информатика).
- ^ Реализация {ОДНОРАЗОВЫЕ} .dispose гарантирует, что избавляться будет вызываться при сборке мусора.
- ^ Эта конструкция «инициализатор» используется редко. Поля в OCaml обычно инициализируются непосредственно в их объявлении. «Инициализатор» используется только при необходимости дополнительных императивных операций. Вместо этого «параметры конструктора» на других языках указываются как параметры класса в OCaml. Подробнее см. Синтаксис объявления класса.
- ^ Этот синтаксис обычно используется для перегрузка конструкторы
- ^ В JavaScript конструктор это объект.
- ^ Конструкторы можно эмулировать с помощью фабричного метода, возвращающего экземпляр класса.
- ^ а б c Идентификатор области действия должен появляться один раз в объявлении файла, все объявления переменных после этого идентификатора области имеют его область действия, пока не будет достигнут другой идентификатор области или конец объявления класса.
- ^ В ABAP определенные поля или методы не объявляются доступными для внешних объектов. Скорее, внешние классы объявляются друзьями, чтобы иметь доступ к полям или методам класса.
- ^ В C ++ определенные поля не объявляются доступными для внешних объектов. Напротив, внешние функции и классы объявляются друзьями, чтобы иметь доступ к полям класса. Видеть функция друга и класс друзей Больше подробностей.
- ^ Просто отправьте сообщение классу
учебный класс addInstVarName: поле.учебный класс removeInstVarName: поле.
- ^ а б c d Просто присвойте ему значение в методе
- ^ В Python нет частных полей - все поля всегда общедоступны. Существует соглашение сообщества о префиксе деталей реализации одним подчеркиванием, но это не поддерживается языком.
- ^ Все данные класса являются «частными», потому что стандарт COBOL не определяет способа доступа к ним.
- ^ Объявление и реализация методов в ABAP разделены. методы оператор должен использоваться внутри определения класса. метод (без «s») должен использоваться внутри реализации класса. параметр = аргумент можно повторить, если есть несколько параметров.
- ^ В ABAP имя возвращаемого параметра явно определяется в сигнатуре метода в определении класса.
- ^ В C ++ методы объявления и реализации обычно разделены. Методы объявлены в определении класса (которое обычно включается в заголовочный файл ) используя синтаксис
- ^ Хотя тело метода может быть включенным в объявление внутри определения класса, как показано в таблице, это обычно плохая практика. Поскольку определение класса должно быть включено в каждый исходный файл, в котором используются поля или методы класса, наличие кода в определении класса приводит к компиляции кода метода с каждым исходным файлом, увеличивая размер кода. Тем не менее, в некоторых случаях полезно включать в объявление тело метода. Одна из причин заключается в том, что компилятор попытается в соответствии методы, которые включены в объявление класса; так что если очень короткий одна линия метода, он может ускорить его встраивание компилятором, включив тело вместе с объявлением. Кроме того, если шаблон класс или метод, тогда весь код должен быть включен в объявление, потому что только с кодом можно создать экземпляр шаблона.
- ^ а б Просто назначьте ему функцию в методе
- ^ Альтернативная реализация:
def бар(): док = «Барная собственность». def fget(себя): возвращаться себя._бар def fset(себя, ценить): себя._бар = ценить возвращаться местные жители()бар = свойство(**бар())
- ^ эти примеры нуждаются в Класс :: Аксессор модуль установлен
- ^ а б c Хотя Eiffel не поддерживает перегрузку операторов, он может определять операторы
- ^ PHP не поддерживает перегрузку операторов изначально, но поддержка может быть добавлена с помощью "операторский" пакет PECL.
- ^ Класс должен реализовывать Интерфейс ArrayAccess.
- ^ Класс должен перегрузить '@ {}' (разыменование массива) или создать подкласс одного из Tie :: Array или Tie :: StdArray для перехвата операций с массивом.
- ^ а б В ABAP аргументы должны передаваться с использованием этого синтаксиса:
х->метод(«экспорт параметр = аргумент »«импорт параметр = аргумент »«изменение параметр = аргумент »«возвращаемое значение (параметр)»
параметр = аргумент
можно повторить, если есть несколько параметров
- ^ В C ++ нет ключевого слова super, поскольку возможно множественное наследование, и поэтому может быть неоднозначно, на какой базовый класс ссылаются. Вместо этого
BaseClassName :: member
синтаксис может использоваться для доступа к переопределенному члену в указанном базовом классе. Microsoft Visual C ++ предоставляет для этой цели нестандартное ключевое слово «__super»; но это не поддерживается другими компиляторами.[1] - ^ а б c d е ж грамм час я Ключевое слово здесь не ценить, и его можно использовать только для доступа к методу суперкласса.
- ^ Но бойтесь, они не имеют одинаковой ценности.
- ^ только для необязательных типов
- ^ а б В этом языке методам экземпляра передается текущий объект в качестве первого параметра, который условно называется «self», но это не обязательно.
- ^ «Предшественник» в Eiffel на самом деле является вызовом одноименного метода в суперклассе. Итак, Preursor (args) эквивалентен super.currentMethodName (args) в Java. Невозможно вызвать метод с другим именем в суперклассе.
- ^ «super» в Ruby, в отличие от других языков, на самом деле является вызовом метода с таким же именем в суперклассе. Таким образом, super (args) в Ruby эквивалентен super.currentMethodName (args) в Java. Невозможно вызвать метод с другим именем в суперклассе.
- ^ В OCaml объявление объекта может необязательно начинаться с параметра, который будет связан с текущим объектом. Этот параметр обычно называется «self», но это не обязательно. Это хорошая практика - помещать туда параметр, чтобы можно было вызывать свои собственные методы.
- ^ В OCaml объявление наследования ("наследование") может дополнительно быть связано со значением с синтаксисом "наследовать parent_class «параметры» в качестве super ". Здесь" super "- это имя, присвоенное переменной, связанной с этим родительским объектом. Ей можно присвоить другое имя.
- ^ Однако, если требуется возможность иметь "необязательное" значение в OCaml, поместите это значение в
вариант
тип, значения которогоНикто
иНекоторые х
, который может использоваться для представления «нулевой ссылки» и «ненулевой ссылки на объект», как в других языках. - ^ предполагая, что «x» и «y» являются объектами (а не указателем). Может быть настроен путем перегрузки объекта
==
оператор - ^ Доступно только изнутри класса, так как
клон ()
метод, унаследованный отОбъект
защищен, если класс не переопределит метод и не сделает его общедоступным. При использованииклон ()
унаследовано отОбъект
, класс должен реализовыватьКлонируемый
интерфейс для клонирования. - ^ Класс должен реализовывать интерфейс
Сопоставимый
для стандартизации этого метода. - ^ Реализуется объектом
copyWithZone:
метод - ^
сравнивать:
- это условное название метода сравнения в классах Foundation. Однако официального протокола не существует. - ^ Только если объект соответствует
Для печати
протокол - ^ Только если объект соответствует
Отладка
протокол - ^ Только если объект соответствует
Равноправный
протокол - ^ Только если объект соответствует
Сопоставимый
протокол - ^ Только если объект соответствует
hashValue
протокол - ^ Можно настроить по объекту
__str __ ()
метод - ^ Можно настроить по объекту
__repr __ ()
метод - ^ Можно настроить по объекту
__copy __ ()
метод - ^ Можно настроить по объекту
__eq __ ()
метод - ^ Только в Python 2.x и ранее (удалено в Python 3.0). Можно настроить по объекту
__cmp __ ()
метод - ^ Можно настроить по объекту
__hash __ ()
метод. Не все типы хешируются (изменяемые типы обычно не хешируются) - ^ Можно настроить по объекту
__clone ()
метод - ^ а б Может быть настроен путем перегрузки оператора преобразования строки объекта
- ^ Этот пример требует использоватьing Данные :: Дампер
- ^ Этот пример требует использоватьing Хранимый
- ^ Этот пример требует использоватьing Скаляр :: Утилита
- ^ Информация о типах времени выполнения в ABAP может быть собрана с помощью различных классов описания, таких как CL_ABAP_CLASSDESCR.
- ^ а б c d е В этом языке неявное преобразование неявно. Экземпляр подтипа может использоваться там, где требуется супертип.
- ^ Только для неклассовых объектов. Если
Икс
это объект класса,[x класс]
только возвращаетсяИкс
. Метод времени выполненияobject_getClass (x)
вернет классИкс
для всех объектов. - ^ а б c Этот язык динамически типизирован. Преобразование между типами не требуется.
- ^ Этот язык не предоставляет информацию о типе времени выполнения. Он не нужен, потому что он статически типизирован, и его преобразование невозможно.