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.
• Program Control
• File and Basic I/O
• Interfaces and Abstract Classes
• Complex Object Relationships
• Exceptions and Debugging
• GUI Programming and Swing
• Lambdas and Streams
• Recursion, Collections, and Data Structures
• 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.
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.