Skip to main content

OOD Selective Reading Guide

The guide is the main teacher. Use a source to repair a named gap, close it, and produce an independent example. Full-book reading adds time to the module estimate.

Book and local locatorPurposeStopping evidence
Fowler, Refactoring, contents/013-defining-refactoring-and-the-two-hats.mdObservable behavior and structural changeSeparate a refactor from an intentional repair
Fowler, 020-refactoring-architecture-and-yagni-and-refactoring-and-the-wider-software-development-process.mdCurrent simplicity versus guessed flexibilityA keep/inline decision with migration costs
Fowler, 028-code-smells-data-clumps-to-repeated-switches.mdCandidate value and dispatch boundariesOne diagnosis and a counter-hypothesis
Tom Long, Good Code, Bad Code, 017-2-3-4-interfaces.mdInterfaces and layersConsumer capability without provider leakage
Tom Long, 019-3-other-engineers-and-code-contracts.mdHow callers learn guaranteesA complete public operation contract
Tom Long, 056-8-3-1-class-inheritance-can-be-problematic.mdInheritance risksA concrete violating client and an alternative

Local roots are Books/Refactoring/contents/ and Books/Good Code, Bad Code - Think like a software engineer/contents/. These selected chunks were consulted; the entire books were not audited. The author of Good Code, Bad Code is Tom Long, correcting the previous attribution. Use the Refactoring book index or Good Code, Bad Code book index to locate topics. Index links do not promise a particular exercise or exact chunk.

Optional comparison and depth​

Clean Code supplies naming/function heuristics; compare them with the contract and change-pressure evidence instead of treating line counts or comment removal as universal rules. Head First Design Patterns supplies examples; the full pattern catalogue belongs to Modules 3–4. OOAD offers an academic comparison. These are optional reinforcement, not additional completion quotas.

Primary online readings: Fowler on code smells, Fowler on YAGNI, and the Liskov/Wing behavioral subtyping paper page. Use the last as optional formal depth on properties preserved by substitution; do not confuse bounded tests with a theorem. For Java examples, consult the versioned List API for unmodifiable collections, mutable elements and optional operations. No Java installation is needed for the Python lab; Java/TypeScript fragments in lessons are illustrative sketches.