| Professor: | Chris Gill |
| Office Hours: | Urbauer 214 Mon/Wed 2-3pm, or Jolley 514 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). |
http://www.cse.wustl.edu/~cdgill/courses/cse332/
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.
The first class meeting will be at 10am on Tuesday January 17 for Section 1, or on Wednesday January 18 for Section 2, in Urbauer 218. Following a presentation of the course structure and syllabus that day, we will also make sure each student's login works on the Windows machines there, and address any problems that may occur.
After that introductory meeting, each 90 minute class meeting on Tuesday and Thursday mornings (Section 1) or Monday and Wednesday mornings (Section 2), except for dates when the midterm and final exams will be taken, will be held in Urbauer 218 and will consist of about 30 minutes of presentation and discussion of the main issues to consider for that day's topic, followed by a hands-on studio session for the remaining time that day. The review sessions prior to the midterm and final exams will be held in Urbauer 218, but will occupy most to all of the session (and there will not be any studio exercises assigned on those days).
Lab sessions, during which you will have dedicated time and our assistance for working on your lab assignments, will be held on Wednesdays 1-2:30pm (A) or 2:30-4pm (B) or Mondays 1-2:30pm (C) or 2:30-4pm (D), starting on Monday, January 23. There will not be any lab sessions on the first Wednesday of the semester (January 18).
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).
Please do not e-mail technical questions to your professor or teaching assistants 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) may be considered in your participation grade.
If you have any trouble registering for or accessing the message board, please let us know right away!
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 |
| Tue Jan 17 (Section 1), Wed Jan 18 (Section 2) | Course introduction and syllabus (slides in ppt) |
|
|
Thu Jan 19 (Section 1), Mon Jan 23 (Section 2)
Lab 1 (assigned Mon Jan 23, due 11:59pm Fri Feb 3) |
C++ program structure and development environment (slides in ppt) (studio exercises in pdf) |
Prata 6th Ed. pp. 18-61; Deitel 8th Ed. pp. 17-27, 38-46 |
| Tue Jan 24 (Section 1), Wed Jan 25 (Section 2) |
C++ data types, namespaces, input, and output (slides in ppt) (studio exercises in pdf) (code example directory) |
Data types Prata 6th Ed. pp. 65-153; Deitel 8th Ed. pp. 65-95, 267-286, 1005-1006 Namespaces Prata 6th Ed. pp. 482-497; Deitel 8th Ed. pp. 979-982 C++-style strings Prata 6th Ed. pp. 951-968; Deitel 8th Ed. pp. 696-712 STL vectors and lists Prata 6th Ed. pp. 979-992, 1012-1017; Deitel 8th Ed. pp. 307-313, 863-875 Input and output Prata 6th Ed. pp. 1061-1147; Deitel 8th Ed. pp. 595-623, 660-669 |
|
Thu Jan 26 (Section 1), Mon Jan 30 (Section 2)
Lab 2 (assigned Mon Jan 30, due 11:59pm Fri Feb 17) |
C++ functions, classes, and templates (slides in ppt) (studio exercises in pdf) (code example directory) |
|
| Tue Jan 31 (Section 1), Wed Feb 1 (Section 2) |
Design Patterns I (Iterator and Factory Method) (slides in ppt) (studio exercises in pdf) |
|
| Thu Feb 2 (Section 1), Mon Feb 6 (Section 2) |
C++ functions and the call stack (slides in ppt) (studio exercises in pdf) (code example directory) |
Prata 6th Ed. pp. 305-383, 409-412; Deitel 8th Ed. pp. 194-248 |
| Tue Feb 7 (Section 1), Wed Feb 8 (Section 2) |
C++ debugging (slides in ppt) (studio exercises in pdf) (code example directory) |
|
|
Thu Feb 9 (Section 1), Mon Feb 13 (Section 2)
Lab 3 (assigned Mon Feb 13, due 11:59pm Fri Mar 9) |
C++ exceptions (slides in ppt) (studio exercises in pdf) (code example directory) |
Prata 6th Ed. pp. 896-920; Deitel 8th Ed. pp. 632-644 |
| Tue Feb 14 (Section 1), Wed Feb 15 (Section 2) |
C++ pointers, arrays, and references
(slides in ppt) (studio exercises in pdf) (code example directory) |
Prata 6th Ed., pp. 153-160, 167-178, 383-401, 408-409; Deitel 8th Edition, pp. 267-364 |
| Thu Feb 16 (Section 1), Mon Feb 20 (Section 2) |
C++ classes
(slides in ppt) (studio exercises in pdf) (code example directory) |
Prata 6th Ed. pp. 401-405, 505-559, 578-580; Deitel 8th Edition pp. 64-95, 379-408, 414-445 |
| Tue Feb 21 (Section 1), Wed Feb 22 (Section 2) |
C++ subclassing and inheritance polymorphism (slides in ppt) (studio exercises in pdf) (code example directory) |
Prata 6th Ed. pp. 405-408, 707-830, 877-892, 922-927, 933-946; Deitel 8th Edition pp. 499-529, 534-574 |
| Thu Feb 23 (Section 1), Mon Feb 27 (Section 2) |
Review for Midterm Exam (slides in ppt) (sample questions in pdf: note that this is not intended as a study guide, e.g., some of the material mentioned is being covered AFTER the midterm this semester, but rather as an illustration of the kinds of questions I tend to ask on a midterm exam.) |
|
|
Section 1: Tue Feb 28, 10:00-11:30am, Lab Sciences 250 Section 2: Wed Feb 29, 10:00-11:30am, Lopata 101 |
|
|
|
Thu Mar 1 (Section 1), Mon Mar 5 (Section 2)
Lab 4 (assigned Mon Mar 5, due 11:59pm Fri Apr 6) |
Design Patterns II (Adapter, Memento, and Observer) (slides in ppt) (studio exercises in pdf) |
|
| Tue Mar 6 (Section 1), Wed Mar 7 (Section 2) |
C++ memory management (slides in ppt) (studio exercises in pdf) (code example directory) |
Prata 6th Ed. pp. 160-167, 178-184, 478-482, 920-921, 931-933; Deitel 8th Edition pp. 469-471, 645-650, 749 |
|
Thu Mar 8 (Section 1), Mon Mar 19 (Section 2) (Spring Break Mar 12-16) |
Memory management for C++ classes (slides in ppt) (studio exercises in pdf) (code example directory) |
|
| Tue Mar 20 (Section 1), Wed Mar 21 (Section 2) |
More on C++ memory models and memory management idioms (slides in ppt) (studio exercises in pdf) (copy trick code example directory) (shared_ptr code example directory for Visual Studio 2010) |
|
| Thu Mar 22 (Section 1), Mon Mar 26 (Section 2) |
C++ function and operator overloading
(slides in ppt) (studio exercises in pdf) (code example directory) |
Prata 6th Ed. pp. 412-418, 564-578, 581-621; Deitel 8th Edition pp. 234-236, 451-491 |
| Tue Mar 27 (Section 1), Wed Mar 28 (Section 2) |
Design Patterns III (Singleton, Prototype, and Visitor) (slides in ppt) (studio exercises in pdf) |
|
|
Thu Mar 29 (Section 1), Mon Apr 2 (Section 2)
Lab 5 (assigned Mon Apr 2, due 11:59pm Fri Apr 27) |
Generic programming techniques in C++ (slides in ppt) (studio exercises in pdf) (code example directory) |
Prata 6th Ed. pp. 992 Deitel 8th Edition pp. 851-852 |
| Tue Apr 3 (Section 1), Wed Apr 4 (Section 2) |
Interface polymorphism with C++ templates (slides in ppt) (studio exercises in pdf) (code example directory) |
Prata 6th Ed. pp. 419-442, 830-866, 892-896 Deitel 8th Edition pp. 236-239, 579-593 |
| Thu Apr 5 (Section 1), Mon Apr 9 (Section 2) |
More template examples and ideas (slides in ppt) (studio exercises in pdf) (code example directory) |
|
| Tue Apr 10 (Section 1), Wed Apr 11 (Section 2) |
C++ STL containers in depth (slides in ppt) (studio exercises in pdf) (code example directory) |
Prata 6th Ed. pp. 978-991, 1007-1026, 1270-1286 Deitel 8th Edition pp. 853-856, 863-890 |
|
Thu Apr 12 (Section 1), Mon Apr 16 (Section 2) Guest Lecturer Mon Apr 16: Prof. Cytron |
C++ STL iterators in depth (slides in ppt) (studio exercises in pdf) (code example directory) |
Prata 6th Ed. pp. 992-1007 Deitel 8th Edition pp. 856-861 |
|
Tue Apr 17 (Section 1), Wed Apr 18 (Section 2) Guest Lecturer Tue Apr 17: Prof. Smart Guest Lecturer Wed Apr 18: Prof. Cytron |
C++ STL algorithms in depth (slides in ppt) (studio exercises in pdf) (code example directory) |
Prata 6th Ed. pp. 1035-1037, 1286-1322 Deitel 8th Edition pp. 861-863, 890-920 |
|
Thu Apr 19 (Section 1), Mon Apr 23 (Section 2) Guest Lecturer Thu Apr 19: Prof. Smart |
C++ STL functors in depth (slides in ppt) (studio exercises in pdf) (functors code example directory) |
Prata 6th Ed. pp. 1026-1035 Deitel 8th Edition pp. 924-927 |
| Tue Apr 24 (Section 1), Wed Apr 25 (Section 2) |
More on C++ associated types, typedefs and traits (slides in ppt) (studio exercises in pdf) (code example directory) |
Prata 6th Ed. pp. 230, 371, 1249-1250 Deitel 8th Edition pp. 794, 858-861 |
| Thu Apr 26 (Section 1), Mon Apr 30 (Section 2) |
Semester summary and review for Final Exam (slides in ppt) Last day to post answers to studio exercises for participation credit: Mon Apr 30 |
|
| Mon May 7 |
|
|
| Tue May 8 |
|
|
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 1-3 are to be completed individually, though on labs 4 and 5 you will have the option of working in teams of 2 or 3 people. You should please submit your code and a lab report for each lab sufficiently ahead of its advertised due date and time (shown on the lab assignment web page) that normal e-mail delays etc. do not result in your lab being received late (according to the time stamp put on the e-mail by the CEC e-mail server used by the cse332 account).
Labs received 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.
Extensions may be granted in advance on a case-by-case basis as long as the circumstances warrant an extension and the request is made sufficiently ahead of the deadline. Extensions will not be granted after the deadline except in very special cases (such as documented medical emergencies).
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:
In addition to the required textbook, the following texts may be useful and interesting additions to your programming library:
On-line information sources (please feel free to suggest other good ones):
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 last 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:
Percentage completion of the studio exercises (including posting answers to them) will be used as the baseline for evaluating participation grades, though other factors such as other message board postings, and attendance and engagement in class, studio, and lab sessions also may be considered if they differ significantly.
| Labs | 50 % Lab 1: 5 % Lab 2: 7 % Lab 3: 8 % Lab 4: 12 % Lab 5: 18 % Midterm Exam |
15 % |
Final Exam |
25 % |
Participation |
10 % |
|
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.