Let's take a closer look at Java as a programming language. What separates Java from other object-oriented languagesC++ in particularis the fact that Java is not just a compiled language but an interpreted language. In other words, while other compilers break down source code into machine-readable code that an operating system can use, the Java compiler creates an intermediate language called byte code. A built-in interpreter can then read this byte code. We say "built-in" because the interpreter can be added to a browser or any operating system of choice. Thus, just about anything can run Java, once you have the interpreter.
Java is also a "true" object-oriented language. Other languages such as C++ simulate objects, while every data structure defined within Java must actually be defined within an object or class. This is what gives Java its power. This distinction (for programmers familiar with traditional modular programming techniques) is the key to understanding the difference between the old world of software engineering and the new! Prior to object-oriented programming, data was created, manipulated, and embedded deep within a program and its code. Data was only as good as the program that defined it. But since OOP encapsulates data, it frees it from the restriction of a given program by using the built-in memory-addressing schemes of any computer processor. Dataand whatever actions you can perform on that dataare entities in and of themselves. A data structure called Dog can be hairy, black, and short. You can make it bark, sit up, and roll over. You can make it hairless, red, and as big as a Great Dane. You can create a Dog in a program that tells you the weather, finds statistics on cats, or simply provides an interesting web page to somebody's site on dogs. All this, and programmers who use the Dog classes don't need to know a single line of code that constitutes the class. They do need to know the program's interface; that is, what parameters it expects and what kind of data to return. But this is nothing new to the procedural programmer. With this in mind, classes of objects can be created anywhere, anytime, by anyone. If their interfaces are known, they can be used anywhere, anytime, by anyone. Real-world applications, no matter how large or complex, can be written, expanded upon, chopped down, and re-created infinitely, with different programmers in different places at different times.
Seems like a software development manager's dream, doesn't it? In fact, it can be. But like anything else involving technology, that's not always how it is.