从一开始上课老师就讲面向对象设计面向对象设计,然而对于什么是面向对象是什么没有什么具体的概念,相较于面向对象设计,面向对象又有什么什么优势。《大象》从一开始就交代了我最基础的知识欠缺,在书的第一部分就将两个概念形象的展现在我面前。

面向过程方法认为我们的世界是由一个个相互关联的小系统组成的,面向过程方法还认为每个小系统都有着明确的开始和明确的结束,开始和结束之间有着严谨的因果关系,只要我们将这个小系统的每一个步骤和影响这个小系统走向的所有因素都分析出来,我们就能定义这个系统的行为。

面向对象方法将世界看作是一个个相互独立的对象,相互之间并无因果关系,他们平时是“鸡犬之声相闻,老死不相往来”的。只有在某个外部力量的驱动下,对象之间才会依据某种规律相互传递信息。这些交互构成了这个生动世界的一个“过程”。在没有外力的情况下,对象则保持着“静止”的状态。这些独立的对象有着一系列奇妙的特性。例如:封装,聚合,继承,接口,多态,依赖,耦合,方法。又用汽车组装的例子形象的揭示了面向对象的另一个非常重要的特性:抽象层次。

当面向对象方法解决面向过程方法出现的问题时,自己本身也会存在一些困难。实际上,想要跨越这道鸿沟,我们需要:(1)一种把现实世界映射到对象世界的方法。(2)一种从对象世界描述现实世界的方法。(3)一种验证对象世界行为是否反映了现实世界的方法。

在实践中,人们很快发现了问题:编程序需要的对象不但不能够从设计中自然而然地推导出来,而且强调连续性和过程话的结构化设计与时间驱动型的离散对象结构之间有着难以调和的矛盾。为了解决这些困难,一些面向对象的设计方法开始出现。

UML是一种建模用的语言,用自然世界和计算机逻辑都能够理解的表达方法来说明现实世界。除了对语言的掌握功力之外更重要的是思想和理念。语言如果不能用于沟通,那语言就没有意义!最好的方法就是创造一种打架都认可的统一语言。UML统一建模预言帝额意义也正在于此,UML采用了“可视化”的图形方式来定义语言。

首先,由现实世界到业务模型,再从业务模型到概念模型,最后再到概念模型。

UML是一种语言,用来描述软件产生过程中要产生的文档,统一过程则是知道如何产生这些文档以及这些文档要讲述什么方法。虽然同意过程是知道UML的方法中最追命、应用最广、也可能最成功的一个,但是两者却不是完全不可以分开的。

实施统一过程一方面出于提高软件成熟度的需要;另一方面是出于提高软件科技水平和质量的需要;再一方面,统一过程适用于开发稳定的架构。

问题领域=抽象角度1+抽象角度2+......抽象角度n

抽象角度=问题领域边界之外的参与者的业务目标=业务用例

业务用例=特定场景1+特定场景2+......特定场景n

特定场景=静态事物+特定的条件+特定的动作

(或者:特定场景=静态事物+特定的规则+特定的行为)

用例驱动:用例视图,逻辑视图,进程视图,实施视图,部署试图。

抽象层次是面向对象方法中极其重要的。抽象有两种方法:一种是自顶向下,适用于让人们从头开始认识事物;一种是自底向上,适用于在实践中改进和提高认识。对象分析方法:一切都是对象,对象都是独立的,对象都具有原子性,对象都是可抽象的,对象都有层次性。

RUP和UML是可以分离的,采用哪种方法其实并不妨碍试用UML来做软件的分析和设计。

无论是面向对象还是UML统一建模语言,都是辅助我们最终达到更好的设计出性能良好的软件的工具,理论终是纸上谈兵,重在实践,考虑什么方面,采用什么样的结构,怎样封装类,有时说不出原因单凭经验。

think in UML(一)的更多相关文章

  1. UML课程复习重点

    第一章 一.UML图示建模工具 二.UML--统一建模语言,以图形符号为基础,描述软件模型既简洁又清晰.它不是开发方法,是独立于任何开发方法之外的语言.它用于描述软件系统分析.设计和实施中的各种模型. ...

  2. UML图中经常用到几种的关系图例

    学习这个东西挺奇怪的,时间一长就容易忘记,或者记不清楚.今天看到一些UML图的关系,发现有些出入了,索性就写下来,以后再忘记的时候过来看看. 在UML的类图中,常见的有以下几种关系: 继承(Gener ...

  3. UML类图(下):关联、聚合、组合、依赖

    前言 上一篇文章UML类图(上):类.继承.实现,讲了UML类图中类.继承.实现三种关系及其在UML类图中的画法,本文将接着上文的内容,继续讲讲对象之间的其他几种关系,主要就是关联.聚合.组合.依赖, ...

  4. UML类图(上):类、继承和实现

    面向对象设计 对于一个程序员来说,在工作的开始阶段通常都是别人把东西设计好,你来做.伴随着个人的成长,这个过程将慢慢变成自己设计一部分功能来实现,自己实现.如果要自己设计,无论是给自己看,还是给别人看 ...

  5. UML

    UML:1.继承关系用空心三角形+实线来表示2.实现接口用空心三角形+虚线来表示3.关联关系用实线箭头来表示4.依赖关系用虚线箭头来表示5.聚合关系用空心菱形+实线箭头来表示6.组合关系用实心菱形+实 ...

  6. UML类图与面向对象设计原则

    1. 引言     从大一开始学习编程,到如今也已经有两年了.从最初学习的Html,Js,JaveSe,再到JavaEE,Android,自己也能写一些玩具.学习过程中也无意识的了解了一些所谓的设计模 ...

  7. 浅谈UML的概念和模型之UML九种图

    1.用例图(use case diagrams) [概念]描述用户需求,从用户的角度描述系统的功能 [描述方式]椭圆表示某个用例:人形符号表示角色 [目的]帮组开发团队以一种可视化的方式理解系统的功能 ...

  8. UML类图几种关系的总结

    在UML类图中,常见的有以下几种关系: 泛化(Generalization),  实现(Realization),关联(Association),聚合(Aggregation),组合(Composit ...

  9. 我的敏捷、需求分析、UML、软件设计电子书 - 下载(持续更新中)

    我将所有我的电子书汇总在一起,方便大家下载!(持续更新) 文档保存在我的网站——软件知识原创基地上(www.umlonline.org),请放心下载. 1)软件设计是怎样炼成的?(2014-4-1 发 ...

  10. UML类图关系全面剖析

    UML的类图关系分为: 关联.聚合/组合.依赖.泛化(继承).而其中关联又分为双向关联.单向关联.自身关联:下面就让我们一起来看看这些关系究竟是什么,以及它们的区别在哪里. 1.关联 双向关联:C1- ...

随机推荐

  1. react-navigation 使用笔记 持续更新中

    目录 基本使用(此处基本使用仅针对导航头部而言,不包含tabbar等) header怎么和app中通信呢? React-Navigation是目前React-Native官方推荐的导航组件,代替了原用 ...

  2. C内存开辟与平移

  3. BZOJ4892:[TJOI2017]dna(hash)

    Description 加里敦大学的生物研究所,发现了决定人喜不喜欢吃藕的基因序列S,有这个序列的碱基序列就会表现出喜欢吃藕的性状,但是研究人员发现对碱基序列S,任意修改其中不超过3个碱基,依然能够表 ...

  4. centos7之Java开发环境构建

    CensOS7环境 我个人的博客环境如下: 希望这个教程可以帮助到linux新手朋友们或者其他在安装软件时遇到问题的朋友们 当然了,百度上也有很多类似这样的教程,我个人贴出来,一来为分享,二来以后自己 ...

  5. stm32 boot0 boot1的启动方式

    STM32三种启动模式对应的存储介质均是芯片内置的,它们是: 1)用户闪存 = 芯片内置的Flash. 2)SRAM = 芯片内置的RAM区,就是内存啦. 3)系统存储器 = 芯片内部一块特定的区域, ...

  6. 筛选法求N以内的所有素数

    素数:一个数只能被1和它本身整除的数.2是最小的素数 #include <iostream> using namespace std; #define NUM 100 ]; int mai ...

  7. 20175310 《Java程序设计》第1周学习总结(2)

    20175310 <Java程序设计>第1周学习总结(2) 教材学习内容总结 本周学习了教材的第一章内容,通过看微课的方式,自主学习,教材上讲的比较简单,主要的问题都在调试代码上,还有一两 ...

  8. uptime 负载 top

    1.首先怎样知道我的CPU是几核呢? 使用以下命令可以直接获得CPU核心数目 grep 'model name' /proc/cpuinfo | wc -l 2.单核CPU - 单车道 - 数字在0. ...

  9. 【LeetCode21】Merge Two Sorted Lists★

    1.题目描述: 2.解题思路: 本题是要合并两个已经有序的单链表,思路很简单,有两种方法:非递归和递归. 3.Java代码: (1)非递归: 为方便操作,定义一个辅助的头节点,然后比较原来两个链表的头 ...

  10. Oracle-归档日志详解(运行模式、分类)

    一.Oracle日志分类 分三大类: Alert log files--警报日志,Trace files--跟踪日志(用户和进程)和            redo log 重做日志(记录数据库的更改 ...