his textbook is intended for a first course on Object-Oriented Programming (OOP) in an undergraduate program in Computer Science, Computer Engineering, or Information Systems. The text presents the fundamentals of OOP and software engineering (S/E) using the Java™ programming language but it does so in a rather revolutionary way.
The book adopts a novel approach to teaching programming: Instead of the conventional bottom-up approach in which students first learn how to write simple programs and then move on to build systems, the book proposes that students first learn how to build systems from ready-made components and then look "under the hood". Hence, CS1 would use this book to teach students how to use components (i.e. be clients), and CS2 would use any other book to teach students how to build components (i.e. be implementers). This seemingly trivial order reversal (first learn to use and then to implement) has, the author argues, paramount pedagogic implications.
· Promotes System Thinking: Students learn that you don't have to understand how something works in order to use it. This allows them to manage complex systems by viewing them as assemblies of building blocks. It also prepares them to deal with situations in which some details are unknown or subject to change.
· Shifts the Emphasis: By presenting component implementation first, the traditional approach invariably leaves students with the impression that "how" is superior and "what" is shallow. In contrast, the book's approach makes architecture, problem solving, and specification the central themes, and treats clients and implementers as completely separate roles.
· Makes Programming "Fun": Given that powerful ready-made components abound, students can build "cool" applications quickly and this makes them eager to learn. And once they become comfortable with using a component, they will be curious to know how it works, which makes the "how" part equally exciting. In the traditional approach, the bottom-up journey is long and can leave some confused or disinterested.
For our students to build tomorrow's reliable and sophisticated systems, we must teach them to start with today's components and build on them; not to spend time reinventing the wheel.