Fall 2007

**Official Course Description.** *(Somewhat outdated.)* This course
is an introduction to software design and implementation. After a review of
basic programming concepts, students will be introduced to procedural and data
abstraction, object-oriented design, recursion and dynamic data structures.
Abstract data types such as lists, stacks, queues, and trees will be studied.
Algorithms for searching and sorting will be explored along with methods for
comparative analysis. Programming concepts will be demonstrated in a language
like C++. The course will also include an introduction to the Unix operating
system.

**More Accurate Description.** This course covers principles and
techniques fundamental to the design and development of computer programs. This
includes: data abstraction and object-oriented design; elementary data
structures such as vectors, linked lists, stacks and queues; algorithms for
searching and sorting; analytical methods for evaluating the efficiency of
algorithms; and the algorithm design technique of recursion. An object-oriented
language such as C++ and its associated Standard Template Library will be used
to illustrate the concepts and techniques.

**Prerequisites.** Programming experience.

**Location and Times.** Lectures: Snell 175, TuTh 1:00-2:15. Lab: Science
Center 334 (ITL), M 10:00-10:50.

**Instructor.** Alexis Maciel. Science Center 379, 268-2385,
alexis@clarkson.edu.

**Office Hours.** M 2:00-3:00, Tu 2:30-3:30, W 10:00-11:00 (in SC 334), W
2:00-3:00, Th 2:30-3:30.

**Required Text. **None.

**Course Objectives.**

- To teach you principles and techniques fundamental to the design and development of computer software. These include data abstraction, object-oriented design, elementary data structures and algorithms, analysis of algorithms, and recursion.
- To further develop your coding, documentation, debugging and testing skills.

- You will have a good understanding of the principles and techniques mentioned in Objective 1 above.
- You will be able to use them in the design and implementation of C++ programs of a moderate size.
- You will be able to implement elementary data structures including vectors, linked lists, stacks and queues.
- You will understand the importance of using standard software components and will be familiar with the basic data structures and algorithms provided in the C++ Standard Template Library.
- You will be able to analyze the running time of simple algorithms.
- You will be able to implement simple recursive algorithms.
- You will be able to implement and analyze basic algorithms for searching, sorting and, if time permits, tree traversal.

**Topics to be covered.** Data abstraction, classes, object-oriented
design, exceptions, linked lists, vectors, stacks, queues, iterators, templates,
the STL, analysis of algorithms, recursion, binary search, quicksort, mergesort,
sound programming principles. If time permits, inheritance, polymorphism, trees
and binary search trees.

**Grading. **Your evaluation will be based on several homework assignments
(A), which will be mostly programming assignments, two tests (T), two test
corrections (C), one for each test, a final exam (F), and your lab attendance
(L). Your course grade will be computed using the following formula:

The final exam will not be cumulative. At the final exam, you will have the option of writing make-up exams for Tests 1 and 2. Tentative dates for the tests are Thursday, October 11 and Thursday, November 8. These will be evening exams. All students are required to write the final exam (no exemptions).

The lab grade (L) will be based on your attendance of the labs, your
performance on the assignments, and whether you hand in your assignments early.
Details will be given in the *Assignment Policy*.

**Policy for missed work.** There will be no make-up assignments. Late
assignments may be accepted if a good excuse is provided and if arrangements are
made at a reasonable time, in advance, if possible. Make-up tests can be
arranged under the same conditions. Other special arrangements can be made for
students forced to miss more than a few days of class.

**Laptops and other electronic devices.** These are permitted in class
only for the purpose of taking notes. Nothing else. Please turn off your phone
ringers while in class or at the lab.