思考题答案

前两个问题只有读者自己知道,所以省略。

用什么方法才能发现这些问题呢?

继续关注本公众号,并且勤加练习。<-你可以说是广告,管他呢。

应该如何解决这些问题呢?

  • 两个字:分解

  • 四个字:面向对象

解决软件遇到的问题,有一个最常用的方法就是对系统进行分解。好听的说法叫重构。

识别交通信号系统中的类

直接看结果

下面对于类图中出现的类进行简单的介绍

TrafficSystem:交通信号系统全体,具体系统中使用该类的派生类。

InputDevice:输入设备的基类。

PushButton:操作按钮。

TrafficLightEngine:信号系统整体执行逻辑,具体系统中使用该类的派生类。

TrafficLight:信号灯基类。

PedestrainSpeaker:严格讲这个不是信号灯,而是行人通行时播放提示音的设备。

RedestrainLight:行人专用信号灯。允许同行时绿灯,最后阶段绿灯闪烁,禁止同行是红灯。

StandardVehicleLight:车辆专用信号灯。允许同行时绿灯,最后阶段绿灯闪烁,安全停止时黄灯,禁止通行状态时红灯。

DigitalVehicleLight:车辆专用信号灯。允许同行时绿灯,最后阶段有数字表示剩余时间,安全停止时黄灯,禁止通行状态时红灯。

构建交通信号系统

以下是举例用系统的对象图

例子系统构成如下包括:系统停止按钮,横穿马路请求按钮,行人通行音乐提示设备,行人信号灯,车辆信号等。

接下来的文章会针对这个交通系统中的每一个要素的状态机建模。敬请期待。

一点感想

对于系统结构的分解,不同的设计者会有不同的视角,不同的观点,所以就会有不同的模型。但是好的设计会有一些共同点,其中的一个特点应该就是分解的过程就像庖丁解牛。我想庖丁解牛至少需要两个要素:熟悉,熟练。熟悉就是要对牛的结构要熟悉,熟练就是运用工具要熟练。

希望每一位读者都能像庖丁解牛一样对系统进行分解。

以上就是今天的文章,欢迎点赞,关注并推荐给您的朋友!
更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】

EAUML日拱一卒-状态图::庖丁解牛相关推荐

  1. EAUML日拱一卒-状态图::基本要素画法

    状态图的内容说明完了以后,本文说明EA中各种的画法. 创建状态图 打开[Project Brower]中根节点的上下文菜单,选择[Add]-[Add View...]项目. 输入名称,选择[Dynam ...

  2. EAUML日拱一卒 总目录

    用例图 EA&UML日拱一卒 用例图开篇 EA&UML日拱一卒 用例包含关系 EA&UML日拱一卒 用例泛化关系 EA&UML日拱一卒 用例扩展关系 类图 EA& ...

  3. EAUML日拱一卒-微信小程序实战:位置闹铃 (15)-实现监控点状态迁移功能

    简单地设计以后,就可以开始着手实现了. 接近监控点 enterAlarmCheck: function (distance, accuracy){ if (this.state == 'ready') ...

  4. EAUML日拱一卒--序列图(Sequence Diagram)::交互和交互使用

    画时序图就和写作文一样,经常会遇到一发而不可收的情况,结果就是得到一个巨大的时序图.这种情况下,作者首先会因为完成了一件大工程而感到自豪,可是一旦他把完成的时序图拿给别人看或者是需要维护的时候就开始意 ...

  5. EAUML日拱一卒--序列图(Sequence Diagram)::生命周期

    在实际的程序中,创建对象,删除对象这样的控制对象生命周期的处理可以说比比皆是. 创建对象 下面以图形编辑软件中用户双击鼠标创建新对象为例说明. 处理流程: 用户双击鼠标. Framework生成QMo ...

  6. EAUML日拱一卒-微信小程序实战:位置闹铃 (6)-播放音频

    昨天停更了一天,不是作者偷懒,而是掉到了一个坑里.本来以为播放音频很简单,但是还是遇到的各种问题,比如: 1)小程序无法播放手机存储目录中的文件,只能播放网上的或者是小程序暂存的文件. 2)播放暂存文 ...

  7. EAUML日拱一卒-活动图::OMG UML2.5中文译文 16.12 Expansion Regisons

    16.12.1 Summary(概要) An ExpansionRegion is a StructuredActivityNode that executes its contained eleme ...

  8. EAUML日拱一卒-微信小程序实战:位置闹铃 (5)-显示所在位置的信息

    假设我们指定了多个监控点,接下来的需求就是给每个监控点取名字.如果是手动输入的话,会比较麻烦.所以位置闹铃再向前走一步,从地图上取得监控点所在位置的信息作为监控点的名称. 画面说明 当我们选定监控点以 ...

  9. EAUML日拱一卒 时序图入门

    有些文章将TimingDiagram翻译为定时图,但总是差那么点意思.经过权衡,本文将TimingDiagram译为时序图.对于本系列早期文章中将SequenceDiagram翻译成时序图的情况,将来 ...

最新文章

  1. 计蒜客 挑战难题 爬楼梯
  2. 随机生成图像 与 图像的转维(reshape)
  3. 32位十六进制浮点数转换为十进制浮点数的方法
  4. DexFile类介绍
  5. 猜数(二分、线段树)
  6. 二层冗余网络引起的问题
  7. toCharArray()和 charAt()的用法
  8. 【英语学习】【Level 07】U03 Amazing wonders L1 My hometown
  9. cornerstone图标含义
  10. 使用spring的aop监听所有controller或者action日志
  11. cai计算机辅助教程,拓展:计算机辅助教学(CAI)的基本模式
  12. python编程基础及应用教程答案_Python编程基础教程
  13. 数据分析学习记录(二)---响应曲面法及Design-Expert的简单使用
  14. BP 神经网络算法原理
  15. Julia 下载 安装 juno 开发环境搭建
  16. mysql数据库更新数据库语句_详解MySQL数据库之更新语句
  17. jquery实现向服务器发送get请求下载excel文件
  18. php上传文件时报错:only variables should be passed by reference
  19. Java程序占用 CPU 过高怎么排查
  20. 对计算机进行重镜像错误,Windows 10 使用系统镜像恢复系统出现内部错误?

热门文章

  1. PADS 改了PCB Decals ECO TO PCB封装没变?
  2. C语言-蓝桥杯-算法训练 完全背包问题
  3. c语言俄罗斯方块代码及实验报告,c语言俄罗斯方块实验报告.doc
  4. 《转》impress.js页面PPT
  5. 李宏毅机器学习-HW1
  6. Java多线程手写代码——奇偶交替输出,123123循环输出、A1B2C3交替输出
  7. 51单片机实现printf
  8. mmkv跨进程,火爆全网的Android面试题
  9. 人人都应该掌握的9种数据分析方法
  10. php 的常用内置函数大全,php常用内置函数