Fig. 4. State ontology evolution realised in the form of class hierarchy
The reasons for using C++ instead of other declarative languages are as follows.
It is easy to adopt in programming terms. One can even embedded operational
knowledge by means of C++ objects and functions since certain type of
knowledge can only be expressed in programming terms.
Less overhead involved in reasoning and accessing knowledge base instances
(i.e., objects), thus suitable for resource and performance-sensitive applications
(especially considering the middleware itself is written in C++).
Schema/ontology evolution is possible based on object orientation techniques by
means of inheritance and encapsulation.
Possible types of ontology evolution in C++ are
Addition of new fields and functions : Inheritance with new members
Changes of fields and functions: Overriding of relevant fields and functions
Removal or change of semantics in functions : Nullifying or redirecting with a
wrapper that overrides a function
However, there are some downsides of using a procedural language, i.e.,
Expressive power of the language may be limited.
One may have to depend on a reflection mechanism in order to reason about
ontology/schema at runtime, which could cause extra overheads at runtime or be
complex to learn.
It is difficult to learn or understand for those who are not familiar with C++ or
But, since we are dealing with embedded software engineers who are likely to be
familiar with programming in C or C++, the last point is not a real obstacle. C++ has
been widely used by not just computer scientists, but also by a wide range of