In a technical sense, the term "object-based language" may be used to describe any programming language that is based on the idea of encapsulating data and code inside objects. Object-based languages need not support inheritance or subtyping, but those that do are also said to be object-oriented. Object-based languages that do not support inheritance or subtyping are usually not considered to be true object-oriented languages.
object-oriented = encapsulation + inheritance + polymorphism
Examples of object-oriented languages include Simula, Smalltalk, C++ (whose object model was based on Simula's), Objective-C (whose object model was based on Smalltalk's), Eiffel, Python, Java, C#, Visual Basic .NET and REALbasic (an object-oriented BASIC dialect). An example of a language that is object-based but not object-oriented is Visual Basic (VB). VB supports both objects and classes, but not inheritance, so it does not qualify as object-oriented.
(In practice, the term "object-based" is normally applied only to those object-based languages that are not also object-oriented. Although all object-oriented languages are also object-based, by definition, they are not normally referred to as such. Instead the terms "object-based" and "object-oriented" are normally used as mutually exclusive alternatives, rather than as categories that overlap.)
Sometimes the term object-based is applied to prototype-based languages, true object-oriented languages that do not have classes, but in which objects instead inherit their code and data directly from other template objects. An example of a commonly used prototype-based language is JavaScript.
Both object-based and object-oriented languages (whether class-based or prototype-based) may be statically type-checked. Statically checking prototype-based languages can be difficult because these languages often allow objects to be dynamically extended with new behavior, and even to have their parent object (from which they inherit) changed, at run time.