*Do not use these notes as a substitute for attending class.*
The notes that follow are covering
*material from previous semesters*,
not necessarily exactly what we're doing this semester. If you
read these notes without attending class, they may not make sense to you,
it will take you longer to understand the material, and you won't learn
as much. (Don't be fooled by the high level of detail in the notes for
the first few lectures. These are meant to accommodate students who add
the course late. The notes for later lectures will often have much less
detail.)

The easiest way to learn the material well is to attend class and do the lab assignments carefully, reviewing these notes as needed, in much the same way that you would use your own notes.

*Acknowlegement: A special thanks is owed to Daniel
Schepler, who carefully transcribed much of this material from my handwritten
lecture notes. -- kjg*

**Additional material from this semester's lectures will be posted, as they become available, on the resources pages associated with each of the course modules.**

- Process and Procedure
- Abstraction

Decomposition

Software Systems

Syntax and Semantics

Elements of Programming Languages

Java and Object-Oriented Programming -
Precedence
Rules

Expression Trees

Substitution Model

String Expressions

Boolean Expressions -
Variables

Using Variables in Expressions -
Example:
`areaOfCircle`

Example:`hypotenuse`

Built-in Mathematical Procedures

A Complete Program

Advantages of Procedural Abstraction

Reduction

Example:`rect_diag`Conditional statements

Using the return values from procedures as tests

Good and bad style in writing conditional statements - The
Execution Stack and Activation Records

Call-by-Value -
Example:
`Couple`

Objects as Containers

Methods that Update Instance Variables

Example:`Account`

Objects that Invoke Methods on Other Objects

Example:`Temperature`

Calling Methods from Within an Object

Example:`Sphere`Object -
Forms
of Documentation

Principles of Testing

Taxonomy of Program Errors

Compilation Errors

Run-time Errors

Correcting Compiler Errors

Correcting Run-Time Errors (Debugging) Using a Debugger -
Example:
`CS101Canvas`

Example: Baseball Scorekeeper

Example: Rational Number ADT -
Example:
`factorial`

Example:`add`

Example: Primality Tester

Example: Fibonacci Numbers

Example: GCD -
GCD
Algorithm 1: Brute Force

GCD Algorithm 2: Euclid's Algorithm

GCD Algorithm 3: Dijkstra's Algorithm - Newton-Raphson
Root Finding Algorithm

Finding the New Guess

Determining When We're Close Enough

Putting it All Together -
Exponentation

Fibonacci

Iteration in Graphics - Recursion
over Linked Lists

Iteration over Linked Lists

A List of Numbers ADT

Horner's Method

Data Structures in other ADTs

Example ADT:`Relation`

Stacks

Queues

Circular Lists

- Example:
`BaseNumber`

Example:`Set` -
Representation
A: Linked List

Representation B: Ordered List

Representation C: Sets as Trees - The
Stable Marriage Problem

Class Hierarchies

Technical Issues Surrounding the Class Hierarchy Concept

Polymorphism

Examples of Object-Oriented Design

Kenneth J. Goldman