Note: Instructors can now make notes to themselves that can be made visible on your laptop but invisible on kcs01.kzoo.edu if you put them in tag with class 'instNotes' and if you set the display for instNotes to none on kcs01 and to something like initial on your laptop. Just be sure not to add/commit instructorNotes.css in either place, otherwise they won't be different.

IMPORTANT NOTE: The following schedule represents a current best guess concerning actual due dates (and everything else), to give you a general idea of the pace and timing of the class. Specific details are likely to change as the quarter progresses.
Last modified on .

The template files used frequently in this course are: the main method class template, the normal class template.

Reading assignments are from the Second Edition of Think Java: How to Think Like a Computer Scientist by Downey & Mayfield, unless specified otherwise.

Getting Ready (Before Quarter Begins)

Skip directly to Week 1 | Week 2 | Week 3 | Week 4 | Week 5 | Week 6 | Week 7 | Week 8 | Week 9 | Week 10

DAY PREPARATION IN-CLASS TOPICS/ACTIVITIES FOLLOW-UP ACTIVITIES
Week 1
Monday
(M1)
Get the book, join the CS Collaboration Center in Microsoft Teams, and download BlueJ. (See Getting Ready above.)

Video:
- Getting Started with BlueJ and Java (7:46 min)
Introduction / Syllabus
Format of this course

Programming & Computer Science
(Video for review. — 4 min)

Introduction to Programming and Java
(Video for review. — 9.5 min)

Lab 1: Getting Started (Exercises 1 - 3)
Start Programming Project 1a
Study the Syllabus, especially the sections on Attendance, Assignments, and Collaboration and the Honor System.

Programming Project 1a
LAB 1
Videos:
- JavaDoc Documentation Comments (3:40 min)
- Getting Started with Lab 1 (4 min)
- Numbers & Strings (7 min) • [slides]
- Variables & Assignment (9 min) • [slides]
- Primitive Types in Memory (6.5 min)

Reading:
Read Chapter 1 from Think Java. You may skim the section on Compiling Java Programs (pp. 4-5) if you like.
Read Chapter 2 from Think Java and the Remainder Operator section on p. 37 of Chapter 3 (just the one page). (You may skim the sections on "The Scanner Class" (pp. 30-31) and "The Scanner Bug" (pp. 39-40).
Answer Questions about videos: Numbers, Strings, Variables, Assignment

Do Exercises 4 - 6 in Lab 1: Getting Started
Work on Programming Project 1a
Start with Aquarium Lab Series: Mini-Lab Entrance Assignment
Wednesday
(W1)
Videos:
- Classes as Blueprints for New Types (8.5 min) • [slides]
- Object Types (15 min)
- Preview of today's Mini-Lab Results (1.5 min)

Due on Kit:
- Lab 1: Getting Started (Exercises 1 - 3)
- Programming Project 1a
- Aquarium Lab Series: Mini-Lab Entrance Assignment
Answer Questions about videos: Constructing Objects, Reading Documentation, Invoking Methods

Aquarium Lab Series: Mini-Lab #1 Creating Fish in an Aquarium
Friday
(F1)
Videos:
- Basic for Loops (10.3 min) • [slides on loops] [slides on Boolean Operations]
- Preview of today's Mini-Lab Results (1.5 min)

Reading:
Read the first section of Chapter 5 (p. 63 and the first 2 lines of p. 64) in Think Java.
Read the sections on "The for Statement" and "Nested Loops" on pp. 81-83 of Chapter 6 in Think Java.
Aquarium Lab Series: Mini-Lab #2 Keep on Moving
Remind students to Download at least one book from Project Gutenberg and watch videos before Lab.
Complete the Before Getting Started section of tomorrow's Lab, by selecting and downloading a plain text eBook.
DAY PREPARATION IN-CLASS TOPICS/ACTIVITIES FOLLOW-UP ACTIVITIES
M2
MLK Day - No Class
LAB 2
Video:
- Functions/Methods, Parameters, & Return Values (13.5 min) • [slides]

Pre-Lab Preparation:
Complete the Before Getting Started section of today's Lab
Optional: Watch this video about creating a file reader object. (2.25 min) [A follow-up video will show how to use the reader object.]
Textual Analysis Lab Series: Reading and Printing Lines from a File
Review Conditions and Random Behavior:
Review & Think-Pair-Share

Practice Quiz on If Statements
W2
Videos:
- Boolean Expressions and If Statements (12 min) • [slides]
- Random Behavior (5 min) • [slides]
- Preview of today's Mini-Lab Results (1.5 min)

Reading:
Read Chapter 5 in Think Java.
Read Concept Sections from Aquarium Lab Series: Mini-Lab #3 A Whirl of Color and answer the Stop and Think questions.
Quiz #1 Conditional (if else) Statements

Aquarium Lab Series: Mini-Lab #3 A Whirl of Color
F2
Due on Kit:
LAB 2: Textual Analysis Lab Series: Reading and Printing Lines from a File

Aquarium Lab Series: Mini-Lab #4 More Colors, More Freedom, More Interesting!
DAY PREPARATION IN-CLASS TOPICS/ACTIVITIES FOLLOW-UP ACTIVITIES
Week 3
M3
Videos:
- ArrayLists and the For-Each Loop (10:43 min) • [slides]
- Preview of today's Mini-Lab Results (1.5 min)

Reading:
Quick Reference List of ArrayList methods.
ArrayLists

Aquarium Lab Series: Mini-Lab #5 More Fish!
Complete the Aquarium Lab Series which will be due W3 (Wednesday Week 3). Here's a copy of the rubric.
LAB 3
Video:
First 14 min of Variations on a Theme: Looping through an ArrayList
Sub-Topics for Later Reference:
Intro of video and MenuItem class used in this demo (0:00 - 2:30)
Review of reading class documentation (2:30 - 3:20)
(Digression: The .toString method (2:54 - 3:16)
Creating an ArrayList (3:42 - 4:14)
Reading in whole file and filling the ArrayList (4:17 - 6:59)
Stepping through a list using the 2 types of for loops (7:00 - 9:40)
Summing items in a list (10:09 - 12:18)
Computing the average (12:19 - 14:20)
(Digression: Alyce's First Law of Programming — 12:27 - 12:38)
Reference: clean copy of all the loops in this video, including Process All, Sum All, and Average (and more)
Think-Pair-Share: Practice Quiz on Reading and Understanding Code (arithmetic operations, operation precedence, and loops; quiz is due by Friday)
Instructions: Think about the questions and talk them through with each other before submitting the "quiz" to see the answers.

Textual Analysis Lab Series Lab:
Counting Words (Loops, ArrayLists, and Strings)

If you have time, get started on the first exercises in Further Textual Analysis (ArrayList Traversal Patterns)
Complete Lab

Two useful quick references on ArrayLists:
The Intro to ArrayLists slide lists a few of the most common ArrayList methods.
The ArrayList Details slide gives a good summary of key ArrayList characteristics and methods.
W3
Due on Kit:
Make a copy of your Aquarium Lab Series folder named YourName_Aqua_MLs, zip it, and submit to Kit. (Here's a copy of the rubric.)

Video: ArrayList Loop Patterns
2nd half (roughly) of Variations on a Theme: Looping through an ArrayList - 15 min, starting at 14:20
Sub-Topics for Later Reference:
Finding and printing a subset of items in a list (14:20 - 18:23)
(Digression: Using .equals instead of == with Strings — 15:45 - 17:12)
Formatting with tabs and newlines (8:13 - 8:17, 18:23 - 19:05, 20:21 - 20:30, 24:56 - 25:05)
Printing an element that matches two criteria (20:32 - 23:58)
(Digression: Advantage of using .contains instead of .equals with Strings — 22:47 - 23:58)
Printing all elements that match one criterion (23:58 - 25:19)
Using the .toString method (24:24 - 25:48)
Find how many elements are less than some value (25:48 - 27:43)
(Digression: Don't need else in these "finding" loops — and it would break the code — 27:17 - 28:24)
Wrap-up (talks about methods that return ArrayLists of results rather than printing them — 28:24 - 29:29)
Reference: clean copy of all the loops in this video, including Searches and Subsets (and more)
Further Textual Analysis (ArrayList Traversal Patterns)
Complete Mini-Lab

Here's a 2020 article about actual word analysis at work: We Analyzed the Comments on the Atrocious "Dr. Jill Biden" Op-Ed: Men and Women Saw Something Different
F3
Due on Kit:
Lab 3: Counting Words (part of the Textual Analysis series)
Due before Class:
W3 Mini-Lab: Further Textual Analysis (ArrayList Traversal Patterns)
Video:
Watch More Variations on the ArrayList Looping Theme: Finding a Minimum or Maximum Value in an ArrayList - 7 min
Reference: clean copy of all the loops so far, including Find Min/Max, and Find Top N at the end
Quiz #2 Reading and Understanding Code

Think-Pair-Share: Practice Quiz on Constructing and Looping through an ArrayList (quiz is due by Tuesday)

Begin Project: Word Frequency Project: Finding Maximum Values
Continue working on Project (due Tuesday)
 
DAY PREPARATION IN-CLASS TOPICS/ACTIVITIES FOLLOW-UP ACTIVITIES
Week 4
M4
Review: Practice Quiz on Constructing and Looping through an ArrayList (quiz is due by Tuesday)
Continue Project: Word Frequency Project: Finding Maximum Values
LAB 4
Due before Lab:
Word Frequency Project: Finding Maximum Values

Optional Review:
From Week 1: Classes as Blueprints for New Types - 8.5 min (slides)
From Lab 2: Functions/Methods, Parameters, & Return Values - 13.5 min (slides)

Video:
Refactoring — 6.5 min (slide)
Our first refactoring exercise will be refactoring the Aquarium Lab Series in Lab 4 and then we will refactor the Textual Analysis program in Lab 5.
Think-Pair-Share: Practice Quiz on Writing Code — 6 short-answer code-writing questions representing the first third of the course. Topics include declaring variables, constructing objects, calling methods, Boolean (true/false) expressions, if statements, and simple loops. An expression is a part of a statement that evaluates to a value, such as 2 + 3, i < j, or aFish.atWall(). (Answer Key; quiz due by Friday)

Fish With Class

Follow-Up Video:
Watch Alyce Refactor Aquarium Program - 20.5 min
(Whiteboard notes from a previous quarter about introduction of Simulation class)
W4
Video:
Looking Inside the MenuItem Class - 19 min (MenuItem.java; text version for viewing)
Introduces instance variables (aka state or attributes), constructors, simple methods

Reading:
Read Chapter 11 of Think Java up through the section on "The toString Method", stopping on p. 168 at the beginning of the section on "The equals Method".
Quiz #3 Constructing and Looping through an ArrayList

Review:
Objects (Instances) are Data + Operations
Objects as Black Boxes / Data Hiding
3 types of Methods: Constructors, Observers, Modifiers
Pros and Cons of "Getter" & "Setter" Methods

Activity: Create Menu class, with addMenuItem, printAll, and getPriceOf(itemName) methods
Companion Classes: MenuItem.java, MenuItemReader.java, MainForMenuDemo.java, MenuItems.txt (You can put these classes in a new folder, then choose Project -> Open Non BlueJ..., which will create a project for these.)
Students should be creating this! Menu.java
This uses an ArrayList in main: LoopPatterns2020.java
If students seem mostly on track, could do Friday's Think-Pair-Share here and cancel class on Friday
F4
Think-Pair-Share: Practice Quiz on Identifying Errors -- Match 6 incorrect code snippets with the appropriate error description. (quiz due by Monday of 5th Week)

Catch-Up Work Day
(or Rest Day)
 
DAY PREPARATION IN-CLASS TOPICS/ACTIVITIES FOLLOW-UP ACTIVITIES
Week 5
M5

Video:
Instance Variables, Local Variables, and Parameters — 17 min (slides)
Quiz #4 Writing Code

Think-Pair-Share: Practice Quiz on Writing ArrayList Loops in Methods (quiz due by Wednesday) (Sample solution -- you can also use a traditional style forloop in Question 2)

Start Refactoring the Textual Analysis Project
LAB 5
Optional "Watch Alyce Code" videos: (only watch if you find them useful)
Refactoring Initial "Word Counter" Textual Analysis Lab - 36 min
(The video refactors the code from the original version of the program. It covers many related sub-topics such as what to put in a constructor vs. a method; when to use instance variables, local variables or parameters; reducing duplicated code; and regression testing. The video description includes a "table of contents" showing when various topics are covered.)
Continue with Refactoring the Textual Analysis Project
Refactoring the Rest of the Textual Analysis Program - 46 min
(This video refactors the rest of the project. Again, it covers other topics as well, such as for loops vs. while loops; style guidelines; and using this program for simple digital humanities analysis. The video description includes a "table of contents" showing when various topics are covered.)
W5
Pre-Class Preparation:
GridPlotter Project, Exercises 1-3 (here's a Markdown template for Exercise 3)
(Don't know Markdown? Intro to Markdown in plain text or Markdown format; you can edit a Markdown file in any tool that can handle plain text files, e.g., VS Code, Atom, Brackets, Spyder, SublimeText, vi/emacs, etc.)
Topic to be covered in class:
showMessageDialog vs throwing an exception (e.g., for method not implemented yet)

GridPlotter Project, Exercise 4, items 1 - 4, 8
(You may also do any of the other exercises that you want.)
Complete the GridPlotter Project (due Monday)
F5
Due before Class(Spring Only):
Refactoring the Textual Analysis Project
Winter: Break Day - No Class
 
Spring:
Complete the GridPlotter Project
Quiz #5 Identifying Errors
DAY PREPARATION IN-CLASS TOPICS/ACTIVITIES FOLLOW-UP ACTIVITIES
Week 6
M6
Videos:
Introduction to the Marine Biology Simulation (MBS) Case Study - 8.5 min
Watch first 12 min of Running the MBS Case Study and a Quick Peek at Some Code (and a quick introduction to arrays)
First 7 min: Intro to Graphical User Interface, how to choose different starting files, etc. (And why have different files?)
7:25: MBSDemo1 (and comparison to Aquarium Lab Series)
8:50: MBSDemo2 and Simulation class
10:10: Arrays (similar to ArrayLists, but different!)
12:15: Stop when it starts to talk about the Run button.
14:15: Definitely stop when it starts to talk about MBSApp, if you haven't already!

Prepare for the Marine Biology Simulation case study:
Read Why a Case Study?
Read Pat's Introduction (including "Experimenting with the Program") through Exercise 1
Complete Exercise 1 in Pat's Introduction

Due on Kit:
GridPlotter: Answers to questions from Exercise Set 3 and finished project
Marine Biology Simulation case study:
Introduction (Exercises 2 and 3)
Demo 1 and Demo 2
You will be handing in the Analysis Questions from Pat's Introduction (Markdown template) and Demos 1 and 2 (Markdown template)
Read MBS: Conceptual Understanding
Read MBS: Understanding Code (through MBSApp)
Optional: Watch 2 min about MBSApp in Running the MBS Case Study and a Quick Peek at Some Code (around 14:30 - 16:20)
Not Optional: Do Exercise on MBSApp
Read Understanding Code (BoundedGrid, Location, Direction)
LAB 6
Videos:
Intro to Inheritance - 15 min (slides)
Supplement: Inheritance Diagrams (Starter Set) (pdf document)
Reading Class Documentation for Inheritance Information, the Object class, and the .equals() and .toString() methods - 10 min

Due on Kit:
MBS Analysis Questions from Pat's Introduction (Markdown template) and Demos 1 and 2 (Markdown template)
Work on Location and Direction Analysis Questions (Markdown template); Submit to Kit when done
Helpful Resources:
Quick Reference on GridPkg methods (also ArrayList and some common Color constants)
Full Class Documentation for all classes in the GridPackage (Click on the edu.kzoo.grid package to focus on relevant classes.)

Read about Fish constructors and fields in MBS: Understanding Code

Work on the Analysis Questions about Client Code, Instance and Class Variables, and Fish Constructors (Markdown template)
Complete Location and Direction Analysis Questions; Submit to Kit when done

Complete the Analysis Questions about Client Code, Instance and Class Variables, and Fish Constructors

Optional Resource: Grid Package Inheritance Diagrams
W6
Reading:
Read Chapter 14 of Think Java. The chapter refers to three classes from previous chapters: Card, Deck, and Pile, but you don't need to know their details to understand the extended example in this chapter.
[Note: Pg. 207 refers to an "overloaded" method: this means two (or more) methods with the same name but different parameters and different behavior. Which one gets executed depends on the number and type of parameters you pass.]
Reference: Quick Reference List of ArrayList methods
Read the section about Inheriting and Redefining Methods in MBS: Understanding Code
Read the section about Fish Movement in MBS: Understanding Code

Video:
Static Keyword - 9 min
(Classes used in this video: StaticIllustrationDriver.java, Student.java)

Due on Kit:
MBS Location and Direction Analysis Questions from Understanding Code (Markdown template)
Quiz #6Writing ArrayList Loops in Methods

Work on the Analysis Questions about Inheriting and Redefining Methods, the move method, the nextLocation and emptyNeighbors methods. (Markdown template)

Read the Overall Notes on the Fish Class in MBS: Understanding Code

Work on the Exploring Inheritance Analysis Questions (Markdown template); Submit to Kit when done.
Complete the Fish and Exploring Inheritance Analysis Questions; Submit to Kit when done.
F6
(Winter 2024) MID-QUARTER BREAK
Assignments due M7
Videos:
Subclasses are NOT Subsets! - 12 min

Optional Videos:
Watch Alyce Program SimpleFish - 7 min
Watch Alyce Program WhiteFish - 8 min

Due on Kit:
All MBS Analysis Questions about the Fish class from Understanding Code (Markdown template)
NO CLASS - We will do these on M7

First and Second Simple Subclasses (SimpleFish and WhiteFish)

DarterFish
Markdown template for expected & actual results, analysis questions
Complete First and Second Simple Subclasses
Continue with DarterFish - due Tues along with SlowFish
Optional: Watch Alyce Program DarterFish (Unedited - 18 min)
DAY PREPARATION IN-CLASS TOPICS/ACTIVITIES FOLLOW-UP ACTIVITIES
Week 7
M7
Video:
The this and super Keywords (context: Fish and SlowFish classes) - 17 min
0:30: What is client code?
1:30: this to refer to instance variables or call local methods (in Fish class)
3:22: Review of toString method
5:40: Introduction to SlowFish
7:00: Review of static for class variables
7:54: this to call an alternative constructor
10:06: super to call a superclass constructor
12:35: Review of RandNumGenerator.getInstance()
13:30: super.method to call an overridden method
14:43: Summary of SlowFish class
16:18: summary of uses for this and super
Reading:
Read the first half of Chapter 17 in Think Java (up to Blinking Polygons on p. 250). This section reviews extending classes and multiple constructors, and introduces polymorphism on p. 250. Since we won't be implementing Polygons, you may skim the section on Regular Polygons.
Quiz #7 Inheritance Concepts

Polymorphism & Dynamic Binding (slides)

MBS: SlowFish

Based on how the class is doing, decide whether to make Breeding and Dying optional or required. If optional, tell students ahead of time so they can make decisions about what they want to do. They might even want to do the New Classes PP first, and only do Breeding and Dying if they have the time.
Video:
Code Reuse, with Fish Subclasses as Examples - 3 min
LAB 7
Due on Kit:
DarterFish expected & actual results, analysis questions
DarterFish and SlowFish

Video:
Review of MBS Class Hierarchy - 4 min
Optional Make Fish class more interesting with a Dynamic Population (Breeding and Dying)
OR Catch up on everything we've been doing to this point.
GridPkg Documentation
Collection of fish images
Culminating MBS Programming Assignment: New Fish Subclasses Programming Project (may be done in groups)
W7
Could create a video on testing and debugging!
Topics to be covered in class:
Slide: Tips on Testing and Debugging
Object-oriented Design

Marine Biology Simulation case study: Continue with works in progress —
Breeding and Dying Fish (optional)
Fish Subclasses Programming Project (required)
 
F7
Note: Classes are objects too!

Marine Biology Simulation case study: Continue with works in progress —
Breeding and Dying Fish (optional)
Fish Subclasses Programming Project (required)
Optional Resource:
If you want to look at the code (not just the class documentation) for GridObject, TextCell, ColorBlock, or PictureBlock, it is available for download: Grid Package on GitHub
DAY PREPARATION IN-CLASS TOPICS/ACTIVITIES FOLLOW-UP ACTIVITIES
Week 8
M8
Why is Inheritance So Important?
Code Reuse — This was subject of the M7 follow-up video and is briefly revisited in the next video.
Polymorphism and Dynamic Binding; Review of the Big Ideas of Inheritance - 12 min
Where are we now? What's next?

Overview of Percolation and Final Project Ideas, so people can decide what to work on next.

Have covered OO Ideas and Other Paradigms here in the past
Brief intro to Final Programming Project Options with videos.
LAB 8
Due on Kit:
MBS: Programming Project

Lab Preparation:
Read the Getting Started section of the Percolation Lab and do Exercises 1 - 3.
Percolation Lab (Note: the heart of this lab is in Exercises 6 - 9)
Finish the Percolation Lab (Vertical Percolator) and submit it to Kit. Get started on the Gravitational Percolation mini-lab (Exercise 1).
W8
Due on Kit: Lab 8: Percolation

Mini-Lab Preparation: Do Exercise 1 in the Gravitational Percolation mini-lab.

Review: Tips on Testing and Debugging (Don't forget Regression Testing!)
Mini-Lab: Gravitational Percolation
Finish the Gravitational Percolation mini-lab. You may also wish to get started on Friday's All Direction Percolation mini-lab.
F8
Video: Abstract Superclasses - 9.5 min (This is relevant to both Percolation and the Final Projects.)
Review: Scope and public/private/protected

Mini-Lab: All Direction Percolation

The Percolation Programming Project has usually been assigned here.
DAY PREPARATION IN-CLASS TOPICS/ACTIVITIES FOLLOW-UP ACTIVITIES
Week 9
M9
Videos:
Arrays & ArrayLists - 9 min (slides)
While Loops - 7 min (WhileLoopIllustration.java, Student.java)
Work on MBS, Percolation, or
Final Programming Project

Misc. topics for Weeks 9 & 10:
Scope, Review & public/private/protected
Casting
Packages
Review of Regression Testing
Exception Handling
Brief intro to Final Programming Project Options with videos.
LAB 9
Due on Kit: Percolation Mini-labs (Gravitational and AllDirections)

Videos:
Linear Search Animation, with Best/Worst Case Analysis - 5 min; analysis starts at 3:17
Binary Search Animation - 10 min
Binary Search Analysis - 2+ min

The Percolation Programming Project has usually been due here.
Think-Pair-Share: Practice Quiz on Types

Work on Final Programming Project
W9 Quiz #8 Variable and Method Return Types

Work on Final Programming Project
F9
Work on Final Programming Project
DAY PREPARATION IN-CLASS TOPICS/ACTIVITIES FOLLOW-UP ACTIVITIES
Week 10
M10
 
Winter: Continue working on Final Project
Spring: Memorial Day - No Class
LAB 10
Sorting Algorithms

Note that this is slightly different from the one in 107 (is that also used in 105?), so that students don't do exactly the same thing in both -- but are they still too similar?
 
W10
Quiz — Terminology (Matching quiz)
(There is no practice quiz for this quiz) Terminology Quiz: You should be familiar with the following terms: class, abstract class, class documentation, instance variable, class variable, local variable, constructor, method, parameter, parameter type, return type, inheritance, subclass, superclass.
Quiz #9 OOP Terminology.
(There is no practice quiz for this quiz)
More on Quiz #9

You should be familiar with the following terms: class, abstract class, class documentation, instance variable, class variable, local variable, constructor, method, parameter, parameter type, return type, inheritance, subclass, superclass.


Work on Final Projects
 
F10
Due on Kit: Final PP (submit zip file of your code). You have until Sunday, March 17th by 11:59PM
OO: Big Ideas and How does OO fit with other paradigms? (including Event-Driven) (slides)
Wrap-up
Course Evals
 
Exam Week There will be no final exam in this class this quarter.