El término lenguaje basado en objetos puede usarse en un sentido técnico para describir cualquier lenguaje de programación que utilice la idea de encapsular estados y operaciones dentro de objetos . Los lenguajes basados en objetos no necesitan soportar herencia o subtipos , pero aquellos que sí lo hacen también se denominan orientados a objetos . Los lenguajes basados en objetos que no admiten herencia o subtipos generalmente no se consideran verdaderos lenguajes orientados a objetos.
Ejemplos de lenguajes orientados a objetos , en orden cronológico aproximado, incluyen Simula , Smalltalk , C++ (cuyo modelo de objetos está basado en Simula), Objective-C (cuyo modelo de objetos está basado en Smalltalk), Eiffel , Xojo (anteriormente REALbasic), Python , Ruby , Java , Visual Basic .NET , C# y Fortran 2003 . Ejemplos de un lenguaje basado en objetos, pero no orientado a objetos, son las primeras versiones de Ada , Visual Basic (VB) y Fortran 90 . Todos estos lenguajes admiten la definición de un objeto como una estructura de datos, pero carecen de polimorfismo y herencia.
En la práctica, el término basado en objetos se suele aplicar a aquellos lenguajes basados en objetos que no están también orientados a objetos, aunque todos los lenguajes orientados a objetos también están basados en objetos, por definición. En cambio, los términos basado en objetos y orientado a objetos se utilizan normalmente como alternativas mutuamente excluyentes, en lugar de categorías que se superponen.
A veces, el término basado en objetos se aplica a lenguajes de programación basados en prototipos , verdaderos lenguajes orientados a objetos que carecen de clases, pero en los que los objetos heredan su código y datos directamente de otros objetos de plantilla . Un ejemplo de un lenguaje de secuencias de comandos basado en prototipos de uso común es JavaScript .
Tanto los lenguajes basados en objetos como los orientados a objetos (ya sean basados en clases o en prototipos) pueden ser verificados estáticamente . Verificar estáticamente los lenguajes basados en prototipos puede ser difícil, porque estos lenguajes a menudo permiten que los objetos se extiendan dinámicamente con un nuevo comportamiento, e incluso que se cambie su objeto principal (del cual heredan), en tiempo de ejecución . [1] [2]
Generalmente no se considera que Ada 83 esté orientado a objetos; más bien, según la terminología de Wegner [Weg 87], se dice que está basado en objetos, ya que proporciona sólo una forma restringida de herencia y carece de polimorfismo.