15

How are you going to collaborate? How are you going to divide up work? How are you going to make sure that changes work with other people’s code?

Embed Size (px)

Citation preview

Page 1: How are you going to collaborate?  How are you going to divide up work?  How are you going to make sure that changes work with other people’s code?
Page 2: How are you going to collaborate?  How are you going to divide up work?  How are you going to make sure that changes work with other people’s code?

How are you going to collaborate?How are you going to divide up

work?How are you going to make sure that

changes work with other people’s code?

What’s needed to write Pong?

Page 3: How are you going to collaborate?  How are you going to divide up work?  How are you going to make sure that changes work with other people’s code?

Useful abstractions for commonly used design structure

Patterns and their consequences of use have been thought through by experienced designers

Helpful for good OO design

Describe what to do and what not to do when implementing the patterns in your project

Page 4: How are you going to collaborate?  How are you going to divide up work?  How are you going to make sure that changes work with other people’s code?

Encapulate the things that vary from object to object as separate classes But keep common code together

Example in HFDP book: Ducks

Page 5: How are you going to collaborate?  How are you going to divide up work?  How are you going to make sure that changes work with other people’s code?

In AI, we talk about “agents” In graphics, we talk about

(rendering) “entities”

Example: Reflex agent Reflex agent with state Goal-directed agent

Entities vs. strategies vs. state

Page 6: How are you going to collaborate?  How are you going to divide up work?  How are you going to make sure that changes work with other people’s code?

Composite: Compose objects into tree structures to represent part-whole hierarchies, let clients treat individual objects and compositions of objects uniformly.

Strategy: Defines a family of algorithms, encapsulates each one and makes them inter-changeable. Strategy lets the algorithm vary independently from clients that use it.

State: Allow an object to alter its behavior when its internal state changes. The object will appear to change its class.

Singleton: ensure a class has only one instance, and provide a global access point to it

Page 7: How are you going to collaborate?  How are you going to divide up work?  How are you going to make sure that changes work with other people’s code?

Abstract Factory: create concrete instances of abstract interfaces

Visitor: perform an operation on an object (i.e. all elements of the scene graph) without altering the object

FrameListener: hook in to receive notices of events from an announcing object

Singleton: enforce one instance Façade: create a convenient access point

for many operations on diverse classes

Page 8: How are you going to collaborate?  How are you going to divide up work?  How are you going to make sure that changes work with other people’s code?

One pointer to a state instance with subclasses

The state object knows under what conditions it should change to a different active state

described in Ch2 of PGAIBE, good walkthrough in HeadFirst design patterns

Eliminates the need for giant if statements Easier to extend with new substate classes

Page 9: How are you going to collaborate?  How are you going to divide up work?  How are you going to make sure that changes work with other people’s code?

Represent a process specificationHave 4 components

States Transitions Conditions Actions

Must have one initial stateMay have multiple final states

Page 10: How are you going to collaborate?  How are you going to divide up work?  How are you going to make sure that changes work with other people’s code?

Idle

PlayingMessages

RewindingRecordingMessage

Waitingfor call

Answering Call

Page 11: How are you going to collaborate?  How are you going to divide up work?  How are you going to make sure that changes work with other people’s code?

A condition is an event in the external environment which triggers a transition to a new state

An action is a response sent back to the external environment or a calculation whose result is stored by the system that occurs when the transition takes place

Page 12: How are you going to collaborate?  How are you going to divide up work?  How are you going to make sure that changes work with other people’s code?

Idle

Waiting for Call

Answering Call

Press Answer button

Ready to receive lightgoes on

Action

Condition

Incoming call detectedCondition

End of Call or tape runs out

Press Cancel button

Ready to receive button goes out

Condition

Condition

Action

Page 13: How are you going to collaborate?  How are you going to divide up work?  How are you going to make sure that changes work with other people’s code?

State 2

Can be partitioned to

State 2.1 State 2.2

State 2.4

State 2.3

Page 14: How are you going to collaborate?  How are you going to divide up work?  How are you going to make sure that changes work with other people’s code?

Have all states been defined?

Can you reach all the states?

Can you exit from all the states?

In each state does the system respond to all possible conditions?

Page 15: How are you going to collaborate?  How are you going to divide up work?  How are you going to make sure that changes work with other people’s code?

How do FSMs (state transition diagrams) relate back to the idea of agents?

How would you implement state using design patterns?