《大象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的关键不在于学习语法,而是要改变思维习惯.所以我觉得我还需要系统地培养几方面的能力,如书面表达能力,归纳总结能力,“面向对 ...
随机推荐
- iOS 判断两个颜色是否相同
今天做项目的时候,遇到一个小问题,就是获取UIButton的背景颜色用来和已知颜色做对比,进行点击事件.去查了下文档,有个方法正好可以处理这个问题. bool CGColorEqualToColor ...
- 记录一下安装 mysql 的踩坑之路
坑点: 1.旧的mysql没有删除干净.在安装mysql的时候,没有注意到,在输入 “mysqld install” 指令时跳出来 exits,存在于另一个文件夹之中,这影响了后来的很多操作,包括ro ...
- php数组 组合排列 笛卡尔积
function Descartes() { $t = func_get_args(); if (func_num_args() == 1) { return call_user_func_array ...
- C语言学习记录_2019.02.06
break语句的作用:当执行到break,则跳出循环,免去不必要的循环次数,节省时间和资源.-----跳出循环,结束循环: continue:跳过这一次循环剩下的语句,进入到下一轮循环.-----跳到 ...
- 2017-2018-1 20155320 第五周 加分题-mybash的实现
2017-2018-1 20155320 第五周 加分题-mybash的实现 使用fork,exec,wait实现mybash 写出伪代码,产品代码和测试代码 发表知识理解,实现过程和问题解决的博客( ...
- jQuery学习- 子选择器与可见性选择器
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Dlib库中实现正脸人脸关键点(landmark)检测的测试代码
Dlib库中提供了正脸人脸关键点检测的接口,这里参考dlib/examples/face_landmark_detection_ex.cpp中的代码,通过调用Dlib中的接口,实现正脸人脸关键点检测的 ...
- JAVAWEB 遍历mysql结果集时 字段为0、false、null的问题
foreach遍历查询mysql中的tinyint字段时一直查都是各种0,false,null 发现原来是实体类中的变量名和mysql中的列名不一样出的bug 所以说列名和实体类中的相关变量名是要保持 ...
- 从轻测到上线,WeTest与《一起来捉妖》测试方案大公开
从2016年Pokémon GO引发的AR游戏热潮开始,国内就一直在期待新的一款具备代表性的AR游戏的头部作品. 4月11日的腾讯首款AR探索手游<一起来捉妖>不仅为国内市场注入了新的活力 ...
- C++构造函数深度探究
1.引子: 以下代码中的输出语句输出0吗,为什么? struct Test { int _a; Test(int a) : _a(a) {} Test() { Test(0); } }; Test o ...