160 likes | 302 Views
Inheritance of Automata Classes Using Dynamic Programming Languages (Using Ruby as an Example). Kirill Timofeev. Kirill.Timofeev@dataart.com. 29.05.2009. Table of Context. Automata-Based Programming and Its Benefits Extended Automata Approach Dynamical Programming Languages
E N D
Inheritance of Automata Classes Using Dynamic Programming Languages (Using Ruby as an Example) Kirill Timofeev Kirill.Timofeev@dataart.com 29.05.2009
Table 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
Automata-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
Extended 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
Dynamical 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
Some 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
Functional 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!)
Graphical Notation Being Used • SampleUser automata class presented • It inherited from BasicUser • Added new group Deleted • GroupActivation has been overrided • New state Suspended was added
Basic 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
Extended 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)
A Nightmare without Nested Groups and Inheritance – Part 1/3 • Statistic • Number of transitions: 11 • Number of states: 5
A 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
A Nightmare without Nested Groups and Inheritance – Part 3/3 VS
Ruby Domain Specific Language • automaton :user, :initial => :activation do • state :deleted • group :activation, :initial => :pending do • transition :suspend, :to => :suspended • transition :delete, :to => :deleted • state :passive do • transition :register, :to => :pending, • :guard => Proc.new { ... }, • :proc => 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
Conclusion • 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%
Thank you! Questions?