Colby College

CS 361 Object-oriented Design
Syllabus

Spring 2008
2:30 - 3:45 MW, Olin 234
Instructor: Dale Skrien
Office: 404 Mudd, ext. 5851, e-mail: djskrien
Home phone: 623-3909 (8am-8pm)
Office hours (tentative):
11-2 Tues
2-4 Fri

Course Web page: http://www.cs.colby.edu/djskrien/cs361

Texts:

  1. Object-Oriented Design using Java, by Dale Skrien
  2. Design Patterns in Java, by Steven Metsker (recommended)

Prerequisites: CS 151 and CS 231.

Course Outline: I wanted to call this course "Shivers of Joy", since it is an indication of what I want to accomplish by the end of the semester. That is, I want you to learn how to write elegant code (that will "send shivers of joy up and down my spine"). In CS151 and CS231 you learned how to use Java classes and how to send messages to objects and you even learned a little about subclasses, inheritance, and polymorphism. But in those courses, little time is spent on discussing which of the various possible ways of organizing your code into classes and method is the best one for solving a given problem. In this class, you will learn certain design techniques, such as role playing, design patterns, and the use of UML to help you design elegant code.

Except for this class and occasional other upper level courses, our department offers very little in the way of introducing you to programming in the large, as opposed to programming in the small. If you are to get a job in the computer industry after graduation, it will almost surely not involve you writing a small program from scratch. Instead, you will be asked to modify (enhance or debug) a moderately large or very large program. In this class, you will get experience working with such programs. More precisely, in this class you will write, through a series of projects, a moderately large program from scratch over the course of the semester, each project an enhancement of the previous one. That way you'll get experience designing new code as well as maintaining and modifying existing code.

Software: In this course, we will use Java as the programming language. You are welcome to use any Java development environment and any hardware platform you wish. However, you will be using Java's Swing package and will be analyzing a moderately large body of code, so I recommend that you use an industrial-powered package.

BlueJ, which you may have used in 151 and/or 231, does not handle large projects very well. Two good free environments are Netbeans and Eclipse. Because of their many features, it takes time to learn to use them effectively. To help ease the transition from BlueJ to Netbeans, there is a new Netbeans BlueJ edition that you might like to try if you have only used BlueJ. Note: If you have questions about Eclipse or Netbeans, you are welcome to ask me but I am not an expert with it. I use an environment called "IntelliJ Idea" that costs $99 for academic use (students & faculty) and is somewhat similar to Eclipse and Netbeans in features.

Homework: There will always be text material to be studied. Also homework exercises may be assigned, in which case they should be done before the next class meeting. These exercises will be collected, corrected, and returned. Homework provides an opportunity to learn from your mistakes without penalizing honest effort. Therefore the homework portion of your final grade will be based on whether or not you regularly hand in reasonable attempts at the assignments. That is, I will grade you on whether you worked hard and tried to solve the problems, not whether you actually managed to come up with a correct solution. In some of the homework assignments, you may be required to work with other students.

Projects: As mentioned above, there will be a series of programming projects. I've tentatively scheduled one every few weeks or so. These projects will form a significant part of your grade since one of the best ways to learn about OO design is to design and implement your own programs. Almost every project will be a group project, with groups of 2 or 3 students.

Exams and Grades: There will be one mid-semester exam (announced at least one week in advance). I'm not yet sure whether it will be a take-home or in-class exam. There will also be a final exam, which may just consist of another project (to be done individually instead of in teams). The course grade will be determined as follows:

 Test20%
 Projects50%
 Final exam25%
 Homework & attendance5%

The minimum grade you will receive is shown below. Grades may be raised and plusses or minuses added at the instructor's discretion.

 90-100%A
 80-89%B
 70-79%C
 60-69%D
 below 60%F

Classroom activity: Before each class, I will expect you to do any assigned homework and to review the material from the previous day. Since the new material always depends on previously covered material, reviewing will help you understand the new material as it is presented in class. Also, before each class, I expect you to read (but not necessarily completely understand) the section of material to be covered in the next class. This will help you develop skills in reading and understanding written materials. There will be many opportunities in class for discussion and you will not be able to participate if you haven't reviewed the old material and read the new material. During discussions, I do not expect you always to give correct explanations or answers to my questions, but I do expect you to try to give reasons for your answers.

Attendance: You are expected to attend every class. As a class member, your regular attendance is a social, as well as an individual, obligation. Class discussion is an essential feature of this course that only you can provide. Your absence affects the continuity of the class, my effectiveness in presenting ideas, and the group's responses to those ideas. Therefore, unexcused absences will adversely affect your course grade. Flagrant absenteeism will result in your failing the course. You are responsible for all information presented in class, whether or not you are there.

Academic dishonesty: You may discuss homework or project assignments with classmates, but all work you turn in must be your own.  For a complete discussion of my expectations, please read "Expectations of Working Together and Individually". In addition, I expect you to help minimize the opportunities for others to succumb to the temptation to cheat. In particular, I expect you to remove all of your code from public machines after every session.

Late assignments: I am giving you about twice as much time as I estimate you will need to write each of your programming projects. Therefore I will accept no excuse for not handing in your project solutions on time, except for the excuse of being sick more than half the time given for the assignment. Each day your program is late, your score on that program will be reduced by one full letter grade below what you would have received if it had been handed in on time. If you think you may be ill during the second half of the time given for the assignment or if you have a sporting event that will take time away from studies during the second half of the time given for the assignment, then you better plan to finish the assignment in the first half of the time given for the assignment.

Active Learning: Please come see me any time you have questions. Office hours are the best time to come by, but feel free to come by at other times too, although just before class is usually a bad time to reach me since I am busy with last-minute class preparations. Please feel free to make an appointment if you prefer. Many of the concepts we will cover build on each other. If you find yourself stuck trying to understand something, it will only make catching up later that much worse. Whether you are aware of it or not, one of the advantages of Colby over larger colleges and universities is that we have relatively small classes, and we have faculty who are willing to take the time to help you learn when you ask. It frustrates us when we miss opportunities to pull students out of confusion.

Miscellaneous Information:

  1. If you come across a Java class that you are unfamiliar with, you should know how to look up documentation on that class on the Web or in a Java book. There are several Java books available for your use in the Mudd lab and in the Science Library and the CS361 course's home page lists several sources for information on the Web. If you have trouble finding the documentation you need, feel free to come see me, but I expect you to try to look up the documentation yourself first.
  2. I'm always happy to help you with any of the programming projects. However, I want you to make a substantial attempt at figuring it out yourself first. Also, the earlier you come to me with questions, the happier I'll be to help you (I usually respond to a last-minute call for major help with the question "Why didn't you start earlier?").
  3. In addition to coming by my office for help, you are welcome to send me email with a question. I read my email very frequently (especially on Thursdays when I am off campus) and try to respond to such questions as soon as I read them. I often send a copy of the email (with the original questioner's identity removed) if the question is one that I think the whole class might like addressed.
  4. Please feel free to raise any concerns or complaints about the course directly with me. You are also welcome to send me your concerns anonymously. I will gladly respond to them.
  5. Of course it should go without saying that you are required to keep a backup copy of any work you submit to me. If the code you submit to me is somehow lost (through your fault or my fault), I must be able to get another copy from you.
  6. It should also go without saying that you should never leave your work on a computer in a public lab. Instead your work should always be copied to your own storage device (flash drives or other media) and deleted from the computer's hard disk when you are finished using the computer.
  7. Don't gloss over errors in your code. That is, if you pretend there are no errors in your code when you know there are some there, I will take off more points than if you point out the errors that you were unable to fix.
  8. Whenever you print a hard copy of anything for me, I am requiring you to use both sides of the page to save trees. To save even more trees, print two pages on each side of the paper. My eyesight is still good enough that I can read the small print.