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.
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.
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.