MPCS 51036 Java Programming (Autumn 2022)

Section 1
Instructor(s) Gerber, Adam (gerber)
Location JCL 298
Meeting Times Monday 5:30pm - 7:30pm
Fulfills Core Programming


Course Description

This is a fast-paced first course in Java for students with some prior programming experience, though not necessarily Java or any other object-oriented language. A strong emphasis will be placed on understanding basic fundamentals of OO design: inheritance, polymorphism, composition, and more generally on applying sound principles of contemporary software engineering and tools to real-world problems. In the latter half of the course, we will cover threads, design patterns, lambdas, and streams. For their final-projects, students will develop a multi-threaded, arcade-style game. The course format is both lecture and lab. We will be using git to facilitate our learning and to manage our projects. By the end of the quarter, students will have a working knowledge of git and know how to manage both local and remote repositories.


Course Contents
•    Program Control
•    File and Basic I/O
•    Objects
•    Interfaces and Abstract Classes
•    Complex Object Relationships
•    Exceptions and Debugging
•    GUI Programming and Swing
•    Lambdas and Streams
•    Recursion, Collections, and Data Structures
•    Multi-Threading 
•    Advanced Topics



Coursework will be divided into four components:


During labs, we will use the course tools to create applications together in class. All the source code that you will need to follow along during labs will be available in a single repository that will include rich and logically-grouped commit histories, comments, and slides.  The lecture hall will be outfitted with power-strips, and students are required to bring their own laptops and follow-along during labs. Labs are not evaluated.


_01Control is a collection of solutions to simple connonical problems related to flow control and implemented using the command-line.

_02Arrays  is similar to _01Control, but requires you to use single and multi-dimensional arrays to solve the problems. This project is also implemented using the command-line.

_03Objects is a collection of solutions to typical object oriented problems implemented using a driver and the command-line. 

_04Interfaces is similar to _03Objects, but requires the use of both abstract classes and interfaces. 

_05Dice is a dice game that you will implement using Swing.

_06Design is a solution to a vending machine where you will use CRC (Class - Responsibility - Collaboration), and UML (Unified Modelling Language) to develop your solution. 

_07Streams is a collection of solutions to typical problems using Java8+ lambdas and streams. 

_08Final is the final project. For your final project, you will create a multi-threaded game which extends base-code that will be provided to you. The game-engine is flexible and highly extendible, and you may create a wide variety of arcade-style 2D games such as Asteroids, Missile Comand, 1941, etc.  



Quarterterm exam during week 3 (multiple-choice exam - 1/2 hour in duration)


Midterm exam during week 6 (multiple-choice exam - 1 hour in duration)



Class participation is a percentage of the final grade. The participation evaluation will be based on: your questions/comments during class, your posts/replies to the listhost, your willingness to help others during lab, and your presentation of project solutions when called on to do so.  Also, ten finalists will be chosen to present their final-projects to the class.


Course Textbook

We will be using "Big Java: Late Objects, 2nd Edition" by Cay Horstmann as our textbook. ISBN: 978-1-119-32107-1. This book is available as both print and eBook; I recommend the latter. 

Course Prerequisites

Immersion programming (MPCS 50101) or passing score on programming placement exam.

Other Prerequisites

This course requires competency in Unix and Linux. Please plan to attend the MPCS Unix Bootcamp ( or review the UChicago CS Student Resource Guide here:

CAPP, MACSS and MSME students interested in taking this class should talk with their program's advisor.

Overlapping Classes

This class is scheduled at a time that conflicts with these other classes:

  • MPCS 50101-1 -- Concepts of Programming
  • MPCS 51040-1 -- C Programming
  • MPCS 51042-1 -- Python Programming
  • MPCS 51240-1 -- Product Management
  • MPCS 51100-1 -- Advanced Programming
  • MPCS 51205-1 -- Topics in Software Engineering

Eligible Programs

Masters Program in Computer Science Bx/MS in Computer Science (Option 3: Profesionally-oriented - Non-CS Majors) Masters Program in Computer Science (new students)