CSE E81 532S: Advanced Multi-Paradigm Software Development

Professor: Chris Gill cdgill@cse.wustl.edu
(314) 935-7538
  Office hours: Bryan 506 noon-1pm Tuesdays (or by appointment)

Spring 2008

This page is available through: http://classes.cec.wustl.edu/~cse532/
or at: http://www.cse.wustl.edu/~cdgill/courses/cse532/

Take Home Final Exam: Due 4pm Wednesday, May 7, 2008, in Bryan 509 (CSE Office) or Bryan 506 (Professor Gill's Office)


Contents

  1. Times and Locations
  2. Course Description
  3. Prerequisites
  4. Forum   (Click here to go directly to the CSE532 Messageboard.)
  5. Discussions/Lectures
  6. Labs
  7. Coding Standards
  8. Textbooks and Other Resources
  9. Grading
  10. Cheating


Times and Locations

Discussions/Lectures: Ridgley 219, Tuesday and Thursday, 1:00-2:30 pm


Course Description

Developing high quality software is hard; developing high quality software that is reusable under a range of requirements is harder still. Advanced software development paradigms, such as Object-Oriented Programming, Design Patterns, Frameworks, and Generic Programming, help to constrain accidental complexities of development, and thus aid in producing higher quality, more reusable solutions.  In many development settings more than one paradigm may be applied to best address the requirements at hand, and the interactions between the paradigms are of fundamental importance.  To apply multiple development paradigms effectively, developers must learn through experience how the strengths and limitations of each approach can be managed to develop high quality reusable software.


Prerequisites

Recommended


Forum

Please note that the posting on the course forum is a vital part of your CSE 532 experience. Participation there (i.e., quantity and quality of your posts) as well as in class will be considered as part of your participation grade.

Please submit ALL questions and concerns of a public nature to the CSE532 Messageboard, which can be found on the web at http://classes.engineering.wustl.edu/cse532/bb/. To use the CSE 532 Messageboard, you should first click on the Register link found on that page, and follow the instructions you are given. You are encouraged answer each other's questions there!

Do not e-mail technical questions to the professor: instead, please post for all to see, consider, and respond.


Discussions/Lectures

The discussions/lectures will emphasize two main areas: successful use of patterns and idioms, and generic programming techniques in C++. In general, these may be considered separate tracks within the course, but we will be interested primarily in how each interacts with the others.

Required and optional reading assignments are shown in brackets for each topic: please complete the assigned reading before the class meeting where it will be presented, so that you can participate fully in the in-class discussions. As we progress through the semester, these assignments may be made more specific to focus on key topics and issues of interest. The C++NPv1, C++NPv2, Austern, and POSA2 books are listed in the Textbooks section, below.

Date
Patterns and Idioms
Generic Programming with C++
January
15
Course Introduction
(slides: in ppt format)
17

Concurrent and Networked Objects
[C++NPv1 Chapters 0, 1, and 2]
(optional: [POSA2, Chapter 1])
(slides: in ppt format)
Wrapper Facade
[C++NPv1 Chapter 3]
(optional: [POSA2, pp. 47-74])
(slides: in ppt format)
 
22
  Intro to Generic Programming in C++
[Austern, Preface]
[Austern, Chapter 1]
[Austern, Chapter 6]
(optional: [Austern, Chapter 10])
(slides: in ppt format)

Algorithms and Ranges
[Austern, Chapter 2]
(optional: [Austern, Chapters 11-13])
(slides: in ppt format)
24
Lab 0
Teams Declared by 11:59pm Sunday 1/27/08
Due by 11:59pm Sunday 2/10/08
Lab 0 Design Discussion
Iterators
[Austern, Chapter 3]
[Austern, Chapter 7]
(optional: [Austern, Chapter 14])
(slides: in ppt format)
29
  Function Objects
[Austern, Chapter 4]
[Austern, Chapter 8]
(optional: [Austern, Chapter 15])
(slides: in ppt format)
31   Containers
[Austern, Chapter 5]
[Austern, Chapter 9]
(optional: [Austern, Chapter 16])
(slides: in ppt formats)
February
5
Event Handling Patterns
[C++NPv2 Chapter 1]
(optional: [POSA2, pp. 175-177])
Asynchronous Completion Token
[C++NPv2 pp. 63, 64, 263, 291]
(optional: [POSA2, pp. 261-284])
(slides: in ppt format)
 
7
Reactor
[C++NPv1 Chapter 7]
[C++NPv2 Chapters 3, 4]
(optional: [POSA2, 179-214])
(slides: in ppt format)
Lab 1 Design Discussion
(slides: in ppt format)
February
12
Acceptor/Connector
[C++NPv2 Chapter 7]
(optional: [POSA2, pp. 285-322])
(slides: in ppt format)
 
14
Lab 1
Teams declared/assigned Sunday 2/16 11:59pm
Due 11:59pm Sunday 3/2/08 (note new deadline)

Proactor
[C++NPv2 Chapter 8]
(optional: [POSA2, 215-260])
(slides: in ppt format)
 
19
An Event Handling Pattern Language
(slides: in ppt format)
 
21
Synchronization Patterns
[C++NPv1 Chapter 10]
(optional: [POSA2, Chapter 4])
(slides: in ppt and format)
 
26
 
28
Lab 2 Design Discussion
(slides: in ppt format)

Review for Midterm Exam
(slides: in ppt format)
 
March
4
Class cancelled due to weather
6
Midterm Exam
(in lecture period/classroom)
open book, open notes (hard copy only, no electronics)
11
Spring Break
13
18
Guest Lecturer: Prof. Cytron

Concurrency Patterns
[C++NPv1 Chapters 5, 6, 9]
(optional: [POSA2, pp. 365-367])
(slides: in ppt format) Monitor Object
[C++NPv1 pp. 133, 224]
[C++NPv2 pp. 165]
(read again after the lecture, and later as needed)
(optional: [POSA2, pp. 399-422])
(slides: in ppt format)
 
20
Midterm Grading Review and Discussion

Active Object
[C++NPv2 Chapter 6]
(optional: [POSA2, pp. 369-398])
(slides: in ppt format)

Half-Sync/Half-Async
[C++NPv1 pp. 16, 112, 113, 122, 206]
[C++NPv2 pp. 155, 156, ]
(read again after the lecture, and later as needed)
(optional: [POSA2, pp. 423-445])
(slides: in ppt format)
 
25
Lab 2
Teams declared Sunday 3/30/08
Due 11:59pm Sunday 4/13/08

Leader/Followers
[C++NPv1 pp. 112, 113]
[C++NPv2 pp. 99, 100]
(read again after the lecture, and later as needed)
(optional: [POSA2, pp. 447-474])
(slides: in ppt format)
 
27
Thread Specific Storage
[C++NPv1 pp. 130, 186, 187, Section 9.4]
(optional: [POSA2, pp. 475-504, Chapters 6-8])
(slides: in ppt format)
 
April
1
Concurrency and Synchronization Pattern Language I
(slides: in ppt format)
 
3
Concurrency and Synchronization Pattern Language II
(slides: in ppt format)
 
8
Service Access and Configuration Patterns
(optional: [POSA2, pp. 43-45])
Component Configurator
[C++NPv2 Chapters 2, 5]
(optional: [POSA2, pp. 75-107])
(slides: in ppt format)
 
10
Lab 3
Teams declared Sunday 4/20/08
Due 5/4/08 11:59pm

Interceptor
(optional: [POSA2, pp. 109-140])
(slides: in ppt format)
 
15
Lab 3 Design Discussion
(slides: in ppt format)
 
17
Extension Interface
(optional: [POSA2, pp. 141-174])
(slides: in ppt format)
 
22
A Service Access and Configuration Pattern Language
(slides: in ppt format)
 
24
Course Summary and Review
(slides: in ppt format)
Take Home Final Exam handed out
May 7
Take Home Final Exam Due by 4pm on Wednesday May 7
Hand in completed exams to Andrea in the CSE Department Office, Bryan 509
or to Dr. Gill in his office, Bryan 506


Labs

There will be 4 lab projects this semester. Labs should be turned in via e-mail to the cse532@cec.wustl.edu account, and will be graded and returned to you electronically as well. Each lab assigment will contain the procedure for turning in the lab. Labs will increase in length, value, and difficulty throughout the semester. The exact due date will be specified in each lab description.

Each lab will require a ``lab report''. Report format and length and content requirements will be described in each lab assignment. The actual report will be submitted via e-mail, as well, so it must go into a file. An e-mail turn-in process (via make) that submits your files for grading will be provided, though each assignment will have a more detailed description of other acceptable ways to e-mail your solution.

Labs will be performed in teams of 2 or 3: teams may be different for each lab assignment or may remain the same for all labs. Team members may choose one-another and post their chosen teams to the course forum according to the instructions in the lab assignments: people who do not identify a team by the designated cut-off will be assigned to teams arbitrarily.

Each team should submit its solution and lab report for each project. 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 extenuating circumstances.

You may discuss your lab projects with other students outside your team only during lecture or on the course forum. Discussion of lab projects within a team, is encouraged at any time. Each team must design and implement its own solution, and prepare its own report.


Coding Standards

Many organizations impose coding standards on programmers. These standards can be very strict. In this class, the most important standard is to be consistent and show good encapsulation and modularity. As the course progresses, we may identify specific coding guidelines that must be followed.

If you'd like to look at some coding standards, the guidelines that the ACE developers use is a good place to start. It's concise and very relevant to C++ coding activities both when using the CSE 532 ACE build and in other development contexts.


Textbooks and Other Resources

Required texts (will be available in the bookstore for purchase, and at the Olin Library reserve desk for 2 hour loan):

We'll use the required textbooks both for class material and as references. The lecture schedule contains references to revelant portions of the required texts. Please read each assigned section before the class meeting where it will be discussed.

Recommended text (will be available in the bookstore for purchase, and at the Olin Library reserve desk for 2 hour loan):

If you're looking to build your library (in order of relevance):

Other information sources:


Grading

Labs will constitute a major portion of the grade in this course. This reflects the course's emphasis on hands-on exploration of the material. The midterm and final exams will be comprehensive, and roughly proportioned to cover the material in both of the tracks in the course. The best way to study for the exams is to keep up with the readings, discussions, and labs during the semester.

The last grading component is an evaluation of your participation in the class, and an evaluation 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/lectures, labs, and on the course forum.

Labs 55 percent
   Lab 0:  5 percent
   Lab 1:  10 percent
   Lab 2:  15 percent
   Lab 3:  25 percent
Midterm exam 15 percent
Final exam 25 percent
Participation   5 percent


Cheating

Put simply, from Professor Kwasny's statement on cheating:

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

For this course, examples of cheating include but are not limited to: collaboration on an exam, using unapproved sources of information during an exam, or sharing of significant portions of code or designs between programming teams.

This is a very serious matter. Anyone found cheating will at a minimum receive a 0 for the assignment in question, or possibly an F for the course. Further action may be taken in extreme cases.

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.