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

Appendix P: JAVA

Java has come upon the language scene with a lot of hype. There is nothing about it that is revolutionary except that it has been targeted specifically for use on the World Wide Web (WWW). However, Java has combined familiar concepts with concepts that have been pioneered by other languages, and the result is an attractive language package. Although it provides the capability to run mini-applications, called applets, on Web browsers, Java is by no means specific just to the WWW domain. It can also be used to run general-purpose stand-alone applications. [Naughton 96] [Rodley 96]

Language Criteria

The following assesses Java with respect to the language criteria presented in the Criteria for a Good Language section in the main document [Naughton 96] [Rodley 96]:

  1. Its definition should be independent of any particular hardware or operating system. Java is completely independent of any particular hardware or operating system.

  2. Its definition should be standardized, and compiler implementations should comply with this standard. Java has had an unusual road to standardization. As with most languages, Java was developed and used before any attempt to get it officially standardized. However, many of the touted benefits of Java are lost unless a standard is strictly followed. Sun Microsystems, who developed Java, has dealt with this very effectively by making Java and its accompanying development tool kit freely available on the Web. Although Java has just recently begun the process of getting standardized through ISO [Sun 97], virtually all Java implementations follow the Sun de facto standard.

  3. It should support software engineering technology, discouraging or prohibiting poor practices, and promoting or supporting maintenance activities. Java was developed largely because C++ could not effectively meet this criterion. Hence, although Java uses C++ syntax and it is object oriented, it is not similar to C++ in other substantial ways. Java both discourages and prohibits poor practices. Maintenance is supported by these characteristics.

  4. It should effectively support the application domain(s) of interest. Java was developed specifically to support WWW applications. However, it is also a general-purpose language. Although it is still a very young language, it 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. Java provides many features which support system reliability. For safety-critical systems, those on which human life may depend, no current language is entirely satisfactory. Java has not been around long enough to be studied for suitability for safety-critical systems. However, since it does not provide formal analysis features, at best it would require a combination with mathematical specification, rigorous analysis, and formal proofs of correctness before it could be appropriate for use in safety-critical systems.

  6. Its compiler implementations should be commensurate with the current state of technology. Java is very sophisticated for such a new language, and it is driving some of the current technology trends. Its Sun compiler implementation is commensurate with current technology.

  7. Appropriate software engineering-based supporting tools and environments should be available. Current Java tool kits contain primarily tools to support code creation, although some software engineering-based tool kits are beginning to appear.

Language Characteristics

In this section, Java is rated with respect to the language characteristics used in Table 2 in the main document [Naughton 96] [Rodley 96]. 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.

Java is strictly object oriented, so its form is very well defined. The code suffers somewhat from the cryptic C syntax forms. Rating: 8

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.

With its object orientation, Java provides for the encapsulation of classes and objects. However, Java 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).

Java provides built-in features for handling threads. Rating: 7

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

Java provides built-in support for distributing components over the WWW. Rating: 7

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 Java support maintainability, such as those which support code clarity, encapsulation, and object orientation. 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.

Java provides for interfacing with other languages by providing wrappers around the code from the other languages. Rating: 5

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

Java provides complete support for object-oriented programming, and it provides no support for any other style of programming. 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.

Java was built for complete portability. Its compiler produces source code in a platform-independent bytecode. The bytecode is then translated at runtime into native machine code for the given platform. Rating: 9

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

Java was not developed for real-time systems. The use of interpreted code trades speed for platform independence. Rating: 0

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.

Java requires the specification of information, the omission of which can make a program unreliable, such as type specifications. Rating: 8

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

Java supports reusability with language features supporting code clarity (making code understandable), encapsulation (making code adaptable), maintainability, and portability. 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.

Java was not developed for safety-critical systems, and its capabilities in that area are unproven. 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.

Java is in the process of ISO standardization. Nevertheless, it is currently a very effective de facto standard, and it is reasonable to expect implementations to follow the standard. Rating: 8

Support for modern engineering methods the extent to which inherent language features support the expression of source code that enforces good software engineering principles.

Java was developed explicitly to support many software engineering principles, including its support for reliability, maintainability, and portability. 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