Syllabus
Week 1
9/3: Lecture 1: Data Definitions in Java
Designing Data: Simple classes, classes with containment
9/4: Lab 1
Data definitions in Java; Eclipse IDE; WebCAT homework server
9/4: Lecture 2: Data Definitions: Unions
Designing unions of classes; self-reference
Week 2
9/8: Lecture 3: Methods for simple classes
Methods for simple classes and classes with containment
9/10: Lecture 4: Methods for unions
Methods for unions of classes and classes with self-reference
9/11: Lab 2
Designing methods in Java: classes, containment, unions, self-reference
9/11: Lecture 5: Methods for self-referential lists
Designing methods for complex class hierarchies
Week 3
9/15: Lecture 6: Accumulator methods
More complicated methods for self-referential data
9/17: Lecture 7: Accumulator methods, continued
(continued) Methods with accumulators
9/18: Lab 3
Designing methods for self-referential data
9/18: Lecture 8: Practice Design
Recap: designing methods and wish lists for a larger problem
Week 4
9/22: Lecture 9: Abstract classes and inheritance
Abstract classes and inheritance
9/24: Lecture 10: Customizing constructors for correctness and convenience
Customizing constructors for correctness and convenience
9/25: Lab 4
Practice with abstract classes and constructors
9/25: No class
Week 5
9/29: Midterm 1
10/1: Lecture 11: Defining sameness for complex data, part 1
Sameness of data values
10/2: Lab 5
Equality, functional world games
10/2: Lecture 12: Defining sameness for complex data, part 2
More sameness
Week 6
10/6: Lecture 13: Abstracting over behavior
Overview of world programming; Function objects
10/8: Lecture 14: Abstractions over more than one argument
More function objects
10/9: Lab 6
Working with function objects
10/9: Lecture 15: Abstracting over types
Generics
Week 7
10/13: NO CLASS
Columbus Day
10/15: Lecture 16: Visitors
Visitors
10/16: Lab 7
Generics and Visitors
10/16: Lecture 17: Mutation
Creating cyclic data, mutation
Week 8
10/20: Lecture 18: Mutation inside structures
Testing mutation methods, indirect cycles
10/22: Lecture 19: Mutation, aliasing and testing
Aliasing and equality, revisited
10/22: Lab 8
Working with mutable and cyclic data
10/23: Lecture 20: Mutable data structures
Removing items from lists, mutable lists
Week 9
10/27: Lecture 21: ArrayLists
Direct-access data structures: ArrayList; swapping two items, mapping over ArrayLists, for-each loops
10/29: Lecture 22: ArrayLists
ArrayLists and binary search; for-each loops; working with indices
10/30: Lab 9
Loyd’s 15 puzzle: working with ArrayLists, loops and imperative worlds
10/30: Lecture 23: For-each loops and Counted-for loops
For-each loops and counted-for loops
Week 10
11/3: Lecture 24: While loops
While-loops
11/5: Lecture 25: Iterator and Iterable
Iterators and Iterables
11/6: Lab 10
Practice implementing iterators
11/6: Lecture 26: Hashing and Equality
HashMap, equals
Week 11
11/10: Lecture 27: Introduction to Big-O Analysis
Big Oh: searching and sorting; insertion sort and selection sort
11/12: Lecture 28
Big Oh: searching and sorting; quicksort and merge sort
11/13: Lab 11
Heapsort, stress tests
11/13: Lecture 29: Priority Queues and Heapsort
Big Oh: searching and sorting; HeapSort – Priority Queue
Week 12
11/17: Lecture 30
Graph algorithms: breadth-first search, depth-first search
11/19: Lecture 31
Graph algorithms: Dijkstra’s algorithm, and comparison with BFS/DFS
11/20: Lab 12
TBD
11/20: Lecture 32
Minimum spanning trees: Prim’s and Kruskal’s algorithms
Week 13
11/24: Lecture 33
Implementing Objects
Week 14
12/1: Lecture 34
Design choices in object-oriented languages: JavaScript
12/3: Lecture 35
Other languages and wrapup