Revised April 28, 2010
CS 246: Object-Oriented Software Development
General Description
Introduction to basic UNIX software development tools and object-oriented
programming in C++ to facilitate designing, coding, debugging, testing, and
documenting of medium-sized programs. Students learn to read a specification
and design software to implement it. Important skills are selecting
appropriate data structures and control structures, writing reusable code,
reusing existing code, understanding basic performance issues, developing
debugging skills, and learning to test a program.
Logistics
Intended for 2A students in Computer Science. Normally
available Fall, Winter and Spring.
Related courses (see calendar for official details)
- Predecessors: CS 136 or 138 (with at least 60%), 145 (before Fall
2011), or 146—programming in C.
-
Successors: CS 240 and CS 241. Through these, most CS upper-year courses.
-
Conflicts: Most courses that develop strong programming skills and the use of
tools to create software.
Software used: Unix, C++.
Typical Reference(s): Course notes.
Required preparation
Students starting the course should have the ability to do the following.
-
Design, implement, test and debug C programs to solve
problems requiring less than a hundred lines of code using types,
variables, arrays, structures, loops, conditionals, procedures,
functions and dynamic memory.
-
Explain basic properties of the C memory model: 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.
Learning objectives
By the end of the course, students should have the ability to
-
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 waterfall model and
other development methodologies.
Typical syllabus
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., GDB), code
management (e.g., make),
version control (e.g., SVN).
Software engineering (8 hours)
development process, design (UML), language
selection, patterns, testing*.
*Note to instructors: if you find yourself short of time, DO NOT drop
the testing aspect; rather skimp somewhere else and present testing properly.


Last modified: Tuesday, 20-Mar-2012 12:02:18 EDT