Rationale for Ada 2005
2.1 Ada Issues: Object-oriented model
The WG9 guidance document
[1]
identifies very large complex systems as a major application area for
Ada. It says
"The main purpose of the Amendment is to address
identified problems in Ada that are interfering with Ada's usage or adoption,
especially in its major application areas (such as high-reliability,
long-lived real-time and/or embedded applications and very large complex
systems). The resulting changes may range from relatively minor, to more
substantial."
Object oriented techniques are of course important
in very large systems in providing flexibility and extensibility. The
document later asks the ARG to pay particular attention to
Improvements that will remedy shortcomings
in Ada. It cites in particular improvements in OO features, specifically,
adding a Java-like interface feature and improved interfacing to other
OO languages.
Ada 2005 does indeed
make many improvements in the object oriented area. The following Ada
Issues cover the relevant changes and are described in detail in this
chapter:
Accidental overloading when overriding
Abstract interfaces to provide multiple inheritance
Object.Operator notation
Abstract formal subprograms & dispatching constructors
New reserved words
Ignore abstract nondispatching ops during overloading
Allow nested type extensions
Null procedures
Functions with controlling results on null extension
The "no hidden interfaces" rule
Wide and wide-wide images
Terminology for interfaces
Progenitors and Ada.Tags
Terminology and semantics for prefix names
Equality for types derived from interfaces
Lower bound of functions in Ada.Tags etc
Limitedness of derived types
Convention of inherited subprograms
These changes can be grouped as follows.
First we discuss the fact that Ada 2005 has three
new reserved words,
interface,
overriding, and
synchronized.
It so happens that these are all used in different aspects of the OO
model and so we discuss them in this chapter (
284).
Then there is the introduction of the
Obj.Op
or prefixed notation used by many other languages (
252,
407).
This should make Ada easier to use, improve its image, and improve interfacing
to other languages.
A huge improvement is the addition of Java-like interfaces
which allow proper multiple inheritance (
251,
396,
401,
411,
419,
430).
A related change is the introduction of null procedures as a category
of operation somewhat like abstract operations (
348).
Type extension is now permitted at a more nested
level than that of the parent type (
344).
An important consequence is that controlled types no longer need to be
declared at library level.
An interesting development is the introduction of
generic functions for the dynamic creation of objects of any type of
a class (
260,
400,
405,
417).
These are sometimes called object factory functions or just object factories.
Additional syntax permits the user to say whether
an operation is expected to be overriding or not (
218).
This detects certain unfortunate errors during compilation which otherwise
can be difficult to find at execution time. A small change to the overriding
rules is that a function with a controlling result does not "go
abstract" if an extension is in fact null (
391).
Finally, we discuss a minor but useful change to the overloading rules;
in a sense this is not about OO at all since it concerns the rules for
nondispatching operations but it is convenient to discuss it here (
310).
There are many other OO related improvements in Ada
2005 concerning matters such as access types, visibility, and generics.
They will be described in later chapters (see
3
and
6).
© 2005, 2006 John Barnes Informatics.
Sponsored in part by: