这个OOAD讲的都是很抽象的东西!老师说这个在现在的学习中用到的不是很多,但是以后出去工作的时候就会常用到的。

首先来了解OOAD是讲什么的。

OOAD:Object Oriented Analysis Design,面向对象的分析和设计;

什么是面向对象?

  1. 面向对象(Object-Orientation, 简称OO)是一种系统建模技术。
  2. 面向对象编程(Object-Orientation Programming,简称OOP)是按照OO的方法学来开发程序的过程。
  3. 通过分析系统内对象的交互来描述或建模一个系统。
  4. 交互的对象最终以类的形式组织。
  5. OO的方法由三部分组成:过程,标识,规则。

对象

  1. 是一个客观存在的、唯一的实体。
  2. 是面向对象编程过程中分析与解决问题的出发点与基础。
  3. 拥有自己的标识、数据与行为。
  4. 可以简单或复杂。
  5. 可以抽象或具体。
  6. 在OOP中是一个类的动态实例。
  7. 如Student—id,name,age(attribute)

--setName,getName,countScore(methods)

--new Student()

  1. 类是对象的模板。
  2. 对象通过类实例化产生。
  3. 一个类可以创建多个对象
 
   

OOAD

OOAD(Object Oriented Analysis and Design),面向对象的分析与设计。

OOAD是根据OO的方法学,对软件系统进行分析与设计的过程。

--OOA  分析阶段

--OOD  设计阶段

定义OOA阶段

  1. 分析阶段主要解决以下问题

-- 建立针对业务问题域的清晰视图。

-- 列出系统必须完成的核心任务。

-- 针对问题域建立公共词汇表。

-- 列出针对此问题的最佳解决方案。

2.此阶段要解决的核心问题是“What to do?”

定义OOD阶段

1.设计阶段主要解决以下问题

-- 如何解决具体的业务问题。

-- 引入系统工作所需的支持元素。

-- 定义系统的实现策略

2. 此阶段要解决的核心问题是“How to do?”

(一)软件工程基本概念

1 软件危机    软件的功能、规模及复杂性与日俱增,软件的复杂性达到了它的开发者难以控制的程度

2 解决软件危机  用工程学的方法进行软件的开发与维护,并对软件生成过程进行工程化的管理

3 软件工程的定义  指导计算机软件开发和维护的一门工程学科。

4 软件工程的内容   针对软件生命周期全过程及其每个具体阶段的工程方法、技术细则、文档规范、技术支持、管理制度、人员组织以及质量保证体系等。

5 软件工程三要素:

方法:完成软件开发的各项任务的技术方法,为软件开发提供 “如何做” 的技术  (面向对象方法)

工具:为运用方法而提供的自动的或半自动的软件工程的支撑环境(EA)

过程:为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤,如何将软件工程方法与软件工具相结合,合理、及时地进行软件开发  (基于原型的增量迭代软件开发过程)

6 软件的生命周期(一):  可行性分析阶段   需求分析阶段

软件的生命周期(二):   系统设计阶段   系统实现阶段

软件生命周期(三): 测试阶段   维护阶段

7 软件开发过程:是在软件生命周期的软件系统开发过程中,一系列活动和软件生成结果的集合

8 统一建模语言UML  UML图有很多种,对于程序员来说,最频繁使用的莫过于类图。类图主要是用来显示系统中的类、接口以及它们之间的静态结构和关系的一种静态模型。类图中最基本的元素是类、接口。软件设计师设计出类图后,程序员就可以用       代码实现类图中包含的内容。

在UML类图中描述具体类

在UML类图中描述抽象类

在UML类图中描述接口

在UML类图中描述包

9 使用类图表示关系

类和类、类和接口、接口和接口之间存在一定关系,共有六种类型:分别是实现关系、泛化关系(继承关系)、关联关系、依赖关系、聚合关系、组合关系,

接口与类之间: 实现关系(空心箭头虚线)

对象与对象之间: 泛化关系(Generalization) 指对象与对象之间的继承关系。

关联关系  :指对象和对象之间的连接,它使一个对象知道另一个对象的属性和方法。关联关系有单向关联和双向关联 eg:员工 与 时间表

1 聚合(Aggregation)关系 :关联关系的一种特例,它体现的是整体与部分的拥有关系,即“has a”的关系。此时整体与部分之间是可分离的,它们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多                                                                                      个整体对象共享,所以聚合关系也常称为共享关系。 eg:员工 与 部门

2 组合(Composition)关系 :是关联关系的一种特例,它同样体现整体与部分间的包含关系,即“contains a”的关系。但此时整体与部分是不可分的,部分也不能给其它整体共享,作为整体的对象负责部分的对象的生                                                                                    命周期。这种关系比聚合更强,也称为强聚合。 eg:员工 与 时间表

3 依赖(Dependency)关系: 依赖关系在Java中的具体代码表现形式为B为A的构造器或方法中的局部变量、方法或构造器的参数、方法的返回值,或者A调用B的静态方法。eg:driver  和 car

10 面向对象系统分析与设计

在面向对象技术中,建造整个软件系统的过程常常被称为面向对象的分析和设计(Object-Oriented Analysis and Design,OOAD)。对于我们要开发的软件系统来说,OOAD解决了系统是什么(面向对象的系统分析,即OOA)以及如何做的问题(面向对象的系统设计,即OOD),OOP只是用编程语言去实现该系统。
 
一般来说,OOAD工作一般由需求分析师、系统分析员、系统架构师来完成,而OOP则由程序员来完成。但是,对于程序员来说,掌握OOD技术,对于编写高质量的代码以及个人技术成长和职业规划来说,有特别重要的意义。 

第一章 面向对象软件工程与UML的更多相关文章

  1. 面向对象软件工程与UML

    软件工程基本概念 软件危机 软件的功能.规模及复杂性与日俱增,软件的复杂性达到了它的开发者难以控制的程度 这种情况导致了严重的后果: 软件可靠性下降 开发效率低下 维护极为困难 这使软件开发者陷入困境 ...

  2. Java面向对象编程 第一章 面向对象开发方法概述

    一.软件开发经历的生命周期: ①软件分析 ②软件设计 ③软件编码 ④ 软件测试 ⑤ 软件部署 ⑥软件维护 二.为了提高软件开发效率,降低软件开发成本,一个优良的软件系统应该具备以下特点: ① 可重用性 ...

  3. Java面向对象 第一章 面向对象开发方法概述

    一.软件开发经历的生命周期: ①软件分析 ②软件设计 ③软件编码 ④ 软件测试 ⑤ 软件部署 ⑥软件维护 二.为了提高软件开发效率,降低软件开发成本,一个优良的软件系统应该具备以下特点: ① 可重用性 ...

  4. 《JavaScript设计模式与开发实践》笔记第一章

    第一章 面向对象的JavaScript 动态类型语言和鸭子类型 编程语言按照数据类型大体可以分为两类:静态类型语言.动态类型语言. 静态类型语言:在编译时便已确定变量的类型. 优点: 在编译时就能发现 ...

  5. 第一章 引言--《设计模式-可复用面向对象软件的基础》Erich Gamma

    第一章 引言 本章主要是让我们大致明白设计模式是干嘛用的,模式分类,设计模式如何解决设计问题以及几种常见的面向对象设计中软件的复用方法. 1.什么是设计模式? 个人理解概括,设计模式是对一类问题的抽象 ...

  6. Java 面向对象编程——第一章 初识Java

      第一章    初识Java 1.  什么是Java? Java是一种简单的.面向对象的.分布式的.解释的.安全的.可移植的.性能优异的多线程语言.它以其强安全性.平台无关性.硬件结构无关性.语言简 ...

  7. c++面向对象程序设计 谭浩强 第一章答案

    c++面向对象程序设计 谭浩强 答案 第一章 目录: c++面向对象程序设计 谭浩强 答案 第一章 c++面向对象程序设计 谭浩强 答案 第二章 c++面向对象程序设计 谭浩强 答案 第三章 c++面 ...

  8. 从结构和数字看OO——面向对象设计与构造第一章总结

    不知不觉中,我已经接触OO五周了,顺利地完成了第一章节的学习,回顾三次编程作业,惊喜于自身在设计思路和编程习惯已有了一定的改变,下面我将从度量分析.自身Bug.互测和设计模式四个方向对自己第一章的学习 ...

  9. 《JavaScript高级程序设计(第3版)》阅读总结记录第一章之JavaScript简介

    前言: 为什么会想到把<JavaScript 高级程序设计(第 3 版)>总结记录呢,之前写过一篇博客,研究的轮播效果,后来又去看了<JavaScript 高级程序设计(第3版)&g ...

随机推荐

  1. 玩了下STM8单片机

    偶然的机会,发现STM8真是又便宜又好用啊,哈哈! 买了一个STM8S103F3的小板子,再加一个ST-Link调试器,总共才35块钱!对于我们这种玩习惯了动辄上千上万的FPGA开发板的人来说,就是白 ...

  2. DBCC--CHECKDB--结果收集

    --由宋沄剑提供 CREATE TABLE [dbo].[dbcc_history]( [Error] [int] NULL, [Level] [int] NULL, [State] [int] NU ...

  3. 射线与平面的相交检测(Ray-Plane intersection test)【转】

    射线的定义 在欧几里德几何中,射线的定义是:直线上一点和它一旁的部分.由此可知,射线有两个性质,一是只有一个端点,二是一端无限延伸. 射线的参数方程 其中p0是射线的起点, u是射线的方向向量,t & ...

  4. [微信开发] 微信网页授权Java实现

    功能:主要用于在用户通过手机端微信访问第三方H5页面时获取用户的身份信息(openId,昵称,头像,所在地等..)可用来实现微信登录.微信账号绑定.用户身份鉴权等功能.     开发前的准备: 1.需 ...

  5. 【C#进阶】委托那些事儿(一)

    一.简单的委托 1.1 委托的声明: C#当中,委托(delegate)是一种方法封装,也即委托对象可以作为一种传递方法的变量来使用. 委托也算是一种类,与类是平级的存在.在类中写delegate对象 ...

  6. asp.net core 使用identityServer4的密码模式来进行身份认证(一)

    IdentityServer4是ASP.NET Core的一个包含OpenID和OAuth 2.0协议的框架.具体Oauth 2.0和openId请百度. 前言本博文适用于前后端分离或者为移动产品来后 ...

  7. C#多线程编程系列(二)- 线程基础

    目录 C#多线程编程系列(二)- 线程基础 1.1 简介 1.2 创建线程 1.3 暂停线程 1.4 线程等待 1.5 终止线程 1.6 检测线程状态 1.7 线程优先级 1.8 前台线程和后台线程 ...

  8. celery_消息队列

    http://www.cnblogs.com/wupeiqi/articles/8796552.html 一. celery 简介 Celery 是一个专注于实时处理和任务调度的分布式任务队列, 同时 ...

  9. python的super用法及含义

    注释:以下都是在python2.7版本验证的 总括:1.python解决二义性问题,经历了深度优先算法.广度优先算法.拓扑排序算法,目前python的版本都是使用拓扑算法(C3)    2.严谨sup ...

  10. 关于使用Iscroll.js异步加载数据后不能滑动到最底端的问题解决方案

    关于使用Iscroll.js异步加载数据后不能滑动到最底端,拉到最下边又弹回去的问题困扰了我老半天,相信很多朋友都遇到了.我刚好不小心解决了,和大家分享一下.由于各种忙,下边就直接上代码吧. (前提是 ...