Note that Ada95 is the only ISO standard that provides both object-oriented and parallel constructs. Strong typing , as implemented in Ada95, implies that values of one type cannot be assigned to variables of another type. In an assignment statement for example, the expressions on both sides must be of the same type. Values can be stored in objects , declared to be of a specific type. Every type declaration introduces a new type totally distinct from any other type.
Data types can be of almost arbitrary complexity.
Thanks to strong typing, the compiler can always check for the correct types in the parameter list and resolve references to overloaded subprograms which have the same name but parameters of different types. Type definitions and their associated operations can be encapsulated in packages, and it is also often useful to group together related subprograms in packages. Similar to subprograms, they usually consist of a declarative part and of a body . In order to facilitate software reuse, subprograms and packages often have to be parameterised. Taking matrix operations as an example, it makes no sense to duplicate more or less exactly the same algorithms many times to be able to deal with matrices made up of single precision, double precision, complex, integer, and so on elements.