CSE 332S: Object Oriented Software Design Laboratory

Spring 2008

[What] [Who] [Where] [When]
[Prerequisites] [Message Board] [Textbooks] [Lectures] [Labs]
[Grading] [Collaboration]

What's New?

Lab 5 ...
... is ready.
Lab 4 is ready
Lab 4 is ready. Try to get through the Qt tutorial before break, so that it's fermenting in your brain as you lie on the beach.
Lab 3 is ready
Although you have a couple of weeks to finish it, check it out and get started now.
Lab 1 is out
Beat the rush and get it here.
Joining the 20th century
We've finally joined the last century, and are no longer using a newsgroup for the class. We now have a message board for the class. Check it out, and let us know what's broken.
Web page
The web page for the Spring 2008 edition of this class is (partially) up. The remaining content, including the lecture schedule, will be added shortly. [16 January, 2008]


What

The main goal of this course is to make you comfortable with programming in C++, and to give you practice writing, debugging, and testing programs in C++. The course will cover the syntax of C++, good programming practices, debugging, unit testing use of Makefiles, and using the Standard Template Library.

From the course catalog:

Formerly CS 342S. Intensive focus on practical aspects of designing, implementing and debugging object-oriented software. Topics covered include developing, documenting, and testing representative applications using object-oriented frameworks and C++. Design and implementation based on frameworks are central themes to enable the construction of reusable, extensible, efficient, and maintainable software. Prerequisites: CSE 132/CS 102G and 241.


Who

Instructor:      Bill Smart, wds@cse.wustl.edu
Office Hours:      Lopata 516
     by appointment
Teaching Assistants:      Douglas Li, lidouglas@gmail.com      Craig Szczesiul, cas2@cec.wustl.edu
Office Hours:      Lopata 400      Lopata 400
     Wednesday, 5:30pm to 7:00pm      Monday, 5:30pm to 7:00pm
     Thursday 5:30pm to 7:00pm      Thursday, 2:30pm to 4:00pm


Where and When

Classes

Lectures will be held in Lopata 101, on Tuesdays and Thursdays from 11:30am-1pm.

Labs

Both labs are held in Lopata 400, the linux lab.
    Lab A: Tuesday, 1:00pm-2:30pm
    Lab B: Tuesday, 2:30pm-4:00pm


Prerequisites

  1. CS 102G or CSE 132, Computer Science II.
  2. CSE 241, Algorithms and Data Structures.
  3. Proficiency with Java (e.g., from CSE 132), C, C++, or other general-purpose industrial-strength programming language.
  4. Working knowledge of UNIX/Linux programming interface (shell) and tools. If you don't have this knowledge, a willingness to learn rapidly is sufficient. We'll use Linux in the labs.


Message Board

All questions about the course material must be asked on the class message board. If you see a question you know the answer to on the newsgroup, then answer it.

The grading staff will monitor the board and attempt to answer questions as quickly as possible. However, any technical questions mailed directly to the instructor or the TA will be ignored. If you have a specific problem, then it's likely that someone else does too. Asking the question on the newsgroup archives the answer, and it means that the grading staff doesn't need to answer the same question 30 times.

Get into the habit of reading the board daily. Important messages about the class will be posted there. "But I didn't read the board" is not a valid excuse. If you have a problem interacting with the message board, then let us know immediately.

Obviously, if you have a question or concern of a personal nature, you should mail this directly to the TA or the instructor. Also, bear in mind the academic integrity policy when posting and answering questions.


Textbooks

[austern book image] [prata book image] [deitel book image] The official textbook for the course, available at the bookstore is "C++ How to Program", Deitel and Deitel, 6th edition, Pearson/Prentice Hall, 2008. The book has a
web page, from which you can access additional resources (if you've bought a paper copy). This is a textbook, and has a relatively gentle introduction to C++.

if you consider yourself to be a strong programmer in some other language, you might want to consider another pair of books, instead of Deitel. These books are much more like references, and have less of a tutorial flavor than Deitel does. However, if you're going to be a serious C++ programmer, you will probably end up with these books on your shelf at some point. They will not be in the bookstore, but the Austern book is the text for CSE 532 this semester, so you might be able to grab a spare copy if there's one left over.

  1. "C++ Primer Plus", Stephen Prata, 5th edition, SAMS, 2004.
  2. "Generic Programming and the STL", Matthew H. Austern, Addison-Wesley, 1998.

Just to be clear, you don't need both sets of books. You should pick either Deitel or Prata and Austern.


Lectures

The lectures will cover two broad areas: useful programming tools and techniques, and object-oriented programming with C++. The schedule for the class is given below. Reading assignments are given for each topic from Deitel, and Prata or Austern.
[January] [February] [March] [April] --->
Meeting Date Topics Reading Labs Assigned Links
1 January 15 Admin
Introduction to C and C++
Deitel: ch 1
Prata: ch 1
Lab 0 Advice for CS Students
Teach yourself programming in 10 years
2 January 17 How the compiler works
The preprocessor
Deitel: pp 14, appendix F
Prata: ch 1, pp 19-26
3 January 22 Memory management
Primitive data types
Pointers
Deitel: appendix C, ch 8
Prata: ch 3, ch 4, pp 144-171
Lab 1 Pointer joke
Seg fault joke
Slides
4 January 24 Function calls
Input/Output in C
Deitel: ch 6
Prata: ch 7
5 Janaury 29 C++ types
C++ loops, conditionals, and operators
Deitel: ch 4, 5, 8
Prata: ch 3, 5, 6, 9
Lab 2 Slides
6 January 31 C++ classes
Makefiles
Deitel: ch 3
Prata: ch 3, 5, 6, 9
Slides
7 February 5 Pointers and references
Lab 1 debrief
Slides
Lab 1 example solution
Some thoughts on programming
8 February 7 Lecture cancelled
9 February 12 Guest Lecture: Prof. Gill
Strings in C and C++
Deitel: ch 18 Slides
10 February 14 Guest Lecture: Prof. Grimm
Lab 2 debrief
Code
11 February 19 Inheritance and Polymorphism
More overloading
Deitel: ch 11, 12, 13
Prata: ch 10, 11, 12, 13
Lab 3 Slides
More slides
12 February 21 Templates Deitel: ch 14
Prata: pp 370-388, 744-777, 801-805
Slides
More slides
13 February 26 The Standard Template Library (STL)
STL Containers
Deitel: ch 22
Prata: pp 877-889, 905-922, 1095-1102
Slides
More slides
Even more slides
14 February 28 STL Iterator
Deitel: ch 22, Appendix I, Appendix J
Prata: pp 890-905
Slides
15 March 4 Integrating with the STL
Makefiles
Lab 4
16 March 6 Exceptions
STL Algorithms
Slides
More Slides
March 11 Spring Break
March 13 Spring Break
17 March 18 Design Example: The Randomizer
18 March 20 Design Example: The Randomizer
19 March 25 STL Function Objects
Slides
20 March 27 Design Example: Happy primes Lab 5
21 April 1 Traits in the STL
Design Example: Happy primes
Slides
22 April 3 Design Example: Happy primes
23 April 8 Debugging
24 April 10 Design Example: Happy primes
25 April 15 Summary: What you should remember from this class Lab 6
26 April 17
28 April 24


Labs

There will a number of programming labs in this class. Your performance in these labs will form the majority of your grade. Labs will increase steadily in difficulty, scope, and value as the semester progresses. Unless otherwise specified, labs are to be submitted electronically. For each lab, the assignment will include a list of deliverables, and the procedure for submitting your work. You are required to follow these instructions.

Labs are to completed individually, unless we tell you otherwise in the lab description. You should submit your work by the due date listed on the assignment. Labs submitted up to 24 hours after the posted deadline will be graded with a 10% penalty. Labs submitted between 24 and 48 hours late will be graded with a 20% penalty. Work submitted more than 48 hours late will not be graded, and you will receive a 0 for that assignment. If you have a valid reason for needing a deadline extension, get in touch with the instructor in advance to discuss it. Deadline extensions after the fact will not be given.

You may discuss general questions related your projects with other students on the newsgroup. While you are encouraged to post and ask for help on particular problems you may encounter during an assignment, you must design and implement your own solution. In particular, while posting small fragments related to specific questions is allowed, direct sharing or "reuse" of code is forbidden, unless we explicitly tell you otherwise.

Lab      Assigned      Due      Points      Example Solution
Lab 0
January 16 January 23, 11:59pm See assignment
Lab 1
January 22 January 28, 11:59pm 5% solution
Lab 2
January 29 February 7, 11:59pm 5% solution
Lab 3
February 19 March 4, 11:59pm 20% solution
Lab 4
March 4 March 25, 11:59pm 20% solution
Lab 5
March 28 April 11, 11:59pm 20%
Lab 6
April 15 May 5, 11:59pm 30%


Grading Policy

The late policy for the class is 10% per day late, up to a maximum of three days. If you're more than three days late on an assignment, you get zero points for that assignment. If you have some valid reason for needing more time on an assignment, then you should contact me at least two days before the deadline to request an extension. Last-minute requests will only be met in exceptional circumstances.

In calculating your final grade for the class, you will have the option of discarding the grade for one of labs 3, 4, and 5, and replacing it with the average grade of the other two. For example, if you choose to discard your lab 3 grade, it will be replaced by the average grade for labs 4 and 5.


Collaboration Policy

Everything that you turn in for this class, and your answers on all of the quizzes and exams must be your own work. If you willfully misrepresent someone else's work as your own, you are guilty of cheating. Cheating, in any form, will not be tolerated in this class.

If you are guilty of cheating on any assignment, quiz, or exam, you will be penalized the number of points that the assignment is worth. For example, if you cheat on an assignment worth 10% of the final grade, you will be receive -10% for that assignment. If you copy from someone else in the class both parties will be penalized, regardless of which direction the information flowed. Two or more instances of cheating in the course will be referred to the School of Engineering Discipline Committee, and will result in an F in the class.

We will follow the guidelines of the University Undergraduate Academic Integrity Policy, but we reserve the right to make the final determination of what constitutes cheating for this class. If you suspect that you may be entering an ambiguous situation, it is your responsibility to clarify it before the professor or TAs detect it. If in doubt, please ask.


Page written by Bill Smart.