Appendix J Guidelines for Choosing a Computer Language:
Support for the Visionary Organization

Appendix J: Ada 95

Ada 95 is rich in constructs as well as support for the principles of software engineering. It has complete support for object-oriented programming with full inheritance and polymorphism, accompanied by additional support for managing program complexities through hierarchical libraries. Support for real-time systems, distributed systems, information systems, safety and security systems, computationally-intensive systems, and interfacing to other languages has also been made explicit and consistent to better support portability and reusability. [ANSI/ISO 95]

Language Criteria

The following assesses Ada 95 with respect to the language criteria presented in the Criteria for a Good Language section in the main document [ANSI/ISO 95] [Barnes 94]:

  1. Its definition should be independent of any particular hardware or operating system. As with Ada 83, Ada 95 is completely independent of any particular hardware or operating system. Ada’s interface to a given platform is through a well-defined, completely encapsulated package called System. All system-dependent definitions are contained within this package, and the user is isolated from them.

  2. Its definition should be standardized, and compiler implementations should comply with this standard. The Ada 95 standard was developed in much the same manner as the Ada 83 standard, before compilers were developed. However, compilers have had a boost from a prototype that was developed during the Ada 95 language development, and full, as well as mature, language implementations are arriving much more quickly than occurred with the original Ada 83. Complete compliance with the new standard is tested through the Ada Compiler Validation Capability (ACVC) suite of tests, as it is with Ada 83, and non-standard compilers are not accepted in the Ada community.

  3. It should support software engineering technology, discouraging or prohibiting poor practices, and promoting or supporting maintenance activities. The requirements for the Ada language were developed explicitly for it to provide good support for software engineering technology. Ada 95 not only supports the principles of good software engineering as it is known today, but it also discourages poor practices by prohibiting them where possible. Maintenance is supported by these characteristics.

  4. It should effectively support the application domain(s) of interest. Ada was originally developed to support embedded software systems, although it took a number of years before most Ada products were mature enough to provide good support for that domain. In the meantime, Ada has also proven to provide good support for real-time domains, computationally-intensive domains, communications systems domains, and information systems domains. In short, with the proper compilers, supporting tools, and software libraries, Ada has proven to provide good support for any domain in which it has been tried.

  5. It should support the required level of system reliability and safety. Ada provides many features which support system reliability. For safety-critical systems, those on which human life may depend, no current language is entirely satisfactory. [Cullyer 91] indicates that a subset of Ada can be used in safety-critical systems, along with at least static code analysis and preferably formal proofs. [Pyle 91] indicates that Ada, with its automatic compile-time checking, along with careful inspection and preparation of test cases, can reduce residual error rates by an order of magnitude better than other languages, making Ada the most suitable language for safety-related software. However, Ada must still be combined with mathematical specification, rigorous analysis, and formal proofs of correctness before it is appropriate for use in safety-critical systems. Ada 95 provides a Safety and Security Annex.

  6. Its compiler implementations should be commensurate with the current state of technology. Ada 95 is currently rather new, and implementations are just being introduced. Nevertheless, implementations are already showing that they are commensurate with the current state of technology [Kayloe 94].

  7. Appropriate software engineering-based supporting tools and environments should be available. Ada 83 tool sets must be modified somewhat for Ada 95 use, but Ada 95 versions are already available.

    Language Characteristics

    In this section, Ada 95 is rated with respect to the language characteristics used in Table 2 in the main document [ANSI/ISO 95] [Barnes 94]. 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 83 to language design was the package construct. This construct permits the encapsulation of abstract data types, finite state machines, classes, objects, etc. Ada 95 has gone beyond this to provide additional support for managing the complexity of very large software components with hierarchical libraries. It also provides partitions for distributed systems. Rating: 9

    Concurrency supportthe 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 with specific concurrency support. Ada 95 has improved concurrency support over Ada 83, and it has also introduced a Real-Time Systems Annex. This has better specified the required implementation of a useful model of concurrency. Rating: 8

    Distributed system supportthe extent to which inherent language features support the construction of code to be distributed across multiple platforms on a network.

    Ada 95 provides specific support for distributed systems through the Distributed Systems Annex. Rating: 5

    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. Ada 95 also has hierarchical libraries. The full object-oriented capabilities can have both good and bad effects on maintainability, but, if used properly, object-oriented programming will improve maintainability. Rating: 9

    Mixed language support the extent to which inherent language features support interfacing to other languages.

    Ada 95 has a standardized interface mechanism and provides an Interface to Other Languages Annex. Rating: 8

    Object-oriented programming support the extent to which inherent language features support the construction of object-oriented code.

    Ada 95 provides complete support for all aspects of a language generally recognized as making it object-oriented—encapsulation of objects and their operations, inheritance, and polymorphism. Ada 95 also provides support for other programming paradigms, so an individual Ada 95 program will not necessarily be object-oriented. Rating 10

    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. Rating: 8

    Real-time supportthe extent to which inherent language features support the construction of real-time systems.

    Ada features provide support for specifying time and space constraints. Ada 95 has a Real-Time Systems Annex that specifies the language definition for the implementation of real-time features. Rating: 7

    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. Rating: 9

    Reusability the extent to which inherent language features support the adaptation of code for use in another application.

    Ada supports reusability with language features supporting code clarity (making code understandable), encapsulation (making code adaptable), maintainability, and portability. Ada 95 also supports object-oriented programming and hierarchical libraries. Rating: 8

    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]. Ada 95 has a Safety and Security Annex. Rating: 6

    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 95 has been standardized by ANSI and ISO in a much different fashion than other languages, with compilers developed after the language was standardized. The expectation is that every Ada 95 compiler will be validated against the standard, and the compilers will follow the standard without adding non-standard features to the language definition, just as is the case with Ada 83. 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.

    Ada requirements were developed explicitly to support good software engineering. Rating: 9


< Previous Page Search Contents Tables Next Page >

Sections
1 2 3 4 5 6 7

Appendices
A B C D E F G H J
K L M N P Q R S