Before starting the design goals directly, I think we should have some idea about the back ground on which java design goals are based. Before Java, C++ was the language of choice for modern development of applications and it was perfect for a long time. But the growth of the Internet, the World-Wide Web, and “electronic commerce” has introduced new dimensions of complexity into the development process for new applications. Now the application is not only restricted to desktop, it should be available in the web in a distributed environment. And the ever changing demand cannot be met using old languages. So the thinking process started to develop a completely new programming environment to meet all the needs to modern application development.
Following are the eleven design goals of java programming language. Java designers have made the design keeping these goals in mind. We will describe each goal in details.
- Object Oriented
- High Performance
- Architecture Neutral
From the above list we can see that Java Programming Language Environment provides a portable, interpreted, distributed, high performance, simple, secured, object-oriented programming language and supporting run-time environment.
The design and development of Java started as part of a research project to develop some advanced software for a wide variety of distributed networked devices and embedded systems. The purpose of this project was to develop a small, reliable, flexible, portable and distributed real-time development environment.
The design requirements of Java environment are mainly guided by the nature of the computing and deployment environment where the application will run.
In the internet edge, it was an absolute requirement that the application should run in the web and accessible from anywhere at any point of time. So the massive growth of World-Wide Web leads us to a completely new paradigm of looking at development and distribution of software. Another important feature is to develop a secured application which will live in the web yet secured enough to use in electronic commerce transactions. So java was designed as a platform to support high performance, robust and scalable applications running in a distributed networked environment.
The traditional schemes of binary distribution, release, upgrade, patch are no longer valid for applications running on multiple platforms on heterogeneous networked environment, So to survive in this new environment, Java must be architecture neutral, platform independent, portable and dynamically adaptable in different environment.
The Java system developed to meet these internet age requirements is simple so that the developers can easily learn and apply it. So it is made object oriented so that it can take advantage of modern software development methodologies and comfortable into distributed client-server applications. It is made multithreaded for high performance in applications that need to perform multiple concurrent activities simultaneously. It is interpreted which makes it portable and dynamic.
Figure 1: Design Goals of Java
The following section will describe each related features in details.
Simple and Object Oriented
Primary thinking was to make a simple language which the developers can learn easily without extensive programmer training and also make it compatible to current software practices. After learning fundamental concepts programmers can be productive from the very beginning.
Java environment was designed to be object oriented in nature. The Object technology has finally found its independent way into the programming world after a long time of research and development. The requirement of distributed application development and client-server based systems coincide with the encapsulated, message driven paradigms of object oriented software. To function properly in the ever increasing complex, network-based environments, the application must be developed on object-oriented concepts. Java follows a clean and efficient object-based programming environment.
As a result the developers can access existing libraries of tested java objects that provide wide range of functionalities ranging from basics to complex network and UI programming. Flexibility is that the libraries can also be extended to provide new functionalities.
For easy migration java follows C++ features excluding the unnecessary complexities. So the developers found it easy to learn and implement.
Robust and Secure
In the age of internet and World Wide Web it is an absolute necessity to develop robust and reliable application especially in electronic commerce environment.
So Java is designed to create highly reliable and robust application. It provides double level checking starting with compile-time and followed by a second level of run-time checking. The highly optimized and proven language features guide developers towards reliable programming practices. The memory management controlled by JVM removes the fear of pointer management and memory leaks. The developers can develop Java applications with confidence that the system will take care of errors quickly and that major issues will not surface at the production time.
Another objective of Java design was to make it operate in distributed environments, so the security concerns are of high importance. As a result the security features of java are designed into the language and run-time system itself so it is secured from the foundation. In the networked environment also java applications are equally secured from intrusion by unauthorized code attempting to get into the system and making it vulnerable.
Architecture Neutral and Portable
Another main objective of java design was to make it architecture neutral so that it can be run and deployed on heterogeneous platform and networked environments. In this type of environment, the application must be capable of executing on different hardware and operating system.
To make java capable of running on different operating environments, the Java compiler generates byte codes which is an architecture neutral intermediate format designed to make it compatible on multiple hardware and software platforms. As a result the interpreted nature of Java environment solves both the binary distribution and version problem.
The Java Virtual Machine (JVM) is a combination of architecture-neutral and portable feature of java environment.JVM is basically the specification of an abstract machine for which Java compilers can generate code and it runs within the environment. The JVM specification is based on POSIX interface specification which is an industry standard definition of Portable System Interface. So the implementation of JVM for any target architecture is simple if the target system supports the basic requirement of the virtual machine.
For any application especially which are distributed and internet enabled, performance is always a major consideration. The Java environment achieves high performance by adopting a mechanism which helps it to run in full speed without checking the run time environment. The garbage collectors runs in a separate thread ensuring timely release of memory and hence improve the performance.
After discussing the major goals behind java environment development we can conclude that developing your applications using Java results in portable, secure, robust application which can be run on any hardware/software environment. Using java, the developers can focus on the main functionalities instead of taking care of other tasks like memory management, security etc.