In this course, we will emphasize program construction techniques, also called design patterns, that lead to flexible and extensible software systems. For now, you can think of a design pattern as a style of writing that leads to elegant code.
In this course, we will build a Java model of a simple hardware machine, called the Duck Machine.
The exercise of building the Duck Machine will serve several purposes:
Date | Topic | Lab due |
M 3/29 | Introduction | |
W 3/31 | Data as objects: Abstract Classes; Basic Inheritance | |
F 4/2 | Duck Machine: Words | |
M 4/5 | Duck Machine: ALU; Interfaces | Lab 0: CIS 210 Review |
W 4/7 | Data as objects: Object instances | |
F 4/9 | Data as objects: Exceptions are objects | |
M 4/12 | Duck Machine: Memory | Lab 1: ALU |
W 4/14 | Throwing and Catching Exceptions | |
F 4/16 | Objects: Scope vs Lifetime | |
M 4/19 | Review; Quiz | Lab 2: Memory |
W 4/21 | Duck Machine: CPU and IO | |
F 4/23 | Streams (API) | |
M 4/26 | Duck Machine: Instructions; Interpreter Pattern | Lab 3: IO |
W 4/28 | Advanced Inheritance: Types vs Classes | |
F 4/30 | Midterm | |
M 5/3 | Advanced Inheritance: Types vs Classes | Lab 4: Instructions |
W 5/5 | Visitor Pattern | |
F 5/7 | Visitor Pattern | |
M 5/10 | Duck Machine: Putting it Together; Quiz | Lab 5: Central Processing Unit, Interpreter |
W 5/12 | Review or Advanced Java Topic | |
F 5/14 | Review or Advanced Java Topic | |
M 5/17 | Recursion: Data as Objects again | Lab 6: Machine |
W 5/19 | Recursion: Mathematical Foundations; Puzzles | |
F 5/21 | Recursion: Binary Trees | |
M 5/24 | Recursion: Iteration | Lab 7: Advanced Machine |
W 5/26 | Recursion: Linked Lists | |
F 5/28 | Recursion: Linked Lists | |
M 5/31 | Memorial Day | Lab 8: Recursion |
W 6/2 | Summary; Perspective; Future | |
F 6/4 | Final Review; Teaching Evaluation | |
U 6/10 | Final exam from 1:00 PM to 3:00 PM |
A word of warning: This course does not follow one textbook. Instead there are three main sources of information: the lectures introduce programming concepts; the books are references for you to consult about specific points you want to understand in greater detail; and the labs put these concepts into practice.
I rarely hand out complete solutions to homework problems. Instead I am always available for questions: I will explain the underlying concepts as many times as needed, give hints to the solution, and encourage you to develop your own solutions.
Resources:
sabry@cs.uoregon.edu