π FIT2099: Object-Oriented Design and Implementation
Map of Content
Index for FIT2099 Object-Oriented Design and Implementation (Java). Every design note carries a Mermaid
classDiagram; designs are judged on Coupling / Cohesion / Extensibility. Start with OOP Building Blocks (Class, Object, Field, Method).
π Assessment Map
- Assessment: engine-based Java group project across milestones + individual work.
- Assessed skills: design rationale in Coupling/Cohesion/Extensibility terms, UML/Mermaid diagrams, SOLID application, smell β refactor.
π§° Toolkit Cheatsheets
- π FIT2099 Unit Cheatsheet β principles, smellsβrefactors, contracts, UML rules
- Java Toolkit (Cheatsheet) β code a class from a blank editor: class anatomy, modifiers, types/
==-vs-equals, collections, inheritance/polymorphism/interfaces/enums, exceptions/DbC/CQS, DI/defensive copying, Factory Method, and the smellβrefactoring quick-map. - UML Toolkit (Cheatsheet) β draw from a blank page: class-diagram compartments/visibility/relationship-arrow legend/multiplicity/stereotypes, sequence-diagram lifelines/messages/activation/fragments, and the domain/activity/use-case/CRC modelling tools (Mermaid syntax throughout).
π Knowledge Index
Week 1 β Java & OO Fundamentals
- Java Static Typing β Parent Framework: Java Program Structure
- Java Program Structure β Parent Framework: OOP Building Blocks (Class, Object, Field, Method)
- OOP Building Blocks (Class, Object, Field, Method) β Parent Framework: Java Program Structure
- Java Data Types, Casting and References β Parent Framework: OOP Building Blocks (Class, Object, Field, Method)
- Java Constructors β Parent Framework: OOP Building Blocks (Class, Object, Field, Method)
- Java Control Flow (Conditionals and Loops) β Parent Framework: Java Program Structure
- Java Arrays β Parent Framework: Java Program Structure
- Client-Supplier Relationship (Java) β Parent Framework: OOP Building Blocks (Class, Object, Field, Method)
Week 2 β Modifiers, UML Relationships, Design Principles & Inheritance
- Java Packages and Imports β Parent Framework: Java Program Structure
- Encapsulation and Access Modifiers (Java) β Parent Framework: OOP Building Blocks (Class, Object, Field, Method)
- Static and Final (Java) β Parent Framework: OOP Building Blocks (Class, Object, Field, Method)
- UML Associations and Dependencies (Java) β Parent Framework: Client-Supplier Relationship (Java)
- Three Core Design Principles (Java) β Parent Framework: Client-Supplier Relationship (Java)
- Inheritance (Java) β Parent Framework: OOP Building Blocks (Class, Object, Field, Method)
Week 3 β Collections, Polymorphism & Abstraction
- Java Collections (List, Set, Map) β Parent Framework: Java Arrays
- Polymorphism (Java) β Parent Framework: Inheritance (Java)
- Abstract Classes (Java) β Parent Framework: Inheritance (Java)
- (deepened this week: Static and Final (Java) β staticβinstance access matrix, why-use/why-carefully; Encapsulation and Access Modifiers (Java) β encapsulation boundaries & ReD; Java Packages and Imports β
module-info.java)
Week 4 β Interfaces & Enumerations
- Interfaces (Java) β Parent Framework: Abstract Classes (Java)
- Enumerations (Java) β Parent Framework: Three Core Design Principles (Java)
- (deepened this week: Java Data Types, Casting and References β
==(identity) vs.equals()(value) & the String Pool)
Week 5 β SOLID Principles
- SOLID Principles (Java) β Parent Framework: Three Core Design Principles (Java) (hub: overview table, ReD, LCOM, downcasting/
instanceof) - Single Responsibility Principle (Java) β Parent Framework: SOLID Principles (Java)
- Open-Closed Principle (Java) β Parent Framework: SOLID Principles (Java)
- Liskov Substitution Principle (Java) β Parent Framework: SOLID Principles (Java)
- Interface Segregation Principle (Java) β Parent Framework: SOLID Principles (Java)
- Dependency Inversion Principle (Java) β Parent Framework: SOLID Principles (Java)
Week 6 β Applying Abstraction: Injection, Copying & Rationale
- Dependency Injection (Java) β Parent Framework: Dependency Inversion Principle (Java)
- Defensive Copying (Java) β Parent Framework: Encapsulation and Access Modifiers (Java)
- Design Rationale (FIT2099) β Parent Framework: SOLID Principles (Java) (β Assignment 1 writing artefact)
- (deepened this week: Dependency Inversion Principle (Java) β hinge point + DI link; Encapsulation and Access Modifiers (Java) β abstraction-layer sizing & connascence)
Week 7 β Dynamic Modelling
- UML Sequence Diagrams (Java) β Parent Framework: UML Associations and Dependencies (Java) (β Assignment interaction diagrams)
Week 8 β Design by Contract, Exceptions & Factory
- Design by Contract (Java) β Parent Framework: Client-Supplier Relationship (Java)
- Command-Query Separation (Java) β Parent Framework: Design by Contract (Java)
- Exceptions, Assertions and Validation (Java) β Parent Framework: Design by Contract (Java)
- Factory Method Pattern (Java) β Parent Framework: Abstract Classes (Java) (first GoF pattern)
- (deepened this week: Liskov Substitution Principle (Java) β the DbC subcontracting formulation, weaker-pre/stronger-post)
Week 9 β Code & Design Smells + Refactoring
- Design Smells (Java) β Parent Framework: SOLID Principles (Java) (smell catalogue + smellβrefactoring map)
- Refactoring (Java) β Parent Framework: Design Smells (Java)
Week 10 β Refactoring to Address Code Smells
- (deepened this week: Refactoring (Java) β the refactor-to-enable-change motivation (Fowler
statement()scenario) + the identifyβfixβapplyβtestβcommitβrepeat loop; no new note β Week 10 is a worked deepening of the Week 9 material.)
Week 11 β Design in the Lifecycle, Technical Debt & the Design Process
- Software Design in the Lifecycle (FIT2099) β Parent Framework: FIT2099_MOC (when/why to design; SDLC + Lean)
- Technical Debt (FIT2099) β Parent Framework: Refactoring (Java)
- Design Process and Techniques (FIT2099) β Parent Framework: Software Design in the Lifecycle (FIT2099) (how to design)
- CRC Cards (FIT2099) β Parent Framework: Design Process and Techniques (FIT2099)
π UML Notation References (consolidated)
- UML Class Diagrams (Java) β the static notation legend (visibility marks, stereotypes, full arrow table + multiplicity β gathers syntax taught piecemeal across W2β4)
- UML Sequence Diagrams (Java) β the dynamic notation legend (see Week 7).
π§ Suggested Reading Order
(read leftβright within each week Β· bold = assignment-critical; β = graded artefact skill)
- W1 β Java foundations: Java Static Typing β Java Program Structure β OOP Building Blocks (Class, Object, Field, Method) β Java Data Types, Casting and References β Java Constructors β Java Control Flow (Conditionals and Loops) β Java Arrays β Client-Supplier Relationship (Java) β Java Packages and Imports
- W2 β encapsulation & first principles: Encapsulation and Access Modifiers (Java) β Static and Final (Java) β UML Associations and Dependencies (Java) (association/dependency/inheritance only) β Three Core Design Principles (Java) β Inheritance (Java)
- W3 β polymorphism & abstraction: Java Collections (List, Set, Map) β Polymorphism (Java) β Abstract Classes (Java)
- W4 β capability contracts: Interfaces (Java) β Enumerations (Java)
- W5 β SOLID: SOLID Principles (Java) (hub) β Single Responsibility Principle (Java) β Open-Closed Principle (Java) β Liskov Substitution Principle (Java) β Interface Segregation Principle (Java) β Dependency Inversion Principle (Java)
- W6 β applied abstraction: Dependency Injection (Java) β Defensive Copying (Java) β β Design Rationale (FIT2099) (the A1 justification artefact)
- W7 β dynamic modelling: β UML Sequence Diagrams (Java) (concrete classes only)
- W8 β contracts: Design by Contract (Java) β Command-Query Separation (Java) β Exceptions, Assertions and Validation (Java) β Factory Method Pattern (Java)
- W9β10 β smells & refactoring: Design Smells (Java) (smell β refactoring map) β Refactoring (Java) (behaviour-preserving, two hats)
- W11 β design process & meta: Software Design in the Lifecycle (FIT2099) β Technical Debt (FIT2099) β Design Process and Techniques (FIT2099) β CRC Cards (FIT2099)
π― Learning Outcomes
Unit LOs:
- design with UML (class + interaction diagrams)
- judge design quality
- implement abstraction/information-hiding/inheritance/polymorphism in Java
- refactor + debug
- practise with IDEs, UML tools, version control
Key skills per week:
- W1 β
- static typing catches errors at compile time
- class = blueprint, object = instance
- value vs reference semantics
- constructors, control flow, arrays
- client couples to the interface only (LO3)
- W2 β
- private fields + deliberate accessors
- static = class-level, final = assign-once (reference β immutable)
- draw association vs dependency vs inheritance arrows
- DRY / own-your-properties / no magic literals (LO1β3)
- W3 β
- program to the collection interface (wrapper types in generics)
- runtime type dispatches the override, declared type limits visibility
- abstract = never instantiated (LO3)
- W4 β
- one
extends, manyimplementsβ capability contracts - enums kill magic-number smells with compile-time checks (LO3)
- one
- W5 β
- argue every design decision through SRP/OCP/LSP/ISP/DIP
- principles are guidelines β over-application is its own smell (LO1β2)
- W6 β
- inject collaborators from outside (DI beyond DIP)
- defensive-copy mutable state at boundaries
- write rationale = WHY + alternative + trade-off, never description (LO1β3, A1)
- W7 β
- sequence diagram one narrow scenario, concrete classes only, correct message/activation notation (LO1, A1)
- W8 β
- precondition breach = client bug (exception), postcondition = supplier bug (assertion)
- commands vs queries
- Factory Method returns the parent type (LO2β3)
- W9β10 β
- recognise smell families as hints not proofs
- type-branching β Replace Conditional with Polymorphism
- refactor behaviour-preserving under tests, two hats (LO4)
- W11 β
- decide as late as responsibly possible (Lean)
- take technical debt deliberately + repay by refactoring to better design
- explore with CRC cards, split when the card overflows (LO1, LO5)