Введение

Термин "язык, основанный на объектах" может использоваться в техническом смысле для описания любого языка программирования, который использует идею инкапсуляции состояния и операций внутри объектов. Языки, основанные на объектах, не обязательно должны поддерживать наследование или подтипирование, но те, которые это делают, также называются объектно-ориентированными. Языки, основанные на объектах, которые не поддерживают наследование или подтипирование, обычно не считаются полноценными объектно-ориентированными языками. Примеры объектно-ориентированных языков, в приблизительно хронологическом порядке, включают Simula, Smalltalk, C++ (объектная модель которой основана на Simula), Objective C (объектная модель которой основана на Smalltalk), Eiffel, Xojo (ранее REALbasic), Python, Ruby, Java, Visual Basic NET, C# и Fortran 2003. Примерами языка, который основан на объектах, но не является объектно-ориентированным, являются ранние версии Ada, Visual Basic (VB) и Fortran 90. Все эти языки поддерживают определение объекта как структуры данных, но лишены полиморфизма и наследования. На практике термин "язык, основанный на объектах" обычно применяется к тем языкам, которые не являются объектно-ориентированными, хотя все объектно-ориентированные языки также являются языками, основанными на объектах, по определению. Вместо этого термины "язык, основанный на объектах" и "объектно-ориентированный язык" обычно используются как взаимоисключающие альтернативы, а не как перекрывающиеся категории. Иногда термин "язык, основанный на объектах" применяется к прототипным языкам программирования, полноценным объектно-ориентированным языкам, в которых отсутствуют классы, но в которых объекты вместо этого наследуют свой код и данные непосредственно из других объектов-шаблонов. Примером широко используемого прототипного скриптового языка является JavaScript. Как языки, основанные на объектах, так и объектно-ориентированные языки (независимо от того, основаны они на классах или прототипах) могут быть статически проверены на типы. Статическая проверка прототипных языков может быть затруднительной, поскольку эти языки часто позволяют динамически расширять объекты новым поведением и даже изменять их родительский объект (от которого они наследуют) во время выполнения. + Различие между объектно-ориентированными и языками, основанными на объектах. Объектно-ориентированный язык Язык, основанный на объектах Объектно-ориентированные языки поддерживают все возможности объектно-ориентированного программирования (ООП): абстракцию, инкапсуляцию, наследование, полиморфизм. Языки, основанные на объектах, поддерживают подмножество возможностей ООП, таких как полиморфизм или наследование. Примеры: C++, C#, Java и т.д. Примеры: Visual Basic (до NET).