面向对象的分析与设计笔记
- 格式:doc
- 大小:336.00 KB
- 文档页数:16
1.OOP(Object Oriented Programming) 面向对象编程, 是一种程序设计模式.2.OOA(Object Oriented Analysis) 面向对象分析3.OOD(Object Oriented Design) 面向对象设计4.在实时系统中,进程视图显得尤为重要5.UML(Unified Modeling Language)是一种绘制软件蓝图的标准语言,UML 是最广泛使用的面向对象系统的标准建模方法.6.分为两种类型的视图:静态视图和动态视图7.常见UML图列:用例图、类图、时序图,协作图、活动图、状态图8.UML的阶段:1)启动: 计划系统开始的概念开发。
2)精化: 分析、计划和构架设计。
3)构建: 确定任何其他需求,开发软件,测试软件4)产品化: 将产品交付客户9.UML目前已经发展到UML2.010.分析是一种为具有"收集"对象的系统建模的方法11.设计阶段:必须解答"应该使用那些技术?如何解决问题?"12."类图"用于描述类之间的关系13."用例图"可用于描述用例的实现细节.14.螺旋过程模型的"产品化"阶段是软件产品完成的阶段.15.用例图:1系统->一个活动范围2参与者->扮演特定角色或描述特定特征的人3用例->执行完成特定的功能和过程16.用例关系:1)扩展(有条件):由一个用例必然会引出一个用例2)包含(无条件):源对象包含目标对象的所有功能17.用例图可用于软件开发生命周期的"需求分析和测试"阶段18.用例用于表示系统的功能19.参与者是"构建"系统功能的外部实体20.动态模型主要包括:1)时序图:按时间顺序模拟控制流程.特点:a.有两个坐标轴2)状态图:描述单个事物如何响应发生的事件而更改状态和生成事件.特点:a.可用对象的属性和连接来定义起状态b.有两个状态: 初始状态---> 最终状态3)活动图:描述多个事物的交互特点:a.为系统的工作流建模b.明确性、可视性、简容易性的特点21.所有系统都具有"静态"结构和动态行为22.状态图可显示对象在生命周期内响应外部事件和消息所经历的状态23.关键抽象: 通常表现为系统的实体.34.类之间的关系:1.对象名称和类名称之间的:(冒号)分类:1)关联(Association):包含单个类属性分析:a:单向关联(Directed Association ,一方包含另一方): 单向-》0...1 -》修改定义:指一方知道对方的存在,一方包含另一方,一方可以调用被包含方的公共属性和方法。
java面向对象设计知识点总结Java面向对象(Object-Oriented)编程是一种广泛应用的编程思想,它将现实世界中的事物抽象为对象,并通过定义类、封装、继承和多态等概念来实现程序的设计与开发。
以下是Java面向对象设计中的一些重要知识点的总结和整理。
一、类与对象1. 类(Class):类是对象的抽象模板,用于描述对象具有的属性和行为。
它可以包含属性(成员变量)和方法(成员函数)。
2. 对象(Object):对象是类的实例化结果,具有独立的状态和行为。
通过new关键字可以创建对象,并通过对象来访问和调用类中的方法和属性。
3. 属性(成员变量):属性是类中用于描述对象状态的变量。
它可以是基本数据类型或其他自定义类型。
4. 方法(成员函数):方法是类中用于描述对象行为的函数。
它定义了类的行为和操作,并对外提供了接口。
二、封装1. 封装(Encapsulation):封装是面向对象编程的重要特征之一,通过将数据和对数据的操作封装在一起,实现了数据的隐藏和保护。
封装可以提高程序的安全性和可维护性。
2. 访问修饰符(Access Modifiers):Java提供了四种访问修饰符,分别是public、protected、default(包级访问)和private。
它们用于控制类成员的访问权限。
三、继承1. 继承(Inheritance):继承是面向对象编程的另一个重要特性,它允许一个类继承另一个类的属性和方法。
通过继承,子类可以重用父类的代码,并且可以在子类中添加新的属性和方法。
2. 继承关系(Inheritance Hierarchy):Java中的类可以按照父子关系来组织,形成一个继承层次结构。
3. 超类和子类(Superclass and Subclass):继承关系中,被继承的类称为超类(或父类),继承超类的类称为子类。
4. 方法重写(Method Overriding):子类可以重写父类中的方法,以实现子类特有的功能。
面向对象程序设计课堂笔记1.面向对象编程(OOP)的概念:OOP是一种编程范式,其核心思想是将现实世界的事物抽象成类、对象等概念,通过封装、继承、多态等特性来实现代码的复用、可维护性和可扩展性。
2. 类和对象的概念:类是一种抽象的概念,用来描述一类具有相同特征与行为的事物;对象是类的一个具体实例,它具有该类定义的属性和行为。
3. 封装的概念:封装是OOP的一种基本特性,它将数据和行为封装在一个类中,外部无法直接访问类内部的数据,只能通过类提供的公共接口(方法)访问和修改数据。
4. 继承的概念:继承是OOP的一种基本特性,它允许子类继承父类的属性和行为,并可以在此基础上扩展和重写父类的方法。
5. 多态的概念:多态是OOP的一种基本特性,它允许不同的对象对同一消息做出不同的响应,即同一方法在不同对象上的表现形式不同。
6. 接口的概念:接口是一种抽象的概念,用来描述一个类所提供的方法和属性,而不涉及具体的实现细节。
它可以让多个类实现相同的接口,从而提高代码的灵活性和可扩展性。
7. 设计模式的概念:设计模式是一种被广泛应用的编程思想,它提供了一套经验丰富的解决方案来解决常见的软件设计问题,如单例模式、工厂模式、观察者模式等。
8. SOLID原则的概念:SOLID原则是面向对象设计的基本原则,它由5个原则组成,分别是单一职责原则、开闭原则、里式替换原则、接口隔离原则和依赖倒置原则。
这些原则旨在提高代码的可读性、可维护性和可扩展性。
9. UML图的概念:UML图是一种用来描述软件系统结构和行为的标准化图形语言,它包括用例图、类图、时序图、活动图等多种类型,可以帮助开发人员更好地理解和设计软件系统。
10. 实践中的应用:在实际的编程中,需要根据具体的业务需求和设计要求来运用面向对象的思想和技术进行程序设计。
同时,也需要不断学习和掌握新的技术和工具,以提高自己的编程能力和水平。
c++面向对象程序设计笔记面向对象程序设计(Object-Oriented Programming,简称OOP)是一种编程范式,它将数据(对象)和操作数据的函数(方法)组合在一起,形成一种新的数据类型,称为类(Class)。
面向对象程序设计具有封装、继承和多态等重要特性。
以下是一些关于C++面向对象程序设计的笔记:1.类(Class):类是面向对象程序设计的基本单位,它定义了一组属性(数据成员)和方法(成员函数)。
类的成员可以访问修饰符(public、private、protected),以控制成员的访问权限。
2.对象(Object):对象是类的实例,通过创建类的实例来创建对象。
对象可以调用其成员函数来访问其属性。
3.构造函数(Constructor):构造函数是一种特殊的成员函数,用于初始化对象。
构造函数在创建对象时自动调用。
4.析构函数(Destructor):析构函数是一种特殊的成员函数,用于释放对象所占用的资源。
析构函数在销毁对象时自动调用。
5.继承(Inheritance):继承是一种机制,允许子类继承父类的属性和方法,同时可以添加自己的属性和方法。
C++支持两种继承方式:公有继承(public)和私有继承(private)。
6.多态(Polymorphism):多态是指一个接口可以有多种实现方式。
在C++中,可以通过虚函数和纯虚函数来实现多态。
虚函数允许子类重写父类的成员函数,纯虚函数则是一个没有实现的虚函数。
7.抽象类(Abstract Class):抽象类是一种特殊的类,它不能被实例化。
抽象类通常包含纯虚函数,用于定义接口或行为规范。
8.运算符重载(Operator Overloading):运算符重载是指为已有的运算符定义新的操作方式。
在C++中,可以通过重载运算符来定义运算符的行为。
9.异常处理(Exception Handling):异常处理是一种处理程序运行过程中可能出现的错误或异常的机制。
面向对象的软件工作笔记(精品)概念:主题信息专家:SME 用况:(case)描述了真实世界中参与者与系统相互交互的的方式。
我的理解是用况其实是为完成某件事情, 所要经历的步骤。
用况是从执行者的观点描述系统行为用况分为本质用况与系统用况。
本质用况:用于以独立于技术的方式捕获用户的意图。
用于反映需求系统用况:细化的用况, 用于描述系统如何实现对应的本质用况的需求。
用于反映分析用况图:显示用况、参与者及之间关系的 UML 图执行者:(actor)是与系统交互的外部实体。
包括一个用户角色(如系统管理员、顾客等)或其他系统(如一个中心数据库、一个装配件等。
)功能性需求:描述环境与系统之间的交互而不考虑系统实现。
环境包括用户及任何与系统交互的外部系统。
1/ 4非功能性需求:指与系统功能行为没有直接关系但用户可见的系统部分。
伪需求:是客户强加的需求, 约束了系统的实现。
一、需求分析(一)需求概述 1、需求包括功能性需求、非功能性需求和伪需求。
功能性需求:描述环境与系统之间的交互而不考虑系统实现。
环境包括用户及任何与系统交互的外部系统。
非功能性需求:指与系统功能行为没有直接关系但用户可见的系统部分。
伪需求:是客户强加的需求, 约束了系统的实现。
2、需求描述的要求正确性:模型中的每个东西都准确地描述了系统的一个方面。
完整性:系统的所有方面都被需求模型描述(包括例外行为)。
一致性:模型中的描述不自相矛盾, 模型中的所有概念与同一事实的现象对应。
清晰性:模型中所有概念都只对应一个现象。
现实性:模型描述了可以存在的事实, 即系统能在约束条件下实现。
(二)收集需求目的:需求的提出与分析主要集中于描述系统目的, 集中于使用者对系统的观点上。
步骤:1、与用户交流, 获得用自然语言书写的系统规格说明。
2、通过系统规格说明, 标识业务事件并制作事件表。
3、为每个业务事件编写基本用例及叙述。
4、为每个与外部事件相关的用例场景绘制系统时序图。
面向对象分析与设计基础知识全掌握在软件开发领域,面向对象分析与设计(Object-Oriented Analysis and Design,简称OOAD)是一种广泛应用的方法论。
它以对象为核心,通过抽象、封装、继承和多态等特性,实现对软件系统的理解和构建。
本文将全面介绍面向对象分析与设计的基础知识,帮助读者全面掌握这一方法。
一、面向对象思想的基本概念面向对象思想是现代软件开发的基石,理解其中的基本概念对于深入学习面向对象分析与设计至关重要。
1.1 类和对象在面向对象的世界里,类是对象的抽象和模板,定义了对象的属性和行为。
类可以看作是一种数据类型的定义,它具有封装、继承和多态的特性。
而对象是类的实例,是具体的、可以被使用的实体。
1.2 封装封装(Encapsulation)指将数据和对数据的操作封装在一个类中,通过访问权限控制,隐藏对象的内部细节,仅向外部提供必要的接口。
封装提高了代码的安全性和复用性,减少了代码的耦合度。
1.3 继承继承(Inheritance)是面向对象编程中的重要概念,它允许我们创建新的类,从已存在的类中继承属性和方法。
继承可以提高代码的可扩展性和复用性,实现了代码的层次化组织。
1.4 多态多态(Polymorphism)是面向对象编程中的另一个重要概念,它允许不同类的对象对同一消息作出响应,实现了不同对象之间的互换使用。
多态提高了代码的灵活性和可维护性。
二、面向对象分析与设计的过程面向对象分析与设计是一种系统化的方法,它通过一系列步骤来分析和设计软件系统。
下面是面向对象分析与设计的基本过程。
2.1 需求获取需求获取是面向对象分析与设计的第一步,通过与用户沟通、分析文档等方式,准确地理解用户的需求和期望。
在这一阶段,我们需要收集用户需求并进行整理和分析。
2.2 需求分析需求分析是根据获取到的需求,进一步分析需求的优先级、相互关系和约束条件等。
通过需求分析,我们可以消除需求的模糊性和冲突,为后续的设计工作提供准确的依据。
面向对象程序设计听课笔记一、面向对象程序设计基本概念1.1 什么是面向对象程序设计面向对象程序设计是一种程序设计方法,它以对象为中心,将系统看作一组对象的集合,对象之间通过消息传递进行通信和合作。
面向对象程序设计强调抽象、封装、继承和多态等概念,从而使得程序更易于维护、扩展和重用。
1.2 面向对象程序设计的特征面向对象程序设计具有以下特征:- 封装:将数据和相关的操作封装到对象中,隐藏内部实现细节,提供统一的接口。
- 继承:通过继承机制,可以将已有的类的属性和方法继承到新的类中,并在此基础上进行扩展。
- 多态:同一个方法在不同对象中有不同的行为,使得代码更灵活、可复用。
1.3 面向对象程序设计的优点面向对象程序设计具有以下优点:- 代码重用:通过继承和多态等特性,可以提高代码的重用率,降低开发成本。
- 可维护性:封装性使得内部实现对外部不可见,可以减少代码耦合,使系统更易于维护。
- 扩展性:通过继承和多态,系统可以更容易地进行功能扩展,适应需求变化。
- 抽象性:面向对象程序设计可以更好地进行问题领域的建模,提高系统的抽象能力。
二、面向对象程序设计的基本原则和模式2.1 单一职责原则单一职责原则要求一个类应该只有一个引起变化的原因,即一个类应该只负责一个职责。
这样可以降低类的复杂度,提高代码的易读性和可维护性。
2.2 开放-封闭原则开放-封闭原则要求软件实体应该对扩展开放,对修改封闭。
即当需求变化时,不应该修改原有的代码,而是通过扩展来实现功能的变化。
2.3 里氏替换原则里氏替换原则要求在一个系统中,子类型必须能够替换掉它们的基类型而不改变系统的任何属性。
这意味着继承关系应该是合理的、可靠的。
2.4 接口隔离原则接口隔离原则要求一个类对另一个类的依赖应该建立在最小的接口上。
这样可以降低依赖关系的耦合度,提高系统的灵活性和可维护性。
2.5 依赖倒置原则依赖倒置原则要求高层模块不应该依赖于低层模块,二者都应该依赖于抽象。
计算机语言:指由一系列字符组成、具有描述问题的能力、且计算机能识别和执行的代码或指令集发展:机器语言(二进制语言)——汇编语言(符号语言)——高级语言——面向对象语言高级语言结构化程序的思路是:自顶向下、逐步求精面向对象技术是以类与对象为基础,以事件或消息驱动对象执行相关消息处理的程序设计方法面向对象:以数据位中心面向过程:以功能为中心。
因为数据相对于功能而言更具有稳定性面向对象程序设计的特点:面向对象技术具有抽象性、封装性、继承性、多态性等基本特征抽象性:忽略事务中与当前目标无关的非本质特征封装性:指将对象的属性和行为(操作)封装在一起,并尽可能的隐蔽对象的内部细节等特征优点:避免了外部错误对内部属性的影响隐蔽了程序设计的复杂性,提高了代码的重用性,降低了软件开发的难度继承性:特殊类(派生类)的对象拥有一般类(父类)的属性和行为的类与类之间的层次关系多态性:指使用相同方式调用具有不同功能的同名函数的特征C++的多态性:C++多态特征分为编译时多态性和运行时多态性编译时多态:在程序的编译阶段由编译系统根据数据操作或返回值的不同确定需要调用哪个同名的函数运行时多态:在程序的运行阶段才根据程序运行中产生的信息确定需要调用哪个同名函数在C++中编译时多态是通过函数重载和运算符重载实现的;运行时多态是通过继承和虚函数来实现的消息:是描述事件发生的信息,是对象之间发出的行为请求通常一个消息由接受消息的对象、消息的名称、若干消息参数三部分组成事件一般由多个消息组成面向对象软件工程:面向对象的软件工程是面向对象程序设计方法在软件工程领域的全面运用包括:面向对象分析(OOA)任务:确定类与对象、属性;分析对象模式及类对象的关联关系;确定行为要素面向对象编程(OOP)、面向对象测试(OOT)、面向对象软件维护(OOSM)Jave语言是适合网络应用的纯粹面向对象程序设计语言Visual Basic是一种简单的可视化面向对象程序设计语言(具有“所见即所得”的可视化开发环境)C++是一种混合性面向对象程序设计语言(即可用于结构化设计,又可用于面向对象程序设计)类:1、在类的定义中不能对数据成员进行初始化。
课程知识点汇总第1讲面向对象程序设计概论一、识记知识1.结构化设计思想、特点、基本过程;2.面向对象程序设计的基本思想、特点;3.抽象、封装、对象、类、消息、继承、多态;面向对象的4个特性;4.对象、对象的特征、划分;5.类;6.消息;7.UML、"4+1"视图及其作用;二、理解知识1.软件、软件开发过程、软件开发方法;2.程序设计、程序设计方法;3.良好的程序设计方法的作用;4.程序设计语言;5.结构化设计的优缺点;6.面向对象、面向对象技术、面向对象所解决的问题;7.现实世界的问题空间和软件的解空间的关系;8.面向对象方法的思维科学基础;9.面向对象程序设计的产生背景;10.UML与SDLC、UML建模机制、用UML描述类;三、简单应用知识1.比较结构化软件开发生命周期与面向对象软件开发生命周期;2.20世纪70年代后,人们发现计算机软件的发展速度始终滞后于计算机硬件的发展,它已经成为制约计算机产业整体发展的瓶颈。
究其原因是什么?3.比较OOA与OOD的联系与区别;四、综合应用知识1.对某一问题分别用结构化的或面向对象的方式给出其解答方案;如课后9题。
第2讲Java程序设计语言概述一、识记知识1.java两种结构的应用程序;2.包;3.applet的生命期及方法;4.Applet应用程序类的层次;5.java数据类型;二、理解知识1.java是什么?2.比较Application和Applet;三、简单应用知识1.Java的三个实现机制;2.Java 源程序结构;3.命名的基本规则;4.Application和Applet的编译、运行;5.Applet应用程序的工作环境以及运行过程;6.java语言1)数据类型;2)数据类型转换;3)常量、变量;4)标识符;5)关键字、保留字、分隔符、注释;6)运算符;7)表达式;8)Math类;9)数组声明和使用;10)字符串常量String;7.Java语句1)标号语句;2)表达式语句;3)复合语句;4)分支语句;5)循环语句;四、综合应用知识1.Applet应用程序的编写;2.编程写Application;3.Java程序的基本输入输出;4.数组的相关应用;第3讲抽象与封装一、识记知识1.抽象与封装的概念;2.对象体的构成;3.类、类定义格式、类的修饰符、类的存储;4.类与类的关系;5.内部类;6.类变量、类方法;7.成员变量所用的修饰符限定;8.实例化;9.对象;10.重载;11.4种访问属性 ;二、理解知识1.如何在建模中应用抽象;2.类的“整体-部分”的关系;3.变量、方法的存在形式;4.成员方法中处理的数据主要来源途径 ;5.构造方法(函数);1)超类的构造函数;2)默认的构造函数;3)构造方法的重载;6.构造方法与初始化器;7.对象的创建、对象的清除;8.解释实例化过程;9.初始化实例变量;10.引用成员变量和调用成员方法;11.数据隐藏;三、简单应用知识1.类定义、类的UML表示;2.内部类的使用;3.类变量的初始化、引用;4.成员方法的定义;5.对象拷贝;四、综合应用知识1.在建模中应用抽象;2.类与类的关系;3.成员方法的重载;4.构造方法的重载;5.浅拷贝;第4讲继承与多态一、识记知识1.多态性;2.super;3.覆盖;4.抽象类;5.接口;二、理解知识1.何时使用继承;2.父类与子类的关系;3.多态依托于继承实现;4.在同一个包中子类访问父类成员的规则;5.在不同包中子类访问父类成员的规则;6.比较覆盖与重载三、简单应用知识1.类的设计、类的层次设计;2.定义子类、子类的构造方法;3.UML类图描述;4.继承关系中类的访问属性控制;5.Object类中7个常用的public成员方法;6.抽象类的声明和使用;7.接口的实现;四、综合应用知识1.成员变量的继承与隐藏;2.成员方法的继承、重载与覆盖;3.多态性的实现;第5讲面向对象的软件开发过程一、识记知识1.软件开发模型;1)瀑布模型;2)演化模型;3)喷泉模型;4)螺旋模型;5)原型开发模型;6)基于构件的软件开发模型;2.面向对象分析;1)系统边界;2)用例、参与者;3)实体类、控制类、边界类;二、理解知识1.软件开发面临几个迫切需要解决的问题;2.软件的生命周期;3.面向对象软件系统应该具备的特征;4.从问题到类图;1)分析问题域,明确用户需求;2)标识用况;3)定义软件系统的边界;4)系统的三个基本模型;5)用例驱动需求分析;6)分解用例图到结构视域的类图;5.面向对象设计的主要步骤;6.设计模型与编写源代码的关系;三、简单应用知识1.设计类1)识别对象并将其抽象成类;2)标识对象的属性和行为;3)确定类职责;四、综合应用知识1.从问题到类图;第6讲异常处理一、识记知识1.什么是异常;2.异常类结构;3.异常的处理机制;二、理解知识1.导致异常发生的两个方面;2.异常发生的条件;3.何时用异常;4.异常处理的优点;5.为什么要自定义异常;三、简单应用知识1.try-catch-finally语句;四、综合应用知识1.用异常的处理机制简化程序;2.用户定义的异常;第7讲流式输入输出及文件处理一、识记知识1.标准的系统数据流;2.输出流、输入流;3.缓冲流、字节流、字符流、文件流、节点流;4.I/ O Stream Chaining;5.对象的串行化;二、理解知识1.字节流、字符流;2.I/ O Stream Chaining;3.串行化的注意事项;三、简单应用知识1.处理File对象;2.RandomAccessFile类;3.Serializable接口的实现;四、综合应用知识1.磁盘文件的读写;第8讲面向对象程序设计概论一、识记知识1.Random类;2.Vector(向量)类;3.Map接口;二、理解知识1.java包中的主要子包;三、简单应用知识1.StringBuffer;2.Vector(向量)类;四、综合应用知识1.显示系统日期;2.教材案例;第9讲图形用户界面一、识记知识1.容器、组件;2.布局管理器;3.JFC;4.Container类的层次结构图;5.事件;6.事件处理机制;二、理解知识1.MVC的结构;2.设计用户界面的四个步骤;3.四种不同的布局管理器的规则;4.awt与Swing的比较;5.适配器的作用;三、简单应用知识1.布局管理器的使用;2.事件模型:授权处理机制;四、综合应用知识1.设计GUI,对两个数做+ - * / %这五种运算; 第10讲数据库访问编程技术一、识记知识1.JDBC框架结构;2.DriverManager类的层次;3.JDBC URL;二、理解知识1.应用JDBC的七个基本步骤;2.执行一个SQL语句;3.处理结果集;4.为什么程序必须自己关闭结果集ResultSet对象和Statement对象?三、简单应用知识1.DriverManager类的层次的应用;四、综合应用知识无第11讲多线程与网络编程(不考)一、识记知识1.线程;2.Scoket;3.TCP 、UDP;4. 线程的生命期;5.Java网络编程模型图;二、理解知识1.理解Thread类和runnable接口;2.ServerScoket类和Scoket类;三、简单应用知识1.取当前系统时钟,并动态显示在屏幕上;2.演示C/S模式的客户登录和服务器校验的流程;四、综合应用知识1.客户通过网络登录服务器,服务器通过与后台的数据库连接,校验不同用户的密码。
1.OOP(Object Oriented Programming) 面向对象编程, 是一种程序设计模式.2.OOA(Object Oriented Analysis) 面向对象分析3.OOD(Object Oriented Design) 面向对象设计4.在实时系统中,进程视图显得尤为重要5.UML(Unified Modeling Language)是一种绘制软件蓝图的标准语言,UML 是最广泛使用的面向对象系统的标准建模方法.6.分为两种类型的视图:静态视图和动态视图7.常见UML图列:用例图、类图、时序图,协作图、活动图、状态图8.UML的阶段:1)启动: 计划系统开始的概念开发。
2)精化: 分析、计划和构架设计。
3)构建: 确定任何其他需求,开发软件,测试软件4)产品化: 将产品交付客户9.UML目前已经发展到UML2.010.分析是一种为具有"收集"对象的系统建模的方法11.设计阶段:必须解答"应该使用那些技术?如何解决问题?"12."类图"用于描述类之间的关系13."用例图"可用于描述用例的实现细节.14.螺旋过程模型的"产品化"阶段是软件产品完成的阶段.15.用例图:1系统->一个活动范围2参与者->扮演特定角色或描述特定特征的人3用例->执行完成特定的功能和过程16.用例关系:1)扩展(有条件):由一个用例必然会引出一个用例2)包含(无条件):源对象包含目标对象的所有功能17.用例图可用于软件开发生命周期的"需求分析和测试"阶段18.用例用于表示系统的功能19.参与者是"构建"系统功能的外部实体20.动态模型主要包括:1)时序图:按时间顺序模拟控制流程.特点:a.有两个坐标轴2)状态图:描述单个事物如何响应发生的事件而更改状态和生成事件.特点:a.可用对象的属性和连接来定义起状态b.有两个状态: 初始状态---> 最终状态3)活动图:描述多个事物的交互特点:a.为系统的工作流建模b.明确性、可视性、简容易性的特点21.所有系统都具有"静态"结构和动态行为22.状态图可显示对象在生命周期内响应外部事件和消息所经历的状态23.关键抽象: 通常表现为系统的实体.34.类之间的关系:1.对象名称和类名称之间的:(冒号)分类:1)关联(Association):包含单个类属性分析:a:单向关联(Directed Association ,一方包含另一方): 单向-》0...1 -》修改定义:指一方知道对方的存在,一方包含另一方,一方可以调用被包含方的公共属性和方法。
图标:用一条实线的箭头从关联类指向被关联的类. Person Car 例子:存在两个类: Person 和Carpublic class Person {private Car _Vehicle;}b:双向关联(Association, 双方相互包含) :右击-》添加Add UML Multiplicity属性定义:指双方都知道对方的存在,双方相互包含,都可以调用对方的公共属性和方法。
图标:用无方向的直线连接两类:Employee Bicycle例子:存在两个类:Employee 和Bicylepublic class Employee {private ArrayList bicycle;}public class Bicycle{private Employee employee;}2)泛化(Generalization, 类似于继承(inheritance) ):一般类和特殊类之间的关系,被泛化的类称为子类,得到的类成为超类.图标:用一条实线带三角形的空心箭头从子类指向父类:PrinterColorPrinter例子:存在两个类: Printer 和ColorPrinterpublic class ColorPrinter extends Printer{public void print(){}}被泛化的类: ColorPrinter , 得到的类: Printer3)依赖(Dependency):一个类的实例在另一个类的方法中被作为参数传递,被传递的类叫做该类的依赖.图标:用一条虚线的箭头从依赖类指向独立的类(被传递的类):Worker Cleaner例子:存在两个类:Worker 和Cleanerpublic class Worker {public void findCleaner(Cleaner c){}}4)聚合(Aggregation): 一个类(整体)的成员属性由另一个类(局部)聚合而成(相互独立的类).定义:当类之间有整体-部分关系时, 表示Computer聚合KeyBoard,但是KeyBoard 可以离开Computer而独立存在(独立存在的意思是在某个应用的问题域中这个类的存在有意义)。
图标:用一条起点空心菱形的箭头从聚合体(整体)指向了被聚合类(局部) :Computer KeyBoard例子:存在两个类: Computer 和KeyBoardpublic class Computer {private KeyBoard k;}整体——局部的本性是聚合和关联的区别5)组合(Commposition Associaton ):A类是B类的成员属性毕备的构成部分(关系密切),既B类的属性由必备的A类的实例组成.则称:B类由A类聚合而成. A类叫聚合元素,B类叫聚合类.定义:当类之间有整体-部分关系时,Montor知道Cog的生存周期,Montor包含Cog类,而Cog不能离开Montor而独立存在.图标: 用一条起点实心菱形的箭头从聚合类(整体)指向聚合元素类(局部):Montor Cog例子:存在两个类: Montor 和Cogpublic class Montor{private ArrayList c = new ArrayList();}35.接口与实现:类和接口之间的关系称为实现(realization).关系图标: 用一条虚线带空心的三角形箭头从实现类指向接口.IusbComputer例子:存在接口Iusb 和类Computerpublic class Computer implements Iusb{public String go(){ //接口中定义好了该方法,这里进行实现;}}UML类图关系大全1、关联双向关联:C1-C2:指双方都知道对方的存在,都可以调用对方的公共属性和方法。
在GOF的设计模式书上是这样描述的:虽然在分析阶段这种关系是适用的,但我们觉得它对于描述设计模式内的类关系来说显得太抽象了,因为在设计阶段关联关系必须被映射为对象引用或指针。
对象引用本身就是有向的,更适合表达我们所讨论的那种关系。
所以这种关系在设计的时候比较少用到,关联一般都是有向的。
使用ROSE 生成的代码是这样的:class C1...{public:C2* theC2;};class C2...{public:C1* theC1;};双向关联在代码的表现为双方都拥有对方的一个指针,当然也可以是引用或者是值。
单向关联:C3->C4:表示相识关系,指C3知道C4,C3可以调用C4的公共属性和方法。
没有生命期的依赖。
一般是表示为一种引用。
生成代码如下:class C3...{public:C4* theC4;};class C4...{};单向关联的代码就表现为C3有C4的指针,而C4对C3一无所知。
自身关联(反身关联):自己引用自己,带着一个自己的引用。
代码如下:class C14...{public:C14* theC14;};就是在自己的内部有着一个自身的引用。
2、聚合/组合当类之间有整体-部分关系的时候,我们就可以使用组合或者聚合。
聚合:表示C9聚合C10,但是C10可以离开C9而独立存在(独立存在的意思是在某个应用的问题域中这个类的存在有意义。
这句话怎么解,请看下面组合里的解释)。
代码如下:class C9...{public:C10 theC10;};class C10...{};组合(也有人称为包容):一般是实心菱形加实线箭头表示,如上图所示,表示的是C8被C7包容,而且C8不能离开C7而独立存在。
但这是视问题域而定的,例如在关心汽车的领域里,轮胎是一定要组合在汽车类中的,因为它离开了汽车就没有意义了。
但是在卖轮胎的店铺业务里,就算轮胎离开了汽车,它也是有意义的,这就可以用聚合了。
在《敏捷开发》中还说到,A组合B,则A需要知道B的生存周期,即可能A负责生成或者释放B,或者A通过某种途径知道B的生成和释放。
他们的代码如下:class C7...{public:C8 theC8;};class C8...{};可以看到,代码和聚合是一样的。
具体如何区别,可能就只能用语义来区分了。
3、依赖依赖:指C5可能要用到C6的一些方法,也可以这样说,要完成C5里的所有功能,一定要有C6的方法协助才行。
C5依赖于C6的定义,一般是在C5类的头文件中包含了C6的头文件。
ROSE 对依赖关系不产生属性。
注意,要避免双向依赖。
一般来说,不应该存在双向依赖。
ROSE生成的代码如下:// C5.h#include "C6.h"class C5...{};// C6.h#include "C5.h"class C6...{};虽然ROSE不生成属性,但在形式上一般是A中的某个方法把B的对象作为参数使用(假设A 依赖于B)。
如下:#include "B.h"class A...{void Func(B &b);}那依赖和聚合\组合、关联等有什么不同呢?关联是类之间的一种关系,例如老师教学生,老公和老婆,水壶装水等就是一种关系。
这种关系是非常明显的,在问题领域中通过分析直接就能得出。
依赖是一种弱关联,只要一个类用到另一个类,但是和另一个类的关系不是太明显的时候(可以说是“uses”了那个类),就可以把这种关系看成是依赖,依赖也可说是一种偶然的关系,而不是必然的关系,就是“我在某个方法中偶然用到了它,但在现实中我和它并没多大关系”。
例如我和锤子,我和锤子本来是没关系的,但在有一次要钉钉子的时候,我用到了它,这就是一种依赖,依赖锤子完成钉钉子这件事情。
组合是一种整体-部分的关系,在问题域中这种关系很明显,直接分析就可以得出的。
例如轮胎是车的一部分,树叶是树的一部分,手脚是身体的一部分这种的关系,非常明显的整体-部分关系。