SMC Tutorial

83
8/9/2019 SMC Tutorial http://slidepdf.com/reader/full/smc-tutorial 1/83 The State Machine Compiler UptoData, Inc. by Eitan Suez http://u2d.com/ 

Transcript of SMC Tutorial

Page 1: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 1/83

The

State Machine Compiler

UptoData, Inc.

by 

Eitan Suez

http://u2d.com/ 

Page 2: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 2/83

2

About the Speaker

Eitan Suez is a Java programmer living and working

in Austin, TexasEitan is primarily known as the author of ashkelon,an open source tool for Java API documentation

Eitan is an active member of the Austin Java Users

Group

Eitan maintains a weblog on http://java.net/ 

Page 3: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 3/83

Page 4: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 4/83

Page 5: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 5/83

A simple turnstile

Description of the normal operation of aturnstile:

1. Turnstile initially locked

2. A coin or ticket is inserted (event)

3. Triggers action: turnstile unlocks

4. A person passes through turnstile (event)

5. Triggers action: turnstile locks again

5

Page 6: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 6/83

State Diagram

6

Locked Unlocked

coin/unlock()

pass/lock()

Page 7: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 7/83

Complete Diagram

7

Locked Unlocked

coin/unlock()

pass/lock()

pass/alarm()

coin/thankyou()

Page 8: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 8/83

Coding the turnstile

break into hands-on session

8

(first pass)

Page 9: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 9/83

Discussion

Most implementations don’t think to separateactions into neat little packages:

alarm / thankyou / unlock / lock

So, the first improvement is to go ahead andperform this packaging:

1. put the code for each case in a separate method (theaction)

2. gather the collection of actions into an interface

This helps with action code getting in the way of seeingthe transition logic 

9

Page 10: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 10/83

More Issues

Difficult to clearly interpret conditionallogic. It’s difficult to read; you can get lostin it. It’s error-prone.

Violates the Open-Closed Principle (OCP).

Extending the system requires modifyingexisting code.

10

Page 11: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 11/83

Let’s try the State Pattern

break into hands-on session

11

(second pass)

Page 12: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 12/83

The State Pattern

Replace conditional logic by using polymorphism

The context class becomes much simpler; itdelegates transitions handling to its current state.

The code is cleaner.

12

Page 13: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 13/83

Discussion

If you need to extend the system, say youneed to introduce a new state:

you add a new class

you don’t have to touch existing code

The state pattern respects the OCP:software entities should be open for extension but

closed for modification

13

Page 14: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 14/83

Page 15: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 15/83

The state of affairs

Employing the state pattern is usually as far as mostpeople go

State diagrams are typically used only passively, inour designs, and to help us understand the statelogic

Let’s go back to our diagram and discuss someFinite State Machine (FSM) basics..

15

Page 16: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 16/83

16

Agenda

 A. Uncle Bob’s Turnstile

B. Finite State Machines BasicsC. What is SMC?

D.Solving Turnstile using SMC

E. SMC In Detail

F.Examples

Page 17: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 17/83

Basic Terminology

17

Locked Unlocked

coin/unlock()

pass/lock()

pass/alarm()

coin/thankyou()

Actions

States, Transitions, and Actions

Page 18: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 18/83

Other Concepts

Entry and Exit Actions

 Actions performed every time we enter and exit astate, respectively 

Transition Guards

Conditions that must be met in order for transitionsto proceed 

18

Page 19: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 19/83

Transition Guard Example

Form Entry:

Fill out a form (in "Edit" state)

The "Submit" event (or transition) essentiallycontains a guard condition.

If the form was not completed correctly (invalid),then we will remain in edit mode and have to

make corrections

Conversely, if the guard condition is true (theform is valid), then we will proceed withtransition to "Read" state/mode.

19

Page 20: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 20/83

Transition Tables

A common mechanism for describing

transition diagrams clearly in text form

For each state, we write out:

the transition

what the next state will bewhat action to perform (if any)

20

Page 21: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 21/83

Transition table for turnstile

21

State Transition Next State Action

Locked

coin Unlocked unlock 

pass Locked alarm

Unlocked

coin Unlocked thankyou

pass Locked lock 

Page 22: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 22/83

22

Agenda

 A. Uncle Bob’s Turnstile

B. Finite State Machines BasicsC. What is SMC? 

D.Solving Turnstile using SMC

E. SMC In Detail

F.Examples

Page 23: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 23/83

SMC

SMC is a tool 

that mates FSMs with Objects

23

Page 24: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 24/83

SMC

An open-source project hosted onsourceforge.net

http://smc.sourceforge.net/ 

Written by and maintained Charles Rapp

24

(continued)

Page 25: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 25/83

SMC

Essentially:

“ you put your state diagram in one file using aneasy-to-understand language. SMC generates the

State Pattern classes for you.”

25

Page 26: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 26/83

SMC History

SMC is Robert Martin’s invention (it is discussed in

Robert’s book Agile Software Development (Ch 29))

Charles Rapp happened to have succeeded Robertat Clear Communications Corporation.

He added many features, made design revisions, and

open-sourced the project (more information in thepreface of the SMC manual on sourceforge).

26

Page 27: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 27/83

27

Agenda

 A. Uncle Bob’s Turnstile

B. Finite State Machines BasicsC. What is SMC?

D. Solving Turnstile using SMC 

E. SMC In Detail

F.Examples

Page 28: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 28/83

Where were we?

 Ah yes.. Issues with the State Pattern

1. The state logic is distributed across a number ofclasses, and so there’s no single place to see it all

2. Tedious to write

(Notice: there’s nothing wrong with the design from thepoint of view of the runtime implementation)

28

Page 29: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 29/83

The .sm fileOne place to see it all 

%class Turnstile%package turnstile

%start MainMap::Locked

%map MainMap%%Locked{  coin Unlocked { unlock(); }  pass nil  { alarm(); }}

Unlocked{  pass Locked { lock(); }  coin nil  { thankyou(); }}%%

29

Page 30: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 30/83

The CompilerGenerates the State Pattern code

java -jar Smc.jar -java -d turnstile Turnstile.sm

30

The SMC Compiler

Specify java language output

Optionally specify target directory

Specify the .sm file to process

Page 31: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 31/83

Pictorially..

31

SMCCompiler

Turnstile.sm   TurnstileContext.java

TurnstileContext$ MainMap.classTurnstileContext$MainMap_Default$ MainMap_Locked .classTurnstileContext$MainMap_Default$ MainMap_Unlocked .classTurnstileContext$ MainMap_Default.classTurnstileContext$TurnstileState.classTurnstileContext.class

 A single file is produced, but it contains many classes:

Page 32: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 32/83

Write the AppClass

32

Define and instantiate “fsm”context class (generated)

Expose transition calls toother parts of application, if

necessaryImplement (or delegate)actions

Page 33: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 33/83

Page 34: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 34/83

Page 35: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 35/83

The big picture

35

The context class invokes actions on the AppClass.Conversely, the AppClass invokes transitions on the Context Class.

Details 

Abstractions 

<<interface>>

ITransitions

AppClassContext

<<interface>>

IActions

AppClass

Page 36: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 36/83

Steps Review

1. Write the state diagram (.sm file)2. Run the SMC tool (generates state pattern code)

3. Implement the actions (write the AppClass)

4. Interact with FSM by invoking transition methods

36

Page 37: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 37/83

37

Agenda

 A. Uncle Bob’s Turnstile

B. Finite State Machines Basics

C. What is SMC?

D.Solving Turnstile using SMC

E. SMC In Detail 

F.Examples

Page 38: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 38/83

Page 39: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 39/83

39

Page 40: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 40/83

Page 41: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 41/83

The Smc.jar command

java -jar Smc.jar -{targetlanguage}

  {options} {smfilename}.sm

Target languages:

c++, java, tcl, vb, csharp

table (generates HTML table representation of the .sm file)

graph (generates a GraphViz .dot file diagram of the statemachine logic

41

Page 42: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 42/83

Smc.jar command options

java -jar Smc.jar -{targetlanguage}

  {options} {smfilename}.sm

Options:

-suffix (override output file name suffix)

-sync (e.g. for Java: add synchronized keyword totransition method declarations)

-d

 (specify output directory)-serial (generate serial IDs for states to allow persisting ofstates)

-g (add debug output messages to generated source code)

42

Page 43: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 43/83

Smc.jar command options

java -jar Smc.jar -{targetlanguage}

  {options} {smfilename}.sm

Options (continued):

-glevel (applies only to -graphviz output: specify level ofdetail in the generation of .dot file diagram)

-version (prints smc version)

-help (prints help)

-verbose (generate verbose output during compilationphase)

43

(continued)

Page 44: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 44/83

Example

java -jar Smc.jar -graph

  -glevel 1 Turnstile.sm

44

Produces Turnsile_sm.dot,which in Graphviz, lookslike this:

Page 45: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 45/83

ant task and target

  <taskdef name="smc" classname="net.sf.smc.ant.SmcJarWrapper"

  classpath="lib/smc-ant.jar" />

  <target name="gen" depends="init">

  <smc target="java" smfile="${smfile}"

  destdir="${gen.pkg.dir}"  smcjar="${smc.jar}" />

  </target>

  <target name="compile" depends="gen">

  <javac debug="on" deprecation="on"

  classpathref="class.path"

  destdir="${build.classes.dir}">

  <src path="${src.dir}" />

  <src path="${gen.dir}" />

  </javac>

  </target>

45

Page 46: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 46/83

Important note about naming

In Java, it is possible to create a file for a class whosename is different from the declared class name (in thefile)

In SMC:

the name of the file is derived from the name of the .sm file

the class name (in the file) is derived from the AppClassname

Therefore:

make sure to always use the same name for both .smfile and AppClass

46

Page 47: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 47/83

47

Page 48: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 48/83

Basic .sm file syntax

48

The AppClass

Package name

The start state

States are grouped into MapsDemarcates start of map

Demarcates end of map

Essentially a transition table}

Page 49: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 49/83

Page 50: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 50/83

Loopback Transition

50

Idle

Timeout

or 

Page 51: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 51/83

Page 52: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 52/83

Transition Guards

52

Idle Running

Run [ IsValid() ] / StopTimer("Idle")DoWork()

Run /RejectRequest()

Page 53: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 53/83

Notes on transition guards

Guard condition must evaluate to a boolean. Guard maycontain ||, &&, comparison operators (>, ==, etc..) or it can bea method invocation

If guard condition is a method invocation on the AppClass, thenprefix invocation with "ctxt."

e.g.: ctxt.isValid()

Transitions with guards have higher precedence than

unguarded transitions

There's also a default / fallback transition mechanism that we'lldiscuss shortly

53

Page 54: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 54/83

Transition Arguments

54

LoggedOutLoggedIn

onLogin(uname, pwd)[ authenticate(uname, pwd) ] / setupUser(uname)

onLogin(uname, pwd)  [isLocked(uname)] / displayLockedDlg()

Page 55: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 55/83

Entry & Exit Actions

55

LoggedIn

Entry { dismissLogin() } Exit { clearUser() } 

Page 56: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 56/83

Push and Pop Transitions

SMC allows the definition of multiple maps.Each map should contain related states.

The idea is that you can use push and pop

transitions to move across maps.

56

Page 57: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 57/83

Push Transition Example

Running{  Blocked push(WaitMap::Blocked) {GetResource();}}

57

"GetResource()" is invoked and the state changes to"Blocked," defined in WaitMap. SMC pushes (remembers)the existing state on the state stack (internal).

Page 58: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 58/83

Pop Transition Example

Waiting{  Granted pop(OK) {}  Denied pop(FAILED) {}}

58

The "Granted" transition causes the state stack to pop andthus to revert to the state that the FSM was in prior to thepush. The "OK" transition then takes place in that state.

Page 59: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 59/83

The Default State

You may define a state named "Default" and specifytransitions for it.

These transitions serve as "fallback" transitions forall the other states.

That is, if you omit defining a transition in a certainstate and that transition takes place, then SMC willfall back to calling the Default state's transition(assuming it's defined there)

59

Page 60: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 60/83

Default State Example

60

Locked

{

  pass nil { alarm(); }

}

Unlocked

{

  coin nil { thankyou(); }

}

Default

{

  coin Unlocked { unlock(); }

  pass Locked { lock(); }

}

Can define default behavior of turnstile in "Default"state and override default behavior (exceptions) in Locked andUnlocked states, like so:

Page 61: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 61/83

Default Transitions

Yet another level of fallback can be defined as the

"Default" transition within a state.

If a state S does not define a transition T and the"Default" state does not define one either, then Twill be handled by S's "Default" transition.

Default transitions can be defined on the Default state

61

Page 62: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 62/83

62

Page 63: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 63/83

63

TurnstileContext

 MainMap_Default

TurnstileState

 MainMap

 MainMap_Locked  MainMap_Unlocked 

(standard code, in statemap.jar)

(generated code)

Page 64: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 64/83

64

Agenda

 A. Uncle Bob’s Turnstile

B. Finite State Machines Basics

C. What is SMC?

D.Solving Turnstile using SMC

E. SMC In Detail

F.Examples

Page 65: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 65/83

65

Page 66: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 66/83

Generic GUI Uses / Examples

Generally, anything modal:

Application Login Protocol

Wizards (follows a series of steps from start to finish) andPaging

Associating by picking from a list

list can be in "pickable" state, where it exposes a "pick"transition, that triggers an action that performs theassociation of the selected item with some other object

GUI manifestation of the object life cycle: Create / Read /Update / Delete

e.g.: in Edit state, the object exposes "Save" and "Cancel"transitions. In Read state, it might expose "Edit" and"Delete" transitions.

66

Page 67: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 67/83

Login Protocol

LoggedInStateEntry { dismissLoginDialog(); }Exit { clearUser(); }{  onLogout LoggedOutState {}}

LoggedOutStateEntry { showLoginDialog(); }{  onLogin(username: String, password: String)  [ctxt.isLocked(username)]  nil {displayLockedDialog();}

  onLogin(username: String, password: String)  [ctxt.authenticate(username, password)] 

LoggedInState { clearBadAttempts(username); setupUser(username); }  onLogin(username: String, password: String)  [ctxt.tooManyBadAttempts(username)]  nil { lock(username); displayLockedDialog(); }

  onLogin(username: String, password: String) nil { loginInvalid(); }}

67

Page 68: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 68/83

Another login implementation

68

Page 69: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 69/83

Application-Specific GUI Uses

Think about GUI apps such as Photoshop or the GIMP, whereeach tool you pick puts you into a different mode (brush,eraser, selection tool, etc..)

Further, within each mode, you can have sub-modes. Forexample, the "selection" tool in photoshop is modal. The firstclick which starts a selection has a different behaviorcompared to the second, which completes it. The UI reflectsthis: after the first click (transition), we're enter selectionmode (state). In this mode onmousemove (transition) triggersthe action to redraw a dashed rectangle, but stay in that mode.Another transition, "onclick" will take it back out of selectionmode. The exit action is to record the selection.

69

Page 70: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 70/83

Page 71: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 71/83

Page 72: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 72/83

Parsers

SMC is great for finding patterns incharacter streams

Detecting tokens such as words, numbers,whether we're inside comments, etc..

As the tokenizer reads the text stream, it enters

and leaves different states (inside comment,outside comment) and fires transitions (detectedtoken)

72

Page 73: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 73/83

A Comment Stripper

73

Page 74: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 74/83

Comment Stripper Driver

74

Page 75: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 75/83

Anything with a user interface

Turnstiles, Coke machines, Gumballmachines, ATMs

75

Page 76: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 76/83

Page 77: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 77/83

Page 78: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 78/83

78

Current Status of Project

SMC project is mature / stable

Current version is v3.2

(latest addition is the production of Graphvizdiagrams from a .sm file)

Expect ant task to be bundled with the nextrelease

Page 79: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 79/83

79

Conclusions

SMC is a simple tool that can be used repeatedly tosolve a specific category of problems that occurfrequently in various domains in softwaredevelopment

SMC offers a "best of both worlds" solution toFinite State Machine problems:

1. The design advantages of the State Pattern without the tediumof writing the state classes

2. View and edit the entire finite state machine logic in a single file

Page 80: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 80/83

80

References

1. Design Patterns

by Gamma, Helm, Johnson, & Vlissides

2.  Agile Software Development

by Robert Martin

3. SMC Projecthttp://smc.sourceforge.net/

(maintained by Charles Rapp)

Page 81: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 81/83

81

Page 82: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 82/83

82

Contact

Please remember to complete evaluation forms.

Page 83: SMC Tutorial

8/9/2019 SMC Tutorial

http://slidepdf.com/reader/full/smc-tutorial 83/83