《大象Think in UML》阅读笔记之二
Think in UML阅读笔记(二)
上一次读到面向对象和面向过程的区别和各自的优势,结合实例分析了面向过程在面对大数据的时候,已经不足以满足人们的需求,所以引入了面向对象,面向对象的方法把世界看做一个个独立的对象,并且对象之间相互没有因果关系,只有在一些外部力量的驱使下,这些对象之间才会根据某种规律相互传递信息,而这些对象之间的互动促成了这个世界的一个“过程”,面向对象的方法只需要研究“一个对象”,不会像面向过程那样遭遇大数据的问题,“这个对象”的复杂度和结构是有限的,彼此是相互独立的。
在上一个组装汽车的例子中,对象是按照一定的规则组装出了一辆汽车,在这个例子中,我们可以发现一些问题,例如:零件是如何产生的???这种符合“规则”的标准零件是如何被设计制造出的???等等......这些问题的产生提醒了我们一件事,那就是“现实世界和对象世界是不一样的”。因此我们需要解决的问题有三个:Why(为什么?)、How(怎么做?)、What(是什么?)。在面对一个问题的时候,我们进行设计的时候设计的类的个数、方法的个数为什么是这么多个???我们没有一种固定的方法来确定这些东西,有经验的设计师根据经验,没有经验的我们只能通过不断的测试来证明我们设计出来的那些类实现了我们的某些需求,但是如果你设计的类不能满足我们的需求,我们就可能需要重新设计,这样花费的成本是难以估量的,而且我们有时候还不能真正确定我们设计的类已经满足了我们的需求,我现在是一名大三的学生,我们现在正在学习《软件设计模式》这门课,,正在学习GOF,里面有很多的类设计的模式和开始的原则来实现类的高低聚、低耦合。但是我们总是不太明白我们写的程序为什么是这样子的,其中的类是什么意思?为什么是这样?探究其本质,不过是因为现实世界和对象世界之间有着一道鸿沟,它叫“抽象”。抽象是面向对象的精髓所在,为了理解这种“抽象”,我们需要(1)一种把现实世界映射到对象世界的方法;(2)一种从对象世界描述现实世界的方法;(3)一种验证对象世界行为是否正确反映了现实世界的方法;要理解这些,我们引出了UML,UML背后所代表的面向对象分析设计方法。UML是一种建模用的语言,而所有的语言都是由基本词汇和语法两个部分构成的,UML定义了一些建立模型所需要的、表达某种特定含义的基本元素;这些元素称为元模型,相当于语言中的基本词汇,例如用例、类等。另外,UML还定义了这些元模型互相之间关系的规则,以及如何用这些元素和规则绘制图形以建立模型来映射现实世界;这些规则和图形称为表示法或试图(View),相当于语言中的语法。UML这种语言是用来写说明文的,用自然世界和计算机路基都能够理解的表达方式来说明现实世界。
不论什么年代、什么领域,统一一词已经不只是一个简简单单的词汇,而是一个可以让不同的人或物理解同一种东西,统一的目的就是形成标准;在软件工程这个行业里面,任何一种组件化开发模式背后都有一个标准在规范和指导,可以说没有标准就没有现代工业化。随着软件工程的不断承受,软件行业的需求、分析、设计、开发这些过程也被分离开来并专业化了。
可视化,从字面上来看,所谓可视化就是肉眼可见的,但是在这里可视化的含义是指,UML通过他的元模型和表示法,把那些通过文字或其他表达方式很难表达清楚的,隐晦的潜台词用简单直观的图形表达和暴露出来,准确而直观地描述复杂的含义,把文字变成图形,这就是UML可视化的真正含义。
我们通过软件建立模型来对客观事物建立一种抽象的方法,要建立模型的前提是知道如何抽象现实世界,我们站在很高的抽象的层次,以高度归纳的视角来看这个世界的运作,就会发现现实世界不管多复杂,无论是哪个行业、无论做什么业务、其本质无非是由人、事、物和规则组成的。其中人是中心,随着人的动作的开始,就会使用一些东西产生一些,而人的动作要遵循一定的规则。人驱动系统,事体现工程,物记录结果,规则是控制。建立模型的关键就是弄明白有什么人,什么人做什么事,什么事产生什么物,中间有什么规则,再把人、事、物之间的关系定义出来,一个模型就出来了。
《大象Think in UML》阅读笔记之二的更多相关文章
- Hadoop阅读笔记(二)——利用MapReduce求平均数和去重
前言:圣诞节来了,我怎么能虚度光阴呢?!依稀记得,那一年,大家互赠贺卡,短短几行字,字字融化在心里:那一年,大家在水果市场,寻找那些最能代表自己心意的苹果香蕉梨,摸着冰冷的水果外皮,内心早已滚烫.这一 ...
- Linux协议栈代码阅读笔记(二)网络接口的配置
Linux协议栈代码阅读笔记(二)网络接口的配置 (基于linux-2.6.11) (一)用户态通过C库函数ioctl进行网络接口的配置 例如,知名的ifconfig程序,就是通过C库函数sys_io ...
- Apollo源码阅读笔记(二)
Apollo源码阅读笔记(二) 前面 分析了apollo配置设置到Spring的environment的过程,此文继续PropertySourcesProcessor.postProcessBeanF ...
- [置顶] Linux协议栈代码阅读笔记(二)网络接口的配置
Linux协议栈代码阅读笔记(二)网络接口的配置 (基于linux-2.6.11) (一)用户态通过C库函数ioctl进行网络接口的配置 例如,知名的ifconfig程序,就是通过C库函数sys_io ...
- 【unix网络编程第三版】阅读笔记(二):套接字编程简介
unp第二章主要将了TCP和UDP的简介,这些在<TCP/IP详解>和<计算机网络>等书中有很多细致的讲解,可以参考本人的这篇博客[计算机网络 第五版]阅读笔记之五:运输层,这 ...
- 《梦断代码Dreaming In Code》阅读笔记(二)
这段时间一口气读了5章,所以想着现在一块写阅读笔记. 在阅读的这段时间,我一直是晚上进行阅读,很多时候都是读完一看已经一个小时了,效果还不错.闲话不表,说说阅读心得. 关于底层语言或是低级语言,我之前 ...
- Head First HTML与CSS阅读笔记(二)
上一篇Head First HTML与CSS阅读笔记(一)中总结了<Head First HTML与CSS>前9章的知识点,本篇则会将剩下的10~15章内容进行总结,具体如下所示. div ...
- 论文阅读笔记(二十一)【CVPR2017】:Deep Spatial-Temporal Fusion Network for Video-Based Person Re-Identification
Introduction (1)Motivation: 当前CNN无法提取图像序列的关系特征:RNN较为忽视视频序列前期的帧信息,也缺乏对于步态等具体信息的提取:Siamese损失和Triplet损失 ...
- 02《UML大战需求分析》阅读笔记之二
UML虽然是一种新的工具,但同时也代表了一种新的先进的思考方法,所以学习UML的关键不在于学习语法,而是要改变思维习惯.所以我觉得我还需要系统地培养几方面的能力,如书面表达能力,归纳总结能力,“面向对 ...
随机推荐
- Xcode下载模拟器太慢?
在Xcode里下载模拟器,速度实在是太慢了.点击下载,卡住十几分钟才开始下载,并且龟速进行. 解决方案:获取模拟器下载地址,自己选择下载器进行下载. 找到下载链接 打开 Console.app(苹果电 ...
- js 继承的几种方式
JS继承的实现方式: 既然要实现继承,那么首先我们得有一个父类,代码如下: function Animal(name) { // 属性 this.name = name || '小白'; // 实例方 ...
- jQuery----JQuery动画(hide()和show())(下)
本文是对hide()和show()的进一步补充,其中不仅介绍回调函数,还有递归的相关知识点. 案例要求: 点击”隐藏动画“按钮,四个头像从后向前,每个以0.8秒的速度消失 点击”显示动画“按钮,四个头 ...
- Linux-2.6_LCD驱动学习
内核自带的驱动LCD,drivers/video/Fbmem.c LCD驱动程序 假设app: open("/dev/fb0", ...) 主设备号: 29, 次设备号: 0--- ...
- Python的open函数文件读写线程不安全,logging模型文件读写线程安全!
工作中遇到的问题:如何在多线程的程序中同时记录日志? 最初图省事,使用了最原始的open函数来写日志,因为开始使用的写文件模式的是追加('a'),发现并没有线程不安全的现象,各个线程的的日志信息都写入 ...
- Datax3.0使用说明
一.datax3.0介绍 1.DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL.Oracle等).HDFS.Hive.ODPS.HBase.FTP等各种异构数据源之间稳 ...
- 【转】JavaScript操作SVG的一些知识
原文:http://blog.iderzheng.com/something-about-svg-with-javascript/ 前阵子学习了一下SVG(Scalable Vector Graphi ...
- 2015306 白皎 《网络攻防》Exp3 免杀原理与实践
2015306 白皎 <网络攻防>Exp3 免杀原理与实践 一.实践基础 免杀,故名思义,指的是一种能使病毒木马免于被杀毒软件查杀的技术. 免杀的方法有很多,比如加壳改壳.加垃圾指令.以及 ...
- git push 每次都要输入用户名密码
添加远程库的时候使用了https的方式..所以每次都要用https的方式push到远程库,速度还慢.. 查看使用的传输协议: git remote -v 重新设置成ssh的方式: git remote ...
- 【转载】用纯粹的C++编写COM组件
原文:http://blog.csdn.net/ghj1976/article/details/3441 下载本文代码 本文提供一个完全用C++实现的进程内(DLL)COM服务器,不要ATL或MFC提 ...