Revised Jan. 28, 2014
CS 247: Software Engineering Principles
General description
This course introduces systematic methods for designing, coding, testing, and documenting medium-sized programs. Major topics include abstraction, modularity, software modeling, object-oriented programming and design, generic programming, and testing and debugging.Logistics
Audience
- 2B Software Engineering students
Normally available
- Spring
Related courses
- Predecessors: CS 241, Software Engineer students only
- Successors: CS 457 and most 3rd year CS major courses
- Co-requisites:
- Conflicts:
Software/hardware used
- UNIX, C++, Java
Typical reference(s)
- Bruce Eckel, Chuck Allison, Thinking in C++ Volumes 1 and 2, Prentice Hall, 2003
Required preparation
At the start of the course, students should be able to- Demonstrate knowledge learned in CS 137/138 and CS 241 by being able to program in C/C++ (structures, strings, procedural abstractions, pointers, addresses, recursion). No knowledge of object-oriented programming is assumed.
- Explain container Abstract Data Types (lists, stacks, queues, trees) as they were used in CS 138 and CS 241.
- Write functional specifications (pre / post conditions) as they were used in CS 138.
Learning objectives
At the end of the course, students should be able toTypical syllabus
Module Design (12 hours)- ADT design, function and operator overloading
- Modules and interfaces
- Namespaces
- Interface specification
- Composite objects
- OO design principles and patterms
- Multiple inheritance and mixins
- UML modelling
- Incremental development (make)
- Testing and debugging (gdb)
- Version control (e.g., svn)
- STL algorithms
- Iterators