CS111O. Object-Oriented Programming

Introduces the fundamental concepts programming from an object-oriented perspective. Through the study of object design, this course also introduces the basics of human-computer interfaces, graphics, and the social implications of computing, along with significant coverage of software engineering.

Prerequisites: No programming or computer science experience is required. Students should have sufficient facility with high-school mathematics to solve simple linear equations and to appreciate the use of mathematical notation and formalism.

Syllabus:

Units covered:
PF1 Fundamental programming constructs   7 core hours (of 9)
PF2 Algorithms and problem-solving   2 core hours (of 6)
PF3 Fundamental data structures   3 core hours (of 14)
PF4 Recursion   2 core hours (of 5)
AL3 Fundamental computing algorithms   3 core hours (of 12)
AL5 Basic computability   1 core hour (of 6)
PL4 Declarations and types   2 core hours (of 3)
PL5 Abstraction mechanisms   1 core hour (of 3)
PL6 Object-oriented programming   8 core hours (of 10)
GV1 Fundamental techniques in graphics   2 core hours
SP1 History of computing   1 core hour
SP5 Risks and liabilities of computer-based systems   1 core hour (of 2)
SE1 Software design   2 core hours (of 8)
SE2 Using APIs   1 core hour (of 5)
SE3 Software tools and environments   2 core hours (of 3)
  Elective topics   2 hours

Notes:
This course introduces the fundamental concepts of programming, starting from the very beginning with the object-oriented paradigm. What differentiates this course from the imperative-first implementation in CS111I is the early emphasis on objects. In this course, the discussion of classes, subclasses, and inheritance typically precedes even such basic concepts as conditional and iterative control statements.

To illustrate how this emphasis on objects affects the design of this course, it helps to consider a common sample application -- a simple numeric calculator -- that might reasonably fit into either an imperative-first or objects-first implementation of an introductory course. Under the imperative paradigm, such a program would typically be organized as a loop that repeatedly requested commands from the user and then used a conditional dispatch operation -- typically implemented as a switch statement in C-based languages -- to execute the appropriate code for each operation. An object-oriented approach to the same problem would typically have no explicit loops or conditionals. Instead, the buttons on the calculator would all be part of an object hierarchy. The buttons for the digits, for example, would all be instances of a digit button class whose common action would be to append the appropriate digit to the end of the displayed value; the individual instances of the digit buttons would differ only in the value of the local member variable representing the digit to which that button corresponds. Similarly, the operator buttons would all be part of a separate class hierarchy containing an operate method to perform an arithmetic operation. The plus button would implement one definition for operate; the minus button would implement another. The use of the object-oriented paradigm makes it possible for students to solve this sort of problem far earlier in the course, since the number and complexity of the necessary control structures are significantly reduced.

Most courses that adopt an objects-first approach will do so in an environment that supports a rich collection of application programmer interfaces, or APIs. These APIs can be an enormous help to students, because they enable the creation of much more exciting programs at an early level, thereby heightening student motivation. At the same time, the scale of most API packages can be intimidating to many students, since there are so many classes and methods from which to choose. To mitigate the effects of this conceptual overload, faculty should not hesitate to simplify the problem domain by creating restricted class libraries for introductory use.

Online resources for CS111O


 
CC2001 Report
December 15, 2001