This class is project-based, and the project component bears the maximum percentage of the total points that students will accumulate for their final grade.

For Undergrad students

In the first part, we will design and implement the Object business logic for Battleship game (the requirements for Milestone 1 are here). For every project Milestone (roughly every two weeks), we will give you new feature requests, which you will implement alongside your own features. The feature requests in the Milestones will help you make use of the OO Design Principles and Design Patterns that we cover in the class. In addition, you get to conduct continuous improvements on your design and code, through refactoring, peer reviews, producing professional-quality design documents (e.g.., UML class and sequence diagrams), etc.

Last 6 weeks of the semester

Option 1: You have an option to stay with the Battleship game and make it more robust with features such as: adding GUIs, adding your own technology-layer architecture (e.g., making it web, native, or mobile app), add a controller logic (e.g., making it multi-player through networking, or adding an AI component that can play against a human player), and generally implement new cool features.

Option 2: Choose your own project (technology, design, some code implementation). Create a non-trivial set of classes and services that make use of some of the design patterns we cover to provide a nice set of functionality to the end-user; we like to see some UI design and data handling, but your project may vary. You may use any languages, frameworks, libraries, or utilities for your project as long as the project demonstrates object-oriented design.

While I am asking for a non-trivial project, you only have so much time. Your team will have two weeks to do a thorough design, and then you will have about four weeks to develop your system prototype (2 iterations consisting of 2 weeks each). For sizing your work, during each iteration, each member of your group should expect to work to implement one to two use cases (possibly with other teammates). As a result, if you are a member of a two-person team, you will want to target about 4-8 use cases for your system. A 3-person team is looking at a 6-12 use cases (12 is a lot!). You will detail this scope estimate in your initial design effort.

Typical applications

  • A Native or Multiplatform Mobile Application
  • A Responsive Web Application for Mobile Use
  • A Web Service Paired with a Mobile Client
  • A Cloud-based Application (using Student accounts for AWS, Google, Azure) with a Web or Mobile Interface (Think ahead on this one – getting the cloud account can be a delay)
  • A Game for a specific platform (had some neat C#/Unity applications last time)
  • Other Client/Server Applications
  • An IoT style device or set of devices

For Grad students -- the Industry-novel Track 2

In addition to the first 8 weeks working on the Battleship game designing and implementing the OO business logic, you will work on a research project that is industry-relevant.

The goal of novel-industrial work is to perform scholarly research on a topic related to object-oriented concepts, languages, frameworks, testing, principles, libraries, or patterns, or other uses of patterns in computer science (e.g. web, architecture, anti-patterns, etc.). Any type of research project is acceptable, including: analytic, argumentative, defining, compare/contrast, interpretive, experimental, or survey. The topic may not be proprietary in any way, it must be able to be shared with reviewers and the class. You may also use this project to look at OO elements of your own research topics. This semester the research will be presented in the form of a research presentation (40 slides or more), optionally with accompanying software examples. Please note it is expected to see incrementally more thorough work from a three person team than from a two person team for these investigations. The first three project submissions will be via PDF. The final three will use Microsoft PowerPoint. The Pecha Kucha presentation will be used in a classroom presentation and must be provided using timed Microsoft PowerPoint.

Typical projects from past course offerings

  • Discovering and documenting new Design Patterns in your field of choice (e.g., when using TensorFlow)
  • Documenting the use of Design Patterns in commercial-quality codebases
  • Java: Is its dominance in industry numbered or just sailing through rough waters?
  • TDD in Python
  • Generating code solutions from UML
  • Comparing the practical applications and performance of Java vs C++
  • Keras vs PyTorch: An Object Oriented Comparison
  • Exploring Kafka Framework using Object Oriented Paradigm
  • Analysis of Spring framework
  • Hibernate framework & data persistence - an analysis
  • A Modern Survey of Multiple Inheritance in Object-Oriented Languages
  • UML in object-oriented analysis and design
  • Node.js in Object Oriented Analysis & Design
  • Python in Data Science-Multi-processing vs Threading
  • Java vs Node.js comparison
  • OO Natural Language Processing Frameworks

For Grad students -- the Academic-research Track 3

You must complete a term project that is research-oriented and makes a primary contribution in the field of OOAD. The project must relate to some aspect of Software Analysis and Design (e.g., empirical study, program analysis tool, program transformation tool, code development tool, etc). You should work in teams of two or three. I will spend time in class outlining what I think are interesting and feasible projects, though you have significant freedom in shaping them how you please. The result will be a research paper that you can submit to an academic research conference in the field of OOAD (e.g., OOPSLA, ICSE, FSE).

Examples of projects that grad students conducted in Prof Dig's classes

New research ideas proposed by the professor

  • Automate a refactoring to improve some design aspect in an application domain of your choice (e.g., remove code smells in Python ML codebases)
  • Nowadays, centralized applications, written to run on a single node without accessing any cloud-based services, are in a minority. Even the simplest of mobile applications access some remote services. However, the distribution decisions made at design time are often suboptimal. For example, clients are often underutilized, while servers are overburdened (or the other way around). It would be nice to conduct a study to examine how mobile/distributed apps use resources (both local and remote), identify the cases when the distribution decisions turn out suboptimal, and then refactor the suboptimalities by hand, recording the required program transformations.
  • Inspired/motivated from the findings in the above project, design an automated refactoring, e.g., Cloud Refactoring, to migrate client functionality to a cloud. Another project idea is the opposite refactoring, Component Insourcing, which migrates cloud functionality to a client.
  • Conduct an empirical study to find anti-patterns or code smells in an application domain of your choice (e.g., finding code smells in Python ML codebases)