CS 246 - Object-Oriented Software Development

Course Outline

Course Personnel and Office Hours


Name Contact Office Hours
(all times EDT)
Caroline Kierstead ctkierst@uwaterloo.ca M 3-4:30pm
T 3-4:30pm
On Virtual Classroom on LEARN
Gregor Richards gkrichar@uwaterloo.ca Th 10am-noon, 2-4pm
On Virtual Classroom on LEARN
Gustavo Fortes Tondello gfortest@uwaterloo.ca W 2-3pm
On Virtual Classroom on LEARN

Instructional Support Apprentices (ISA)

Name Contact Office Hours
Benjamin Chen cs246@uwaterloo.ca MW 11am-1:30pm
On Virtual Classroom on LEARN
Jane Jiang cs246@uwaterloo.ca MT 8-10pm, Th 9-10pm
On Virtual Classroom on LEARN

Instructional Apprentices (IA)

Name Contact Office Hours
Joseph Istead jwistead@uwaterloo.ca F 8:30-10pm
Sun 8:30-10pm

Instructional Support Coordinator (ISC)

Name Contact
Patrick Roh proh@uwaterloo.ca
Contact for questions regarding verification of illness or other documents, enrollment, alternative arrangements, or other administrative questions.

Course Description

This course introduces students to basic UNIX software development tools and object-oriented programming in C++ to facilitate designing, coding, debugging, testing, and documenting medium-sized programs. Students learn to read a specification and design software to implement it. Important skills are selecting appropriate data structures and control structures, writing reusable code, reusing existing code, understanding basic performance issues, developing debugging skills, and learning to test a program.

Course Objectives

At the end of the course, students should be able to:

Course Overview

This course will teach the following topics:

Core Topics

These are the essential topics, which all passing students should have learned by the end of the course. Knowledge of these topics will make you a competent C++ / object-oriented programmer, although some of your solutions may not be the most effective until you also learn some of the advanced topics.

Advanced Topics

These topics will make you a better C++ / object-oriented programmer. Although you may be able to solve most problems at the expected level by the end of the course without knowledge in these topics, your solutions will likely be better if you also learn these topics.


The primary means for announcements is the course newsgroup on CS246 Piazza. There may be announcements posted on the course website.

Please direct questions to the course newsgroup. If there is a good reason not to use the newsgroup (e.g., personal matters, a question that might reveal part of a solution, etc.) either create a private post or email the IA or instructor directly via email.



There will be five regular assignments and a course project, in addition to a preliminary assignment (A0). A0 is due on Wednesday, May 20 and it is not graded, but you must complete it before you start working on the other assignments. It is designed to get you familiar with the most basic aspects of working with Linux, and with assignment submission.

Regular Assignments

All the regular assignments have two due dates and a quiz date. In the first due date, you will submit the first part of the assignment, which is usually focused on preparing the tests for the second part. In the second due date, you will submit all the remaining tasks of the assignment, which are usually focused on coding. By the quiz date, you will need to complete an online quiz on Learn focused on the same topics as the assignment.

Assignment Topic Due Date 1 Due Date 2 Quiz Due Date Final Grade Weight
A1 (core) Linux May 27 June 3 June 5 10%
A2 (core) Core ++ and Testing June 10 June 17 June 19 10%
A3 (core) Introduction to OOP June 24 July 2 July 3 15%
A4 (core) Inheritance and basic design patterns July 8 July 15 July 17 15%
A5 (advanced) Advanced C++, OOP, and SE July 22 July 29 July 31 20%

Note that the assignments are also classified into core and advanced, following the same classification of the topics. To pass the course, you need to have a weighted average of at least 65% in the core assignments (A1-A4) by the end of the term.

During the period reserved for A5 (July 18-29), all students will have two options:

The rationale for this choice is that, as explained in the section Course Overview, we expect all passing students to have learned the core course topics well. In addition, learning the advanced topics requires a good understanding of the core topics. Therefore, students who are struggling with the core topics should benefit more from taking a bit more time to develop their understanding of those topics instead of trying to learn more advanced (and difficult) topics. In particular, if you did not obtain a weighted average of at least 65% on your first submission of A1-A4, you have the opportunity to resubmit one or two of them to increase your core assignments grade so you can pass this portion of the course requirements.

Note that you must chose option 1 or 2, i.e., you can resubmit up to two of A1-A4 (due date 2) or submit A5 (due dates 1 and 2), not both. Also, the possibility of resubmission is only for the second part of the assignments (due date 2). You cannot retake the first part of the assignments (due date 1) or any of the past quizzes. Therefore, even if you choose to resubmit A1-A4 instead of submitting A5, you must still take the A5 quiz by July 31.

Final Project

The final project also has two parts, with two due dates, but there is no quiz.

Assignment Topic Due Date 1 Due Date 2 Final Grade Weight
Final Project All Topics August 5 August 15 25%
This is a final object-oriented design and programming assignment, in which you can use any of the skills you learned in the course.

The final project can be completed alone or in groups of 2-3 students. You will be allowed to choose one between a few options of small applications or games (TBA) to implement. Some of these options will be designed to be completed by a student working alone and some designed to a group of students. If you decide to work on a group, you must choose a group-sized project (i.e., you cannot work on a group on a small individual-sized project). If you decide to work alone, you can choose any option, but we strongly suggest you choose one of the individual-sized options, otherwise you may find that the requirements are too extensive to be completed by a single person in the available time.

Students who decide to work on a group will be responsible for forming and managing the group. Instructors will not be able to help you find a group, manage your work, or solve any conflicts. However, you are free to use Piazza to post communications to help you find a group.

Participation Marks

The remaining 5% of your course grade are participation marks. To obtain participation marks, you must submit one suggestion of a quiz-style question (with answers) for each module of the course. This will let us see that you have accessed and demonstrated at least a basic understanding of each module of the course.

Grading Scheme

Your final course grade will be calculated from the following components and weights:

Component Final Grade Weight
Assignments (A1-A5) 70%
Final Project 25%
Participation 5%
Total 100%

To pass the course, you must satisfy these three conditions:

We will apply the following algorithm to determine your final course grade:

CoreA  = (A1*0.1 + A2*0.1 + A3*0.15 + A4*0.15) / 0.5
Normal = A1*0.1 + A2*0.1 + A3*0.15 + A4*0.15 + A5*0.2 + Project*0.25 + Participation*0.05

if ( CoreA < 65% ) {
    CourseGrade = min (Normal, 46)
} else if ( Project < 30% ) {
	CourseGrade = min (Normal, 46) 	
} else {
    Course Grade = Normal

Our goal is that competent students, who by the end of the term have obtained a good understanding of all the core topics in the course, but not necessarily of the advanced topics, to be able to achieve a course grade of 70-80 without an exceptional amount of effort. Our goal is that students who finish the course with a grade between 70-80 will be competent C++ / object-oriented programmers, who will be able to solve any problem given to me at this competence level, although maybe their solutions may not be the most effective without more knowledge of the advanced topics. If this is your goal for this course, you may choose to focus more on the core topics and assignments and less on the advanced ones, and maybe consider skipping Assignment 5. The rationale, as mentioned before, is that is probably more beneficial to take the time to learn the core topics well if needed, instead of trying to study the advanced topics without a proper understanding of the core ones.

Students who finish with a grade between 50-70 will have demonstrated enough knowledge to pass the course and move forward on their program. However, they should consider that the lost marks may be due to a lack of understanding on some of the core topics. Therefore, if this is your case after the term, we suggest that you seek to identify which are the topics that you may have missed and continue studying them on your own, otherwise, you may note in the future that the gap in your knowledge may be detrimental to your studies in future courses.

To finish with a course grade above 80, students will need to demonstrate some knowledge of the advanced topics in addition to a great understanding of the core topics. Our goal is that students who finish the course with a grade above 80 will be exceptional C++ / object-oriented programmers at this level, who will be able to use the best design and implementation solutions to solve any problem.

Mental Health

If you or anyone you know experiences any academic stress, difficult life events, or feelings like anxiety or depression, we strongly encourage you to seek support.

On-campus Resources

Off-campus Resources


It is our intent that students from all diverse backgrounds and perspectives be well served by this course, and that students' learning needs be addressed both in and out of class. We recognize the immense value of the diversity in identities, perspectives, and contributions that students bring, and the benefit it has on our educational environment. Your suggestions are encouraged and appreciated. Please let us know ways to improve the effectiveness of the course for you personally or for other students or student groups. In particular:

Academic Integrity

In order to maintain a culture of academic integrity, members of the University of Waterloo community are expected to promote honesty, trust, fairness, respect and responsibility. All members of the UW community are expected to hold to the highest standard of academic integrity in their studies, teaching, and research. The Office of Academic Integrity's website contains detailed information on UW policy for students and faculty. This site explains why academic integrity is important and how students can avoid academic misconduct. It also identifies resources available on campus for students and faculty to help achieve academic integrity in - and out - of the classroom.


A student who believes that a decision affecting some aspect of his or her university life has been unfair or unreasonable may have grounds for initiating a grievance, as outlined by Policy 70 - Student Petitions and Grievances. When in doubt please be certain to contact the department's administrative assistant who will provide further assistance.


A student is expected to know what constitutes academic integrity, to avoid committing an academic offence, and to take responsibility for his or her actions. A student who is unsure whether an action constitutes an offence, or who needs help in learning how to avoid offences (e.g., plagiarism, cheating) or about 'rules' for group work/collaboration should seek guidance from the course instructor, academic advisor, or the undergraduate Associate Dean. For information on categories of offences and types of penalties, students should refer to Policy 71 - Student Discipline Students may also view the University's Guidelines for the Assessment of Penalties.

Avoiding Academic Offenses

Most students are unaware of the line between acceptable and unacceptable academic behaviour, especially when discussing assignments with classmates and using the work of other students. For information on commonly misunderstood academic offenses and how to avoid them, students should refer to the Faculty of Mathematics Cheating and Student Academic Discipline Guidelines.


A decision made or penalty imposed under Policy 70 - Student Petitions and Grievances (other than a petition) or Policy 71 - Student Discipline may be appealed if there is grounds to do so. A student who believes he or she has a ground for an appeal should refer to Policy 72 - Student Appeals.

MOSS (Measure of Software Similarities)

MOSS is used in this course as a means of comparing students' assignments to ensure academic integrity. We will report suspicious activity, and penalties for plagiarism/cheating are severe. Please read the available information about academic integrity very carefully.

Note for Students with Disabilities

The AccessAbility Services (AAS), located in Needles Hall, Room 1401, collaborates with all academic departments to arrange appropriate accommodations for students with disabilities without compromising the academic integrity of the curriculum. If you require academic accommodations to lessen the impact of your disability, please register with them at the beginning of each academic term.

Intellectual Property

Students should be aware that this course contains the intellectual property of their instructor, TA, and/or the University of Waterloo. Intellectual property includes items such as:

Course materials and the intellectual property contained therein, are used to enhance a student's educational experience. However, sharing this intellectual property without the intellectual property owner's permission is a violation of intellectual property rights. For this reason, it is necessary to ask the instructor, TA and/or the University of Waterloo for permission before uploading and sharing the intellectual property of others online (e.g., to an online repository).

Permission from an instructor, TA or the University is also necessary before sharing the intellectual property of others from completed courses with students taking the same/similar courses in subsequent terms/years. In many cases, instructors might be happy to allow distribution of certain materials. However, doing so without expressed permission is considered a violation of intellectual property rights.

Please alert the instructor if you become aware of intellectual property belonging to others (past or present) circulating, either through the student body or online. The intellectual property rights owner deserves to know (and may have already given their consent).