trufun4 9:24:30
UML开课啦,今天讲状态图
啃铁鼠<4> 9:29:47
好啊
trufun4 9:30:05
上堂的序列图是反映多个对象之间的交互,而状态图是反映单个对象内部的交互
=============欢迎访问www.trufun.net免费下载UML2建模工具=======================
trufun4 9:30:41
状态图是序列图分析的延伸
啃铁鼠<4> 9:32:03
注意哪些地方了?又怎么来应用了?为什么要使用状态图来分析了?
trufun4 9:33:16
很好,看来你思考了
webmaster(1) 9:34:21
大家要多多配合老师的话题积极发言,老师会讲的更深入些,
trufun4 9:35:35
为啥要要研究对象的状态呢,因为对象只有在某种状态下,才能对某种外部事件发出响应
啃铁鼠<4> 9:36:36
是不是说,处在该状态下只能处理该状态的事件,其他状态的事件就不能处理了?
trufun4 9:37:13
是的
啃铁鼠<4> 9:38:13
可如果这样,某个对象会不会出现很多很多的状态,岂不是状态处理很繁琐和麻烦了
=============欢迎访问www.trufun.net免费下载UML2建模工具=======================
trufun4 9:43:56
听到下课铃这个外部事件,处在上课状态的学生可以发生状态改变,处在下课状态的学生,则不会发生状态改变
啃铁鼠<4> 9:44:52
该怎么来划分状态了?
trufun4 9:45:38
一个对象有多少状态呢
承懿<2> 9:45:42
下课-->上课(上课铃响)
承懿<2> 9:45:49
反过来下课铃响
承懿<2> 9:46:17
事件驱动状态改变
trufun4 9:46:42
事件是什么?
承懿<2> 9:47:26
上课铃和下课铃
承懿<2> 9:47:34
响就是事件
trufun4 9:48:08
用面向对象说实质
trufun4 9:50:39
talenter(3) 9:48:57
消息
talenter(3) 9:49:05
动作?
trufun4 9:49:26
对,消息,也就是方法
啃铁鼠<4> 9:51:25
消息怎么会是方法了?
啃铁鼠<4> 9:51:52
应该与运行的系统驱动方式有关吧?
承懿<2> 9:51:55
在objective c中消息就是方法
承懿<2> 9:52:10
这两个好像可以互称
啃铁鼠<4> 9:52:17
windows系统消息和方法是两个概念
trufun4 9:52:33
你可能没学前面的课,可以查查以往的记录
承懿<2> 9:52:33
windows中消息是message
承懿<2> 9:52:40
方法是对象调用的方法对吧
啃铁鼠<4> 9:52:58
是的
trufun4 9:53:00
是的
啃铁鼠<4> 9:53:15
通过消息映射实现的消息与方法的绑定
啃铁鼠<4> 9:54:11
在windows下,消息==事件
W-inds(5) 9:54:20
trufunwu老师,可不可以整理下以往的教学啊...整理成一个文件。
trufun4 9:54:24
调用事件,消息,方法是从不同角度看问题的同一个函数
啃铁鼠<4> 9:54:36
是的
啃铁鼠<4> 9:56:10
所处的层次不同叫法不同,都是为实现驱动机制叫法不同
trufun4 9:56:45
答案:一个对象有无数个状态
一米阳光(6) 9:58:26
我想问个db的问题 有谁对这块熟吗
trufun4 9:58:33
状态用对象的属性来表示
一米阳光(6) 10:00:55
trufunwu 老师 会数据库吗
webmaster(1) 10:01:12
每期的讨论记录都在网站论坛里面整理发布了
trufun4 10:01:13
什么问题
webmaster(1) 10:01:26
在论坛中的qq交流群记录中,大家可以查阅
一米阳光(6) 10:02:09
有父子关系的表这么设计 有没有问题?
一米阳光(6) 10:02:35
我以前一直这么设计的 刚才查资料 有人说这种不符合数据库范式
trufun4 10:04:10
不规范
承懿<2> 10:04:37
第二个里面怎么两个pk?
trufun4 10:05:02
就这个问题
一米阳光(6) 10:05:09
一个Pk吧 截得别人的图
一米阳光(6) 10:05:42
等下 我重新截个图
trufun4 10:06:42
违反主键和外键是整体关联,而不是部分关联
一米阳光(6) 10:08:20
这样子吗?
trufun4 10:09:24
return
一米阳光(6) 10:10:02
好像在子集合中把父表主键作为主键 就会出现2个pk
trufun4 10:10:45
课后交流此问题
一米阳光(6) 10:10:58
哦 好的
trufun4 10:11:20
我们只关心那些对我们感兴趣的某个事件发出某种行为的状态
trufun4 10:13:01
今天的案例: 靓号状态
“靓号”能被锁定,被锁定的“靓号”不能被其它用户再锁定。被锁定的靓号如果在15分钟内没被用户租用,则还回到初始状态,可以再被(其他)用户锁定。被 锁定的“靓号”可以被租用,租用到期后能被系统预留(即为先前的用户保护起来),预留一个月后如用户未续租,则此“靓号”可以被其他人锁定或租用。在租用 状态下的“靓号”,如果被同一用户累积租用超过半年,则可以买断。被买断后,此“靓号”变成普通号。
trufun4 10:16:07
分析出状态,事件,监护条件,效果
一米阳光(6) 10:17:38
作业交到那里啊
trufun4 10:17:54
讨论
啃铁鼠<4> 10:20:36
看起来好复杂啊
trufun4 10:21:36
跟我学分析,最后画成图,简单
承懿<2> 10:21:55
可惜我用的mac系统
承懿<2> 10:21:59
没uml工具
一米阳光(6) 10:22:25
trufunwu 状态图里面有没有回到起点的流程?
trufun4 10:23:08
用楚凡的,不但教用工具,而且教分析,多好
一米阳光(6) 10:23:41
呵呵
webmaster(1) 10:23:52
trufun产品支持跨平台,mac操作系统没问题
一米阳光(6) 10:24:23
个人用户怎么收费啊....
trufun4 10:28:45
联系网管
承懿<2> 10:29:44
我就做一个系统用了UML之后就没用过了
trufun4 10:29:46
talenter(3) 10:27:14
累积租用超过半年
trufun4 10:28:05
累计租期是一个属性
一米阳光(6) 10:29:52
又没vs 环境下的免费版 我上网站看了下 只看到eclipse免费版
trufun4 10:30:26
先试用
trufun4 10:31:43
九头鸟的奋斗(705543728) 10:30:10
靓号的属性只有两种 :预留和非预留
trufun4 10:31:01
是否已预留是一个属性
守护者(7) 11:02:50
属性 是靓号
一米阳光(6) 11:03:05
靓号 是对象吧?
守护者(7) 11:03:07
锁定状态也可以成为锁定
trufun4 11:03:15
属性是是否锁定
守护者(7) 11:03:23
靓号可以是号的子类 也可以是号的属性
守护者(7) 11:03:27
都是可以的
守护者(7) 11:03:38
靓号也可以分成靓号和普通号
trufun4 11:03:38
号码为属性
守护者(7) 11:04:18
属性和子类多代表着不同 可以根据当前的需要变化
trufun4 11:05:18
事件为其他人锁定
守护者(7) 11:05:51
恩 这里的事件在实现上可以定义成 方法或者委托都OK
一米阳光(6) 11:06:26
@守护者 定义成方法我理解 定义成委托 我不大理解 能解释下吗
守护者(7) 11:06:51
什么地方不理解
守护者(7) 11:07:12
是不理解委托本身 还是不理解 为什么可以定义成委托?
trufun4 11:07:19
效果就是对象接收事件后的动作
trufun4 11:08:31
效果为拒绝锁定
守护者(7) 11:08:44
定义成delegate后 可以 创建event来自的触发委托 不知道怎么解释行不行
一米阳光(6) 11:09:35
属性: 号码 是否锁定 是否靓号 锁定人,锁定开始时间
事件: 发起锁定
效果: 1.已经锁定 拒绝锁定
2.没有锁定 改变锁定状态
这样?
守护者(7) 11:10:04
而且很多情况下 如果 暴露类和方法是紧耦合的 定义成delegate后 可以有效减除耦合 一米阳光这么说了解了吧
守护者(7) 11:11:22
状态在很多时候 都是在异步的时候用的 同步就不说了 太多了
trufun4 11:12:35
被锁定的“靓号”是监护条件,意思是不是所有对象对此事件都响应
守护者(7) 11:13:35
不是 从低耦合的角度来说 应需要特定的触发吧
一米阳光(6) 11:13:50
@守护者
我不大理解 为什么 要 有效减除耦合
我以往的经验中 定义了委托后,就可以在程序的执行流程中插入另外的执行代码
守护者(7) 11:14:05
要是我的话 就是用 delegate在域上面做控制 或者
trufun4 11:14:14
耦合是设计的概念
守护者(7) 11:14:24
使用代理模式来操作
守护者(7) 11:14:50
耦合和内聚是 设计理念
啃铁鼠<4> 11:15:08
低耦合就是为了设计的简单
守护者(7) 11:15:08
委托的使用 谁都会 小米
守护者(7) 11:15:17
告诉我你为什么会使用委托
一米阳光(6) 11:15:26
恩 是用过 但是不知道为什么要用
守护者(7) 11:15:29
使用的动机什么
守护者(7) 11:15:50
如果 不知道动机为什么要用
守护者(7) 11:16:10
那你让后面维护你代码的后来人怎么维护呢
一米阳光(6) 11:16:31
我使用委托的情况 都是因为要操作本身以外的对象
守护者(7) 11:16:43
我在程序的每一行代码都是用动机的 没动机的代码我宁愿不写
守护者(7) 11:17:00
操作本身以外的对象
有很多方式 为什么就是用委托呢
承懿<2> 11:17:13
讲一下委托的具体实例
承懿<2> 11:17:16
举一个听听
守护者(7) 11:17:24
也可以调用 代理 观察者 继承 很多方式呀
承懿<2> 11:17:29
有可能我用过,但是我不知道
承懿<2> 11:17:35
代理晓得
守护者(7) 11:17:39
为什么单单使用委托
承懿<2> 11:17:39
观察者也晓得
承懿<2> 11:17:48
delegate
承懿<2> 11:17:53
讲一下嘛
一米阳光(6) 11:17:59
可以不用关心 外部对象 的操作 过程 结果
守护者(7) 11:18:11
承 去网上看看得多是
trufun4 11:18:27
被锁定的靓号如果在15分钟内没被用户租用,则还回到初始状态,可以再被(其他)用户锁定,这句话的状态,事件,效果
守护者(7) 11:18:36
定义成接口也可以看不到 操作过程
承懿<2> 11:18:39
你说的那个不用关心操作过程的那个不是建造者模式吗
守护者(7) 11:18:47
咋不用Interface呢
一米阳光(6) 11:19:28
rufun4 11:12:35
被锁定的“靓号”是监护条件,意思是不是所有对象对此事件都响应
我的理解是 所有的对象都响应,然后根据属性返回不同结果
守护者(7) 11:20:58
呵呵 观察者也可以呀 通过观察状态进行双向依赖
一米阳光(6) 11:21:03
@守护者
我可能表达的有误
这么说吧
我使用委托 主要是引发event
告诉外部对象 你可以执行某某操作了
至于怎么操作,要不要操作 本身不去管
一米阳光(6) 11:21:33
建造者模式 我以前还真没有了解过
守护者(7) 11:21:49
这才是我要问的 有时候为了接触双向依赖 才需要委托
守护者(7) 11:22:29
而且定义event后 委托能后自动触发 在一定的场合下能带来便利
一米阳光(6) 11:22:31
@守护者 我被绕糊涂了
trufun4 11:22:41
状态有两个,已锁定状态和初始状态
守护者(7) 11:22:49
其实我就是在问你委托的使用动机
守护者(7) 11:23:03
因为 很多方式都能表达消息的传递
承懿<2> 11:23:11
像android的AlertDialog就是典型的建造者模式
trufun4 11:23:21
状态有两个,已锁定状态和初始状态
守护者(7) 11:23:21
不同情况下 最佳方案不一样 这就是我要问的
承懿<2> 11:23:22
守护者(7) 11:23:52
trufunwu 我把状态 用继承放在子类也表达 也OK吧
承懿<2> 11:24:06
你不需要知道里面是怎么实现的,传入不同的参数得到不同的界面
承懿<2> 11:24:16
里面的建造过程很复杂
一米阳光(6) 11:25:31
刚才说的这些 我没有得到一个结论 我做的对不对 我该怎么做 为什么要这么做
trufun4 11:25:56
事件为未租用
一米阳光(6) 11:27:36
我真晕了 有没有基础书 我去啃啃
trufun4 11:28:43
效果是回到初始状态的回到行为
一米阳光(6) 11:29:53
复位行为 我更容易理解 回到行为 有点绕 呵呵
trufun4 11:31:01
可以再被(其他)用户锁定,是迁移后状态的内部行为
trufun4 11:33:11
剩下的网友自己分析
守护者(7) 11:33:38
呵呵
守护者(7) 11:34:04
tru 通过状态 给大家引了很多模式上的话题呀 呵呵
trufun4 11:34:16
谢谢
trufun4 11:36:09
这是我的观点,仅供参考
trufun4 11:36:55
守护者(7) 11:37:15
build模式 一个系统 没几个 除非是超级类 但是我设计的软件 多没有大型类 有也本大而化小了
守护者(7) 11:37:37
我写过一个有关代码的写过规则 当然 是以前项目制定的 可以去看看
守护者(7) 11:37:51
150行 以内的类能大到什么地方去呢 呵呵
trufun4 11:41:08
下次讨论组件图,记住带着问题来
守护者(7) 11:42:49
这图 是系统级的了 话题有点大
一米阳光(6) 11:43:09
trufunwu 已租用 和 已续租 为什么是2个状态?
守护者(7) 11:43:29
不做上层设计的话 一般不会用到组件图
守护者(7) 11:44:14
这样子能区分租用是 第一次租 续租 是第N次租
trufun4 11:44:41
对事件的响应(行为)不同
一米阳光(6) 11:46:12
是不是一个要记录开始时间 一个不用记录?
守护者(7) 11:46:20
很有可能第二以后在租用 就会打折 打折的话 和全款 就是不同的行为 所以状态会不一样的
trufun4 11:46:52
属性讨论已谈过,有租期
一米阳光(6) 11:47:40
根据 租期 来决定是否买断 是吧
trufun4 11:48:26
是的