欢迎来到天天文库
浏览记录
ID:52441560
大小:648.17 KB
页数:32页
时间:2020-03-27
《面向状态编程模式.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、面向状态编程模式探索State-OrientedProgrammingModelforErlang系统工程师的困惑•Erlang及函数式编程环境下我们采用什么建模工具进行系统分析设计?•OOP?–没有对象可以面对。–函数可以抽象为对象吗?–进程可以抽象为对象吗?•当前的系统设计方式:重新回到面向过程步骤的编程模式。–函数式编程中很弱的时序概念。工具:UML活动图•时序、不完备、易挥发、具象而非抽象工具:UML状态图•思路:面向状态编程Erlang/OTP元素•基本元素–函数–进程•交互方式–函数调用–消息
2、传递•联系–link/monitor•数据–不可更改–令牌传递方式Erlang元素的SOP抽象•进程状态机•状态函数•link关联发散的平面与聚焦的线条•OOP是对最终设计物的抽象,采用防御性设计模式,抽象程度和设计边界很难把握。•SOP只面对具体工作面向对象编程流程,通过异常处理限定为有限状态机,边界清晰,通透清澈。•(谁能告诉我怎么画虚线?)面向状态编程面、线、点•如果把系统当作一个平面,SOP设计相当于在画线描图,未触及的地方要留白。OOP则更像是做油画。•状态机是系统平面上的线条。•状态是构
3、成线条的点。分布并发系统抽象•OOP倾向于把设计对象抽象为单一复杂系统。(系统论)•SOP倾向于把设计对象分解为松耦合、分布运算的状态机。(还原论)•现实世界是面向并发的分布系统。•巨系统通常是由分离而相似的组成元素通过简单叠加、共同作用构成的。•我们可以使用简单可计算的元素构建不可计算的复杂系统。反之我们无法从不可计算系统中还原基本元素和初始状态。•结论:SOP比OOP更“自然”,更符合本次论坛主题生命体也是分布式并发系统•复杂的生命体都是由小的生命体:细胞组成的。•细胞之间是松耦合的,通过一致的方式
4、进行沟通交互。•生命体的组成部分与组成生命体本身可能是大不相同的。•细胞通过大量简单叠加规则构建复杂生命体,互相之间有很高的相似性。•通过自组织自适应生命体的形态也在生长变化。抽象vs具象•OOP是站在观察者角度,通过对实体对象的观察进行归纳抽象。•SOP直接作为参与者以具体的执行逻辑去构建、组成这个系统,不需要抽象或者只需要轻度的抽象。•OOP建立的是想象中的系统,而系统在构建好之前通常是难以捉摸的,对系统人员的要求很高。•SOP表达就是系统某个具体的执行元素。系统是这些元素共同作用的结果。空域与时域•
5、OOP侧重于静态空间建模。•SOP侧重于动态时序建模。•二者可以结合来进一步细化抽象的颗粒度。•状态机可以认为是OO与SO的结合。系统系统系统系统对象1对象2状态2状态2状态3状态4对象3对象4SOP的概念•面向状态机进行抽象。•面向状态进行编程。•状态实体:对系统中实体的抽象,一个状态实体通常包含一个或者多个状态机。•状态是某个状态实体在特定情况下的表现形式。•状态机是状态实体的活动序列,由一系列状态的实例构成的时间单调序列。•状态机呈现的状态集合中的状态是互斥完备的。也就是说一个状态机同时只能呈现一种
6、状态,只能呈现自己状态集合中的有限状态。SOP建模•建模的三种抽象层次:–模板:泛化的类。(比如公司)–对象:模板经过参数化后成为对象。(比如某某公司)–实例:在执行过程中对象的实例化。(比如某某公司的一个执行中的状态实体)•SOP中我们把模板一致化,模板抽象这一层可以忽略。•对象默认情况下不需要参数化,不过为了分离执行逻辑与数据,通常需要进行参数化。•实例化过程是在执行过程中的一个对象的寿命周期。OTP对象间交互的抽象•消息–send,发送消息给某对象–receive,接收发送来的消息•组合成函数–ca
7、st,等同send,调用后不管结果。–call,发送后等回应,封装回应为函数调用结果。•把交互当作数据访问–get,获得数据,只读型访问。–set,设置数据,写入型访问。–cast,发布命令或者传递事件,等同send。•对象内部的访问回调–on_get,外部get调用操作触发。–on_set,外部set调用操作触发。–on_event,当外部事件传递进来时。状态抽象•简化起见,状态机采用State类似Moore状态机模型。entry/entrypoint–输出只与状态有关do/actionexit/exi
8、tpoint–省略doaction•状态作为状态实体的体UML中标准的状态现,需要实现对状态实体及状态机的代理操作。State–get:获取数据entry/entrypoint–set:设置数据exit/exitpointget/readdataset/writedata–cast:发送事件消息cast/posteventSOP中的标准状态对象模型xlo•沿用面向对象中对象的定义,<>加入对状态机的支持,归一化
此文档下载收益归作者所有