Supported by the Instructional Support Group
University of Waterloo :
Faculty of Mathematics :
School of Computer Science
Current Term (Spring 2012)
|
General Information
|
Announcements
Announcements are posted both here and on piazza.
Announcements are archived regularly throughout the term; view archived announcements.
- Monday 14 May: Assignment 1 has been posted.
- Thursday 10 May: The deadline for the early bonus for A0 has been extended to 10pm on Thursday, May 10. More details are on Piazza.
- Friday 4 May: Office hours have been posted.
- Wednesday 2 May: Assignment 0 has been posted.
Course Description
Introduction to object-oriented programming and to tools and techniques for software development. Designing, coding, debugging, testing, and documenting medium-sized programs: reading specifications and designing software to implement them; selecting appropriate data structures and control structures; writing reusable code; reusing existing code; basic performance issues; debuggers; test suites.
Course Objectives
- Design, implement, test, and debug C++ programs to solve problems requiring hundreds of lines of code, making appropriate use of
- types, variables, arrays, strings, and dynamic memory; loops, conditionals, and other control structures; structures, unions, and enumerations; procedures and functions; the preprocessor; formatted and unformatted I/O;
- classes, objects, overloading, and single inheritance;
- a subset of the STL, including vector, list and map;
- assertions and exceptions;
- basic software development tools, including makefiles, a shell, a revision control system, and a debugger;
- test suites for unit testing, white and black box testing;
- structured programming, incremental development;
- interface design, abstractions, information hiding, cohesion and coupling;
- a subset of UML to specify classes, objects and relationships between them; and
- a selection of design patterns, including adapter and template.
Explain the following properties of the memory model used in C++, including their impact on time and space efficiency when designing code: bytes vs. words, memory as an array, run-time stack and stack frames, memory allocation on the heap vs. automatic allocation on the stack, pointers as memory addresses, the representation of objects in memory.
Define and explain at an elementary level basic software-engineering concepts, including the water fall model and other development methodologies.
Course Topics
- The shell (4 hours)
- file system, pattern matching, quoting, shell/system commands, file permission, redirection, shell programming.
- C++ (16 hours)
- declarations, expressions, control structures, structured programming, preprocessor, I/O, dynamic allocation, objects, overloading, inheritance, templates, STL, separate compilation.
- Unix tools (8 hours)
- compiler, debugging and the debugger(e.g., GCB), code management (e.g., make), version control (e.g., SVN).
- Software engineering (8 hours)
- development process, design (UML), language selection, patterns, testing
Resources
- General
- Unix Tools
- C++
- Design Patterns
- UML