CSE 332S: Object-Oriented Software Development Laboratory

Professor: Chris Gill
Office Hours: Cupples II 300 (Studio/Lab Area) Wed 1-5pm, or Bryan 506 by appointment
Contact Info: phone: (314) 935-7538 e-mail: cdgill@cse.wustl.edu
Message Board: I will also frequently read and respond to postings on the course message board (http://classes.engineering.wustl.edu/cse332/bb).

Fall 2009

This page is available through: http://classes.cec.wustl.edu/~cse332/
and through: http://www.cse.wustl.edu/~cdgill/courses/cse332/

Final Exam: Friday December 11, 6 - 8 pm, Cupples II 217


Contents

  1. Course Description
  2. Prerequisites
  3. Times and Locations
  4. Teaching Assistants
  5. Message Board  (Click here to go directly to the message board.)
  6. Discussions/Sessions
  7. Labs
  8. Coding Standards
  9. Textbooks and Other Resources
  10. Grading
  11. Cheating


Course Description

This course will expose you to the syntax, semantics, and standard libraries of the C++ language; to common C++ design and implementation idioms; and to many opportunities to apply the knowledge and idioms you learn through hands-on studio exercises and projects in C++.

All programming in this course will be done in C++, a language in which you can combine the object-oriented, procedural, and generic programming ideas with which you'll gain experience throughout the semester. Since many students enter this course with experience in Java but not C++, the early portion of the syllabus is designed to give you a breadth-first experience of the major capabilities and features of C++ and to assist your progress up the rest of the C++ learning curve.


Prerequisites


Times and Locations

Discussions: Tuesdays and Thursdays, 10:00 to 10:30 am in Cupples II 217
Studio sessions: Tuesdays and Thursdays, 10:30 to 11:30 am in Cupples II 300 attic studio space
Lab sessions: Wednesday afternoons in the Cupples II 300 attic studio space

There will not be a lab session on Wednesday August 26, and the first class meeting will be at 10am on Thursday August 27, in Cupples II 217. Following a presentation of the course structure and syllabus that day, you will head upstairs to the Cupples II 300 attic studio space to make sure your login works on the Windows machines there, or to address any problems that may occur.

After that introductory meeting, each 90 minute class meeting on Tuesdays and Thursdays (except on Oct 15 and 20 and Dec 8 when the midterm review, midterm exam, and semester review will be held respectively) will consist of 30 minutes of presentation and discussion (in the Cupples II 217 classroom) of the main issues to consider for that day's topic, followed by a hands-on studio session (in the Cupples II 300 attic studio space) for the remaining 60 minutes that day.

Lab sessions, during which you will have dedicated time and our assistance for working on your lab assignments, will be held on Wednesdays from 1-3pm and 3-5pm in the Cupples II 300 attic studio space.


Teaching Assistants

The teaching assistants will be available during the scheduled studio and lab sessions, to answer questions about the programming assignments and to offer advice as you develop and debug your solutions.

The professor and teaching assistants will read and respond to postings on the course message board (http://classes.engineering.wustl.edu/cse332/bb).


Message Board

Please submit ALL questions, and concerns of public nature, to the class message board (http://classes.engineering.wustl.edu/cse332/bb). Please answer other people's questions on the message board!

Please do not e-mail technical questions to your professor individually: instead, please post on the message board for all to see, consider, and respond.

Please note that the message board is a vital part of your CSE 332 experience. Participation in the message board (i.e., quantity and quality of your posts) will count toward your participation grade.

If you have trouble accessing the message board, please let us know right away!


Discussions/Sessions

The discussions and studio sessions will emphasize three main themes: C++ language syntax and semantics; procedural, object-oriented and generic programming techniques; and mastery of useful programming and debugging tools and techniques.

In addition to class meeting dates and topics, page numbers for reference material in the optional textbooks will be provided as we go through the semester. These are intended as an index to useful material to read at your discretion: while reading all of the page ranges given for both books is possible, skimming them followed by a more focused selection of which to read in-depth based on the ease with which you are able to digest and apply the material is likely a more effective use of your time.

Although the sequence of topics listed is a good guide to the course content overall, it may be adjusted somewhat as the semester progresses to emphasize, de-emphasize, or inter-relate certain topics depending on the progress and interests of the students in the course. If you are finding a given topic very easy or very difficult, please let your professor know.

Date Topic Reference Material
Thu, Aug 27 Course introduction and syllabus
(slides in ppt)
 
Tue, Sep 1

Lab 1 assigned
C++ program structure and development environment
(slides in ppt)
(studio exercises in pdf)
Prata pp. 19-64;
Deitel 6th Ed. pp. 14-23, 44-63;
Deitel 7th Ed. pp. 13-24, 40-59
Thu, Sep 3 C++ data types, namespaces, input, and output
(slides in ppt)
(studio exercises in pdf)
Data types
Prata pp. 65-143;
Deitel 6th Ed. pp. 81-117, 334-358, 1270-1271;
Deitel 7th Ed. pp. 68-102, 283-303, 1009-1010

Namespaces
Prata pp. 424-437;
Deitel 6th Ed. pp. 1241-1244;
Deitel 7th Ed. online chapter 24.4 (once the companion website is made available by Pearson Higher Ed.)

C++-style strings
Prata pp. 857-872;
Deitel 6th Ed. pp. 620-624;
Deitel 7th Ed. pp. 756-772

STL vectors and lists
Prata pp. 878-889, 910-913;
Deitel 6th Ed. pp. 379-384, 1080-1083;
Deitel 7th Ed. pp. 323-328, 930-942

Input and output
Prata pp. 951-1032;
Deitel 6th Ed. pp. 777-808;
Deitel 7th Ed. pp. 645-673, 716-721
Tue, Sep 8 C++ functions, classes, and templates
(slides in ppt)
(studio exercises in pdf)
 
Thu, Sep 10 C++ functions and the call stack
(slides in ppt)
(studio exercises in pdf)
Prata pp. 279-340, 362-365;
Deitel 6th Ed. pp. 245-311;
Deitel 7th Ed. pp. 208-262
Tue, Sep 15

Lab 2 assigned
C++ debugging
(slides in ppt)
(studio exercises in pdf)
(example code: prefix_adder.h prefix_adder.cpp Makefile)
 
Thu, Sep 17 C++ exceptions
(slides in ppt)
(studio exercises in pdf)
Prata pp. 805-827;
Deitel 6th Ed. pp. 818-828, 829-831;
Deitel 7th Ed. pp. 683-693, 695-697
Tue, Sep 22 C++ pointers, arrays, and references (slides in ppt)
(studio exercises in pdf)
Prata, pp. 144-150, 156-166, 340-355, 361-362;
Deitel 6th Edition, pp. 333-486;
Deitel 7th Edition, pp. 282-377
Thu, Sep 24 C++ memory management (slides in ppt)
(studio exercises in pdf)
Prata pp. 150-156, 166-171, 420-423, 827-829, 837-839;
Deitel 6th Edition pp. 557-559, 836-839, 948;
Deitel 7th Edition pp. 476-478, 701-701, 809
Tue, Sep 29

Lab 3 assigned
C++ classes (slides in ppt)
(studio exercises in pdf)
Prata pp. 355-358, 445-499, 515-517;
Deitel 6th Edition pp. 81-117, 487-557;
Deitel 7th Edition pp. 68-102, 395-423, 430-453
Thu, Oct 1 Memory management for C++ classes (slides in ppt)
(studio exercises in pdf)
 
Tue, Oct 6 More on C++ memory models and memory management idioms
(slides in ppt)
(studio exercises in pdf)
 
Thu, Oct 8 C++ subclassing and inheritance polymorphism
(slides in ppt)
(studio exercises in pdf)
Prata pp. 358-361, 633-743, 787-801, 829-834, 839-852;
Deitel 6th Edition pp. 640-753, 832-836;
Deitel 7th Edition pp. 521-567, 572-621
Tue, Oct 13 C++ function and operator overloading (slides in ppt)
(studio exercises in pdf)
Prata pp. 365-370, 502-515, 518-524;
Deitel 6th Edition pp. 289-292, 578-628;
Deitel 7th Edition pp. 248-251, 466-509
Thu, Oct 15 Review for midterm exam
(slides in ppt)
(sample questions in pdf)
(sample code files for memory management studio exercises:
   memory_management.cpp
   safe_ref_counted_guard.cpp
   safe_ref_counted_guard.h
   scope_detector.cpp
   scope_detector.h)
 
Tue, Oct 20

Lab 4 assigned
Midterm exam 10:07-11:30am, in Cupples II 217
Thu, Oct 22 Generic programming techniques in C++
(slides in ppt)
(studio exercises in pdf)
Prata pp. 890
Deitel 6th Edition pp. 1059-1060
Deitel 7th Edition pp. 917-919
Tue, Oct 27 interface polymorphism with C++ templates
(slides in ppt)
(studio exercises in pdf)
Prata pp. 370-388, 744-777, 801-805
Deitel 6th Edition pp. 292-294, 756-771
Deitel 7th Edition pp. 251-253, 628-641
Thu, Oct 29 More template examples and ideas
(slides in ppt)
(studio exercises in pdf)
 
Tue, Nov 3 C++ STL containers in depth (slides in ppt)
(studio exercises in pdf)
Prata pp. 877-889, 905-922, 1095-1102
Deitel 6th Edition pp. 1060-1064, 1071-1094
Deitel 7th Edition pp. 919-923, 930-952
Thu, Nov 5 C++ STL iterators in depth (slides in ppt)
(studio exercises in pdf)
Prata pp. 890-905
Deitel 6th Edition pp. 1064-1069
Deitel 7th Edition pp. 923-928
Tue, Nov 10

Lab 5 assigned
C++ STL algorithms in depth (slides in ppt)
(studio exercises in pdf)
Prata pp. 930-933, 1102-1128
Deitel 6th Edition pp. 1069-1071, 1099-1130
Deitel 7th Edition pp. 928-929, 957-987
Thu, Nov 12 C++ STL functors in depth (slides in ppt)
(studio exercises in pdf)
Prata pp. 922-930
Deitel 6th Edition pp. 1134-1137
Deitel 7th Edition pp. 991-994
Tue, Nov 17 More on C++ associated types, typedefs and traits (slides in ppt)
(studio exercises in pdf)
Prata pp. 210 (bottom of the page), 1075-1076
Deitel 6th Edition pp. 780, 1066-1069
Deitel 7th Edition pp. 856-857, 925-928
Thu, Nov 19 Combining STL and other C++ features (slides in ppt)
(studio exercises in pdf)
 
Tue, Nov 24 C++ STL case study (combining containers, iterators, algorithms, and function objects)
 
Wed, Nov 25, and Thu, Nov 26
Thanksgiving holiday (no lab sessions or classes)
Tue, Dec 1 Design Patterns I
Guest lecturer: Prof. Smart
 
Thu, Dec 3 Design Patterns II
Guest lecturer: Prof. Smart
 
Tue, Dec 8 Semester summary and review for final exam (last day of classes)
 
Fri, Dec 11
Final exam 6-8pm, Cupples II 217


Labs

There will be 5 lab assignments in this course. Labs will increase in length, difficulty, and value throughout the semester.

Labs are to be submitted electronically, and will be graded and returned to you electronically as well. Each lab submission requires a separate file containing a lab report writeup. Each assigment web page will describe the procedure for submitting the lab, along with the report format and content requirements. Use of this process is required.

Labs, like the studio exercises, will be performed in teams of 2 or 3 people. You should please submit your code and a lab report for each lab by its advertised due date and time shown on the course web page and the lab assignment web page. Labs submitted within 24 hours after the posted deadline will be accepted with a 10% penalty up front, and labs submitted between 24 and 48 hours after the posted deadline will be accepted with a 20% penalty up front. Labs submitted after that will not be graded, except in the case of documented extenuating circumstances.

You may discuss general questions related your projects with other students in lecture and labs, during lecture and lab hours respectively, and on the message board. While you are encouraged to post and ask for help on particular problems you may encounter during a project, you must design and implement your own solutions, and prepare your own reports. In particular, while posting small code fragments related to specific questions is allowed and encouraged, direct sharing, viewing, or other "reuse" of complete code files (especially if done covertly) is strictly forbidden. If you're not sure whether or not sharing a given section of code is ok, please ask your professor's permission before doing so.

The following labs have been assigned so far in the course:


Coding Standards

Many organizations impose coding standards on programmers, and these standards can range from general principles to very specific requirements. In this class, part of the grade for each programming assignment will be based on the following CSE 332 Programming Guidelines, which are intended to build good programming habits that will help avoid common mistakes and help make your programs more readable and better organized and documented. As the course progresses, we may extend this list of guidelines (we'll mark new ones as they're added, and point out relevant ones for each programming assignment), so please review it before starting each new programming assignment.


Textbooks and Other Resources

In addition to class meeting dates and topics, page numbers for suggested readings in the following optional textbooks are shown for each of the class meetings. These texts are intended as resources to supplement the studio, lecture, and lab periods:

In addition to the required textbook, the following texts may be useful and interestingadditions to your programming library:

On-line information sources (please feel free to suggest other good ones):


Grading

As a rough guideline, 90-100 has historically been the A range, 80-89 the B range, and so on, though depending on the complete distribution the specific grade division points (and addition of + or - qualifiers to the grades near the boundaries) may vary.

See the Labs section for a discussion of the labs and how they will be graded.

The midterm and final exams will be comprehensive: each will cover the material up to that point in the course. The best way to study for the exams is to keep up with the studio exercises and programming assignments during the semester, and to ask lots of questions in classroom, studios, and on the message board throughout the semester.

The final grading component is an evaluation of your participation in the class, and of your application of the tools and techniques discussed in class and labs. This component is separated out to:

  1. broaden the evaluation criteria,
  2. reduce the weight of the exams a bit, and
  3. encourage active participation in discussions/sessions, labs, and on the message board.

Labs 50 %
   Lab 1:  5 %
   Lab 2:  5 %
   Lab 3:  10 %
   Lab 4:  10 %
   Lab 5:  20 %
Midterm exam 15 %
Final exam 25 %
Participation   10 %


Cheating

Cheating is the misrepresentation of someone else's work as your own, or assisting someone else in cheating, and will not be tolerated in this course.

For this course, examples of cheating include but are not limited to:

This is a very serious matter. Anyone found cheating will at a minimum lose points equal to the assigned value for the assignment in question (for example if an assignment were worth 10% of the course grade then -10% of the course grade would be assigned), or possibly receive an F for the course. Further action may be taken in extreme cases, possibly including referral to the School of Engineering and Applied Science's formal academic integrity review process.

Furthermore, our policy is that we will make the final determination on what constitutes cheating. If you suspect that you may be entering an ambiguous situation, it is your responsibility to clarify it before we detect it. If in doubt, please ask.

To ensure this policy is implemented consistently and fairly, and that any problems are detected and addressed as early as possible, we may make use of automated program similarity checkers to assess uniqueness and independence of submitted program solutions.