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:
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:
| Test | 20% | |
| Projects | 50% | |
| Final exam | 25% | |
| Homework & attendance | 5% |
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: