Java OOP Assignment Solver
Philosophy
KISS + YAGNI: Write the minimum code to pass. Less code = less to review = fewer bugs.
Workflow
Phase 1: Understand
- •Read the PDF - Extract all requirements, class diagrams, method signatures
- •Explore codebase - Find existing templates, enums, helper classes marked
@DoNotTouch - •Identify tasks - List each numbered requirement (H6.1, H6.2, etc.)
Phase 2: Plan
Create a todo list with:
- •Files to CREATE (interfaces, enums, classes)
- •Files to MODIFY (implement methods, add
implements) - •Implementation order (dependencies first)
Phase 3: Implement
For each task:
- •Interfaces/Enums first - No dependencies
- •Abstract classes - Base functionality
- •Concrete classes - Extend/implement
- •Modify existing - Add interface implementations, fill in
TODOmethods - •Remove crash() calls - Replace
crash("H6.X")with actual implementation
Phase 4: Verify
- •Build with Gradle:
./gradlew compileJava - •Run main if playground exists:
./gradlew run - •Check output matches PDF examples
Implementation Rules
Minimal Code
- •No extra comments unless logic is unclear
- •No extra validation unless specified
- •No helper methods unless reused 3+ times
- •Match exact signatures from PDF (visibility, types, names)
PDF Reading Tips
- •Class diagrams: Solid arrow = extends, dashed arrow = implements
- •"protected": Accessible to subclasses
- •"private final": Immutable, set in constructor
- •Mandatory requirements in boxes: Must follow exactly
Modern Java Idioms
Use the following for code conciseness, elegance and brevity.
- •Switch expressions (
->) - returns value, no break needed, fewer lines - •Pattern matching instanceof - cast + variable binding in one check
- •var - type inference for locals, less redundancy
- •Ternary operator - one-liner conditionals over if-else blocks
- •Math.min/max - bounds checking without branching
- •Records - immutable data classes in one line (if allowed)
- •Text blocks (
""") - multi-line strings without concatenation
Gradle Notes
- •If build fails with version error, try:
JAVA_HOME=/path/to/jdk21 ./gradlew build - •
@StudentImplementationRequired("H6.X")marks methods to implement - •Remove
crash("H6.X")calls when implementing
Checklist
- • All
TODOcomments addressed - • All
crash()calls removed - • All interfaces/classes from diagram created
- • Build succeeds
- • Run output matches PDF examples (if playground provided)