《大象-Think In UML》读书笔记1
大音希声,大象希行。
什么是面向过程?什么是面向对象?
面向过程归纳为结构化程序设计、DFD图、ER模型、UC矩阵等,而面向对象则被归纳为继承、封装、多态、复用等具体的技术。事实上,上述的所有技术都只是人们在采用不同的方法来认识和描述这个世界时所采用的工具,他们都只是表征而不是本质。
面向过程方法认为我们的世界是一个个相互关联的小系统依据严密的逻辑组成的,环环相扣,井然有序。对于每一个小系统都有着明确的开始和明确的结束,开始和结束之间有着严禁的因果关系。只要我们将这个小系统中的每一个步骤和影响这个小系统走向的所有因素都分析出来,我们就能完全定义这个系统的行为。
所以我们要分析这个世界,并用计算机来模拟它,首要的工作是将这个过程描绘出来,把它们的因果关系都定义出来:再通过结构化的设计方式,将这些过程进行细化,形成可以控制的、范围较小的部分。通常,面向过程的分析方法是找到过程的起点,然后顺藤摸瓜,分析每一个部分,直至达到过程的重点。在这个过程中的每一个部分都是过程链上不可分割的一环。
面向过程的困难,本质上是因为面向过程方法将世界看作是过程化,一个紧密相连的小系统,构成这个系统的各个部分之间有着不可分的因果关系。这种分析方法在需求复杂度较低的时候非常管用,如同一台照相机,将物体的反光经过镜头传导到感光胶片,再经过冲洗就能将信息复制出来。然而这个世界系统是如此的复杂和不可捉摸,就如同那个著名的蝴蝶效应,预设的过程仅仅因为一只蝴蝶扇动了一下翅膀就从此被颠覆,变得面目全非了。
面向对象方法将世界看做一个个相互独立的对象,相互之间并无因果关系,他们平时是“鸡犬之声相闻,老死不相往来”的。只有在某个外部力量的推动下,对象之间才会依据某种规律相互传递信息,这些交互构成了这个生动世界的一个“过程”,在没有外力的情况下,对象则保持这“静止”的状态。
对象有着坚硬的外壳,从外部来看,除了它用来与外界交互的消息通道之外,对象内部就是一个黑匣子,什么也看不到,这被称为封装;在例如对象可以结合在一起形成新的对象,结合后的对象具有前两者特性的总和,这称为聚合;对象可以繁育,产下的孩子将拥有父辈全部的本领,这称为继承;对象都是多面派,他会根据不同的要求展现其中的一个面,这就是接口;多个对象可能长着相同的脸,而这张脸背后却有着不同的行为,这就是多态。
面向对象方法与面向过程方法根本的不同,就是不再把世界看做是一个紧密关联的系统,而是看成一些相互独立的小零件,这些零件依据某种规则组织起来,完成一个特定的功能。
面向对象的困难:
对象是怎么对抽取出来的?现实世界和对象世界看上去差别是那么大,为什么要这么抽象而不是那么抽象呢?(why)
对象世界由于其灵活性,可以任意组合,可是我们怎么知道某个组合就正好满足了现实世界的需求呢?什么样的组合是好的,什么样的组合是差点?(how)
抛开现实世界,对象世界是如此的难以理解。如果只给一个对象组合,我怎么才能理解它表达了怎样的含义呢?(what)
我们把世界看做是由许多对象组成的这并没有错,只是现实世界和对象世界之间存在着一道鸿沟,这道鸿沟的名字就叫做抽象,抽象是面向对象的精髓所在,同时也是面向对象的困难所在。实际上,想要跨越这道鸿沟,我们需要:
一种把现实世界映射到对象世界的方法。
一种从对象世界描述现实世界的方法。
一种验证对象世界行为是否正确反映了现实世界的方法。幸运的是,UML,准确的说是UML背后所代表的面向对象设计方法,正好架起了跨越这道鸿沟的桥梁。
《大象-Think In UML》读书笔记1的更多相关文章
- 《Linux/Unix系统编程手册》读书笔记 目录
<Linux/Unix系统编程手册>读书笔记1 (创建于4月3日,最后更新4月7日) <Linux/Unix系统编程手册>读书笔记2 (创建于4月9日,最后更新4月10日) ...
- 《Linux/Unix系统编程手册》读书笔记9(文件属性)
<Linux/Unix系统编程手册>读书笔记 目录 在Linux里,万物皆文件.所以文件系统在Linux系统占有重要的地位.本文主要介绍的是文件的属性,只是稍微提及一下文件系统,日后如果有 ...
- 《Linux/Unix系统编程手册》读书笔记8 (文件I/O缓冲)
<Linux/Unix系统编程手册>读书笔记 目录 第13章 这章主要将了关于文件I/O的缓冲. 系统I/O调用(即内核)和C语言标准库I/O函数(即stdio函数)在对磁盘进行操作的时候 ...
- 《Linux/Unix系统编程手册》读书笔记7 (/proc文件的简介和运用)
<Linux/Unix系统编程手册>读书笔记 目录 第11章 这章主要讲了关于Linux和UNIX的系统资源的限制. 关于限制都存在一个最小值,这些最小值为<limits.h> ...
- 《Linux/Unix系统编程手册》读书笔记6
<Linux/Unix系统编程手册>读书笔记 目录 第9章 这章主要讲了一堆关于进程的ID.实际用户(组)ID.有效用户(组)ID.保存设置用户(组)ID.文件系统用户(组)ID.和辅助组 ...
- 《Linux/Unix系统编程手册》读书笔记5
<Linux/Unix系统编程手册>读书笔记 目录 第8章 本章讲了用户和组,还有记录用户的密码文件/etc/passwd,shadow密码文件/etc/shadow还有组文件/etc/g ...
- 《Linux/Unix系统编程手册》读书笔记4
<Linux/Unix系统编程手册>读书笔记 目录 第7章: 内存分配 通过增加堆的大小分配内存,通过提升program break位置的高度来分配内存. 基本学过C语言的都用过mallo ...
- 《Linux/Unix系统编程手册》读书笔记3
<Linux/Unix系统编程手册>读书笔记 目录 第6章 这章讲进程.虚拟内存和环境变量等. 进程是一个可执行程序的实例.一个程序可以创建很多进程. 进程是由内核定义的抽象实体,内核为此 ...
- 《Linux/Unix系统编程手册》读书笔记1
<Linux/Unix系统编程手册>读书笔记 目录 最近这一个月在看<Linux/Unix系统编程手册>,在学习关于Linux的系统编程.之前学习Linux的时候就打算写关于L ...
- 《Linux/Unix系统编程手册》读书笔记2
<Linux/Unix系统编程手册>读书笔记 目录 第5章: 主要介绍了文件I/O更深入的一些内容. 原子操作,将一个系统调用所要完成的所有动作作为一个不可中断的操作,一次性执行:这样可以 ...
随机推荐
- jQuery 选择器 (基础恶补)
jQuery 元素选择器 jQuery 使用 CSS 选择器来选取 HTML 元素. $("p") 选取 <p> 元素. $("p.intro") ...
- 基于ubuntu-2.6.35内核的SDIO-WiFi驱动移植
一.移植环境: 1.主机:Ubuntu 10.10发行版 2.目标机:FS_S5PC100平台 3.交叉编译工具:arm-cortex_a8-linux-gn ...
- Iptables防火墙
1 位置 使用vim /usr/sysconfig/iptables 2 启动.关闭.保存 service iptables stop service iptables start service i ...
- js页面刷新之实现框架内外刷新(整体、局部)
这次总结的是框架刷新: 框架内外的按钮均可以定义网页重定向, 框架内部页面的按钮可以实现局部刷新, 框架外部页面的按钮可以实现整页刷新. 代码如下(两个html页面): <!--主界面index ...
- NumberToChineseConverter.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...
- 【Office Word】论文排版有关技巧
本文分两部分,第一部分呢是Word中标题的编号以及图表的编号:第二部分是MathType中公式编号的右对齐方法. 1. word中标题的编号以及图表的编号 本部分转载自:http://blog ...
- JAVA基础知识之JDBC——使用ResultSetMetaData分析结果集
通过ResultSetMetaData可以对ResultSet进行分析,获取ResultSet里包含了哪些数据列,以及每个列的数据类型. ResultSet中包含了一个getMetaData()方法, ...
- 里面的div怎么撑开外面的div让高度自适应
参考网址:http://www.jb51.net/css/140685.html 随着微软新操作系统的上市,ie6现在用的人越来越少了,但是XP系统看来是太过经典,仍然有相当多的用户在使用,且这部分人 ...
- Java处理excel文件
好久好久没写blog了,感觉都生锈了,最近弄了弄java处理excel,特来简单粘贴一下: package excel; import java.io.BufferedInputStream; imp ...
- android通过HttpClient与服务器JSON交互
通过昨天对HttpClient的学习,今天封装了HttpClient类 代码如下: package com.tp.soft.util; import java.io.BufferedReader; i ...