COMP 504
Fall 2016

Graduate Object-Oriented Programming and Design

Home  Info  Canvas   Java Resources  Eclipse Resources  Piazza  SharePoint

Welcome to the Fall 2016 Comp504 home page!

Object-oriented programming is the major software paradigm used in large systems today.   This includes most desktop applications such a office productivity software, data management applications and even the main frameworks of many games.  But object-oriented programming and design (OOP/D) absolutely rules in the enterprise-class arena, the globe-spanning, mission-critical systems that, via the Internet, tie together international corporations from one end of the Earth to the other.  In Comp504, we will discover how to use state-of-the-art object-oriented programming and design techniques to create flexible and scalable software systems that can interact with eachother from anywhere in the world.  We will learn about software design patterns and how they are used in multiple programming paradigms.   Through a combination of theory and coding, the class will explore how highly decoupled systems with dynamically configurable behaviors are designed and implemented.   The class will learn how to use design patterns as both a means of expressing fundamental computer science concepts as well as the building blocks in an abstract decomposition of a complex problem.  In addition, the class will learn to use industry standard tools and technologies such as the Eclipse integrated development environment, Subversion source control and round-trip engineering design tools. 

The course format will be that of lectures covering the theoretical, engineering and technological aspects of object-oriented programming and design that will be implemented in the project-like homework assignments.   These homework projects will build upon each other as much as possible, culminating in a networked application.

Prerequisites:  Comp201, Comp211, Comp212 or Comp215 or equivalent.   Students should already be familiar with the full Java syntax and have experience writing procedural programs and algorithms in Java including the basic usage of classes, objects and inheritance as well as simple generics.      

Primary target audience:  Masters and Ph.D. CS students who are interested in object-oriented programming and design, large flexible systems, enterprise-class networked applications, dynamically configurable systems and software engineering.    Students who plan on taking Comp410 in the future are strongly advised to take Comp504 beforehand.   Taking Comp405 after Comp504 but before Comp410 is also strongly recommended.   Graduate students may only take Comp504 (if they did not take Comp310 as an undergraduate).  Graduate students may not take Comp310 which is only for undergraduates.

For more and the latest infomation, please see the Info page or contact Dr. Wong  (swong at rice.edu)

CLASS TIMES:  MWF 10:00 AM - 10:50 AM  (DCH 1046)

LAB TIMES:    

For a tentative topics list, please see the Info page.

Tentative Schedule

This schedule should only be considered as a guide.  Expect that the schedule will change often!   

General Programming Assignment requirements and instructions on how to use Subclipse/Subversion to turn-in your assignements.
General Communications Assignment Instructions

Important Notice: While Comp504 shares many resources with Comp310, including lectures and assignment similarities, the requirements for Comp504 are NOT the same as for Comp310!  The assignments and lectures for Comp504 are posted on this site only!

 WARNING: The Microsoft Edge  and Chrome browsers cannot run the Java plug-in so you will need to switch to Internet Explorer or Firefox to run the demos.
(Still having troubles?  Check the Java Tips and Traps and post your issues to Piazza!)

Date

Lecture

Labs (Tues & Wed.)

Assignment Due Date 
(at beginning of class!)

Mon. 08/22/16 Lec01: Administrivia, Getting started Lab01: Software Installation, Getting started with Eclipse and Building GUIs with WindowBuilder Complete your software installations BEFORE lab!
Wed. 08/24/16 Lec02: GUI Building
Fri. 08/26/16 Lec03: Programming Paradigms    
Mon. 08/29/16 Lec04: UML Diagrams
Lec05: UML continued, Source Control & Ballworld Demos
   
Wed. 08/31/16 Lec06: HW01 review
Lec07:  Designing a Ball 
Lab02: Animation HW01: Simple GUI Program with Polymorphism
COMM01: Programming Paradigms Comparison
Fri. 09/02/16 Lec08: Connecting the Pieces Comm01 Peer Reviews due
       
Mon. 09/05/16 Labor Day Holiday -- No Class! Labs as normal this week.
Wed. 09/07/16 Lec09: Composing Behaviors Lab03: MVC Implementation HW02: Inheritance-based Ballworld
COMM02:  Composites in the Real World
Fri. 09/09/16 Lec10: Faking out the GUI with Factories Comm02 Peer Reviews due
       
Mon. 09/12/16 Lec11: Factories, cont. & Transforming How We Paint Lab04: Transforming Shapes  
Wed. 09/14/16 Lec12:  Using Superclasses as Service Providers    
Fri. 09/16/16 Lec13: Painting continued and Command-Driven Dispatching HW03: Composition-based Ballworld 
COMM03: Inheritance vs. Composition
      Comm03 Peer Reviews due by Sunday
Mon. 09/19/16 Lec14: Command Dispatching Lab05: Sending Commands  
Wed. 09/21/16 Lec15: Collisions    
Fri. 09/23/16 Lec16:  Collisions, continued...
Lec17: Ballworld Recap
Lec18: Debugging with Eclipse and Visitors, revisited
  HW04: Command-Driven FishWorld
COMM04: Commands in the Real World
      Comm04 Peer Reviews due by Sunday
Mon. 09/26/16 Lec19: Visitors...
Lab06: Collisions and Debugging  
Wed. 09/28/16 Visitors, continued...
Visit from Tubular Labs
   
Fri. 09/30/16 Lec20: Extended Visitors
Mon. 10/03/16 Lec21: Extended Visitors Example - Self-balancing Trees  Lab07: Playing Music in Java HW05: Command-dispatching Ballworld with Inter-ball Interactions
COMM05: Modeling Abstract Behavior
Wed. 10/05/16 Lec22: Extended Visitors Example, continued..., Music Project.   Comm05 Peer Reviews due
Fri. 10/07/16 Lec23: Insertion and Deletion Algorithms for Self-Balancing Trees.    
Mon 10/10/16
Tues. 10/11/16
Midterm Recess:  No Classes! No Labs This Week!  
Wed. 10/12/16 Lec24: Insertion and Deletion Algorithms for Self-Balancing Trees, continued...
Lec25: Remote Method Invocation (RMI)
   
Fri. 10/14/16 Lec26: RMI continued... HW06: ABC Music Player
Comm06: Balancing Flexibility and Extensibility Against Security
Comm06 Peer Reviews due by Sunday
Mon. 10/17/16 Lec27: RMI Stubs Everywhere! Lab08: Java RMI  
Wed. 10/19/16 Lec28: Generic Extended Visitors and Data Packets    
Fri. 10/21/16 Lec29: Use Cases and ChatApp API Design    
       
Mon. 10/24/16 Lec30: Chat Program Interfaces Lab09: ChatApp Design HW07: Remote Task Execution
Comm07: Scenarios for  Extended Visitors
Wed. 10/26/16 Lec31: ChatApp Interfaces...
Subgroup API proposals completed and documemented
  Comm07 Peer Reviews due
Project Pair selection due
Fri. 10/28/16 Lec32: ChatApp Design...
 
Mon. 10/31/16 Lec33:  ChatApp finalization
Round 1 Proposal Presentations
Lab10: ChatApp Design, continued & Simple Threads Full API Proposal Documentation complete and Presentations
Wed. 11/02/16 Lec34:  ChatApp finalization, continued.. 
Round 1 Proposal Presentations
Feedback of ALL proposals due @ 11:59PM
Fri. 11/04/16 Lec35: Design Post-Mortem    
Mon. 11/07/16 Lec36: Final Project
Round 2 Proposal Presentations
Lab11: Final Project Design  
Wed. 11/09/16 Lec37: Game specifics discussion and Sequence Diagramming
Round 2 Proposal Presentations
  Final Vote on winning proposal due @ 11:59PM
Fri. 11/11/16 Lec38: Final Project Milestone 1 prep  
Student-arranged Testing sessions TBA
Mon. 11/14/16 Lec39: RMI Garbage-Collecting and Final Project Issues Lab12: Final Project Design and Implementation HW08:  RMI Chat Program 
Comm08: Architectures in Perspective
Wed. 11/16/16 Lec40: Mixed Data  Dictionaries, WWJ Mapping Library and the map package   Comm08 Peer Reviews due
Fri. 11/18/16 Lec41: Game Issues Project Proposals due
       
Mon. 11/21/16 Lec42: Final Project Development Issues Lab13: Final Project Communciations Testing Final Project Proposal Presentations (Feedback Round)
Wed. 11/23/16 Lec43: Final Project Testing and Issues Discussion Final Project Proposal Presentations (Feedback Round)
Final Project: Milestone 1
Comm09:  Peer-review of Comm08
Fri. 11/24/16 -
Fri. 11/25/16
Thanksgiving Recess -- No Class!
Mon. 11/28/16 Lec44: Tips & Traps and Team Work Lab14:  Final Project testing Final Project Proposal Presentations (Decision Round)
Wed. 11/30/16 Lec45: Lessons from Labs Final Project Proposal Presentations (Decision Round)
Fri. 12/02/16 Lec46: We Made It! Last Day of Classes!  
TBA Testing session (shared with Comp310) DH 3092 For testing and debugging
TBA Testing session (shared with Comp310) DH 3092 For testing and debugging
TBA Testing session (shared with Comp310) DH 3092 For testing and debugging
TBA Testing session (shared with Comp310) DH 3076 For testing and debugging
Fri. 12/9/16
1:00 PM - 4:00 PM
Demo Day!    (Instructions) OEDK Classroom and Computer Lab Final Project must be fully operational
Operational testing will NOT be done after the demo time!
Wed. 12/14/16 Final Project Code and Documentation Submission Due at 11:59 PM  Final Project: Milestone 2

© 2016 by Stephen Wong