• Unit 1: The Building Blocks of Object-Oriented Programming

    Being familiar with both C++ and Java, you are ready to explore more advanced topics in Object-Oriented (OO) Programming. We will begin by discussing the motivation behind programming with objects, learning the essential characteristics of OO Programming languages and identifying the advantages and disadvantages of various major programming frameworks. The unit will also provide a general history of OO Programming and review major characteristics of OO Programming. By the end of this unit, you will be able to discuss different programming paradigms and identify the main properties of OO Programming.

    Completing this unit should take you approximately 12 hours.

    • 1.1: Programming Paradigms

      Early in computer science history, functional programming was the practice of choice. This is normal given the reason for the first practical computer to be built, to perform time-consuming calculations faster. Functional programming grew into modular programming so that it would be possible to group associated and oft-used calculations into callable modules. Modular programming gradually evolved into object-oriented programming, the main approach used today. We begin with functional programming and then move into object-oriented. Whichever programming approach is used, the general computing paradigm has several aspects: the task to be performed; a strategy for how the task will be performed; transformation of the strategy into a detailed strategy that corresponds to activities that a computer can perform; implementation of the strategy as a set of instructions that can be executed by a computer; and validation that the results of the execution perform the task in a satisfactory manner. In software engineering, these aspects are called requirements analysis, architecture and design, program code, and validation. As approaches evolved from functional to modular to object-oriented, these still support the general paradigm. A programming language, while supporting a particular paradigm, typically may support other paradigms as well.

    • 1.2: Generic Programming and Late-Definition of Data Types

    • 1.3: Fundamental Concepts of Object-Oriented Programming

      As we saw in 1.1, object-orientation has nothing to do with computer languages, although such languages can be used to implement such worldviews for computer applications. Once you gain the knowledge and experience to see take a larger view, to see beyond the syntax of a particular language, you will gain the ability to debug programs written in languages you have never seen before. In this subunit, we dig deeper into the object-oriented perspective and its implementation in Java and C++.

      • 1.3.1: Practice Using Classes and Objects

      • 1.3.2: Practice Using Inheritance

    • 1.4: Insights from Experienced Programmers

    • Unit 1 Assessment