---
title: CSCI 2600 Principles of Software
---

## Recitations
The following are recitations I have prepared for a weekly one hour session:

[Recitation 1](recitation01.pdf)
- Topics: Introduction, Eclipse Setup

[Recitation 2](recitation02.pdf)
- Topics: Variable Models, Stack/Heap, Inheritence, Interfaces, Abstract Classes, Mutability, Strong/Weak Typing, Static/Dynamic Typing

[Recitation 3](recitation03.pdf)
- Topics: Compilation/Interpretation, Subtype Polymorphism, Static/Dynamic Binding, Overloading/Overriding, Forward/Backward Reasoning

[Recitation 4](recitation04.pdf)
- Topics: Reasoning through Loops, Loop Invariants, Correctness, Termination, Induction

[Recitation 5](recitation05.pdf)
- Topics: JavaDoc, Specification Strength, Type Variances, ADTs

[Recitation 6](recitation06.pdf)
- Topics: ADT Methods, Immutability, Representation Invariant/Exposure, Defensive Programming, Assertions, Exceptions

[Recitation 7: Exam Review](recitation07)

[Recitation 8](recitation08.pdf)
- Topics: Bugs, Unit/Integration/Acceptance Testing, White/Black Box Testing, Equivalence Partitioning, Boundary Value Analysis, Reference/Value Equality, Equality Relations, Hash Functions

[Recitation 9](recitation09.pdf)
- Topics: Overloading/Overriding, Dispatching, Polymorphism, SOLID, Subclassing, True Subtypes, Liskov Substitution Principle

[Recitation 10](recitation10.pdf)
- Topics: Design Patterns, Creational Patterns, Structural Patterns, Behavioral Patterns, Builder, Factory, Singleton, Adapter, Decorator, Flyweight, Mediator, Observer, Visitor

[Recitation 11: Exam Review](recitation11)

Recitation 12: Exam Review

[Recitation 13](recitation13.pdf)
- Topics: Technical Debt, Antipatterns, Code Smells, Refactoring,
Extract Method, Move Method, Replace Temp with Query, State Design Pattern,
Usability, Fitt's Law, Prototyping, User Testing

[Recitation 14: Final Thoughts and Final Exam Review](recitation14.pdf)

