学习目标:

1.理解与掌握面向对象的概念与方法。

2.使用UML。

3.完成面向对象的分析与设计工作。

4.了解OO的设计原则及一些典型的设计模式

什么是面向对象?

  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?”

OOP的主要特征

1 .抽象(abstract)

2.封装(encapsulation)

3.继承(inheritance)

4.多态(polymorphism)

5.关联(association)

6.聚合(aggregation)

7.组合(composition)

8.内聚与耦合(cohesion & coupling)

抽象

  1. 忽略掉一个对象或实体的细节而只关注其本质特征的过程。
  2. 简化功能与格式。
  3. 帮助用户与对象交互。

封装

  1. 隐藏数据和实现。
  2. 提供公共方法供用户调用功能。
  3. 对象的两种视图。

--外部视图:对象能做的工作。

--内部视图:对象如何完成工作。

继承

  1. 通过存在的类型定义新类型的机制。
  2. 通常在两个类型之间存在“is a”或“kind of”这样的关系。
  3. 通过继承可实现代码重用,另外继承也是多态的基础。

如:苹果“is a”水果。

多态

  1. 一个名称,多种形式。
  2. 基于继承的多态
  3. 调用方法时根据所给的对象的不同选择不同的处理方式。
  4. 如Football—play(): 使用脚来完成。

Basketball—play(): 使用手来完成。

5.给出一个具体的足球或篮球,用户自动知道该使用谁的方式去执行play().

关联

  1. 对象之间交互时的一种引用方式。
  2. 当一个对象通过另一个对象的引用去使用另一个对象的服务或操作时,两个对象之间便产生了关联
  3. 如:person使用computer,person与computer之间就存在了关联关系。

聚合

  1. 关联关系的一种,一个对象成为另外一个对象的组成部分。
  2. 是一种关系较强的关联。
  3. 在两个对象之间存在“has a”这样的关系,一个对象作为另一个对象的属性存在,在外部被生产时,可由客户端指定与其关联的内部对象。
  4. 如汽车与轮胎,轮胎作为汽车的一个组成部分,它和汽车可以分别生产以后装配起来使用,但汽车可以换新轮胎,轮胎也可以卸下来给其它汽车使用。

组合

  1. 当一个对象包含另一个对象时,外部对象负责管理内部对象的生命同期的情况。
  2. 关联关系中最为强烈的一种。
  3. 内部的创建由外部对象自己控制。
  4. 如电视机与显示器。

域模型

  1. 域模型是面向对象的。在面向对象术语中,域模型也可称为设计模型。域模型由以下内容组成:

--具有状态和行为的域对象

--域对象之间的关系。

  • ·关联
  • ·依赖
  • ·聚焦
  • ·一般化(泛化)

域对象之间的关系

  • ·关联(Association)
  • ·依赖(Dependency)
  • ·聚焦(Aggregation)
  • ·一般化(Generalization)

关联关系

Customer  <---------------------- Order[customer:Customer]

从Order到Customer的多对一单向关联

Customer[orders:Set]-----------------àOrder

从Customer到Order的一对多单向关联

Customer[orders:Set]ß------------à Order[customer:Customer]

从Customer到Order的一对多双向关联

依赖关系

BusinessService---------àCustomer

BusinessService类依赖Customer类

在BusinessService类中访问Customer类的方法, 并且构造Customer实例。

聚集关系

聚集指的是整体与部分之间的关系,在实体域对象之间很常见。

Person{Set< Hand> hands}<--Hand

Person类与Hand类之间的聚集关系

一般化关系

一般化关系指的是类之间的继承关系

内聚与耦合

  1. 内聚:度量一个类独立完成某项工作的能力。
  2. 耦合:度量系统内或系统之间依赖关系的复杂度。
  3. 设计原则:增加内聚,减少耦合(高内聚,低耦合)。

开发过程概述

1.传统开发过程—瀑布模型

2.统一软件开发过程(USDP)

传统开发过程(瀑布模型)

RequirementsàAnalysisàDesignàImplementationàTest

OOAD的开发过程

  1. 大项目分解为一些子项目
  2. 使用UML工具
  3. 统一软件开发过程是一个迭代、递增的开发过程。

迭代、递增的项目生命周期

  1. 项目是迭代、递增的。
  2. 迭代指生命周期中的一个步骤。
  3. 迭代导致“递增”或者是整个项目的增长。
  4. 大项目分解为子项目。
  5. 在每一个迭代的阶段,应该做以下工作

--选择并分析相关用例

--根据所选架构进行设计

--在组件层次实现设计

--验证组件满足用例的需要

6.当一次迭代满足目标后,开发进入下一个迭代周期。

Inception—start up

Elaboration—refine

Construction—implement

Transition--promotion

7.每一个周期包含一次或多次迭代

8.一个阶段的结束称之为“里程碑”(milestone)

初始化阶段

该阶段的增量集中于:

--项目启动

--建立业务

--定义业务问题域

--找出主要的风险因素

--定义项目需求的外延

--创建业务问题域的相关说明文档

细化阶段

--高层的分析与设计

--建立项目的基础框架

--监督主要的风险因素

--制订达成项目目标的创建计划

构建阶段

本阶段的增量集中于

--代码及功能的实现

移交阶段

本阶段的增量集中于

--向用户发布产品

--beta测试

--执行性能调优,用户培训和接收测试

每一个阶段所含工作流

·每一次递增都由5部分工作流组成

--需求与初始分析

--分析

--设计

--实现

--测试

--每一次迭代执行工作流的深度不同

--早期的迭代在深度上覆盖初始工作流,后期迭代在深度上覆盖后期工作流。

--80/20原则

迭代、递增生命周期的优势

·降低成本

·便于更好地维护项目进度

·便于团队的协作开发

·便于适应用户需求的动态变化

OOAD基本概念的更多相关文章

  1. [转]OOAD基本概念

    转载地址:http://www.cnblogs.com/zfc2201/archive/2012/12/09/2810532.html 尊重原作者,转载请注明 学习目标: 1.理解与掌握面向对象的概念 ...

  2. 【OOAD】OOAD概述

    什么是面向对象? OOP:面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构.OOP 的一条基本原则是计算机程序是由单个能够起到子程序 ...

  3. 笔记一:OOAD与UML

    一.面向对象的概念与方法 1.  面向对象 1.1. 面向对象是一种系统建模技术 1.2. 面向对象编程是按照OO的方法学来开发程序的过程 1.3. 通过分析系统内对象的交互来描述或建模一个系统 1. ...

  4. OOAD理论知识小结

    软件工程基本概念 软件工程三要素: 方法:完成软件开发的各项任务的技术方法,为软件开发提供 “如何做” 的技术 工具:为运用方法而提供的自动的或半自动的软件工程的支撑环境 过程:为了获得高质量的软件所 ...

  5. OOAD之面向对象设计原则

    学习这个设计模式 真的觉得很抽象,只有自己多多的领会! 在很多时候,很多的知识都会觉得讲起来是很矛盾的. 本章目标 1 掌握内聚度和耦合度的概念 2 掌握面向对象设计原则  (一)如何衡量软件设计的质 ...

  6. 如何一步一步用DDD设计一个电商网站(一)—— 先理解核心概念

    一.前言     DDD(领域驱动设计)的一些介绍网上资料很多,这里就不继续描述了.自己使用领域驱动设计摸滚打爬也有2年多的时间,出于对知识的总结和分享,也是对自我理解的一个公开检验,介于博客园这个平 ...

  7. 【Machine Learning】机器学习及其基础概念简介

    机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  8. 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之集群概念介绍(一)

    集群概念介绍(一)) 白宁超 2015年7月16日 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习 ...

  9. 声音分贝的概念,dBSPL.dBm,dBu,dBV,dBFS

    需要做个音频的PPM表,看着一堆的音频术语真是懵了,苦苦在网上扒了几天的文档,终于有了点收获,下面关于声音的分贝做个总结. 分贝 Decibel 分贝(dB)是一个对数单位(logarithmic u ...

随机推荐

  1. 转:单片机C语言中的data,idata,xdata,pdata,code

    从数据存储类型来说,8051系列有片内.片外程序存储器,片内.片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code.data.xdata.idata以及根据51系列特点而设定的 ...

  2. [LeetCode 115] - 不同子序列(Distinct Subsequences)

    问题 给出字符串S和T,计算S中为T的不同的子序列的个数. 一个字符串的子序列是一个由该原始字符串通过删除一些字母(也可以不删)但是不改变剩下字母的相对顺序产生的一个新字符串.如,ACE是ABCDE的 ...

  3. Bug解决过程复盘

    反思了下,解决问题无外乎3w1h when where who how 就是查询出来的事情多了,现在不知道哪个地方出问题,应该根据日志一步一步梳理,查看每一步的输出结果是否与预期一致 顺藤摸瓜 觉得不 ...

  4. Linux系统编程(26)——守护进程

    Linux系统启动时会启动很多系统服务进程,比如inetd,这些系统服务进程没有控制终端,不能直接和用户交互.其它进程都是在用户登录或运行程序时创建,在运行结束或用户注销时终止,但系统服务进程不受用户 ...

  5. 【转】文件同步软件FreeFileSync

    原文网址:http://imcn.me/html/y2012/9855.html FreeFileSync 是一款开源的文件夹比较和同步工具,可用于 Win 和 Lin 平台,最近发布了 5.0 版本 ...

  6. 2014-08-13 SQL语句之Left Join

    今天是在吾索实习的第26天.这天在处理数据库数据的时候发现了一个不错的语句就是Left Join,即左连接.  其功能是:即使右表中没有匹配,也从左表返回所有的行.也就是说,显示的行数与左表一致,且当 ...

  7. adjtimex使用

    adjtimex使用 今天遇到一个ntp的同步问题.服务器上配置好了ntpd,在启动前也手动进行过同步,但是过段时间ntpq查询发现服务器即便能选出同步服务器,但是系统的时间偏差越来越大. 服务器上实 ...

  8. 实现函数 isInteger(x) 来判断 x 是否是整数

    将x转换为十进制整数,判断是否和自身相等即可: function isInteger(x){ return parseInt(x, 10) === x; } console.log('1.2 is a ...

  9. ELT工具Kettle之CDC(Change Data Capture)实现实例

    ETL过程的第一步就是从不同的数据源抽取数据并把数据存储在数据的缓存区.这个过程的主要挑战就是初始加载数据量大和比较慢的网络延迟.在初始加载完成之后,不能再把所有数据重新加载一遍,我们需要的只是变化的 ...

  10. svn版本信息自动更新到源代码

     背景:在线上代码和线下代码不一致时,用这个时间先比对是很重要的,首先看时间确定是不是最新的代码,再进行问题排查是很有必要的.Subversion 的 svn:keywords 是一个非常有用的功能, ...