Java Programming

Title Java Programming (51036)
Quarter Autumn 2019
Instructor Adam Gerber (gerber@cs.uchicago.edu)
Website

Syllabus

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, etc. 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, OO design patterns, as well as certain Java libraries such as Swing. For their final-projects, students will develop a multi-threaded, arcade-style game. The course format is both lecture and lab. We will use 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

    Advanced Swing and Serialization

    Recursion, Collections, and Data Structures

    Multi-Threading

    Advanced Topics

 

Coursework

Coursework will be divided into four components:

Labs

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.

Projects

You will have five evaluated projects throughout this course (the lowest minor-project score is thrown out) and they will closely follow the learning objectives from the textbook and lectures.

 

proControl (10% of final grade, due 2nd week) is a collection of solutions to simple connonical problems related to flow control and implemented using the command-line.

 

proArrays (10% of final grade, due 3rd week) is similar to proControl, but requires you to use single and multi-dimensional arrays to solve the problems. This project is also implemented using the command-line.

 

proDice (10% of final grade, due 5th week) is a dice game that you will implement using Swing.

 

proPoker (10% of final grade, due 7th week) is a poker game that you will implement using Swing and will be similar to proDice only more difficult.

 

proFinal (30% of final grade, due 10th week) 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.  

 

Exams

Quarterterm exam during week 3 (multiple-choice exam - 1/2 hour in duration) 10% of final grade

 

Midterm exam during week 6 (multiple-choice exam - 1 hour in duration) 20% of final grade

 

Participation

Class participation is 10% 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" by Cay Horstmann as our textbook. ISBN: 978-1-118-08788-6. In addition to the materials in the textbook, Wiley has made advanced online chapters available to us.

 

Supplemental Reading: I've written a supplement to the course called “Programming Java” which will be available as a pdf.

Prerequisites (Courses)

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

Prerequisites (Other)

Satisfies

Core Programming

Time

Monday 5:30-8:30pm

Location

Ryerson 277