Термин « объектно-ориентированный язык » может использоваться в техническом смысле для описания любого языка программирования, который использует идею инкапсуляции состояния и операций внутри «объектов» . Объектно-ориентированные языки не должны поддерживать наследование или создание подтипов , но те, которые поддерживают, также называются «объектно-ориентированными» . Объектно-ориентированные языки, которые не поддерживают наследование или создание подтипов, обычно не считаются настоящими объектно-ориентированными языками.
Примеры объектно-ориентированных языков в приблизительном хронологическом порядке включают Simula , Smalltalk , C ++ (чья объектная модель была основана на Simula), Objective-C (чья объектная модель была основана на Smalltalk), Eiffel , Xojo (ранее REALbasic), Python , Ruby , Java , Visual Basic .NET , C # и Fortran 2003 . Примерами языка, который является объектно-ориентированным, но не объектно-ориентированным, являются ранние версии Ada , Visual Basic (VB), JavaScript иФортран 90 . Все эти языки поддерживают определение объекта как структуры данных, но не имеют полиморфизма и наследования.
На практике термин «объектно-ориентированный» обычно применяется к тем объектно-ориентированным языкам, которые также не являются объектно-ориентированными, хотя все объектно-ориентированные языки также являются объектно-ориентированными по определению. Вместо этого термины «объектно-ориентированный» и «объектно-ориентированный» обычно используются как взаимоисключающие альтернативы, а не как перекрывающиеся категории.
Иногда термин «объектно-ориентированный» применяется к языкам , основанным на прототипах , истинным объектно-ориентированным языкам, которые не имеют классов, но в которых объекты вместо этого наследуют свой код и данные непосредственно от других «шаблонных» объектов. Примером широко используемого языка сценариев на основе прототипов является JavaScript .
Как объектно-ориентированные, так и объектно-ориентированные языки (основанные на классах или на прототипах) могут подвергаться статической проверке типов . Статическая проверка языков на основе прототипов может быть сложной, потому что эти языки часто позволяют объектам динамически расширяться с новым поведением и даже изменять их родительский объект (от которого они наследуются) во время выполнения. [1] [2]
Разница между объектно-ориентированными и объектно-ориентированными языками [ править ]
Объектно-ориентированный язык | Объектно-ориентированный язык |
---|---|
Объектно-ориентированный язык поддерживает все функции ООП (абстракция, инкапсуляция, наследование, полиморфизм). | Объектно-ориентированные языки не поддерживают все функции ООП, такие как полиморфизм или наследование . [ необходима цитата ] |
Примеры: C ++ , C # , Java и т. Д. | Примеры: VB (до .NET) [ необходима ссылка ] |
Ссылки [ править ]
- ↑ Вегнер, Питер (декабрь 1987 г.). Мейровиц, Норман (ред.). «Измерения объектно-ориентированного языкового дизайна» (PDF) . Материалы конференции OOPSLA'87 . 22 (12): 16–82.
- ^ Барби, S; М. Кемпе; А. Штромайер (1993). «Объектно-ориентированное программирование с помощью Ada 9X» . Проект технического отчета . Швейцарский федеральный технологический институт в лаборатории программной инженерии Лозанны . Проверено 15 декабря 2013 года .
Сама Ada 83 обычно не считается объектно-ориентированной;
скорее, согласно терминологии Вегнера [Weg 87], он называется объектно-ориентированным, поскольку обеспечивает только ограниченную форму наследования и не имеет полиморфизма.