Skip to main content

Class-Based Program Design

Timeline: 104 - 130 hours

This course studies the class-based program design and the design of abstractions that support the design of reusable software and libraries. It covers the principles of object oriented program design, the basic rules of program evaluation, and examines the relationship between algorithms and data structures, as well as basic techniques for analyzing algorithm complexity. The recommended background is Systematic Program Design.

Keep in mind that the written notes are the primary source of learning in this class. Any videos should be considered supplementary. Credit: @pulkitkrishna, Discord

Starting from Assignment 3, the homework scales massively. It is believed to be a group project on campus. Self taught students can choose just one of the two problems given. Credit: @leafeningagent, Discord

Note that the video that goes with lecture 30 is inaccessable, watch this video instead. Credit: @nadi726, Discord

Course Syllabus

To make it easier on students, a syllabus was created to give a general sequence that the lectures & assignments should be taken. Credit: @nadi726, Discord

WeekTopic
Week 1Lecture 1: Data Definitions in Java
Lecture 2: Data Definitions: Unions
Week 2Lecture 3: Methods for Simple Classes
Lab 1
Lecture 4: Methods for Unions
Lecture 5: Methods for Self-referential Lists
Assignment 1
Week 3Lecture 6: Accumulator Methods
Lab 2
Lecture 7: Accumulator Methods, Continued
Assignment 2
Lecture 8: Practice Design
Week 4Lecture 9: Abstract Classes and Inheritance
Lab 3
Lecture 10: Customizing Constructors
Assignment 3
Lecture 11: Defining Sameness for Complex Data, Part 1
Week 5Lecture 12: Defining Sameness for Complex Data, Part 2
Lab 4
Lecture 13: Abstracting Over Behavior
Assignment 4
Lecture 14: Abstractions Over More Than One Argument
Week 6Lab 5
Exam 1
Lecture 15: Abstracting Over Types
Assignment 5
Week 7Lecture 16: Visitors
Lab 6
Lecture 17: Mutation
Assignment 6
Lecture 18: Mutation Inside Structures
Week 8Lecture 19: Mutation, Aliasing, and Testing
Lab 7
Lecture 20: Mutable Data Structures
Assignment 7
Lecture 21: ArrayLists
Week 9Lecture 22: ArrayLists
Lab 8
Lecture 23: For-each Loops and Counted-for Loops
Assignment 8
Lecture 24: While Loops
Week 10Lecture 25: Iterator and Iterable
Lab 9
Lecture 26: Hashing and Equality
Assignment 9 Part 1
Lecture 27: Introduction to Big-O Analysis
Week 11Lecture 30: Breadth-first Search and Depth-first Search
Lab 10
Exam 2
Lecture 28: Quicksort and Mergesort
Week 12Lecture 29: Priority Queues and Heapsort
Assignment 9 Part 2
Lab 11
Lecture 31: Dijkstra’s Algorithm for Single-source Shortest Paths
Lecture 32: Minimum Spanning Trees
Week 13Lab 12
Assignment 10 Part 1
Lecture 34: Implementing Objects
Lecture 35: Dynamic Programming
Week 14Lecture 35: Intro to OOD part 1
Assignment 10 Part 2
Lecture 35: Intro to OOD part 2