Course Level
Other
Knowledge Unit
Other
Collection Item Type
Assignment
Synopsis

This assignment helps students practice designing and implementing the code for small programs. It engages with historical discussions of object-oriented design paradigms within the ACM by requiring students to read the 1993 article “The Object-Oriented Brewery: A Comparison of Two Object-Oriented Development Models” [4]. In the article, the authors describe two design methodologies they applied toward building a program for managing a brewery’s systems, though any production facility can be used in student-facing scenarios. The authors then analyze the strength of the code written using each methodology based on a series of metrics. After reading the article and discussing it in class, students then recreate some or all of the described systems using at least one of the design methodologies outlined. Once complete, students then analyze their code using the metrics outlined in the article and reflect on opportunities to strengthen their program’s design in future iterations.

ACM Digital Library Entry

Recommendations

We piloted in Object-Oriented Analysis and Design courses at two Universities, Northeastern University and University of Colorado Boulder (CU) and provide recommendations in this section. The reading and programming project can span two to three weeks. Students with a range of previous OO programming experience, from almost no experience to moderate amounts, accomplished the assignment tasks in this time frame. This assignment was used in a course where students had not yet taken data structures to help teach LinkedLists compared to Arrays. Students should have a basic understanding of Java and spent a month engaging in OO principles before this assignment is introduced. This assignment was delivered as a group project in the CU course and as an individual assignment at Northeastern.

At CU, we found it helpful to build a foundation of code and group dynamics during class time. Students created Unified Modeling Language diagrams and received feedback on initial designs in class. They also ran "mob-programming" sessions, where one student types code while others assess the bigger picture and give directions [1]. This approach established healthy team dynamics, offered a refresher on programming language basics and version control, and bolstered confidence within students to complete the program.

Prohibiting imports of external libraries is a potentially sticky requirement for students who frequently use libraries in other courses. Students questioned how they might prompt the user for input to run through scenarios without the use of external libraries. Suggest that students hard-code scenarios to test the program instead of gathering user input or allow java.util.Scanner. In our experience, students benefited from the import restriction, as it required them to consider the design of the system from the data structure level.

For educators seeking to integrate deeper social commentary into the classroom, we encourage modifications to this assignment that modify a "wasteful" production system to be more sustainable and environmentally conscious.

Engagement Highlights

This assignment provides important context for why object-oriented programming prioritizes certain design philosophies over others, and gives students a historical perspective on how modern object-oriented design paradigms were formed. Students are banned from importing any pre-built data structures and are required to consider how to design each class as a data type responsible for managing a strictly-defined task in their production system. This task promotes a more active method of learning the object-oriented paradigm, encouraging students to research the paradigm and apply the design principles in their own code. The project also introduces students to different metrics used to analyze the quality of a program’s design and provides examples to contextualize why those metrics matter. In general, students struggle to switch from a procedural paradigm to an object-oriented paradigm. This assignment seeks to reduce that difficulty through providing a historical context and concrete examples outlined in the 1993 paper.

Computer Science Details

Programming Language
Java

Material Format and Licensing Information

Creative Commons License
CC BY