### Syllabus

#### Week 1

5/04:

Lecture 1: Data Definitions in Java

Designing Data: Simple classes, classes with containment

Lecture 2: Data Definitions: Unions

Designing unions of classes; self-reference

5/05:

Lecture 3: Methods for simple classes

Methods for simple classes and classes with containment

Lecture 4: Methods for unions

Methods for unions of classes and classes with self-reference

5/06:

Lecture 4: Methods for unions

Methods for unions of classes and classes with self-reference

Lecture 5: Methods for self-referential lists

Designing methods for complex class hierarchies

5/07:

Lecture 5: Methods for self-referential lists

Designing methods for complex class hierarchies

Lecture 6: Accumulator methods

More complicated methods for self-referential data

Lab:

Lab 1: Introduction to Eclipse and Simple Data Definitions

Data definitions in Java; Eclipse IDE; Handins homework server

Lab 2: Working with Self-Referential Data

Designing methods in Java: classes, containment, unions, self-reference

#### Week 2

5/11:

Lecture 6: Accumulator methods

More complicated methods for self-referential data

Lecture 7: Accumulator methods, continued

(continued) Methods with accumulators

5/12:

Lecture 7: Accumulator methods, continued

(continued) Methods with accumulators

Lecture 8: Practice Design

Recap: designing methods and wish lists for a larger problem

5/13:

Lecture 9: Abstract classes and inheritance

Abstract classes and inheritance

Lecture 10: Customizing constructors for correctness and convenience

Customizing constructors for correctness and convenience

5/14:

Lecture 10: Customizing constructors for correctness and convenience

Customizing constructors for correctness and convenience

Lecture 11: Defining sameness for complex data, part 1

Sameness of data values

Lab:

Lab 3: Methods for Complex Data

Designing methods for self-referential data

Lab 4: Working with Abstract Classes, Problem Solving

Practice with abstract classes and constructors

#### Week 3

5/18:

Lecture 11: Defining sameness for complex data, part 1

Sameness of data values

Lecture 12: Defining sameness for complex data, part 2

More of the same

5/19:

Lecture 13: Abstracting over behavior

Overview of world programming; Function objects

Lecture 14: Abstractions over more than one argument

More function objects

5/20:

Lecture 14: Abstractions over more than one argument

More function objects

Lecture 15: Abstracting over types

Generics

5/21:

Exam 1

Lab:

Lab 5: Generics and higher-order functions

Functional world games

No labExam 1: online

#### Week 4

5/25:

No class: Memorial Day

5/26:

Lecture 16: Visitors

Visitors

5/27:

Lecture 17: Mutation

Creating cyclic data, mutation

Lecture 18: Mutation inside structures

Testing mutation methods, indirect cycles

5/28:

Lecture 19: Mutation, aliasing and testing

Aliasing and equality, revisited

Lab:

Lab 6: Parametric data and visitors

Working with function objects

Lab 7: Working with Cyclic Data

Generics and Visitors

#### Week 5

6/01:

Lecture 19: Mutation, aliasing and testing

Aliasing and equality, revisited

Lecture 20: Mutable data structures

Removing items from lists, mutable lists

6/02:

Lecture 21: ArrayLists

Direct-access data structures: ArrayList; swapping two items, mapping over ArrayLists, for-each loops

Lecture 22: ArrayLists

ArrayLists and binary search; for-each loops; working with indices

6/03:

Lecture 22: ArrayLists

ArrayLists and binary search; for-each loops; working with indices

Lecture 23: For-each loops and Counted-for loops

For-each loops and counted-for loops

6/04:

Lecture 24: While loops

While-loops

Lecture 25: Iterator and Iterable

Iterators and Iterables

Lab:

Lab 8: Understanding Mutation

Working with mutable and cyclic data

Lab 9: An Introduction to the JUnit testing library

Loyd's 15 puzzle: working with ArrayLists, loops and imperative worlds

#### Week 6

6/08:

Lecture 26: Hashing and Equality

HashMap, equals

6/09:

Lecture 26: Hashing and Equality

HashMap, equals

Lecture 27: Introduction to Big-O Analysis

Big Oh: searching and sorting; insertion sort and selection sort

6/10:

Lecture 28: Quicksort and Mergesort

Big Oh: searching and sorting; quicksort and merge sort

Lecture 29: Priority Queues and Heapsort

Big Oh: searching and sorting; HeapSort -- Priority Queue

6/11:

Exam 2

Lab:

Exam review

Exam 2: online

#### Week 7

6/15:

Lecture 28: Quicksort and Mergesort

Big Oh: searching and sorting; quicksort and merge sort

6/16:

Lecture 29: Priority Queues and Heapsort

Big Oh: searching and sorting; HeapSort -- Priority Queue

Lecture 30: Breadth-first search and Depth-first search on graphs

Graph algorithms: breadth-first search, depth-first search

6/17:

Lecture 31: Dijkstra’s Algorithm for single-source shortest paths

Graph algorithms: Dijkstra's algorithm, and comparison with BFS/DFS

Lecture 32: Minimum Spanning Trees

Minimum spanning trees: Prim's and Kruskal's algorithms

6/18:

Lecture 34: Implementing Objects

Implementing Objects

Lab:

Lab 11

Heapsort, stress tests

Lab 12

TBD