Software Engineering

As one of the most recent general-purpose programming languages to be developed, Java incorporates characteristics that support many modern software engineering practices. We’ve known for many years that certain programming techniques lead to software of higher quality in terms of particular attributes such as reliability, efficiency, reusability, robustness, portability, and maintainability. However, earlier languages did not always provide strong support for those techniques. Java, in several ways, provides the means to develop high quality software.

Among the language-based issues that should be addressed in terms of software engineering concepts are: advanced control flow, such as exceptions, events, and threads; class design techniques; system design techniques, including multiple polymorphic mechanisms and formal system interfaces; user interface design issues; interpretation vs. compilation; and the realities of the goal of system independence.

Independent of any particular programming language, techniques for software design, requirements analysis, testing, and configuration management have improved over time. For example, the Unified Modeling Language (UML) has recently become a de facto standard in design notation and approach. Software pattern identification and incorporation has also recently become a popular and useful technique. It is important for any new programming language to relate to such technologies. We therefore also discuss how Java can be used in the exploration of these issues.

Note that while Java supports the creation of quality software, the burden is still on the developer to capitalize on them. The use of any given programming language cannot, in itself, guarantee a particular level of quality. We do not see Java as a panacea that will solve the ills of software development, which is an idea that has been promoted too often in biased writings on the subject. However, we do see Java as a tool that can facilitate an upward spiral toward continued improvement if used appropriately. The role of the educator, therefore, is critical to producing developers that know how to use the tool effectively.

The following sections explore in detail how Java can be used to promote particular software engineering tenets and techniques, and suggest methods by which educators can communicate these ideas to students effectively. We also explore resources, including software tools and web-based information, that support the use of Java toward the ends of software engineering.


System Independence

Probably the most promoted facet of Java is its goal of platform independence. Phrased as "write once, run anywhere," it was hoped that the language would be inherently portable. This feature is based in the fact that Java source code is interpreted into an architecture-neutral form called bytecode, and executed in a software environment called the Java Virtual Machine (JVM). Any system that has a JVM can execute Java bytecode, no matter where the bytecode was developed.

Students must be made aware to what extent this goal has been obtained, and to what extent it has not.

More, more, more…




Because of Java’s interpreted nature, and because the classes needed by a program are dynamically loaded, Java suffers in terms of execution efficiency. The benefits of these characteristics must be weighed against the price paid to accommodate them.

More, more, more…

Modularity and Encapsulation






Advanced Control Flow



User Interfaces



Unified Modeling Language







Java Developer Connection

Jcampus (many other academic resources can be obtained from this site)