Java Programming

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

 http://java-class.cs.uchicago.edu/

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)

MPCS 50101 Concepts of Programming (or programming waiver)

Prerequisites (Other)

Satisfies

Core Programming

Time

Mondays, 5:30-8:30

Location

Ryerson 251