《大象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的关键不在于学习语法,而是要改变思维习惯.所以我觉得我还需要系统地培养几方面的能力,如书面表达能力,归纳总结能力,“面向对 ...
随机推荐
- oracle 数据库更新 新增 修改 删除
数据增加 INSERT INTO 表名称 [(字段,字段,...)] VALUES (值,值,...) ; 考虑到日后代码的可维护性,一定要使用完整的语法进行数据的增加. 数据修改 UPDATE 表名 ...
- docker 设置映射端口 目录挂载
docker run -p 3092:9092 -p 3093:9093 -p 3094:9094 -p 3181:2181 --name="kafka_map_port_3092_4_31 ...
- Scala_标识符
用于对象,类,变量和方法的名称称为标识符.关键字不能用作标识符,标识符区分大小写. 类名首字母大写 方法名称第一个字母小写 程序文件名应该与对象名称完全匹配 1.字母数字标识符 以字母或下划线开头,后 ...
- 2.Built-in types-基本数据类型(Dart中文文档)
初次翻译,部分内容并非按字面翻译,是按本人理解进行了内容重组.如有错误望指正. Dart语言内置如下数据类型: numbers strings booleans lists (所谓的数组) maps ...
- 20155234 2016-2017-2 《Java程序设计》第7周学习总结
20155234 2016-2017-2 <Java程序设计>第7周学习总结 教材学习内容总结 第十二章 Lambda Lambda表达式会使程序更加地简洁,在平行设计的时候,能够进行并行 ...
- Linux命令学习笔记1
1.Linux命令学习 2.Mkdir /data -创建文件夹 在/下创建文件夹 data 3.Cd -目录切换 列如cd / 4.Touch /data/1 ...
- CF 1051 G. Distinctification
G. Distinctification 链接 分析: 线段树合并 + 并查集. 最后操作完后a连续递增的一段,b一定是递减的.最后的答案是$\sum (a_{new}-a_{odd}) \times ...
- USACO Section1.1
本系列博客主要学习和记录USACO的相关代码和总结,附上我的github地址. 什么是USACO USACO全称是The USA Computing Olympiad,主要目的是从美国高中生中选出代码 ...
- Spring学习(十九)----- Spring的五种事务配置详解
前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的. ...
- Python科学计算库-Numpy
NumPy 是 Python 语言的一个扩充程序库.支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库,也是学习 python 必学的一个库. 1. 读取文件 numpy.gen ...