COMP 310 Fall 2019

Advanced Object-Oriented Programming and Design

Home  Canvas  Piazza  Java Resources  Eclipse Resources

Welcome to the Fall 2019 Comp310 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 Comp310, 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      

Primary target audience:  Second or third year undergraduate 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 Comp310 beforehand (also taking Comp405 before Comp410 is also highly recommended).   Undergraduates may only take Comp310 not Comp504 which is restricted to graduate students that have not already taken Comp310.

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

CLASS TIMES:  MWF 1:00 PM - 1:50 PM  (Herzstein 212)

LAB TIMES:    Duncan Hall Symonds II Lab is accessed from the outside front walkway of Duncan Hall

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!   

See Canvas for General assignment requirements and instructions on how to use Subclipse/Subversion to turn-in your assignements.

 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!)

 IMPORTANT:  The content on this site is being partially migrated to Canvas and its content is being reformatted as the semester progresses.   Please note the following:



Labs (Tues) (See Canvas)

Approximate Assignment Due Dates 
(at beginning of class!)

Week 1:

  • Getting started
    • Course info
    • Required software, etc.
  • Software Development Environment
    • References to Eclipse installations
    • Setting preferences for Eclipse and its plugins
    • References to running Eclipse and its plugins
    • First GUI program in Eclipse
  • Design Principles
    • Abstraction
    • Programming Paradigms
    • Design Motivations
    • Separation of Variant and Invariant
    • Design Patterns
    • No static fields or methods!
    • Visualizing design with UML Diagrams
      • Class diagrams
      • Use Case diagrams
      • Sequence diagrams
Lab01: Software Installs, getting started with Eclipse and Building GUIs with WindowBuilder Complete your software installations BEFORE lab!
Sign up for Piazza (click link above)

Week 2:

Mon. 09/02/19: Labor Day Holiday -- No Class!

  • BallWorld
    • Demos
    • Provided code using svn:externals
    • Union and Template Design Pattern: Designing a ball
    • Adapter and Observer-Observable Design Patterns: Connecting the pieces
    • Composite and Strategy Design Patterns: Composing behaviors
    • Factory Design Pattern: Faking out the GUI with Factories
    • Prototype Design Pattern: Transforming how we paint
    • Template Design Pattern revisited: Using superclasses as service providers
    • Command Design Pattern: Command-driven dispatching
    • Collisions
    • Recap

Labs as normal this week.

Lab02: Animation

HW01: Simple GUI Program with Polymorphism -- See Canvas
Week 3:

Ballworld continued

Lab03: MVC Implementation

HW02: Inheritance-based Ballworld -- See Canvas
Week 4:

Ballworld continued


Lab04: Transforming Shapes  
Week 5:

Ballworld continued


Lab05: Sending Commands HW04: Command-Driven FishWorld -- See Canvas

Week 6:

Ballworld continued

Debugging in Eclipse


  • Regular visitors
  • Extended Visitors
    • Self-balancing trees
      • Structure
      • Insertion algorithm
      • Deletion algorithm
    • Music project
    • Generic extended visitors
      • DataPackets


Lab06: Collisions and Debugging HW05: Command-dispatching Ballworld with Inter-ball Interactions -- See Canvas
Week 7:

Visitors continued

 Lab07: Playing Music in Java HW06: ABC Music Player -- See Canvas
Week 8:

Mon. 10/14/19 - Tues. 10/15/19: Rice Midterm Recess-- No Classes!

Visitors continued

Remote Method Invocation (RMI):

  • Proxy Design Pattern
  • Managing stubs
  • Technical issues:
    • Garbage collecting of RMI Server objects
No labs this week! HW07: Remote Task Execution -- See Canvas

Week 9:

Visitors revisited (see above):

  • Generic Extended Visitors
    • DataPackets

Design principles revisited (see above):

  • Use Cases


  • API Design
  • Program interfaces
  • System design
  • Design process


Lab08: Java RMI  

Week 10:

ChatApp continued

Lab09: ChatApp Design

Final Project Proposals due

Subgroup API proposals completed and documemented

ChatApp API Proposal Presentations (Feedback Round)

Subgroup API proposals revised and published

ChatApp API Proposal Presentations (Elimination Round)

Week 11:
ChatApp continued Lab10: ChatApp Design, continued & Simple Threads

ChatApp API Proposal Presentations (Decision Round)

HW08:  RMI Chat Program -- See Canvas

Week 12:

Design principles revisited:

  • Sequence diagrams

Final Project:

  • Game specifics
  • Geographic Information Systems (GIS)
  • Architecture
    • Microservices
    • Communications between microservices
      • Mixed-data dictionaries
  • Demo Day instructions

Lab11: Final Project Design




Week 13:
Final Project continued Lab12: Final Project Design and Implementation

Final Project API Proposal Presentations (Feedback Round)

Final Project: Milestone 1

Final Project API Proposal Presentations (Elimination Round)

Week 14:

Final Project continued

Thurs. 11/29/19: Rice Thanksgiving Holiday -- No Classes!

Lab13: Final Project Communciations Testing


Final Project API Proposal Presentations (Decision Round)

Week 15: 12/02/19

Final Project continued

Course Recap

TBA Testing sessions DH 3092? For testing and debugging
(Registar-scheduled exam date and time
Demo Day!    (See Canvas for official instructions)
Final Project Code and Documentation Submission (See Canvas for details)
See Canvas or Piazza for official location  Final Project: Milestone 2
Final Project must be fully operational

Operational testing will NOT be done after the demo time!

© 2019 by Stephen Wong