第四章 面向对象方法.docx

上传人:b****0 文档编号:17388427 上传时间:2023-07-24 格式:DOCX 页数:50 大小:663.01KB
下载 相关 举报
第四章 面向对象方法.docx_第1页
第1页 / 共50页
第四章 面向对象方法.docx_第2页
第2页 / 共50页
第四章 面向对象方法.docx_第3页
第3页 / 共50页
第四章 面向对象方法.docx_第4页
第4页 / 共50页
第四章 面向对象方法.docx_第5页
第5页 / 共50页
第四章 面向对象方法.docx_第6页
第6页 / 共50页
第四章 面向对象方法.docx_第7页
第7页 / 共50页
第四章 面向对象方法.docx_第8页
第8页 / 共50页
第四章 面向对象方法.docx_第9页
第9页 / 共50页
第四章 面向对象方法.docx_第10页
第10页 / 共50页
第四章 面向对象方法.docx_第11页
第11页 / 共50页
第四章 面向对象方法.docx_第12页
第12页 / 共50页
第四章 面向对象方法.docx_第13页
第13页 / 共50页
第四章 面向对象方法.docx_第14页
第14页 / 共50页
第四章 面向对象方法.docx_第15页
第15页 / 共50页
第四章 面向对象方法.docx_第16页
第16页 / 共50页
第四章 面向对象方法.docx_第17页
第17页 / 共50页
第四章 面向对象方法.docx_第18页
第18页 / 共50页
第四章 面向对象方法.docx_第19页
第19页 / 共50页
第四章 面向对象方法.docx_第20页
第20页 / 共50页
亲,该文档总共50页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

第四章 面向对象方法.docx

《第四章 面向对象方法.docx》由会员分享,可在线阅读,更多相关《第四章 面向对象方法.docx(50页珍藏版)》请在冰点文库上搜索。

第四章 面向对象方法.docx

第四章面向对象方法

第四章面向对象方法

【学习目标】

  本章集中介绍了面向对象方法的基本原理和概念,同时简述了统一建模语言(UnifiedModelingLanguange,UML)的主要作用和基本概念,并结合一个实例,论述了基于UML语言的面向对象分析方法,从而使学生掌握面向对象方法的基本理论,学会使用UML语言进行面向对象的分析和建模。

【学习方法】  

  正确理解面向对象方法和UML语言涉及的基本概念,结合具体实例运用面向对象分析技术,从而达到学习目的。

【难重点】  

  本章的学习重点在于理解面向对象方法的原理和概念,熟练运用UML语言,掌握面向对象的分析方法,其难点是怎样在实际的软件项目中灵活运用这些思想和方法。

【课前思考】

面向对象开发方法有什么优点?

面向对象方法包含哪些基本概念?

为什么要对软件系统建模?

什么是UML?

面向对象分析与面向对象设计的区别是什么?

什么是软件复用?

4.1面向对象方法概述

【本节知识点】

  什么是面向对象

  面向对象技术的发展历史

  面向对象的基本概念

  面向对象的软件工程方法

4.1.1什么是面向对象

  面向对象(ObjectOriented)技术是软件工程领域中的重要技术,这种软件开发思想比较自然地模拟了人类认识客观世界的方式,成为当前计算机软件工程学中的主流方法。

应该特别强调的是,面向对象技术不仅仅是一种程序设计方法,更重要的是一种对真实世界的抽象思维方式。

  面向对象方法的基本思想是从现实世界中客观存在的事物(即对象)出发,尽可能地运用人类的自然思维方式来构造软件系统。

它更加强调运用人类在日常的逻辑思维中经常采用的思想方法与原则,例如抽象、分类、继承、聚合、封装等,使开发者以现实世界中的事物为中心来思考和认识问题,并以人们易于理解的方式表达出来。

面向对象技术的基本观点如下:

  

(1)客观世界是由对象组成的,任何客观的事物或实体都是对象,复杂的对象可以由简单的对象组成。

  

(2)具有相同数据和相同操作的对象可以归并为一个类,对象是对象类的一个实例。

  (3)类可以派生出子类,子类继承父类的全部特性(数据和操作),又可以有自己的新特性。

子类与父类形成类的层次结构。

  (4)对象之间通过消息传递相互联系。

类具有封装性,其数据和操作等对外界是不可见的,外界只能通过消息请求进行某些操作,提供所需要的服务。

软件工程学家Codd和Yourdon认为:

  面向对象=对象+类+继承+通信

  如果一个软件系统采用这些概念来建立模型并予以实现,那么它就是面向对象的。

4.1.2面向对象技术的发展历史

  面向对象方法起源于面向对象程序设计语言,后来才逐步形成了面向对象的分析和设计方法,其发展过程大体上经历了初始阶段、发展阶段和成熟阶段等过程。

初始阶段

  60年代末挪威奥斯陆大学和挪威计算中心共同研制的Simula语言是面向对象语言发展历史上的第一个里程碑,它首先引入了类的概念和继承机制,后来的一些著名面向对象编程语言(如Smalltalk、C++、Eiffel)都受到Simula的启发。

80年代,Xerox研究中心推出了Smalltalk语言和环境,它具备了面向对象语言的继承和封装的主要特征,使面向对象程序设计方法趋于完善,掀起了面向对象研究的高潮。

发展阶段

  从80年代中期到90年代,面向对象语言十分热门,大批比较实用的面向对象编程语言(ObjectOrientedProgrammingLanguage,OOPL)涌现出来,如C++、Objective-C、ObjectPascal、CLOS(CommonLispObjectSystem)、Eiffel、Actor等,特别是C++语言已成为目前应用最广泛的OOPL。

  面向对象编程语言的繁荣是面向对象方法走向实用的重要标志,也是面向对象方法在计算机学术界、产业界和教育界日益受到重视的推动力。

成熟阶段

  在C++语言十分热门的时候,人们开始了对面向对象分析(ObjectOrientedAnlysis,OOA)的研究,进而延伸到面向对象设计(ObjectOrientedDesign,OOD)。

特别是90年代以后,许多专家都在尝试用不同的方法进行面向对象的分析与设计,其中比较著名的有Booch的方法、Rumbaugh的OMT方法、Coad/Yourdon的方法、Wirtf-Brock的RDD方法、Shlear-Mellor的方法、Gibon的OBA方法、Jacobson的OOSE方法、Martin-Odell的方法、Fusion方法等,这些方法各有所长,力图解决复杂软件系统的开发问题。

在这段时期,面向对象的分析和设计技术逐渐走向实用,最终形成了从分析、设计到编程、测试与维护一整套的软件工程体系。

4.1.3面向对象的基本概念

对象

  对象从不同的角度有不同的含义,我们针对系统开发来讨论对象的概念,其定义是:

  对象(Object)是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位,由一组属性和对这组属性进行操作的一组服务组成。

  在这里,属性和服务是构成对象的两个基本要素,其定义是:

  属性是用来描述对象静态特征的一个数据项。

  服务是用来描述对象动态特征(行为)的一个操作序列。

从一般意义上讲,对象是现实世界中的一个实际存在的事物,它可以是有形的,如车辆、房屋等,也可以是无形的,如国家、生产计划等。

而人们在开发一个系统时,则在一定的范围(也称问题域)内考虑和认识与系统目标有关的事物,并用系统中的对象来抽象地表示它们。

在这里,对象只描述客观事物本质的、与系统目标有关的特征,而不考虑那些非本质的、与系统目标无关的特征。

同时,对象是属性和服务的结合体,对象的属性值只能由这个对象的服务来读取和修改。

  类(Class)是具有相同属性和服务的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。

  类好比是一个对象模板,用它可以产生多个对象。

类所代表的是一个抽象的概念或事物,在客观世界中实际存在的是类的实例,即对象。

  举例:

在学校教学管理系统中,"学生"是一个类,其属性具有姓名、性别、年龄等,可以定义"入学注册"、"选课"等操作。

一个具体的学生"王平"是一个对象,也是"学生"类的一个实例。

把众多的事物归纳并划分成一些类是人类在认识客观世界时经常采用的思维方法,分类的原则是抽象,从那些与当前目标有关的本质特征中找出事物的共性,并将具有共同性质的事物划分成一类,得出一个抽象的概念。

例如:

人、房屋、树木等都是一些抽象的概念,它们是一些具有共同特征的事物的集合,称为类。

类的概念使我们能对属于该类的全部个体事物进行统一的描述,"树具有树根、树干、树枝和树叶,它能进行光合作用",这个描述适合所有树,而不必对每一棵具体的树进行描述。

封装

  封装(Encapsulation)是把对象的属性和服务结合成一个独立的系统单位,并尽可能隐藏对象的内部细节。

  封装是面向对象方法的一个重要原则,系统中把对象看成是属性和对象的结合体,使对象能够集中而完整地描述一个具体事物。

封装的信息隐蔽作用反映了事物的相对独立性,当我们从外部观察对象时,只需要了解对象所呈现的外部行为(即做什么),而不必关心它的内部细节(即怎么做)。

  举例:

电视机包括外形尺寸、分辨率、电压、电流等属性,具有打开、关闭、调谐频道、转换频道、设置图象等服务,封装意味着将这些属性和服务结合成一个不可分的整体,它对外有一个显示屏、插头和一些按钮等接口,用户通过这些接口使用电视机,而不关心其内部的实现细节。

与封装密切相关的概念是可见性,它是指对象的属性和服务允许对象外部存取和引用的程度。

  在软件上,封装要求对象以外的部分不能随意存取对象的内部数据(属性),从而有效地避免了外部错误对它的"交叉感染",使软件错误能够局部化,大大减少了查错和排错的难度。

另外,当对象内部需要修改时,由于它只通过少量的服务接口对外提供服务,便大大减少了内部修改对外部的影响,即减少了修改引起的"波动效应"。

  封装也有副作用,如果强调严格的封装,则对象的任何属性都不允许外部直接存取,因此就要增加许多没有其他意义、只负责读或写的服务,从而为编程工作增加了负担,增加了运行开销。

为了避免这一点,语言往往采取一种比较灵活的做法,即允许对象有不同程度的可见性。

继承

  继承(Inheritance)是指子类可以自动拥有父类的全部属性和服务。

  继承简化了人们对现实世界的认识和描述,在定义子类时不必重复定义那些已在父类中定义过的属性和服务,只要说明它是某个父类的子类,并定义自己特有的属性和服务即可。

  举例:

考虑轮船和客轮两个类,轮船具有吨位、时速、吃水线等属性和行驶、停泊等服务,客轮具有轮船的全部属性和服务,又有自己的特殊属性(如载客量)和服务(如供餐),因此客轮是轮船的子类,轮船是客轮的父类。

  与父类/子类等价的其他术语有一般类/特殊类、超类/子类、基类/派生类等。

  一个类可以是多个父类的子类,它从多个父类中继承了属性与服务,这称为多继承(MultipleInheritance)。

  举例:

客轮既是一种轮船,又是一种客运工具,它可以继承轮船和客运工具这两个类的属性和服务。

继承对于软件复用是十分有益的,如果将OO方法开发的类作为可复用构件,那么在开发新系统时可以直接复用这个类,还可以将其作为父类,通过继承而实现复用,从而大大扩展了复用的范围。

消息

  消息(Message)是对象发出的服务请求,一般包含提供服务的对象标识、服务标识、输入信息和应答信息等信息。

  通常,一个对象向另一个对象发出消息请求某项服务,接收消息的对象响应该消息,激发所要求的服务操作,并将操作结果返回给请求服务的对象。

  举例:

使用电视机时,用户通过按钮或遥控器发出转换频道的消息,电视机变换对电视台的接收信号频率,并将结果显示给用户。

在这里,用户发出的信息包括:

接受者--电视机;要求的服务--转换频道;输入信息--转换后的频道序号;应答信息--转换后频道的节目。

面向对象技术的封装机制使对象各自独立,各司其职,消息通信则为它们提供了唯一合法的动态联系途径,使它们的行为能够相互配合,构成一个有机的运动的系统。

结构与连接

  任何事物之间都不是互相孤立,而是彼此联系的,并因此构成一个有机的整体。

对象之间常见的联系包括:

  *分类关系,即一般与特殊结构;

  *组成关系,即整体与部分结构;

  *对象属性之间的静态联系,即实例连接;

  *对象行为之间的动态联系,即消息连接。

(1)一般与特殊结构

图4.1一般与特殊结构

  又称分类结构(classificationstructure),它是由一组具有一般与特殊关系(即继承关系)的类所组成的结构。

其中,由一些单继承关系的类形成的结构称为层次结构,由一些多继承关系的类形成的结构称为网格结构,图4.1显示了一般与特殊的结构。

(2)整体与部分结构

  又称组装结构(compositionstructure),它描述对象之间的组成关系,即一个(或一些)对象是另一个对象的组成或部分。

例如,大学中的系由办公室、实验室、资料室等组成,"办公室"、"实验室"、"资料室"对象类与"系"对象类之间是部分与整体的关系。

(3)实例连接

  实例连接反映对象之间的静态联系,它是通过对象的属性来表现对象之间的依赖关系。

在面向对象的术语中,对象之间的实例连接被称为链接(Link),而存在实例连接的对象类之间的联系称为"关联"(Association)。

  例如,"教师"与"学生"是独立的两个类,它们之间存在"教学"联系,这种联系是通过类中的"教学课程"、"时间"、"地点"等属性建立起来的。

(4)消息连接

  消息连接描述了对象之间的动态联系,即如果一个对象在执行自己的服务时,需要通过消息请求另一个对象为它完成某个服务,那么就说第一个对象与第二个对象之间存在着消息连接。

消息连接是有向的,从消息发送者指向消息接收者。

  一般与特殊结构、整体与部分结构、实例连接和消息连接都是面向对象的分析和设计阶段必须考虑的重要概念,只有在分析和设计阶段认清问题域中的这些结构与连接关系,编程时才能准确而有效地反映问题域。

多态性

  多态性(Polymorphism)是指在父类中定义的属性或服务被子类继承后,可以具有不同的数据类型或表现出不同的行为。

  在体现一般与特殊关系的一个类层次结构中,不同层次的类可以共享一个操作,但却有各自不同的实现。

当一个对象接收到一个请求时,它根据其所属的类,动态地选用在该类中定义的操作。

  举例:

在父类"几何图形"中定义了一个服务"绘图",但并不确定执行时绘制一个什么图形。

子类"椭圆"和"多边形"都继承了几何图形类的绘图服务,但其功能却不相同:

一个是画椭圆,一个是画多边形。

当系统的其他部分请求绘制一个几何图形时,消息中的服务都是"绘图",但椭圆和多边形接收到该消息时却各自执行不同的绘图算法。

  多态性机制不但为软件的结构设计提供了灵活性,减少了信息冗余,明显提高了软件的可复用性和可扩充性。

多态性的实现需要OOPL提供相应的支持,与多态性实现有关的语言功能包括:

重载(overload)、动态绑定(dynamicbinding)、类属(generic)。

主动对象

  主动对象(ActiveObject)是一组属性和一组服务的封装体,其中至少有一个服务不需要接收消息就能主动执行(称为主动服务)。

  主动对象的作用是描述问题域中具有主动行为的事物以及在系统设计时识别的任务,其主动服务描述相应任务所应完成的操作。

在系统实现阶段,主动服务应该被实现为一个能并发执行的、主动的程序单位,如进程或线程。

  除了具有主动服务外,主动对象的其他方面与被动对象没有什么不同,主动对象中也可以有一些在消息的驱动下执行的一般任务。

4.1.4面向对象的软件工程方法

  面向对象的软件工程方法是面向对象方法在软件工程领域的全面运用,涉及到从面向对象分析(OOA)、面向对象设计(OOD)、面向对象编程(OOP)、面向对象测试(ObjectOrientedTesting,OOT)到面向对象软件维护(ObjectOrientedSoftwareMaintenance,OOSM)的全过程。

面向对象的分析

  面向对象的分析(OOA)就是运用面向对象的方法进行需求分析,其主要任务是分析和理解问题域,找出描述问题域和系统责任所需的类及对象,分析它们的内部构成和外部关系,建立OOA模型。

面向对象的设计

  面向对象的设计(OOD)就是根据已建立的分析模型,运用面向对象技术进行系统软件设计。

它将OOA模型直接变成OOD模型,并且补充与一些实现有关的部分,如人机界面、数据存储、任务管理等。

  OOA与OOD采用一致的表示法,使得从OOA到OOD不存在转换,只有局部的修改或调整,并增加了与实现有关的独立部分,因此,OOA与OOD之间不存在传统方法中分析与设计之间的鸿沟,成为面向对象方法的主要优势。

面向对象的编程

  面向对象的编程(OOP)就是用一种面向对象的编程语言将OOD模型中的各个成分编写成程序,从OOA→OOD→OOP的无缝连接和平滑过渡,提高了开发工作的效率和质量。

面向对象的测试

  面向对象的测试(OOT)是指对于运用OO技术开发的软件,在测试过程中继续运用OO技术进行以对象概念为中心的软件测试。

它以类作为基本测试单位,集中检查在类定义之内的属性、服务和有限的对外接口,大大减少了错误的影响范围。

面向对象的软件维护

  软件维护的最大难点在于人们对软件的理解过程中所遇到的障碍,在面向对象方法中,各阶段采用的表示是一致的,从而大大降低了理解的难度,无论是从程序中的错误追溯到问题域,还是需求的变化需要从问题域追溯到程序,整个过程都是平坦的。

另外,对象的封装性使得一个对象的修改对其他对象的影响很小,不至于牵一发而动全身。

面向对象方法的优点

  面向对象方法与传统的软件开发方法相比,具有许多显著的优点,其主要优点如下:

  

(1)按照人类的自然思维方式,面对客观世界建立软件系统模型,有利于对问题域和系统责任的理解,有利于人员交流。

  

(2)在整个开发过程中采用统一的概念和模型表示,填平了语言之间的鸿沟,使得开发活动之间平滑过渡,图4.2显示了传统的软件工程方法与面向对象方法的比较。

图4.2传统的开发方法与面向对象的开发方法

  在传统的结构化方法中,自然语言与编程语言之间存在差距,开发人员需要将自然语言表示的分析结果转换成计算机的编程语言,工作量巨大且容易出错。

在面向对象的方法中,OOA、OOD和OOP采用统一的表示方法,不存在这样的鸿沟。

  (3)对象所具有的封装性和信息隐蔽等特性,使其容易实现软件复用。

对象类可以派生出新类,类可以产生实例对象,从而实现了对象类的数据结构和操作代码的软构件的复用。

另外,面向对象程序设计语言的开发环境一般预定义了系统动态连接库,提供大量公用程序代码,避免重复编写,提高了开发效率和质量。

  (4)在面向对象的方法中,系统由对象构成,对象是一个包含属性和操作两方面的独立单元,对象之间通过消息联系。

这样的系统一旦出错,容易定位和修改,系统的可维护性好。

4.2统一建模语言UML

【本节知识点】

  软件建模的意义

  什么是UML

  UML的概念模型

  UML的应用

4.2.1软件建模的意义

  毫无疑问,高质量是软件开发努力追求的一个重要目标。

但是,软件质量受到诸多因素的混合影响,在软件工程过程中,我们面临着成本和工作量的压力,在软件产品方面,我们需要保证软件的功能、性能、有效性、容错能力、扩展性、可维护性、可移植性等等,尤其对大型复杂软件系统而言,费用超支、生产率低下和质量不高等问题常常会困绕着软件开发。

然而,造成这些难以应对的问题的主要根源在于软件的复杂性,如图4.3从技术和管理两方面显示了软件的复杂性。

可以这样说,未来20年我们面临的挑战不是成本、速度和性能,而将是复杂性的问题。

从管理角度来看,软件规模、客户要求和资金状况等对其产生直接的影响,显然,特定用户委托开发的大型软件项目的管理难度远远高于自主开发的小型软件产品。

从技术角度来看,应用第四代语言(4GL)和组件技术开发软件,以及实现交互特性等的技术复杂度较低,但是,满足体系结构、系统定制、软件复用和高性能等要求却具有很高的技术复杂度。

各种类型的软件系统分布在软件复杂度空间的不同部分,如防御武器系统和空中运输控制系统在技术和管理上均具有很高的复杂度,而小型的科学模拟系统和商业制表软件则相对简单得多。

人们在处理现实问题的过程中,对复杂问题的理解能力是有限的,因此,需要采用科学的方法降解复杂度,从而保证正确地解决问题。

建模(Modeling)是一种处理上述复杂性的有效手段,它将难以处理的复杂问题划分成若干容易解决的小问题,解决了这些小问题也就解决了复杂的难题。

建模的目的是将所要设计的结构和系统的行为融汇贯通,对系统的体系结构进行可视化和控制,化解复杂性的问题,有效地管理开发风险,从而开发出高品质的软件。

  也许人们会产生这样的疑问:

"软件已经是抽象的东西,为什么要进行软件建模?

"我们不可否认下面的事实:

  *软件系统越来越大,如WindowsNT5.0具有4千万行代码,任何个人都不可能单独管理这些代码;

  *没有参加开发的人员无法直接理解程序代码;

  *我们需要一种描述复杂系统的简单方法。

  近年来,面向对象的建模方法逐渐流行起来,对象或类成为软件系统的主要构造块,人们在问题空间或解空间中识别各种对象,并对其进行抽象化描述,从不同的视角建立模型,形成系统的不同视图。

这种方法适合于在各种问题域中建造各种规模和复杂程度的系统,为使用组件技术装配系统提供了良好的概念基础。

  在我们的日常活动中,建模已经成为一项经过验证且被广为接受的工程技术。

在建筑业,人们借助建筑模型获得对实际建筑物的印象,通过数学模型分析风力等对建筑物的影响;在制造业,人们将计算机模型和物理模型等应用于汽车和飞机的设计之中;在电影业,剧本也是一种建模的形式。

  鉴于软件所具有的复杂性,以及人们对复杂问题理解的局限性,在软件开发过程中使用共同的建模语言进行软件建模成为必要,特别是对于大型复杂系统而言。

建模可以更好地理解我们正在开发的系统,有助于根据实际需求对系统进行可视化,从而详细说明系统的结构和行为,为指导我们构造系统提供了一个模板,并对我们作出的决策进行文档化。

4.2.2什么是UML

  面向对象的建模方法始于20世纪80年代初期,大量有决定意义的思想形成于20世纪90年代中期,这期间涌现出一些重要方法,包括Booch、OMT、Shlaer-Mellor、Fusion、OOSE和Coad-Yourdon等。

  1994年10月,JimRumbaugh和GradyBooch开始共同合作,于1995年10月提出"统一方法(UnifiedMethod)"0.8版本。

随后,IvarJacobson也加入其中,同时将OOSE思想融合进来,于1996年6月发布"统一建模语言(UnifiedModelingLanguage,UML)"0.9版本。

  1997年1月,UML1.0版本被提交给OMG组织,申请作为一种标准建模语言。

在此期间,一些重要的软件开发商和系统集成商成立了一个UML伙伴组织,如DigitalEquipmentCorporation、HP、IBM、Microsoft、Oracle、Rational等,它们积极地使用UML并提出反馈意见,于1997年7月将UML的修改版(1.1版本)再次提交OMG,1997年11月,UML1.1版本正式被OMG采纳作为业界标准。

  目前,UML已经提交国际标准化组织(ISO)进行国际标准化。

图4.4UML的发展历史

UML是Booch、OOSE和OMT方法的结合,同时吸收了其他方法的思想,包括Wirfs-Brock、Ward、Cunningham、Rubin、Harel、Gamma、Meyer、Odell、Embley、Coad、Yourdon、Shlaer和Mellor等,通过统一这些先进的面向对象思想,UML成为一种定义明确的、富有表现力的、强大的、可应用于广泛的问题域的建模语言。

  统一建模语言(UnifiedModelingLanguage,UML)是一种直观化、明确化、构建和文档化软件系统产物的通用可视化建模语言,从企业信息系统到基于Web的分布式应用,甚至严格的实时嵌入式系统都适合于用UML来建模。

它是一种富有表达力的语言,可以描述开发所需要的各种视图,并以此为基础组建系统。

(1)UML是一种语言

  像任何语言一样,UML提供了用于交流的词汇表及其组词规则,说明如何创建或理解结构良好的模型,但它并没有说明在什么时候创建什么样的模型。

(2)UML是一种可视化的建模语言

  软件开发的难点在于项目参与人员之间的沟通和交流,领域专家、软件设计开发人员、客户等各自使用不同的语言交流,对系统的概念模型容易产生错误的理解。

另外,阅读程序代码虽然可以推断其含义,但无法正确地理解它,当接手别人的开发工作时,你往往由于难以理解而不得不重新实现部分程序。

  UML提供一组具有明确语义的图形符号,可以建立清晰的模型便于交流,同时所有开发人员都可以无歧

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2