CS 300, Software Design

Class meetings
11:00 - 11:50 MWF, Olin 124
Janet Davis <davisj@whitman.edu>, Olin 118, 509-527-5758
CS 270 or equivalent
Object-Oriented Programming Using Java by Dale Skrien, Colby College
Course site


About this course

Welcome to CS 300, Software Design! In CS 167 and 270, you learned how to program in Python and C++. You learned about objects and classes, and you may have learned about inheritance and polymorphism. But you may not have spent a lot of time talking about how to decide which of several possible ways to organize your code into classes and methods is best for solving a given problem, which will be a major topic of conversation this semester. In CS 167 and 270, you wrote a new program every week or two. In this course, you will develop one moderately large program. With each new assignment, you will have to deal with the consequences of the decisions you made before.

The official course description:

What makes code beautiful? We consider how to design programs that are understandable, maintainable, extensible, and robust. Through examination of moderately large programs, we will study concepts including object-oriented design principles, code quality metrics, and design patterns. Students will learn design techniques such as Class-Responsibility-Collaborator (CRC) cards and the Unified Modeling Language (UML), and gain experience with tools to support large-scale software development such as a version control system and a test framework. Students will apply these concepts, techniques, and tools in a semester-long, team software development project.

This course addresses some of the content typical to a Software Engineering course. Steve McConnell '85, author of Code Complete and Rapid Development, has identified software design as the single aspect of software engineering most important for liberal arts students to understand. Computer Science majors will learn about other software engineering topics, particularly requirements analysis and project management, in the 1.5-semester capstone project (CS 495/6).

This course will be regularized as CS 370 and will be required for the forthcoming Computer Science major. Credits from this course count towards the Computer Science minor.

Learning goals

In this course, you will:


In this course, we will be programming in Java. Because you will be developing a larger program, I expect you to use an industrial-grade integrated development environment (IDE) and version control system (VCS).

We will start out using NetBeans, an IDE written in Java and distributed by Oracle, the company that currently owns Java. As you get comfortable programming in Java, you may want to try something more powerful, such as Intellij IDEA (currently the most popular IDE for Java) or Eclipse (the most popular until quite recently). All three IDEs are installed on the instructional Linux cluster.

For version control, we will take some time to learn Git and GitHub during the second week of class.

If you want to use your own computer for the course project, you will need to install JDK 8, as well as Git and your IDE of choice. To see whether you have the correct version of Java installed, open a terminal or command window and type "java -version." You should see several lines of text indicating you are running Java version 1.8. Be sure to install the ful JDK 8, not just JRE 8.

Finally, we have the privilege of testing a new Learning Management System (LMS), Schoology, which may be chosen to replace CLEo. I will be trying out various Schoology features in this course. In particular, I plan to use it for assigning and grading homework. You will be able to find your course grades on Schoology, rather than CLEo.


Assignment due dates are firm. The schedule of chapters and topics is tentative and subject to change.

Jan 17

Jan 23

Java Crash Course; Git

Jan 30
1-2 JavaFX; Elegant software; OOP
Project 0 due Sunday, January 29
Feb 6
UML; FXML & CSS; threads; inheritance
Project 1 due Tuesday, February 7
Feb 13
More inheritance; pair programming
Project 2 due Tuesday, February 14
Feb 20
Access control; why inheritance?
Project 3 due Sunday, February 26
Feb 27
When (not) to inherit?

March 6
Style; functional decomposition
Project 4 due Friday, March 10
Spring break
March 27
Documentation; case study; refactoring

April 3
Object-oriented analysis; design principles
Project 5 due Thursday, April 4
April 10
Object-oriented design principles Project 6 due Sunday, April 16
April 17
Object-oriented design principles; case study

April 24
Design patterns
Project 7 due Tuesday, April 25
Exam Friday, April 28
May 1
Design patterns; case study
Project 8 due Thursday, May 4
May 8

Last day of class!
Project 9 presentations Saturday, May 13, 9 - 11 a.m.

Learning activities

Class meetings

You are expected to attend and actively participate in class. I am expected to make class worth attending.

Participating in class involves:

I expect you to contribute actively to small-group activities and class discussions. I also expect you to do homework regularly so that you are prepared to contribute in class. Each will count as a small component of your final grade.

If your participation or non-participation causes problems for other students, I will invite you to visit office hours to discuss the issue.

Some advice: Take the right amount of notes. Take notes by hand rather than typing. You need to be active in class, working through problems we are doing together on the board or in small groups. Research suggests that the most important part of taking notes is to process new ideas and decide what to write down. Don't feel like you have to transcribe everything we write on the board; in fact, this may get in the way of your processing.


There will nearly always be something new to read in order to inform our class discussions. I will also ask you to do small programming and research exercises, which we will discuss in class.

Homework is due one hour before class time (10 a.m. MWF), so that you are prepared for class and so that I can respond to what you have written. I will grade homework as follows:

You are strongly encouraged to develop and review your solutions in collaboration with other students. For some exercises, you may be required to work with other students.


In addition to daily readings and exercises, you will have project assignments due every 1-2 weeks. These projects will constitute over half of your grade since one of the best ways to learn about object-oriented design is to design and implement your own programs.

Every project assignment will be a team assignment, with teams of 2-4 students. I will assign teams before Spring Break, and you will choose your own teams for the project assignments after Spring Break.

After the first two assignments, every assignment will build on the previous assignment. Each project team will share their work with each other and with me through a GitHub repository.

Every project assignment will include a written reflection.

I am giving you about twice as much time as I estimate you will need to complete each project assignment. Moreover, we will often discuss projects in class after they are due. Therefore, I expect you to turn in project assignments on time. Unless you make other arrangements with me, I will grade whatever I find in your GitHub repository at the deadline.

My advice is that you aim to complete the requirements of each project assignment in the first half of the time allotted. You can then use the remaining time to achieve stretch goals, refactor your work, or write a particularly thoughtful reflection. This also gives you "extra" time in case of unexpected difficulties.

Exams and quizzes

There will be an in-class quiz approximately every other week. In addition, there will be one exam. We will discuss later whether this will be an in-class exam on Friday April 28 or a take-home exam due on that date.

There will not be a final exam. Instead, we will use the final exam period for presentations of your final project assignment.


Academic Honesty and Collaboration

You are encouraged to discuss concepts, problems, and approaches to solving problems with your classmates. However, all work you turn in must be your own or that of your assigned team. All team members are responsible for work submitted as a team.

If you are having trouble debugging a program you have written, you may show it to a classmate to receive help; likewise you may inspect a classmate's incorrect program to provide help. However, you should not show correct code to a classmate, nor should you look at another students' correct code, unless I direct you to do so.

Significant insights obtained from other students should be acknowledged in solutions to homework exercises or in project write-ups. The suggested acknowledgment format is "[Person X] helped me to [do thing Y] by [explaining Z]."

You may copy unsolicited code found in a book, an online tutorial, or a Q&A site such as StackOverflow. You must include a comment to cite your source (title/author/date or URL). You may be asked to explain the code you copied, so make sure you understand it. If you think you need to copy the code but you don't understand it, please discuss it with me.

For additional perspective, review the Whitman CS guidelines for academic integrity in computer science courses.


If you are a student with a disability who will need accommodations in this course, please meet with either Julia Dunn, Associate Dean of Students (Memorial 325, 509-527-5213, dunnjl@whitman.edu) or Rebecca Frost, Director of Student Success and Disability Support Services (Memorial 325, 509-527-5213, frostr@whitman.edu) for assistance in developing a plan to address your academic needs.

All information about disabilities is confidential. If I receive notification from Ms. Dunn or Ms. Frost that you are eligible to receive an accommodation, I will provide it in as discreet a manner as possible.


You are expected to attend every class. Class is time for learning and practice which you cannot obtain by reading someone else's notes. Moreover, we depend on the contributions and partnership that only you can provide. Clearly, you cannot participate if you are not in class.

I will excuse your absence if you have a legitimate reason to miss class and you manage your absence responsibly:

Getting help

Do make a substantial effort to work out problems with the project assignments on your own, but don't stay stuck for too long before you ask for help. Keep this advice in mind: You Must Try and Then You Must Ask.

You are welcome to email me questions about your project work, giving context as described in the blog post linked above. I may be able to respond by email or I may ask you to visit my office.

If you are still having difficulty with concepts or exercises after we discuss them in class, come see me as soon as possible. Many of the concepts in this course build on each other, and if you get stuck on something you don't understand, it will only make it harder to catch up later.

I am also happy to talk with you about topics that might not be of interest to the whole class, such as deeper discussions of course content, related current events, and your interests or career plans.

You are welcome to drop in official office hours posted on my home page, and you may knock any time my door is open. Right before class is usually a bad time for me as I am busy with last-minute preparations. If your need is known at least 24 hours in advance, you are very welcome to schedule an appointment with me for a chat in my office, a walk, or lunch.


The course grade will be calculated as follows:

Type of work
Exam and quizzes
In-class participation

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

Grade   Percentage
A - 90-100
B - 80-90
C - 70-80
D - 60-70
F - 0-60

Janet Davis (davisj@whitman.edu). Some policies are adapted from Dale Skrien's syllabus for CS 361, Object-Oriented Design, at Colby College.

Created January 15, 2017.
Last revised 
This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 United States License.