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 el estado y las operaciones dentro de objetos . Los lenguajes basados en objetos no necesitan admitir la herencia o la subtipificación , pero aquellos que sí lo hacen también se denominan orientados a objetos . Los lenguajes basados en objetos que no admiten la herencia o la subtipificación 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 se basa en el de Simula), Objective-C (cuyo modelo de objetos se basa en el de Smalltalk), Eiffel , Xojo (anteriormente REALbasic), Python , Ruby , Java , Visual Basic .NET , C# y Fortran 2003. Ejemplos de un lenguaje que está 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 son también orientados a objetos, aunque todos los lenguajes orientados a objetos también lo son, 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 como categorías que se superponen.
A veces, el término basado en objetos se aplica a los 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 programación 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 basados en prototipos) pueden ser objeto de una comprobación de tipos estática . La comprobación estática de los lenguajes basados en prototipos puede ser difícil, porque estos lenguajes a menudo permiten que los objetos se amplíen dinámicamente con un nuevo comportamiento, e incluso que se modifique su objeto padre (del que heredan) en tiempo de ejecución . [1] [2]
Ada 83 en sí no se considera generalmente 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 solo una forma restringida de herencia y carece de polimorfismo.