Fundamentals of Object-Oriented Programming
(adapted from the
Final Report of the Computing Curricula 2001 project,
a joint undertaking of
the IEEE-CS and the ACM)
Fluency in a programming language is
prerequisite to the study of most of computer science. Students entering a graduate computer
science programs must know how to use at least one programming language well;
and ideally students are competent in languages that make use of at least two
programming paradigms. This knowledge
area consists of those skills and concepts that are essential to programming
practice according to the object-oriented paradigm, though the early material
is actually independent of a paradigm. As a result, this area includes units on
fundamental programming concepts, basic data structures, and algorithmic
processes. These units, however, by no means cover the full range of
programming knowledge that an entering computer science graduate student must
know.
Topics:
- Basic
syntax and semantics of a higher-level language
- Variables,
types, expressions, and assignment
- Simple I/O
- Conditional
and iterative control structures
- Functions
and parameter passing
- Structured
decomposition
- Debugging
strategies
- The
concept and properties of algorithms
- Primitive
types (integers, reals, characters, boolean)
- Arrays
- Strings
and string processing
- Pointers
and references
- Linked
structures
- Implementation
strategies for stacks and queues
- The
concept of recursion
- Recursive
mathematical functions
- Simple
recursive procedures
- Divide-and-conquer
strategies
- Exception
handling
- Object-oriented
design
- Encapsulation
and information-hiding
- Separation
of behavior and implementation
- Classes
and subclasses
- Inheritance
(overriding, dynamic dispatch)
- Polymorphism
(subtype polymorphism vs. inheritance)
- Class
hierarchies
- Collection
classes and iteration protocols
- Sequential
and binary search algorithms
- Quadratic
sorting algorithms (selection, insertion)
Learning objectives:
- Analyze
and explain the behavior of simple programs involving the fundamental
programming constructs covered by this unit.
- Modify and
expand short programs that use standard conditional and iterative control
structures and functions.
- Design,
implement, test, and debug a program that uses each of the following
fundamental programming constructs: basic computation, simple I/O,
standard conditional and iterative structures, and the definition of
functions.
- Choose
appropriate conditional and iteration constructs for a given programming
task.
- Apply the
techniques of structured (functional) decomposition to break a program
into smaller pieces.
- Describe
the mechanics of parameter passing.
- Create
algorithms for solving simple problems.
- Describe
strategies that are useful in debugging.
- Write
programs that use each of the following data structures: arrays, strings,
linked lists, stacks, and queues
- Compare
and contrast the costs and benefits of dynamic and static data structure
implementations.
- Describe
the concept of recursion and give examples of its use.
- Identify
the base case and the general case of a recursively defined problem.
- Compare
iterative and recursive solutions for elementary problems such as
factorial.
- Describe
the divide-and-conquer approach.
- Implement,
test, and debug simple recursive functions and procedures.
- Explain
the difference between event-driven programming and command-line
programming.
- Design,
code, test, and debug simple event-driven programs that respond to user
events.
- Develop
code that responds to exception conditions raised during execution.
- Design,
implement, test, and debug simple programs in an object-oriented
programming language.
- Describe
how the class mechanism supports encapsulation and information hiding.
- Design,
implement, and test the implementation of “is-a” relationships among
objects using a class hierarchy and inheritance.
- Compare
and contrast the notions of overloading and overriding methods in an
object-oriented language.
- Implement
the most common (quadratic) sorting algorithms.