Title: Inheritance of Automata Classes Using Dynamic Programming Languages
1Inheritance of Automata Classes Using Dynamic
Programming Languages (Using Ruby as an Example)
Kirill Timofeev
Kirill.Timofeev_at_dataart.com
29.05.2009
2Table of Context
- Automata-Based Programming and Its Benefits
- Extended Automata Approach
- Dynamical Programming Languages
- Graphical Notation being Used
- Inheritance of Automata Classes
- Comparison by Extending Ruby on Rails Plugin
- Conclusions
3Automata-Based Programming and Its Benefits
- Minimalistic core transitions, states, and
functions (actions and guard conditions) - Documentation and software development happens at
the same time - Visual and obvious specifications
- Possibility of automata (and software)
verification and reverse engineering
4Extended Automata Approach Object Automata
Approach
- Acts automata as an object-oriented class
- Nested groups (encapsulation) reduce duplicataed
transitions - Automata inheritance reduce number of states and
transitions required for a new automata creation
5Dynamical Programming Languages
- Allow runtime program extension
- Dynamic creation of new methods
- Macro scripts usage and executing any text
instruction as a program code (evaluation) - Partial support of functional style by using
lambda functions and closures - And... DSL Domain Specific Language
6Some Fact of Dynamical Languages
- There is no spoon strict definition of dynamical
languages - In 2008 the proportion of dynamic languages to
the languages with static type checking was 40 - The most popular dynamical languages Javascript,
Python, Ruby - Buzz word again Ruby on Rails
7Functional Programming Languages
- Complex programs are build on simple functions
aggregation - Polimorphism of data types
- Easy to test and verify software no side effects
- More expressive syntax by using closures and
lambda functions (hello, DSL!)
8Graphical Notation Being Used
- SampleUser automata class presented
- It inherited from BasicUser
- Added new group Deleted
- Group Activation has been overrided
- New state Suspended was added
9Basic Registered User Automata
- BasicUser automata class presented
- Has five states Deleted, Pending, Passive,
Active, and Suspended - On entering Active state system generates the
activation code (lambda function) - Guard conditions on event Unsuspend
10Extended User Registration Automata
- AdvancedUser automata class presented
- Inherited from BasicUser automata
- New group Activation with states Captcha and
Active - New group Deleted Suspended and Deleted (delete
user's data)
11A Nightmare without Nested Groups and Inheritance
Part 1/3
- Statistic
- Number of transitions 11
- Number of states 5
12A Nightmare without Nested Groups and Inheritance
Part 2/3
- Are you still not afraid in the dark?!
- Statistic
- States 8
- Transitions 20 (O'RLY?)
- Statistic (with groups and inheritance)
- States 8
- Transitions 9
- Groups 3
13A Nightmare without Nested Groups and Inheritance
Part 3/3
VS
14Ruby Domain Specific Language
- automaton user, initial gt activation do
- state deleted
- group activation, initial gt pending do
- transition suspend, to gt suspended
- transition delete, to gt deleted
-
- state passive do
- transition register, to gt pending,
- guard gt Proc.new ... ,
- proc gt Proc.new ...
- end
- end
- end
- Macro methods
- Automaton
- State
- Group
- Transition
- Each method creates special class
- Integrated with Ruby on Rails and Active Record
libraries
15Conclusion
- Automata is a great approach which helps a lot
to describe and create systems with a complex
behavior - It's easy to maintain a system by using
object-automata approach, groups, and inheritance - It can be plugged in to many existing system
without monkey patching and code breaks - Syntax matters. By using helpers and macros
(building DSL) it's possible to reduce an
automata code by 50
16Thank you! Questions?