--( 0)------
Get a class with an empty main going so you can incrementally develop a test program. 

--( 1)------
Start by defining abstract class Duck. 
        That's a lot to define, so be careful. 

--( 2)------
Then define interfaces FlyBehavior and QuackBehavior. 
        Not very hard at all. 

--( 3)------
Then create a Quack implementation of QuackBehavior (for all real ducks) 
        and a FlyWithWings implementation of FlyBehavior (for all real ducks). 

--( 4)------
Then create MallardDuck as an extension of Duck. 
Reminder: 
        Put a Quack object 
        and a FlyWithWings object inside MallardDuck (at construction time).  

--( 5)------
Then create a Squeak implementation of QuackBehavior (for rubber ducks)
        and a FlyNoWay implementation of FlyBehavior (for decoys, rubber ducks and penguins). 

--( 6)------
Then create RubberDuck as an extension of Duck. 
Reminder:
       Put a Squeak object 
       and a FlyNoWay object inside the RubberDuck (at construction time). 

--( 7)------
Then create MuteQuack implementation of QuackBehavior (for decoys, rubber ducks and swans)
      
--( 8)------
Next create a DecoyDuck as an extension of Duck. 
Reminder:
       Put a MuteQuack object
       and a FlyNoWay object inside the DecoyDuck (at construction time). 

Make sure you test after every single step. 

Your test program just increases, you never delete from it. 

--