Guidelines for Choosing a Computer Language:|
Support for the Visionary Organization
Appendix S: Ada 83|
Ada 83 is a 3GL rich in constructs, as well as in support for the principles of software engineering. It is considered object-based as opposed to object-oriented (see Appendix J on Ada 95 for its object-oriented successor) because Ada 83 supports the creation of encapsulated classes and objects, but it does not support full inheritance. [ANSI/MIL 83] [Barnes 94]Language Criteria
In this section, Ada 83 is rated with respect to the language characteristics used in Table 2 in the main document [ANSI/MIL 83] [Barnes 94] [SPC 89]. The ratings range from 0 to 10, where 0 means the language provides no support for the characteristic, and 10 means it provides extensive support. The ratings given below are those provided in Table 2. The reader must bear in mind that the support for a good characteristic in a language does not necessarily mean that it is always used, or used appropriately. Unskilled programmers can write bad code in any language, but a good language facilitates the production of good code by skilled programmers.
Clarity of source code the extent to which inherent language features support source code that is readable and understandable and that clearly reflects the underlying logical structure of the program.
Ada is considered by many to be very verbose, but one of the strengths of this language approach is that it supports code clarity. Ada code also reflects program structure. Clarity of form was one of the design goals of Ada. Rating: 9
Complexity management (architecture support) the extent to which inherent language features support the management of system complexity, in terms of addressing issues of data, algorithm, interface, and architectural complexity.
The single most important contribution of Ada to language design was the package construct. This construct permits the encapsulation of abstract data types, finite state machines, classes, objects, etc. In doing so, it greatly facilitates the creation of software libraries. Ada compilers are also required to perform consistency checking across separate compilation units. All of this contributes to complexity management. However, Ada 83 does not provide any additional support for managing very large software components, such as subsystems. Rating: 7
Concurrency support the extent to which inherent language features support the construction of code with multiple threads of control (also known as parallel processing).
Ada is one of few standardized languages that specifically supports concurrency. Ada uses a task mechanism with synchronization constraints. Because this is an unusual language feature, it is the least mature feature of the Ada 83 language. The result is that this feature is often not used in real-time systems because of the perception that system constraints cannot be met. Rating: 4
Distributed system support the extent to which inherent language features support the construction of code to be distributed across multiple platforms on a network.
Ada 83 provides no specific support for distributed systems. Rating: 0
Maintainability the extent to which inherent language features support the construction of code that can be readily modified to satisfy new requirements or to correct deficiencies.
Many features of Ada support maintainability, such as those which support code clarity and encapsulation, to facilitate understanding followed by the ability to change isolated pieces of code while guaranteeing no side effects in other parts of the software system. However, many applications require a rather awkward structuring in Ada 83, and this is detrimental to maintainability. Rating: 5
Mixed language support the extent to which inherent language features support interfacing to other languages.
Ada provides a specific language feature, pragma interface, which is used as a standard form for interfacing with other languages. However, in Ada 83 it does not always work effectively. Rating: 5
Object-oriented programming support the extent to which inherent language features support the construction of object-oriented code.
Ada 83 supports the construction of code using encapsulation of objects, including the operations which act on the objects. However, it does not fully support inheritance, nor does it support polymorphism. Hence, Ada 83 is considered to be object-based rather than object-oriented. Rating: 6
Portability the extent to which inherent language features support the transfer of a program from one hardware and/or software platform to another.
Ada features, such as the type attributes, the ability to define numerical types using system independent range and digits declarations, and the ability to encapsulate dependencies, provide good support for portability. However, there is no widespread availability of common tools on many platforms in Ada 83, and this is detrimental to portability. Rating: 5
Real-time support the extent to which inherent language features support the construction of real-time systems.
Ada features provide support for specifying time and space constraints to a certain extent, both in type declarations and in the tasking mechanism. However, these have not been specified in the Ada 83 language in a manner that will always result in expected performance. Additional real-time support in Ada 83 is offered by the low-level language features which support access to underlying device control where necessary. Rating: 4
Reliability the extent to which inherent language features support the construction of components that can be expected to perform their intended functions in a satisfactory manner throughout the expected lifetime of the product.
Ada requires the specification of information, the omission of which can make a program unreliable, such as type specifications. Ada also performs consistency checks across separately compiled units, providing excellent support for reliability. However, there are elements which have not been specified in Ada 83 in a manner which will always result in expected performance. Rating: 6
Reusability the extent to which inherent language features support the adaptation of code for use in another application.
Ada 83 supports reusability with language features supporting code clarity (making code understandable) and encapsulation (making code adaptable), and it has reasonable support for maintainability and portability. However, the lack of full object-oriented support is detrimental to reusability. Rating: 5
Safety the extent to which inherent language features support the construction of safety-critical systems, yielding systems that are fault-tolerant, fail-safe, or robust in the face of systemic failures.
As noted by [Pyle 91] and [Cullyer 91], no language alone can ensure the construction of safety-critical systems (additional formal methods are required). However, Ada comes closer than other existing languages by an order of magnitude because of its support for system reliability [Pyle 91]. Rating: 4
Standardization the extent to which the language definition has been formally standardized (by recognized bodies such as ANSI and ISO) and the extent to which it can be reasonably expected that this standard will be followed in a language translator.
Ada has been standardized by ANSI and ISO in a much different fashion than other languages, with compilers developed after the language was standardized. The result is that virtually every Ada compiler in use today has been validated against the standard, and the compilers follow the standard without adding non-standard features to the language definition. Rating: 10
Support for modern engineering methods the extent to which inherent language features support the expression of source code that enforces good software engineering principles.
The original Ada requirements were developed explicitly to support good software engineering, as it was known at the time. However, Ada 83 does not provide full object-oriented support, and it supports some engineering features awkwardly. Rating: 7
|< Previous Page||Search||Contents||Tables||< End >|