This course couples work on program design, analysis, and verification with an introduction to the study of data structures which are important in the construction of sophisticated computer programs. Because we will be interested in studying more modern techniques for designing and implementing efficient computer programs, we will be using the object-oriented programming language, Java. We will see that the object-oriented style of programming is extremely useful in designing large, complex programs and supporting reusable software.
One goal of this course is to make you comfortable with using UNIX. To that end we will be using X-Windows running under Mac OS X on Macintoshes available in the Computer Science Macintosh Laboratory in room 217B, TCL, and compiling and executing Java programs using the javac and java commands. Students should use these machines when possible. It will also be possible to install these tools on your own computer, though you will need to download a copy of the structures library to that computer. Later in the semester we will use the free Eclipse IDE in order to take advantage of some tools they provide and their debugger.
Students will be expected to write several programs, ranging from very short programs to more elaborate systems. Since one of our goals in this course is to teach you how to write large, reliable programs composed from reusable pieces, we will be emphasizing the development of clear, modular programs that are easy to read, debug, verify, analyze, and modify.
There will be approximately 10 programs due. All programs will be graded on design, documentation and style (40%), correctness (40%), and efficiency (20%). Programs should be turned in electronically by 11:59 p.m. on the date due (though we typically don't impose the grade penalty for a program turned in within an hour of the deadline). There will be a penalty assessed of 3n % for a program which is n days late. Programs will not be accepted more than four days late. It is usually better to turn in a correct and well-documented program one or two days late than a non-functioning or non-documented program on time.
There will be two in-lab midterm exams, tentatively scheduled for Wednesday, 3/10, and Wednesday, 4/28, plus a scheduled final exam. Homework exercises (non-programming assignments) will be assigned and collected in class periodically and there may be one or two in-class quizzes. The grading will be weighted as follows:
Here is an old first midterm from 1997! While some of the questions include topics we have not yet covered (e.g., Stacks) and mention labs that we no longer cover, it should give you a sense of the kind of questions that I like to ask.
Here is an old second midterm from 1997. Because of a bug in MS Word, the diagrams in question 2 did not come through when saved as a web document, but I hope you can imagine what the heap looks like.
Here is an old final exam from 1997.
This course has two kinds of programming assignments, laboratory programs and team programs.