CS 247 Software Abstraction and Specification


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.

Intended Audience

CS 247 is a required course for the software engineering plan and is normally completed in a student's 2B term.

Related Courses

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.


Overview (1 hr)

Software engineering. Working in groups.

Introduction to C++ (3 hours)

Basic statements. Object-based C++. Modules, interfaces, packages.

Procedural Abstraction (5 hours)

Logic and specification. Pre/postconditions, assertions, invariants, defensive programming. Data abstraction. Black box testing.

Advanced Object-oriented Programming (12 hours)

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.

Programming in the Medium (9 hours)

Software design. Object-oriented design. Design patterns. Testing.

Exceptions (3 hours)

Declaring, raising, and specifying exceptions. When to use exceptions.

Event-Based Programming (3 hours)