学习目标:

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. .NET MVC 插件化框架支持原生MVC的Area和路由特性

    前面开放的源码只是简单的Plugin的实现,支持了插件的热插拔,最近晚上偶然想到,原生的MVC提供Areas和RouteAtrribute等路由特性标签,按照先前的做法,无法解析插件的路由特性和Are ...

  2. Django新手图文教程

    Django新手图文教程 本文面向:有python基础,刚接触web框架的初学者. 环境:windows7   python3.5.1  pycharm专业版  Django 1.10版 pip3 一 ...

  3. ionic ion-list 滑到底部自动加载数据案例

    <ion-content> <ion-list> <ion-item ng-repeat="item in items track by $index" ...

  4. 通过button提交表单

    通过 input button 而不是input submit提交. <!DOCTYPE html> <html lang="en"> <head&g ...

  5. hdu 1543 Paint the Wall

    http://acm.hdu.edu.cn/showproblem.php?pid=1543 #include <cstdio> #include <cstring> #inc ...

  6. Printing Architecture

    Printing Architecture http://www.codeproject.com/Articles/8916/Printing-Architecture     This articl ...

  7. 用vlc SDK创建一个播放视频文件和RTSP流视频的Demo

    #include <stdio.h> #include <tchar.h> #include <time.h> #include <windows.h> ...

  8. 在QTreeWidget中删除QTreeWidgetItem

    我就想删除topLevelItem  stackoverflow上是这样说的: http://stackoverflow.com/questions/9392051/how-do-i-delete-a ...

  9. SPOJ 0287 Smart Network Administrator

    题目大意:一座村庄有N户人家.只有第一家可以连上互联网,其他人家要想上网必须拉一根缆线通过若干条街道连到第一家.每一根完整的缆线只能有一种颜色.网管有一个要求,各条街道内不同人家的缆线必须不同色,且总 ...

  10. iframe切换内容页仍然能自适应大小代码(含js)

    function setIframeHeight(iframe) { if (iframe) { var iframeWin = iframe.contentWindow || iframe.cont ...