This course is intended to introduce students to systematic methods for designing, coding, testing, and documenting medium-sized computer programs. The principles will be taught in a practical setting.
CS 247 is a required course for the software engineering plan and is normally completed in a student's 2B term.
Prerequisites: CS 241; Software Engineer students only.
Antirequisites: CS 246, SYDE 322.
Successors: CS 457 and most 3rd year major CS courses.
Used in Course: UNIX, C++, Java.
Assumed Background: Programming skills. Familiarity with UNIX.
Object Oriented Modeling and Design with UML 2nd ed by Blaha & Rumbaugh, Published by Prentice Hall (optional); Effective C++: 55 Specific Ways to Improve Your Porgrams and Designs, 3rd ed by Scot Meyers Published by Addison-Wesley (optional); Absolute C++ 4th ed by Savitch, Published by Addison Wesley (optional).
3 hours of lectures and 1 hour of tutorial per week. Normally available in Spring.
Software engineering. Working in groups.
Basic statements. Object-based C++. Modules, interfaces, packages.
Logic and specification. Pre/postconditions, assertions, invariants, defensive programming. Data abstraction. Black box testing.
Inheritance and polymorphism. Multiple inheritance. Overloading of functions and operators. Basic object model. Constructors and destructors. Garbage collection. Memory management. Namespaces and packages. Higher-level abstractions. Generics. STL. Java collections.
Software design. Object-oriented design. Design patterns. Testing.
Declaring, raising, and specifying exceptions. When to use exceptions.

David R. Cheriton School of Computer Science
University of Waterloo
Waterloo, Ontario, Canada N2L 3G1
Tel: 519-888-4567 x33293
Fax: 519-885-1208
Contact | Feedback: cs-uops@cs.uwaterloo.ca | David R. Cheriton School of Computer Science | Faculty of Mathematics