wordpress 一站多主题,啤酒招商网站大全,流量对网站的作用,网站建设金#x1f4d6; 前言#xff1a;面向对象是以问题空间中出现的物体为中心进行模型化的一种技术。建立模型是软件工程中最常使用的技术之一。无论软件分析或软件设计#xff0c;都需要建立模型。UML 就是OO 软件工程使用的统一建模语言。它是一种图形化的语言#xff0c;主要用… 前言面向对象是以问题空间中出现的物体为中心进行模型化的一种技术。建立模型是软件工程中最常使用的技术之一。无论软件分析或软件设计都需要建立模型。UML 就是OO 软件工程使用的统一建模语言。它是一种图形化的语言主要用图形方式来表示。 目录 1. 面向对象概述 2. UMLUnified Modeling Language统一建模语言简介 2.1 UML的组成 2.2 UML的特点与应用 2.3 静态建模 2.3.1 用例图与用例模型 2.3.2 类图和对象图 2.4 动态建模 2.4.1 消息 2.4.2 状态图 2.4.3 时序图顺序图和协作图通信图 2.4.4 活动图 2.5 物理架构建模 3. 课后习题 1. 面向对象概述
类和对象的关系
对象代表客观世界中实际或抽象的事物 客观世界是由各种对象组成的数据以及在其上的操作的封装体 类一组相似的对象的共性抽象 类是一组客观对象的抽象实现抽象数据类型的工具 类与对象的关系 抽象与具体的关系组成类的每个对象都是该类的实例实例是类的具体事物类是各个实例的综合抽象
面向对象的基本特征抽象、封装、继承、多态
面向对象开发的优点可复用性、可扩展性、可维护性 2. UMLUnified Modeling Language统一建模语言简介
UML通用的可视化的建模语言
目前在软件工程里主要用于系统分析与系统设计软件生存周期RUP统一过程软件建模方式可视化的语言软件文档规范文档由UML建模工具自动产生软件人员分工岗位界面逐渐趋向模糊 2.1 UML的组成
UML由模型元素、扩展机制、图及视图等部分组成
模型元素是构成图的最基本的元素扩展机制用于扩展一个模型元素图由模型元素和扩展机制构成视图由一个或多个图构成UML包括5种不同的视图。
UML的模型元素
表示模型中的某个概念 类、对象、构件、用例、结点node、接口interface、包package和注释note 表示模型元素之间的关系 关联、泛化、依赖、实现、聚集、组合 UML的元模型结构元元模型层、元模型层、模型层、用户模型层
图
静态图用例图、类图、对象图、构件图和部署图动态图状态图、时序图、协作图和活动图
视图
用例视图用例图 [活动图] 从用户角度看到的系统应有的外部功能 逻辑视图静态类图、对象图动态状态图、时序图、协作图、活动图 描述系统的静态结构和对象间的动态协作关系 进程视图状态图、时序图、协作图、活动图、构件图、部署图 展示系统的动态行为及其并发性 构件视图构件图 展示系统实现的结构和行为特征 部署视图部署图 显示系统的实现环境和构件被部署到物理结构中的映射
展开来说标准建模语言UML可以由下列5类图共9种图来定义
用例图 用例图需求捕获测试依据 静态图Static diagram 类图类以及类之间的相互关系对象图对象以及对象之间相互关系 行为图Behavior diagram 状态图类所经历的各种状态活动图对工作流建模 交互图Interactive diagram 时序图强调时间顺序的交互图协作图强调对象协作的交互图 实现图Implementation diagram 构件图构件及其相互依赖关系部署图构件在各节点上的部署
其符号体系如下
第一类 用例图的组成符号
可视化图符名称描述用例用于表示用例图中的用例每个用例表示所建模系统的一项外部功能需求即从用户的角度分析所得的需求。参与者用于描述与系统功能有关的外部实体它可以是用户也可以是外部信息系统。系统用于界定系统功能范围。描述该系统功能的用例都置于其中而描述外部实体的参与者都置于其外上方标注系统名称。关联连按参与者和用例表示该参与者所代表的系统外部实体与该用例所描述的系统需求有关。这是参与者和用例的连接。包含由用例A连向用例B表示用例A包含用例B的行为或功能。泛化由用例A连向用例B表示用例B描述了一项基本需求。而用例A则描述了该基本需求的特殊情况。扩展由用例连向用例B表示用例描述了一项基本需求。并声明有扩展点而用例A则描述了该基本需求在扩展点上的扩展。注释体用于对URL实体进行文字描述。注释连接将注释体与要描述的实体相连。
第二类 静态图——类图和对象图的组成符号
可视化图符名称描述类第一栏是类名第二栏是类的属性第三在是类的操作包表示类图的集合是一种分组机制关联表示类的对象之间的关系其特殊形式是组成关联和聚合关联聚合关联表示类的对象之间是整体和部分之间的关系组成关联表示类的对象的这种关系整体拥有部分部分与整体共存如果整体不存在了则部分也随之消失泛化关系也称继承关系定义类和包之间的一般元素和特殊元素之间的分类关系依赖关系有两个类元素A和B如果修改则可能引起对另一个元素B的修改则称B依赖A对象对象是类的一 个实例第一栏表示对象名带下划线第二栏表示属性和行为值
第三类 行为图——状态图和活动图中常用到的图形符号
可视化图符名称描述初态用于表示状态图的起始点活动状态在框中标明活动的名称用于表示内部行动执行的情形终态用于表示状态图的终点条件判断用于表示状态之间的条件分支转移并行用于表示并发状态转移用于说明两个对象之间存在着某种关系如果满足某个条件且当某个事件发生时对象的状态发生转移送出信号将对象发出的信号送出到指定对象收到信号接收指定对象发出的信号
第四类 交互图——时序图和协作图中常用到的图形符号
可视化图符名称描述对象用于表示物理设备和在其上运行的软件系统生命线条用于表示可执行的物理代码模块同步消息用于表示嵌套的控制流发出消息后要等待操作处理完毕调用者才能继续执行自 己的操作异步消息用于表示异步控制流当消息发出后不用等待返回即可继续执行自己的操作简单消息用于表示控制如何在对象间进行传递关联表示对象之间的关系
第五类 实现图——构件图和配置图中常用到的图形符号
可视化图符名称描述节点用于表标物理设备和在其上运行的软件系统构件用于表示可执行的物理代码模块接口 界面用于表示对外提供的可视操作和属性连接用于表示节点之间的连接表示系统之间进行的通信路径 2.2 UML的特点与应用
特点
统一标准面向对象表达能力强大、可视化
应用用于描述系统开发的不同类型于不同阶段
从需求分析到软件设计到软件测试及维护可视化问题描述帮助理解问题帮助建立各阶段的文档获取和交流有关应用问题求解的知识辅助构建系统 2.3 静态建模
静态建模包括用例图、类图、对象图 2.3.1 用例图与用例模型
下图是某保险商务系统的用例图。在这一简化的保险系统中有3个用例签订保险单、销售统计和客户统计。客户只与用例“签订保险单”有交互保险销售员则与3个用例都有交互。 用例之间主要存在两种关系扩展关系和包含关系。
扩展关系根据指定的条件一个用例中有可能加入另一个用例的动作 包含关系一个用例的行为包含另一个用例的行为
包含关系和扩展关系的联系和区别
联系都是从现有的用例中抽取出公共的那部分信息作为一个单独的用例然后通过不同的方法来重用这个公共的用例以减少模型维护的工作量。区别扩展关系中基本用例的基本流执行时扩展用例不一定执行即扩展用例只有在基本用例满足某种条件的时候才会执行。
包含关系中基本用例的基本流执行时包含用例一定会执行。 2.3.2 类图和对象图
类图 上图表示一个学生可以购买0或多本书而一本书只能属于一个学生。
类图表示类间关系
关联关系 Association 类之间存在的语义上的关系普通关联、递归关联、多重关联等 聚集关系Aggregation 特殊的关联整体-部分 组合关系Composition 特殊的聚集整体强烈拥有部分 泛化关系Generalization 继承 依赖关系Dependency 对一个类/对象的修改会影响另一个类/对象
普通关联
上图也是对象图是类图的实例。
在关联的两端可写上一个被称为重数multiplicity的数值范围表示该类有多少个对象可与对方的一个对象连接。重数的符号表示有
1 表示1个对象重数的默认值为1。0 …1表示0或1。1 …*表示1或多。0…*表示0或多可以简化表示为*。2…4 表示24。 聚集关系Aggregation
特殊的关联表示类之间具有整体与部分的关系 特征是“部分”对象可以是多个任意“整体”对象的一部分“部分”可以参与到多个“整体”中部分可以脱离整体。
组合关系Composition
特殊的聚集整体强烈拥有部分 在组合中“整体”强烈拥有“部分”“部分”与“整体”共存。如果“整体”不存在了“部分”也会随之消失。“整体”的重数必须是0或1“部分”的重数可以是任意的。
泛化关系Generalization
又称继承普通泛化限制泛化此处的一般元素可视作父类特殊元素视作子类。一般元素所具有的关联、属性和操作特殊元素也都隐含性地拥有特殊元素应包含额外信息允许使用特殊元素实例的地方也应能使用一般元素。 依赖关系Dependency
对一个类/对象的修改会影响另一个类/对象 例如某个类中使用另一个类的对象作为操作中的参数一个类存取作为全局对象的另一个类的对象或一个类的对象是另一个类的类操作中的局部变量等都表示这两个类之间有依赖关系。
包图 2.4 动态建模
动态建模包括状态图、时序图、协作图和活动图等 2.4.1 消息 2.4.2 状态图
状态图描述对象的所有可能状态及事件发生时状态的转移条件 状态图之间发送消息 2.4.3 时序图顺序图和协作图通信图
时序图元素对象、对象生命线、消息 时序图用来描述对象之间的动态交互着重体现对象间消息传递的时间顺序。它以垂直轴表示时间水平轴表示不同的对象。对象用一个带有垂直虚线的矩形框表示并标有对象名和类名。垂直虚线是对象的生命线用于表示在某段时间内对象是存在的。对象间的通信在对象的生命线间通过消息符号来表示消息的箭头指明消息的类型。
协作图元素有对象、链接和消息流 协作图描述了对象间的动态协作关系但它强调消息发生和接收的对象的结构组织及连接关系协作对象之间的交互和链接 2.4.4 活动图
活动图描述了用例的活动行为以及活动时的约束关系泳道表明执行的对象 2.5 物理架构建模
逻辑架构和物理架构
构件图显示软件构件直接的依赖关系。一般来说软件构件就是一个实际文件可以是源代码文件、二进制代码文件和可执行文件。
构件图可以用来表现编译、链接或执行时构件之间的依赖关系。
部署图描述系统硬件的物理拓扑结构以及在此结构上执行的软件。部署图可以显示计算节点的拓扑结构和通信路径、结点上运行的软件构件、软件构件包含对的逻辑单元对象、类等。 3. 课后习题 用例use case表示参与者与系统的一次交互过程描述系统的一个功能。用例图被用在需求分析阶段通过系统外部的参与者与系统之间交互过程的描述来展现系统的功能。用例之间存在着泛化、包含、扩展关系。 1、根据你的理解把下面的用例图补充完整。 解答
2、某学校要开发一个网上选课系统。该系统提供以下基本功能 建立课程教务人员通过本系统建立课程信息 课程维护教务人员修改和删除课程信息 安排课程教务人员安排课程课程的安排信息包括 周学时、授课时间、授课老师、教室等信息 调整课程教务人员对已经安排的课程信息进行调整。 课程浏览用户可以浏览和查询课程信息 学生选课学生登陆本系统选择自己要修的课程。 选课浏览学生浏览自己选修的课程。 试分析以上问题并通过用例图描述该系统的功能。 3、某绘图系统存在Point、Line、Square三种图元它们具有Shape接口图元的类图关系如图所示。现要将Circle图元加入此绘图系统以实现功能扩充。已知某第三方库已经提供了XCircle类且完全满足系统新增的Circle图元所需的功能但XCircle不是由Shape派生而来它提供的接口不能被系统直接使用。代码3-1既使用了XCircle又遵循了Shape规定的接口既避免了从头开发一个新的Circle类又可以不修改绘图系统中已经定义的接口。代码3-2根据用户指定的参数生成特定的图元实例并对之进行显示操作。请在代码补全代码空缺处。 绘图系统定义的接口与XCircle提供的显示接口及其功能如下表所示
// 代码3-1
class Circle (1) {private (2) pxc;public Circle() {pxc new (3);}public void display() {pxc.(4);}
}// 代码3-2
public class Factory {public (5) getShapeInstance(int type) { // 生成特定类实例switch(type) {case 0: return new Point();case 1: return new Rectangle();case 2: return new Line();case 3: return new Circle();default: return null;}}
}public class App {public static void main(String argv[]) {if (argv.length ! 1) {System.out.println(error parameters!);return;}int type Integer.parseInt(argv[0]);Factory factory new Factory();Shape s;s factory.(6);if (s null) {System.out.println(Error get instance!);return;}s.display();return;}
}解答
// 代码3-1
class Circle implements Shape {private Xcircle pxc;public Circle() {pxc new Xcircle;}public void display() {pxc.displayIt();}
}// 代码3-2
public class Factory {public Shape getShapeInstance(int type) { // 生成特定类实例switch(type) {case 0: return new Point();case 1: return new Rectangle();case 2: return new Line();case 3: return new Circle();default: return null;}}
}public class App {public static void main(String argv[]) {if (argv.length ! 1) {System.out.println(error parameters!);return;}int type Integer.parseInt(argv[0]);Factory factory new Factory();Shape s;s factory.getShapeInstance(type);if (s null) {System.out.println(Error get instance!);return;}s.display();return;}
}4、在一个订货系统中采购员从供货商处订货双方需要签订订单一个采购员可以订多个供货商的货品一个供货商也可以给多个采购员供货。分析这个问题并用类图对这个问题进行建模。
解答
5、根据自己的理解对下图中不合理之处进行修改。 解答
5、传输门是传输系统中的重要装置。传输门具有 Open打开、Closed关闭、Opening正在打开、StayOpen保持打开、Closing正在关闭五种状态。触发状态的转换事件有 click、complete 和 timeout 三种。事件与其相应的状态转换如图所示。 下面的【Java 代码 1】与【Java 代码 2】分别用两种不同的设计思路对传输门进行状态模拟请填补代码中的空缺。
// 代码1
public class Door {// 定义状态变量用不同的整数表示不同状态public static final int CLOSED 1;public static final int OPENING 2;public static final int OPEN 3;public static final int CLOSING 4;public static final int STAYOPEN 5;private int state CLOSED;private void setState(int state) {this.state state; // 设置传输门当前状态}public void getState() {// 此处代码省略本方法输出状态字符串// 例如当前状态为 CLOSED 时,输出字符串为”CLOSED”}// 发生 click 事件时进行状态转换public void click() { if (1) {setState(OPENING);} else if (2) {setState(CLOSING);} else if (3) {setState(STAYOPEN);}}// 发生 timeout 事件时进行状态转换public void timeout() {if (state OPEN) {setState(CLOSING);}}// 发生 complete 事件时进行状态转换public void complete() { if (state OPENING) {setState(OPEN);} else if (state CLOSING) {setState(CLOSED);}}public static void main(String[] args) {Door aDoor new Door();aDoor.getState();aDoor.click();aDoor.getState();aDoor.complete();aDoor.getState();aDoor.click();aDoor.getState();aDoor.click();aDoor.getState();return;}
}// 代码2
public class Door {public final DoorState CLOSED new DoorClosed(this);public final DoorState OPENING new DoorOpening(this);public final DoorState OPEN new DoorOpen(this);public final DoorState CLOSING new DoorClosing(this);public final DoorState STAYOPEN new DoorStayOpen(this);private DoorState state CLOSED;// 设置传输门当前状态public void setState(DoorState state) {this.state state;}public void getState() { // 根据当前状态输出对应的状态字符串System.out.println(state.getClass().getName());}public void click() { // 发生 click 事件时进行状态转换4;}public void timeout() { // 发生 timeout 事件时进行状态转换5;}public void complete() { // 发生 complete 事件时进行状态转换6;}public static void main(String[] args) {Door aDoor new Door();aDoor.getState();aDoor.click();aDoor.getState();aDoor.complete();aDoor.getState();aDoor.timeout();aDoor.getState();return;}
}public abstract class DoorState { // 定义所有状态类的基类protected Door door;public DoorState(Door door) {this.door door;}public void click() {}public void complete() {}public void timeout() {}
}class DoorClosed extends DoorState { // 定义一个基本的 Closed 状态public DoorClosed(Door door) {super(door);}public void click() {7;}// 该类定义的其余代码省略
}// 其余代码省略解答 (1) state CLOSED || state CLOSING (2) state OPENING || state STAYOPEN (3) state OPEN (4) state.click() (5) state.timeout() (6) state.complete() (7) door.setState(door.OPENING)
【代码一】没有用状态模式将所有的状态转换代码都写到Door类中每一个状态对应一个整型常量状态变量当Door的click()等方法被调用时可以实现相应状态的转换根据状态图可以完成对(1)、(2)和(3)空的解答例如当状态变量state为CLOSED或者CLOSING时调用click()方法状态将转换为OPENING。同理当timeout()方法和complete()方法被调用时某些状态之间也可以发生转换。
【代码二】使用了状态模式Door类充当环境类提供了抽象类DoorState充当抽象状态类其子类如DoorClosed、DoorOpening等充当具体状态类。在环境类Door枚举了所有的状态提供了一个setState()方法用于设置当前状态此外在Door的click()方法中调用状态类的click()方法在Door的timeout()方法中调用状态类的timeout()方法在Door的complete()方法中调用状态类的complete()方法。因此(4)、(5)、(6)空用于实现间接调用。第(7)空用于实现状态的切换当状态为DoorClosed时如果调用click()方法那么Door的当前状态将切换到OPENING因此在第(7)空将调用door对象的setState()方法注入一个DoorOpening类型的对象由于该对象已存在于Door中无须再重新创建。在C中可以通过door-OPENING来获取而在Java中则通过door.OPENING来获取。在本试题中状态的切换由具体状态类来完成由环境类来维护各个具体状态类的实例。
6、用状态图描述一个请假流程 少于等于 3 天的请假申请辅导员审批就可以了超过 3 天的请假还需系主任审批。
解答
7、下图是一个通信图试把该图转换为顺序图 解答
8、在顺序图中Kjosk表示信息亭BoxOffice表示售票中心 CreditCardService表示信用卡服务。 1Kjosk类中的操作有哪些BoxOffice的操作有哪些 CreditCardService类的操作有哪些 2根据对象间的消息顺序描述该顺序图的含义。 解答 1Kjosk类的操作有showAvailable(seat-list)、DemandPayment(cost)、printtickets(performance,seats)、ejectcard BoxOffice的操作有Request(count,performance)、SelectSeats、InsertCard(CardNumber)、authorized CreditCardService的操作有change(cardnumber,cost) 2信息亭查询演出的信息 售票中心给出可用的座位表 信息亭选择座位售票中心给出所需要支付的费用 信息亭插入卡提供信用卡卡号进行费用支付 售票中心将信用卡号和费用发送给信用卡服务中心 信用卡服务中心验证有效性并进行扣款 信息亭确认支付成功后打印包含演出和座位信息的票并弹出信用卡。 OK以上就是本期知识点“面向对象与UML”的知识啦~~ 感谢友友们的阅读。后续还会继续更新欢迎持续关注哟~ 如果有错误❌欢迎批评指正呀~让我们一起相互进步 如果觉得收获满满可以点点赞支持一下哟~ ❗ 转载请注明出处 作者HinsCoder 博客链接 作者博客主页