COMP 310
Fall 2018

Advanced Object-Oriented Programming and Design

Home  Info  Canvas   Java Resources  Eclipse Resources  Piazza

Welcome to the Fall 2018 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  (HZ 212)


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)

Assignment Due Date 
(at beginning of class!)

Week 1:

Lec01: Administrivia, Getting started 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)
  Lec02: GUI Building
  Lec03: Programming Paradigms    

Week 2:

Lec04: UML Diagrams
Lec05: UML continued, Source Control & Ballworld Demos
Lab02: Animation  
  Lec06: HW01 review
Lec07:  Designing a Ball 
  HW01: Simple GUI Program with Polymorphism -- See Canvas
  Lec08: Connecting the Pieces  
Week 3:

Mon. 09/03/18: Labor Day Holiday -- No Class!

Labs as normal this week.

Lab03: MVC Implementation

  Lec09: Composing Behaviors   HW02: Inheritance-based Ballworld -- See Canvas
  Lec10: Faking out the GUI with Factories
Week 4:
Lec11: Factories, cont. & Transforming How We Paint Lab04: Transforming Shapes  
  Lec12:  Using Superclasses as Service Providers   HW03: Composition-based Ballworld -- See Canvas
  Lec13: Painting continued and Command-Driven Dispatching   
Week 5:
Lec14: Command Dispatching Lab05: Sending Commands  
  Lec15: Collisions   HW04: Command-Driven FishWorld -- See Canvas

Week 6:

Lec16:  Collisions, continued...
Lec17: Ballworld Recap
Lec18: Debugging with Eclipse and Visitors, revisited
Lab06: Collisions and Debugging  
  Lec19: Visitors...   HW05: Command-dispatching Ballworld with Inter-ball Interactions -- See Canvas
  Visitors, continued...
Week 7:
Lec20: Extended Visitors  Lab07: Playing Music in Java  
  Lec21: Extended Visitors Example - Self-balancing Trees    
  Lec22: Extended Visitors Example, continued..., Music Project. HW06: ABC Music Player -- See Canvas
Week 8:

Mon. 10/08/18 - Tue. 10/09/18: Fall Recess:  No Classes!

No labs this week!

  Lec23: Insertion and Deletion Algorithms for Self-Balancing Trees.    
  Lec24: Insertion and Deletion Algorithms for Self-Balancing Trees, continued...
Lec25: Remote Method Invocation (RMI)
HW07: Remote Task Execution -- See Canvas

Week 9:

Lec26: RMI continued...
Lec27: RMI Stubs Everywhere!

Lab08: Java RMI  
  Lec28: Generic Extended Visitors and Data Packets    
  Lec29: Use Cases and ChatApp API Design    

Week 10:

Lec30: Chat Program Interfaces
ChatApp API Proposal Presentations (Feedback Round)
Lab09: ChatApp Design  
  Lec31: ChatApp Interfaces...
ChatApp API Proposal Presentations (Feedback Round)
Subgroup API proposals completed and documemented
  Lec32: ChatApp Design...
  Final Project Proposals due
Week 11:
Lec33:  ChatApp finalization
ChatApp API Proposal Presentations (Decision Round)
Lab10: ChatApp Design, continued & Simple Threads  
  Lec34:  ChatApp finalization, continued.. 
ChatApp API Proposal Presentations (Decision Round)
HW08:  RMI Chat Program -- See Canvas
  Lec35: Design Post-Mortem
Week 12:
Lec36: Final Project
Lab11: Final Project Design  
  Lec37: Game specifics discussion and Sequence Diagramming    
  Lec38: Final Project Milestone 1 prep  
Week 13:
Lec39: RMI Garbage-Collecting and Final Project Issues Lab12: Final Project Design and Implementation  
  Lec40: Mixed Data  Dictionaries, WWJ Mapping Library and the map package
Final Project API Proposal Presentations (Feedback Round)
  Final Project: Milestone 1
  Lec41: Game Issues
Lec42: Final Project Development Issues
Final Project API Proposal Presentations (Feedback Round)
Week 14:
Lec43: Final Project Testing and Issues Discussion
Lec44: Tips & Traps and Team Work
Final Project API Proposal Presentations (Decision Round)
Lab13: Final Project Communciations Testing  
   Lec45: Lessons from Labs
Final Project API Proposal Presentations (Decision Round)

Thu. 11/22/18 - Fri. 11/23/18: Thanksgiving Holiday (No classes!)

Week 15:
  Lab14:  Final Project Testing  
Last Day of Classes!

Lec46: We Made It!

TBA Testing session DH 3092? For testing and debugging
TBA Testing session DH 3092? For testing and debugging
TBA Testing session DH 3092? For testing and debugging
TBA Testing session DH 3092? For testing and debugging
TBA Testing session DH 3092? For testing and debugging
(Registar-scheduled exam date and time
Demo Day!    (Instructions)
Final Project Code and Documentation Submission due at 11:59 PM
OEDK Classroom
(plus other OEDK rooms) 
Final Project: Milestone 2
Final Project must be fully operational

Operational testing will NOT be done after the demo time!

© 2018 by Stephen Wong