Home » The mathematics of object orientation
Category Archives: The mathematics of object orientation
Object Oriented Features that OWL lacks
At some level OWL seem to be very similar to UML, but there are important differences that you have to keep in mind. In this post I detail features you will have to do without coming from a coding or object orientation perspective when you start using OWL. These are:
- classes do not have attributes,
- classes do have class variables (but not in the way you think),
- you have to live without methods,
- there are no interfaces, and
- neither are there any abstract classes.
Classes do not have Attributes
Programmers are used to classes that have attributes or properties. This is also referred to as instance/member variables of the class. In OWL classes do not have properties. Rather, properties can be used to model relations that exist between classes and data types. You can however state that a class is a subclass of something that has some property. I.e.,
Class: Course SubClassOf: hasSubject some Subject
which states that a Course
is a subclass of things that have some
Subject
. I explain this here and here.
Classes do have Class Variables (but not in the way you think)
In programming class variables are values that describe the class rather than instances of the class. In OWL this is achieved trough annotations. There exist pre-defined annotation properties and you can define your own annotation properties. Interestingly annotation properties can be specified for any class, individual or axiom, as well as the ontology itself. Annotations are purely used to specify additional information and no reasoning is done over them.
There are no Methods nor Interfaces
This may seem like silly a comment, but is worth making it explicit: “OWL does not have methods”. Why not? Well, OWL is not a programming language nor a modelling language for designing software. It is a conceptual modelling language. Can you model methods in OWL? Yes, I have done it here to find software modelling heuristic violations, but it is not trivial. However, even if you can define the conceptual notion of a method, there is no way to execute methods in OWL. Again, because it is not a programming language.
What about interfaces? Well, since there are no methods in OWL, there are no interfaces either. In programming the idea is that an interface defines the signature of an interaction, usually in terms of method signatures, without specifying how the methods are actually implemented. This allows for the same interface to have different implementations.
Neither are there Abstract Classes
Abstract classes in programming are used to enable programmers to only implement a subset of the interfaces specified, thereby forcing subclasses to do the implementation. However, again since interfaces do not exist, and there are no methods, it does not make sense for OWL to support abstract classes.
What about the case where in programming an abstract class is defined that only consist of member/instance variables? In programming this has the effect that no instances of this class can be created directly. The only way an instance can be created is by creating an instance of a subclass of the abstract class. Importantly these instances created of the subclass are still instances of the abstract class. In OWL there is no way to force that individuals cannot be created of a class, but only for its subclasses. The closest to not being able to create individuals for a class is the class ‘owl:Nothing‘, but that really means the class has zero individuals, which is not what is meant by an abstract class in programming.
Conclusion
In this post I detailed some object oriented features programmers may feel OWL lacks. However, OWL is a conceptual modelling language with reasoning capability. Thinking about it causes one to realize it makes as little sense to say OWL lacks some object oriented feature as saying that Java or C# lacks reasoning capability.
Associations between Classes
This far we have only considered UML classes where the attributes are primitive types rather than classes. Here we will consider UML classes that have classes as attributes. Assume we want to model projects. Assume a project must have one name, one sponsor that must be a manager and it must have a team of between 3 and 10 employees. In UML this can be stated using attributes (see Fig.1(a)) or associations (see Fig. 1(b)). For interest sake Wazlawick [1] suggests using attribute notation for data types and associations for classes. His motivation is that associations makes dependencies between classes more apparent. I usually follow this guideline myself.

Fig. 1
The OWL representation for these 2 class diagrams is given in Fig. 2. The first thing to notice is that we use ObjectProperty
instead of DataProperty
to represent the sponsor
attribute/association. Similar for the team attribute/association. Our property definitions also now have Domain
and Range
restrictions. When we say that Susan is the sponsor for ABC, we can infer that Susan is a manager and ABC is project. This information can be captured through Domain
and Range
restrictions. For the purpose of finding modeling errors in it is preferable to add Domain
and Range
restrictions.

Fig. 2
To limit the number of employees on a team to between 3 and 10 employees we use the property cardinality restrictions team min 3 owl:Thing
and team max 10 owl:Thing
. It may seem strange that we use team max 10 owl:Thing
rather than team max 10 Employee
. Surely we want to restrict team members to employees? Well true, but that is achieved through our range restriction on the team
object property. Here we restricting our team to 10 whatever classes and the range restriction will infer that the team must be of type Employee
.
References
1. R. S. Wazlawick, Object-oriented Analysis and Design for Information Systems: Modeling with UML, OCL and IFML, Morgan Kaufmann, 2014.
Inheritance
In this post we will look at how different types of inheritance can be translated to OWL. We consider the case where Person
is specialized by Employee
and Client
(Fig. 1). In a UML class diagram if inheritance is not annotated the default annotation {incomplete, disjoint}
is assumed. incomplete
means there are instances of Person
which are neither of type Employee
nor Client
. disjoint
means there is no instance of Person
that is both of type Employee
and of type Client
. The set representation is given in Fig. 2 and the OWL translation in Fig. 3.

Fig. 1

Fig. 2

Fig. 3
The annotation {complete, disjoint}
means every instance of Person
is either a instance of Employee
or an instance of Client
(Fig. 4). The corresponding Venn diagram is given in Fig. 5 and the OWL translation in Fig. 6.

Fig. 4

Fig. 5

Fig. 6
When overlapping
is used rather than disjoint
it means an instance of Person
may be both of type Employee
and of type Client
. Fig. 7 – 9 provides a UML class diagram, Venn diagram and OWL translation as example for the annotation {incomplete, overlapping}
. Fig. 10 – 12 provides a UML class diagram, Venn diagram and OWL translation as example for the annotation {complete, overlapping}
.

Fig. 7

Fig. 8

Fig. 9

Fig. 10

Fig. 11

Fig. 12