During the last decades, one particular language paradigm has gained outstanding relevance. Object-oriented programming languages allow for abstracting the cryptic representation of machine languages away and provide programmers with concepts such as class, object, attribute, etc. At the same time, these concepts form the linguistic foundation of object-oriented modelling languages. Since they correspond to basic concepts of philosophical ontologies, they are suited to reconstruct natural language descriptions of the domain a software system is supposed to represent. Hence, object-oriented models are enabled by two lines of abstraction: on the one hand, there is abstraction from machine code. On the other hand, there is abstraction of natural language descriptions that fades out irrelevant aspects and removes ambiguities.
Animation: Object-oriented conceptual models
The object-oriented paradigm does not only foster the correspondence between natural language and program code, it also contributes to reuse and flexibility of software artefacts by providing powerful concepts such as classification, encapsulation, generalization/specialization and polymorphism.