SlideShare a Scribd company logo
Thursday, March 18, 2010
Thursday, March 18, 2010
Thursday, March 18, 2010
Thursday, March 18, 2010
public class Creature
                {
                	 private var amIdead : Boolean;
                	 private var doIHaveDelbruckBrain :
                Boolean;
                	 private var doIHaveVictorBrain :
                Boolean;


                	 public function Creature()
                	 {
                	 	 trace(“Ecce Creature”);
                	 	 amIdead = true;
                           }
Thursday, March 18, 2010
public function implant( b : Brain )
             	 {
             	 	 mybrain = b;
             	 	 if( mybrain == DELBRUCK_BRAIN )
             // how??
             	 	 {
             	 	 	 doIHaveDelbruckBrain = true;
             	 	 	 doIHaveVictorBrain = false;
             	 	 }
             	 	 else if( mybrain == VICTOR_BRAIN )
             // again -- how??
             	 	 {
             	 	 	 doIHaveDelbruckBrain = false;
             	 	 	 doIHaveVictorBrain = true;
             	 	 }
Thursday, March 18, 2010
doIHaveVictorBrain = false;
             	 	 }
             	 	 else if( mybrain == VICTOR_BRAIN )
             // again -- how??
             	 	 {
             	 	 	 doIHaveDelbruckBrain = false;
             	 	 	 doIHaveVictorBrain = true;
             	 	 }
             	 	 else
             	 	 {
             	 	 	 doIHaveDelbruckBrain = false;
             	 	 	 doIHaveVictorBrain = false;
             	 	 }
             	 }

Thursday, March 18, 2010
}


             	 public function talk()
             	 {
                 	         if( amIdead )
                 	         {
                      	 	 // DO NOTHING -- I’M DEAD
                 	         }
                           	   else
                 	         {
                           	   if( doIHaveDelbruckBrain )
                           	   {
                      	 	 	 trace(“Listen to this...”);
                      	 	 	 trace(“the secrets of
                      eternity”);
Thursday, March 18, 2010
if( doIHaveDelbruckBrain )
                           	   {
                      	 	 	 trace(“Listen to this...”);
                      	 	 	 trace(“the secrets of
                      eternity”);
                           	   }
                           	   else if( doIHaveVictorBrain )
                           	   {
                           	   	 trace(“The operation...”);
                           	   	 trace(“...did it work?”);
                           	   }
                           	   else
                           	   {
                           	   	 trace(“UNNNNNNNH”);
                           	   }
Thursday, March 18, 2010
Thursday, March 18, 2010
public class Creature
                {
                	 private var mybrain : Brain;


                	 public function Creature()
                	 {
                	 	 trace(“Ecce Creature”);
                	 }


                	 public function zap() {}


                	 public function walk() {}
Thursday, March 18, 2010
public function Creature()
                	 {
                	 	 trace(“Ecce Creature”);
                	 }


                	 public function zap() {}


                	 public function walk() {}


                	 public function talk() {}
                    }



Thursday, March 18, 2010
public class Brain
                {


                	 public function zap(){}


                	 public function talk(){}


                	 public function walk(){}


                }




Thursday, March 18, 2010
public class DeadDelbruckBrain extends
                Brain
                {


                	 public function zap(){}


                	 public function talk(){}


                	 public function walk(){}


                }



Thursday, March 18, 2010
public class Creature
          {
          	 private var mybrain : Brain;


          	 public function Creature()
          	 {
          	 	 trace(“Ecce Creature”);
          	 	 this.implant( new DeadDelbruckBrain());
          	 }


          	 public function zap()
          	 {
               	           mybrain.zap();
          	 }
Thursday, March 18, 2010
}


          	 public function zap()
          	 {
               	           mybrain.zap();
          	 }


          	 public function walk()
          	 {
               	           mybrain.walk();
          	 }
          	 public function talk()
          	 {
               	           mybrain.talk();
          	 }
             }
Thursday, March 18, 2010
public class Creature
          {
          	        private var deadDelbruckBrain : DeadDelbruckBrain;


          	        private var livingDelbruckBrain : LivingDelbruckBrain;


               public function Creature()
               {
               	           trace(“Ecce Creature”);


               	           deadDelbruckBrain = new DeadDelbrookBrain();
               	           livingDelbruckBrain = new LivingDelbrookBrain();


               	           this.implant( deadDelbruckBrain );
               }


          	        public function zap()
Thursday, March 18, 2010
this.implant( deadDelbruckBrain );
               }


          	        public function zap()
          	        {
               	           mybrain.zap();
          	        }


          	        public function walk()
          	        {
               	           mybrain.walk();
          	        }
          	        public function talk()
          	        {
               	           mybrain.talk();
          	        }
             }
Thursday, March 18, 2010
public class DeadDelbruckBrain extends
                Brain
                {


                	 public function zap()
                	 {
                               	
                               mycreature.implant(
                               mycreature.livingDelbruckBrain );


                           }



Thursday, March 18, 2010
public class Creature
          {
          	        public var deadDelbruckBrain : DeadDelbruckBrain;


          	        public var livingDelbruckBrain : LivingDelbruckBrain;


               public function Creature()
               {
               	           trace(“Ecce Creature”);


               	           deadDelbruckBrain = new DeadDelbrookBrain();
               	           livingDelbruckBrain = new LivingDelbrookBrain();


               	           this.implant( deadDelbruckBrain );
               }


          	        public function zap()
Thursday, March 18, 2010
public var deadDelbruckBrain : DeadDelbruckBrain;


          	        public var livingDelbruckBrain : LivingDelbruckBrain;


               public function Creature()
               {
               	           trace(“Ecce Creature”);


               	           deadDelbruckBrain = new DeadDelbrookBrain( this );
               	           livingDelbruckBrain = new
               LivingDelbrookBrain( this );


               	           this.implant( deadDelbruckBrain );
               }


          	        public function zap()
          	        {
               	           mybrain.zap();
          	        }
Thursday, March 18, 2010
public class Brain
                {
                           public var mycreature : Creature;


                	 public function Brain( somecreature :
                Creature )
                	 {
                	 	 mycreature = somecreature;
                	 }



Thursday, March 18, 2010
...


                	 public function zap()
                	 {
                               	
                               mycreature.implant(
                               mycreature.livingDelbruckBrain );


                           }
                ...




Thursday, March 18, 2010
public class DeadAbnormalBrain extends
                Brain
                {


                	 public function zap(){}


                	 public function talk(){}


                	 public function walk(){}


                }



Thursday, March 18, 2010
public class LivingAbnormalBrain extends
                Brain
                {


                	 public function zap(){}


                	 public function talk(){}


                	 public function walk(){}


                }



Thursday, March 18, 2010
...


                	 public function zap()
                	 {
                               	
                               mycreature.implant(
                               mycreature.livingAbnormalBrain );


                           }
                ...




Thursday, March 18, 2010
...


                	 public function eatSoup()
                	 {
                               ...
                           }
                ...




Thursday, March 18, 2010
Thursday, March 18, 2010
...


                	 public function smokeCigar()
                	 {
                               	   ...
                           }
                ...




Thursday, March 18, 2010
Thursday, March 18, 2010
...


                	 public function sing()
                	 {
                               	   ...
                           }
                ...




Thursday, March 18, 2010
Thursday, March 18, 2010
public class HybridVictorAndAbnormalBrain
                extends Brain
                {


                	 ...


                }




Thursday, March 18, 2010
public class HybridVictorAndAbnormalBrain
                extends Brain
                {


                	 private var percentageVictor : int;


                     public function setVictorPercentage
                     ( p : int )
                     {
                           	 percentageVictor = p;
                           }



Thursday, March 18, 2010
public class HybridVictorAndAbnormalBrain
                extends Brain
                {


                	 ...


                     public function talk( )
                     {
                           	 if( percentageVictor > 50 )
                           	 {
                            ...



Thursday, March 18, 2010
Thursday, March 18, 2010
Template Method
                               Pattern



Thursday, March 18, 2010
public class Brain
                {
                ...
                	 public function walk()
                	 {
                           stepWithLeftFoot();
                           stepWithRightFoot();
                	 }
                ...
                }




Thursday, March 18, 2010
public class Brain
                {
                ...
                	 public function stepWithLeftFoot()
                	 {

                	 }

                	 public function stepWithRightFoot()
                	 {

                	 }
                ...
                }


Thursday, March 18, 2010
public class OneLeggedBrain
                {
                ...
                	 override public function walk()
                	 {
                           //stepWithLeftFoot();
                           stepWithRightFoot();
                	 }
                ...
                }




Thursday, March 18, 2010
public class RogerCobbBrain extends Brain
             {
             ...
             	 override public function stepWithLeftFoot()
             	 {
                  leftFootPosition += strideLength;
             	 }

             	 override public function stepWithRightFoot()
             	 {
                 rightFootPosition += strideLength;
             	 }
             ...
             }



Thursday, March 18, 2010
public class EdwinaBrain extends Brain
             {
             ...
             	 override public function stepWithLeftFoot()
             	 {
                  leftFootPosition += strideLength;
             	 }

             	 override public function stepWithRightFoot()
             	 {
                 rightFootPosition += strideLength;
             	 }
             ...
             }



Thursday, March 18, 2010
public class EdwinaBrain extends Brain
             {
             ...
             	 override public function stepWithLeftFoot()
             	 {
                  leftFootPosition += strideLength * 2;
             	 }

             	 override public function stepWithRightFoot()
             	 {
                 rightFootPosition += strideLength * 2;
             	 }
             ...
             }



Thursday, March 18, 2010
public class EdwinaBrain extends Brain
             {
             ...
             	 public function EdwinaBrain()
             	 {
                  strideLength = 12;
                  rightStrideLength = 24;
             	 }

             	 override public function stepWithRightFoot()
             	 {
                 rightFootPosition += rightStrideLength;
             	 }
             ...
             }


Thursday, March 18, 2010
public class TwoBrainedCreature
                {
                ...
                	 public var rightBrain : RightBrain;
                	 public var leftBrain : LeftBrain;
                ...
                }




Thursday, March 18, 2010
Thursday, March 18, 2010
Many brains
                           in one creature.




Thursday, March 18, 2010
public class TwoBrainedCreature
                {
                ...
                	 public function walk()
                	 {
                           rightBrain.stepWithLeftFoot();
                           leftBrain.stepWithRightFoot();
                	 }
                ...
                }




Thursday, March 18, 2010
Thursday, March 18, 2010
One kind of brain,
                   many kinds of creatures.



Thursday, March 18, 2010
public class World
        {
          public function World()
          {
            	 var neo : Hero = new Hero();
            	 var shopper : NormalPerson = new NormalPerson();

             	             var agentOne = new SmithBrain();
             	             var agentTwo = new SmithBrain();
             	
             	             neo.implant( agentOne );
             	             shopper.implant( agentTwo );

                  }
         }


Thursday, March 18, 2010
Thursday, March 18, 2010
One actual brain,
                           many creatures.



Thursday, March 18, 2010
Thursday, March 18, 2010
public class World
        {
          public function World()
          {



             	             agentSmithBrain = new AgentSmithBrain();
             	
             	      var neo : Creature = new Creature();	
                  	 var shopper : Creature = new Creature();

               	 neo.implant( agentSmithBrain );
             	   shopper.implant( agentSmithBrain );

                  }
         }


Thursday, March 18, 2010
Dependency Injection




Thursday, March 18, 2010
Thursday, March 18, 2010
<beans>
        	 <bean id="edwina" class="EdwinaBrain">
        	 	 <property name="mycreature" ref=" creature"/>
        	 </bean>
        	 <bean id="roger" class="RogerCobbBrain">
        	 	 <property name="mycreature" ref=" creature"/>
        	 </bean>
        	 <bean id="creature" class="Creature">
        	 	 <property name="leftBrain" ref="edwina"/>
        	 	 <property name="rightBrain" ref="roger"/>
        	 </bean>
        </beans>




Thursday, March 18, 2010
Actual Example




Thursday, March 18, 2010
<game>
        	 <level name="demomode" >
        	 	 <sprite id="bigboss" class="FlyingDragon">
        	 	 	 <property name="target" ref="hero"/>
        	 	 	 <property name="inputBrain" class="HeroFollower"/>
        	 	 	 <property name="movementBrain" class="ClumsyFlying"/>
        	 	 </sprite>
        	 	 <sprite id="hero" class="UnarmedHero">
        	 	 	 <property name="inputSource" class="KeyboardInput"/>
        	 	 </sprite>
        	 </level>
        </game>




Thursday, March 18, 2010
<game>
        	 <level name="demomode" >
        	 	 <sprite id="bigboss" class="FlyingDragon">
        	 	 	 <property name="target" ref="hero"/>
        	 	 	 <property name="inputBrain" class="HeroFollower"/>
        	 	 	 <property name="movementBrain" class="ClumsyFlying"/>
        	 	 </sprite>
        	 	 <sprite id="hero" class="UnarmedHero">
        	 	 	 <property name="inputSource"
        class="RecordingKeyboardInput"/>
        	 	 </sprite>
        	 </level>
        </game>




Thursday, March 18, 2010
<game>
        	 <level name="demomode" >
        	 	 <sprite id="bigboss" class="FlyingDragon">
        	 	 	 <property name="target" ref="hero"/>
        	 	 	 <property name="inputBrain" class="HeroFollower"/>
        	 	 	 <property name="movementBrain" class="ClumsyFlying"/>
        	 	 </sprite>
        	 	 <sprite id="hero" class="UnarmedHero">
        	 	 	 <property name="inputSource"
        class="RecordedKeyboardInput" />
        	 	 	 <property name="inputSource" class=
        "RecordedInputTranslator" data="a7.b3.c22.a42" />
        	       	 </sprite>
        	       </level>




Thursday, March 18, 2010
One Word:




Thursday, March 18, 2010
Thursday, March 18, 2010
Brains.




Thursday, March 18, 2010

More Related Content

PDF
10 Insightful Quotes On Designing A Better Customer Experience
PDF
OO JavaScript
DOCX
Fractal proj report 2
PDF
JavaScript Survival Guide
PDF
JavaScript Patterns
PDF
Better Software: introduction to good code
PDF
State Machine Presentation1 61
PPT
Matematicas En Egipto Y Mesopotamia
10 Insightful Quotes On Designing A Better Customer Experience
OO JavaScript
Fractal proj report 2
JavaScript Survival Guide
JavaScript Patterns
Better Software: introduction to good code
State Machine Presentation1 61
Matematicas En Egipto Y Mesopotamia
Ad

State Machine Presentation62 End

  • 5. public class Creature { private var amIdead : Boolean; private var doIHaveDelbruckBrain : Boolean; private var doIHaveVictorBrain : Boolean; public function Creature() { trace(“Ecce Creature”); amIdead = true; } Thursday, March 18, 2010
  • 6. public function implant( b : Brain ) { mybrain = b; if( mybrain == DELBRUCK_BRAIN ) // how?? { doIHaveDelbruckBrain = true; doIHaveVictorBrain = false; } else if( mybrain == VICTOR_BRAIN ) // again -- how?? { doIHaveDelbruckBrain = false; doIHaveVictorBrain = true; } Thursday, March 18, 2010
  • 7. doIHaveVictorBrain = false; } else if( mybrain == VICTOR_BRAIN ) // again -- how?? { doIHaveDelbruckBrain = false; doIHaveVictorBrain = true; } else { doIHaveDelbruckBrain = false; doIHaveVictorBrain = false; } } Thursday, March 18, 2010
  • 8. } public function talk() { if( amIdead ) { // DO NOTHING -- I’M DEAD } else { if( doIHaveDelbruckBrain ) { trace(“Listen to this...”); trace(“the secrets of eternity”); Thursday, March 18, 2010
  • 9. if( doIHaveDelbruckBrain ) { trace(“Listen to this...”); trace(“the secrets of eternity”); } else if( doIHaveVictorBrain ) { trace(“The operation...”); trace(“...did it work?”); } else { trace(“UNNNNNNNH”); } Thursday, March 18, 2010
  • 11. public class Creature { private var mybrain : Brain; public function Creature() { trace(“Ecce Creature”); } public function zap() {} public function walk() {} Thursday, March 18, 2010
  • 12. public function Creature() { trace(“Ecce Creature”); } public function zap() {} public function walk() {} public function talk() {} } Thursday, March 18, 2010
  • 13. public class Brain { public function zap(){} public function talk(){} public function walk(){} } Thursday, March 18, 2010
  • 14. public class DeadDelbruckBrain extends Brain { public function zap(){} public function talk(){} public function walk(){} } Thursday, March 18, 2010
  • 15. public class Creature { private var mybrain : Brain; public function Creature() { trace(“Ecce Creature”); this.implant( new DeadDelbruckBrain()); } public function zap() { mybrain.zap(); } Thursday, March 18, 2010
  • 16. } public function zap() { mybrain.zap(); } public function walk() { mybrain.walk(); } public function talk() { mybrain.talk(); } } Thursday, March 18, 2010
  • 17. public class Creature { private var deadDelbruckBrain : DeadDelbruckBrain; private var livingDelbruckBrain : LivingDelbruckBrain; public function Creature() { trace(“Ecce Creature”); deadDelbruckBrain = new DeadDelbrookBrain(); livingDelbruckBrain = new LivingDelbrookBrain(); this.implant( deadDelbruckBrain ); } public function zap() Thursday, March 18, 2010
  • 18. this.implant( deadDelbruckBrain ); } public function zap() { mybrain.zap(); } public function walk() { mybrain.walk(); } public function talk() { mybrain.talk(); } } Thursday, March 18, 2010
  • 19. public class DeadDelbruckBrain extends Brain { public function zap() { mycreature.implant( mycreature.livingDelbruckBrain ); } Thursday, March 18, 2010
  • 20. public class Creature { public var deadDelbruckBrain : DeadDelbruckBrain; public var livingDelbruckBrain : LivingDelbruckBrain; public function Creature() { trace(“Ecce Creature”); deadDelbruckBrain = new DeadDelbrookBrain(); livingDelbruckBrain = new LivingDelbrookBrain(); this.implant( deadDelbruckBrain ); } public function zap() Thursday, March 18, 2010
  • 21. public var deadDelbruckBrain : DeadDelbruckBrain; public var livingDelbruckBrain : LivingDelbruckBrain; public function Creature() { trace(“Ecce Creature”); deadDelbruckBrain = new DeadDelbrookBrain( this ); livingDelbruckBrain = new LivingDelbrookBrain( this ); this.implant( deadDelbruckBrain ); } public function zap() { mybrain.zap(); } Thursday, March 18, 2010
  • 22. public class Brain { public var mycreature : Creature; public function Brain( somecreature : Creature ) { mycreature = somecreature; } Thursday, March 18, 2010
  • 23. ... public function zap() { mycreature.implant( mycreature.livingDelbruckBrain ); } ... Thursday, March 18, 2010
  • 24. public class DeadAbnormalBrain extends Brain { public function zap(){} public function talk(){} public function walk(){} } Thursday, March 18, 2010
  • 25. public class LivingAbnormalBrain extends Brain { public function zap(){} public function talk(){} public function walk(){} } Thursday, March 18, 2010
  • 26. ... public function zap() { mycreature.implant( mycreature.livingAbnormalBrain ); } ... Thursday, March 18, 2010
  • 27. ... public function eatSoup() { ... } ... Thursday, March 18, 2010
  • 29. ... public function smokeCigar() { ... } ... Thursday, March 18, 2010
  • 31. ... public function sing() { ... } ... Thursday, March 18, 2010
  • 33. public class HybridVictorAndAbnormalBrain extends Brain { ... } Thursday, March 18, 2010
  • 34. public class HybridVictorAndAbnormalBrain extends Brain { private var percentageVictor : int; public function setVictorPercentage ( p : int ) { percentageVictor = p; } Thursday, March 18, 2010
  • 35. public class HybridVictorAndAbnormalBrain extends Brain { ... public function talk( ) { if( percentageVictor > 50 ) { ... Thursday, March 18, 2010
  • 37. Template Method Pattern Thursday, March 18, 2010
  • 38. public class Brain { ... public function walk() { stepWithLeftFoot(); stepWithRightFoot(); } ... } Thursday, March 18, 2010
  • 39. public class Brain { ... public function stepWithLeftFoot() { } public function stepWithRightFoot() { } ... } Thursday, March 18, 2010
  • 40. public class OneLeggedBrain { ... override public function walk() { //stepWithLeftFoot(); stepWithRightFoot(); } ... } Thursday, March 18, 2010
  • 41. public class RogerCobbBrain extends Brain { ... override public function stepWithLeftFoot() { leftFootPosition += strideLength; } override public function stepWithRightFoot() { rightFootPosition += strideLength; } ... } Thursday, March 18, 2010
  • 42. public class EdwinaBrain extends Brain { ... override public function stepWithLeftFoot() { leftFootPosition += strideLength; } override public function stepWithRightFoot() { rightFootPosition += strideLength; } ... } Thursday, March 18, 2010
  • 43. public class EdwinaBrain extends Brain { ... override public function stepWithLeftFoot() { leftFootPosition += strideLength * 2; } override public function stepWithRightFoot() { rightFootPosition += strideLength * 2; } ... } Thursday, March 18, 2010
  • 44. public class EdwinaBrain extends Brain { ... public function EdwinaBrain() { strideLength = 12; rightStrideLength = 24; } override public function stepWithRightFoot() { rightFootPosition += rightStrideLength; } ... } Thursday, March 18, 2010
  • 45. public class TwoBrainedCreature { ... public var rightBrain : RightBrain; public var leftBrain : LeftBrain; ... } Thursday, March 18, 2010
  • 47. Many brains in one creature. Thursday, March 18, 2010
  • 48. public class TwoBrainedCreature { ... public function walk() { rightBrain.stepWithLeftFoot(); leftBrain.stepWithRightFoot(); } ... } Thursday, March 18, 2010
  • 50. One kind of brain, many kinds of creatures. Thursday, March 18, 2010
  • 51. public class World { public function World() { var neo : Hero = new Hero(); var shopper : NormalPerson = new NormalPerson(); var agentOne = new SmithBrain(); var agentTwo = new SmithBrain(); neo.implant( agentOne ); shopper.implant( agentTwo ); } } Thursday, March 18, 2010
  • 53. One actual brain, many creatures. Thursday, March 18, 2010
  • 55. public class World { public function World() { agentSmithBrain = new AgentSmithBrain(); var neo : Creature = new Creature(); var shopper : Creature = new Creature(); neo.implant( agentSmithBrain ); shopper.implant( agentSmithBrain ); } } Thursday, March 18, 2010
  • 58. <beans> <bean id="edwina" class="EdwinaBrain"> <property name="mycreature" ref=" creature"/> </bean> <bean id="roger" class="RogerCobbBrain"> <property name="mycreature" ref=" creature"/> </bean> <bean id="creature" class="Creature"> <property name="leftBrain" ref="edwina"/> <property name="rightBrain" ref="roger"/> </bean> </beans> Thursday, March 18, 2010
  • 60. <game> <level name="demomode" > <sprite id="bigboss" class="FlyingDragon"> <property name="target" ref="hero"/> <property name="inputBrain" class="HeroFollower"/> <property name="movementBrain" class="ClumsyFlying"/> </sprite> <sprite id="hero" class="UnarmedHero"> <property name="inputSource" class="KeyboardInput"/> </sprite> </level> </game> Thursday, March 18, 2010
  • 61. <game> <level name="demomode" > <sprite id="bigboss" class="FlyingDragon"> <property name="target" ref="hero"/> <property name="inputBrain" class="HeroFollower"/> <property name="movementBrain" class="ClumsyFlying"/> </sprite> <sprite id="hero" class="UnarmedHero"> <property name="inputSource" class="RecordingKeyboardInput"/> </sprite> </level> </game> Thursday, March 18, 2010
  • 62. <game> <level name="demomode" > <sprite id="bigboss" class="FlyingDragon"> <property name="target" ref="hero"/> <property name="inputBrain" class="HeroFollower"/> <property name="movementBrain" class="ClumsyFlying"/> </sprite> <sprite id="hero" class="UnarmedHero"> <property name="inputSource" class="RecordedKeyboardInput" /> <property name="inputSource" class= "RecordedInputTranslator" data="a7.b3.c22.a42" /> </sprite> </level> Thursday, March 18, 2010