Nifty Assignments: Marine Biology Simulation OOPSLA ‘04 Educators’ Symposium October 25, 2004 Eric Cheng Mathias Ricken Dung “Zung” Nguyen Stephen Wong
Marine Biology Simulation Based on AP Marine Biology Simulation Completely redone using OO design More robust, flexible, and extensible Two-week assignment in our objects-first CS2 courses Requires broad range of skills Assignment and Source Code Available
Marine Biology Simulation Demo
Structure of the Assignment Milestone 1 Part 1: KnightFish Add a new fish species to the simulation Part 2: WrappingEnv Add a new kind of environment Milestone 2 Part 3: Internals Re-implement parts of the simulation framework Part 4: Behavior Strategies Refactor framework to allow dynamic behavior changes Support code includes solution to Milestone 1
Structure of the Assignment SimpleFish UnboundedEnv Variant Fish Behavior Variant Environment Behavior White-box Framework: Extension by Subclassing
Part 1: KnightFish Randomly pick one of 8 targets
Part 1: KnightFish Turn into right direction For each step If blocked, done If open, go there and attempt the next step 3
3 Part 1: KnightFish Moves almost like a knight, except… No jumping If blocked, may stop on the way Stop here
Part 1: KnightFish Complicated behavior Procedural programming: nested if-statements OOP: nested visitors Visitor-Based Delegation Model Process flow diagramming makes designing complex algorithms a systematic process Cannot forget to handle a situation (compiler error!)
Part 2: WrappingEnv Grid-based, bounded, and rectangular environment If the fish leaves on one side, it re-enters from the other side (toroidal)
Part 2: WrappingEnv Students learn To reuse existing code by subclassing To integrate new code into a framework Students’ code still based on existing code But cannot simply be copied and modified anymore
Part 3: Internals Code missing in several places of the framework Students reimplement critical portions Gives students a tour of the entire framework Unit tests provide guidance Error messages in plain English
Part 3: Internals Students gain insight into Abstraction and loose coupling Message passing Writing large frameworks Working with someone else’s code Requires extensive work within existing framework
Part 4: Behavior Strategies Once students have understood the existing framework, they can improve it Point out one of the flaws Fish cannot change behavior This part involves refactoring the old code and creating a new class hierarchy
Strategy Pattern + void move() Static Behavior! Separate the variants from the invariants Part 4: Behavior Strategies
Students have the opportunity to Apply design patterns to improve the project Refactor a substantial portion of the code Experience how loose coupling makes this easy Requires new design and code that augments existing framework
Summary Students slowly gain experience with the framework Parts 1 and 2 provide a lot of support Part 3 gives students more responsibility, but unit tests provide guidance Part 4 gives students freedom to design and improve Compelling and entertaining example of object-oriented design
Niftiness Large, non-trivial project Focus on the design of OO systems Flexible yet secure design Can be used for other applications, e.g. OS Test-driven development Provides feedback, but not the answer
Niftiness Requires broad set of skills Flexibility and extensibility reinforce power of OO design Entertaining, visual project Inheritance, delegation Unit testing Reading and writing documentation Design patterns Refactoring Components and frameworks
Assignments in Objects-First Assignments have to be rich and deep Highlight benefits of object-orientation Large design portion Find proper abstractions, variants / invariants Solve family of problems Challenge to find suitable assignments Must be within students’ grasp Milestone 2 due today!
The Culmination of a Unified OO Pedagogy Abstract Structure and Behavior Polymorphism Design Patterns Unit Tests MBS ~ end of 2 nd semester.