收藏 分销(赏)

中软培训UML基础.pptx

上传人:可**** 文档编号:874070 上传时间:2024-04-02 格式:PPTX 页数:121 大小:3.56MB
下载 相关 举报
中软培训UML基础.pptx_第1页
第1页 / 共121页
中软培训UML基础.pptx_第2页
第2页 / 共121页
中软培训UML基础.pptx_第3页
第3页 / 共121页
中软培训UML基础.pptx_第4页
第4页 / 共121页
中软培训UML基础.pptx_第5页
第5页 / 共121页
点击查看更多>>
资源描述

1、什么是什么是UMLUML是UnifiedModelingLanguage的首字母缩写,中文通常称为统一建模语言。UML是一个通用的可视化建模语言,用于对软件进行描述、可视化处理、构造和建立软件系统制品的文档文档。UML描述了一个系统的静态结构静态结构和动态行动态行为为。UML是不是程序设计语言?UML发展简史发展简史GradyBooch是面向对象方法最早的倡导者之一,1984便在著作中提出了面向对象的基本问题。JamesRumbaugh提出了面向对象的建模技术即OMT引入了各种独立于程序设计语言的表示符号。IvarJacobson于1994年提出了面向对象软件工程的方法,即OOSE。1994年

2、10月,同在Rational公司的Booch与Rumbaugh开始致力于统一各种建模语言。1995年秋,Jacobson也加盟到这项工作中。1996年6月发布了UML0.9。1997年11月,OMG采纳UML1.1作为面向对象技术的标准建模语言。UML概念域概念域 静态结构静态结构静态结构静态结构确定有关应用、内部特性及其相互关系的关键概念。动态行为动态行为动态行为动态行为有两种方式对行为建模:一种是根据一个对象与外界发生关系的生命历史;另一种是一系列相关对象之间当它们相互作用实现行为时的通信方式。实现构造实现构造实现构造实现构造UML除了可以用于逻辑分析外,还可以用于实现,如构件图。模型组织

3、模型组织模型组织模型组织将模型组织成便于理解的层次结构,主要是指包。扩展机制扩展机制扩展机制扩展机制如构造型等。模型基本概念模型基本概念模型是用某种工具对同类或其他工具的表达方式模型从某一个建模观点出发,抓住事物最重要的方面而简化或忽略其他方面模型包含语义语义语义语义和表示法表示法表示法表示法,可以采取图形和文字等多种不同形式。语义方面用一套逻辑组件表达应用系统的含义,如类、关联、状态、用例和消息。表示方式元素携带了模型的可视化表达方式,即语义是用一种可被人直接理解的方式来表达的。UML视图视图一、静态视图一、静态视图静态视图静态视图静态视图对应用领域中的概念以及与系统实现有关的内部概念建模。

4、静态视图主要是由类类及类间相互关系类间相互关系构成,这些相互关系包括:关联、泛化和各种依赖关系,如使用和实现关系。事实上,在静态视图中,建模元素被称为类元类元,类元是类的泛化,包含其他类似类的元素。类元类元类的表示方法类的表示方法类用实线边框的矩形来表示,矩形用两条水平线分为三栏。上面一栏包含类的名称类的名称类的名称类的名称以及其他适用于整个类的特性。中间一栏包含属性表属性表属性表属性表。下面一栏包含操作表操作表操作表操作表。中间和下面栏在类符号中可隐藏。类的表示方法类的表示方法属性:可见性可见性可见性可见性 名称名称名称名称:类型类型类型类型=缺省值约束特性缺省值约束特性缺省值约束特性缺省值

5、约束特性方法:可见性可见性可见性可见性 名称名称名称名称(参数表参数表参数表参数表):):返回类型返回类型返回类型返回类型 约束特性约束特性约束特性约束特性类元关系类元关系类元之间的关系有关联、泛化、流及各种形式的依赖关系,包括实现关系和使用关系关联关系关联关系association关联关联关系描述了给定类的单独对象之间语义上的连接。二元关联二元关联是有着两个关联端点的关联,它是最常见的一种关联,用一个连接两个类符号的实线路径表示。N元关系元关系有n个端点,使用一个大菱形表示。association聚集与组合聚集与组合 聚集(聚集(聚集(聚集(aggregationaggregation)表示

6、部分与整体关系的关联,它用端点带有空菱形的线段表示,空菱形与聚集类相连接。组合(组合(组合(组合(compositioncomposition)是更强形式的关联,整体有管理部分的特有的职责,它用一个实菱形物附在组成端表示。关联类关联类如果一个关联既是类又是关联,即它是一个关联类,那么这个关联可以有它自己的属性限定符限定符如果一个关联的属性在一组相关对象中是唯一的,那么它是一个限定符限定符是用来在关联中从一组相关对象中标识出独特对象的值关联端点关联端点关联端点关联端点关联端点关联端点泛化泛化Generalization泛化反映的是一个较广泛元素和一个较特殊元素之间的类元关系实现实现realiza

7、tion实现关系将一种模型元素(如类)与另一种模型元素(如接口)连接起来,其中接口只是行为的说明而不是结构或者实现。泛化关系将在同一语义层上的元素连接起来(如,在同一抽象层),并且通常在同一模型内。实现关系将在不同语义层内的元素连接起来(如,一个分析类和一个设计类;一个接口与一个类),并且通常建立在不同的模型内。实现关系实现关系实现关系用一条带封闭空箭头的虚线来表示可以用带关键字interface的矩形表示,或用圆圈表示抽象类抽象类抽象类是不可被实例化的类,即它可以没有直接实例。抽象类或抽象操作的名字用斜体表示。关键字abstract可以放置在位于名称下面或后面的特性表中,如Accountab

8、stract。抽象类与具体类之间是泛化关系还是实现关系?依赖关系依赖关系依赖关系(dependency)是表示一个或几个模型中两个元素间关系的语句依赖关系用两个模型元素之间的虚线箭头表示。箭尾处的模型元素(客户)依赖于箭头处的模型元素(提供者)。箭头上可带有表示依赖关系种类的关键字,还可以有名称。依赖关系种类依赖关系种类对象图对象图对象是类的实例,链是关联的实例。对象图是对系统的一个快照何时使用何时使用不要试图在项目的初始阶段使用所有的符号。在项目的不同阶段应当使用不同的观点来画类图。不要为每个事件都画一个模型,应该把精力放在关键的领域。二、用例视图二、用例视图用例视图用例视图用例视图将系统划

9、分成对参与者参与者有用的需求,而交互功能部分被称作用例用例(UseCase)。本质上,用例是用户与计算机之间为达到某个目的的一次典型交互作用。用例描述了用户提出的可见需求,可大可小,并且一定对应一个具体的用户目标。参与者参与者参与者是与系统、子系统或类发生交互作用的外部用户、进程或其他系统的理想化概念。作为外部用户与系统发生交互作用,这是参与者的特征一个实际用户可能对应系统的多个参与者。不同的用户也可以只对应于一个参与者,从而代表同一参与者的不同实例。参与者可以是人、另一个计算机系统或一些可运行的进程。在图中,参与者用一个名字写在下面的小人表示。用例图用例图用例用例用例是一个连贯的功能性单元,

10、由一个用消息顺序表示的类元(系统、子系统或类)提供,这些消息与被系统执行的动作在系统和一个或多个外部用户(表现为参与者)间交换。用例的目标是要定义类元(包括一个子系统或整个系统)的一个行为,但并不显示类元的内部结构。用例是一个描述符,可以用一种非正式的文本描述。用例关系用例关系扩展关系扩展关系扩展是指扩展用例与基用例之间的关系,说明如何将扩展用例定义的行为插入基用例定义的行为序列。扩展关系有一系列扩展点名称,它们必须在基用例中出现。名称的数目必须与扩展用例中的片断数目相一致。用例的扩展点可以列在名为extensionpoints的分栏内。当用例实例的执行到达第一个扩展点引用的位置时,条件决定是

11、否执行扩展用例。扩展关系扩展关系泛化关系泛化关系一个用例(子用例)和另一个用例(父用例)之间的类元关系,描述了子用例与其他具有相同父用例的用例共享的特性。包含关系包含关系包含关系将基用例和包含用例连接在一起。关系中的包含用例不是能够独立实现的类元,而是显式地描述了插入执行基用例的用例实例中的附加行为序列。包含位置是被包含用例执行的位置。包含只执行一次,通过引用包含的基用例行为序列中的循环可以达到多次包含的效果。用例关系用例关系区别区别用例获取用例获取用例是获取需求、规划和控制项目迭代过程的基本工具。用例获取是项目初始阶段首先要做的工作,但大量的用例是在项目细化过程中产生的。获取用例首先要找出系

12、统的执行者,一旦获取了系统的执行者,就可以对每个执行者提出一些问题,然后从执行者对这些问题的答案中获取用例获取执行者获取执行者谁使用系统的主要功能(主要使用者)谁需要系统支持他们的日常工作?谁来维护、管理系统使其能正常工作(辅助使用者)?系统需要控制哪些硬件?系统需要与其他哪些系统交互?对系统产生的结果感兴趣的是哪些人或哪些事件?获取用例获取用例执行者要求系统提供哪些功能?执行者需要读、产生、删除、修改或存储系统中的信息有哪些类型?必须提醒执行者的系统事件有哪些?执行者必须提醒系统事件有哪些?怎样把这些事件表示成用例中的功能?三、状态机视图状态机视图状态机视图状态机视图通过对类对象的生存周期建

13、立模型来描述对象随时间变化的动态行为。一个状态机由两类元素组成:1、状态(state)2、转换(transition)状态机的运作是靠事件驱动的。状态要素状态要素 状态名称状态名称状态名称状态名称 子状态子状态子状态子状态:如果一个状态机具有嵌套的子结构,则它被称为组成状态。组成状态或者是互斥的子状态构成的网络(即依次活动的子状态),或者是并发子状态的集合(即并发活动的子状态)。没有子结构的状态(除去可能的内部动作)是一个简单状态。入口动作入口动作入口动作入口动作:系统进入这个状态时要做的行为,每个状态至多有一个入口动作,语法为entry/action-sequence,入口动作可以是一个序列

14、 出口动作出口动作出口动作出口动作:系统退出这个状态时要做的行为,每个状态至多有一个出口动作,语法为exit/action sequence,出口动作可以是一个序列 起始状态和终止状态:起始状态和终止状态:起始状态和终止状态:起始状态和终止状态:都是伪状态,不具备状态的以上属性,只是表明状态机的开始与终结。状态表示状态表示状态用圆角矩形表示,可能有一个或者多个可选分栏。名称分栏嵌套状态:显示组成状态本身的由附属嵌套的状态构成的状态图。内部转换分栏:表示内部活动或者动作列表,是在对象处于状态中时接收到事件而做出响应执行的,结果不改变状态。入口和出口动作也位于此栏,不能有参量或者监护条件。内部转换

15、内部转换状态种类状态种类顺序组成状态顺序组成状态并发组成状态并发组成状态结合状态结合状态结合状态可以有一个或多个进入段和一个或多个输出段。它不能有内部活动、子机器,或者具有触发器事件的输出转换。它是构建转换用的哑状态,因而不能处于“活动”的状态。结合状态可以构建源自多个片断的转换。结合状态链中只有第一个段可以有触发器事件,但每个段都可以有监护条件。其后续段必须无触发。有效的监护条件是所有单个监护条件的结合体。除非所有条件被满足,否则转换不会开始。换而言之,状态机不会停留在结合状态。历史状态历史状态历史状态是一种伪状态,说明内部组成状态在退出之后仍然记得它之前的活动子状态。转向历史状态的一个转换

16、将使前一个活动子状态再次成为活动的,并执行相应的入口动作和出口动作。浅历史状态保存并激活与历史状态在同一个嵌套层次上的状态。深历史状态记忆组成状态中更深的嵌套层次的状态。浅历史状态用带有H的小圆圈表示,深历史状态用带有H*的圆圈表示。历史状态历史状态转换转换转换表示在一个对象的生命历史中所有的状态之间可能有的路径以及在状态变化时发生的动作。转换包括源状态源状态源状态源状态、事件触发器事件触发器事件触发器事件触发器、监护条件监护条件监护条件监护条件、动作动作动作动作和目标状态目标状态目标状态目标状态,有的可以省略。转换用从一个状态(源状态)指向另一个状态(目标状态)的实线箭头表示,其上标有转换字

17、符串,转换字符串如下:转换转换转换要素转换要素源状态源状态源状态源状态:源状态是被转换所影响的状态。目标状态目标状态目标状态目标状态:目标状态是转换结束后的主动状态,它是主对象要转向的状态。事件触发器(事件触发器(事件触发器(事件触发器(Eventtrigger)Eventtrigger):事件触发器是一个事件,它被处于源状态的对象所接受后,转换只要得到监护条件的满足即可激发。监护条件(监护条件(监护条件(监护条件(guardcondition)guardcondition):在触发事件发生后,判断是否可进行转换的阀门。动作(动作(动作(动作(actionaction):):):):在转换时施

18、加的一个行为触发器事件事件是发生在时间和空间上的一点的值得注意的事情。一个事件的具体发生叫做事件的实例。触发器事件是引起转换的事件。事件可以有参数,以供转换的动作使用。分类:调用事件、改变事件、信号事件、时间事件事件事件信号事件信号事件:发送者不会等待接收者如何处理信号而是独立地做它自己的工作调用事件调用事件:调用对象要等待被调用者返回信息,与普通调用不同,调用事件中调用结束后被调用对象还继续执行改变事件改变事件:依赖于特定属性值的布尔表达式所表示的条件满足时,事件发生改变。时间事件时间事件:代表时间的流逝。监护条件监护条件监护条件是一个布尔表达式,它于一个事件的操作触发了转换时计算。监护条件

19、可以引用对象的属性值和触发事件的参数。当一个触发器事件被触发时,监护条件被赋值。如果布尔表达式的值为“真”,那么触发事件,即使转换有效。如果布尔表达式的值为“假”,则不会引起转换。监护条件只能在触发事件发生时被赋值一次。监护条件监护条件监护条件能够被拆解成一系列简单的监护条件动作动作动作是可执行的原子计算,它导致模型状态的改变和返回值。动作附属于转换,当转换被激发时动作被执行。也可以作为状态的入口动作和出口动作出现,由进入或离开状态的转换触发。所有动作都是原子的,即它们执行时完全不会被别的动作所干扰。动作要素动作要素对象集合对象集合对象集合对象集合:指明动作在哪些对象上发生。请求请求请求请求:

20、指明一个信号或声明一个操作。信号被发送到对象,操作被调用(对于具有返回值的操作,对象集合必须包含一个对象)。参量表参量表参量表参量表:当赋值的时候,参量表中的值必须与信号或操作的参数相一致。参量被作为发送或调用的一部分。循环循环循环循环:指明动作执行的次数,并指定迭代变量(可选)。动作类别动作类别 赋值动作赋值动作赋值动作赋值动作:导致一个对象或对象集合的属性值被改变。调用动作调用动作调用动作调用动作:导致一个对象或对象集合上操作的发生 创建动作创建动作创建动作创建动作:导致对象的实例化和初始化。销毁动作销毁动作销毁动作销毁动作:导致目标对象的销毁。返回动作返回动作返回动作返回动作:导致一个到

21、操作调用者的控制转换。该动作只允许在被调用使用的操作中存在。该 发送动作发送动作发送动作发送动作:导致一个信号实例被创建并初始化,同时发送到对象集合中的对象。终止动作终止动作终止动作终止动作:导致某种对象的销毁 无解释动作无解释动作无解释动作无解释动作:一种控制构造或其他构造的动作。动作表示动作表示UML没有一种固定的动作语言,它希望建模者使用一种实际的编程语言去编写动作。赋值动作target:=expression调用动作object-set.operation-name(argumentlist,)创建动作newclass-name(argumentlist,)销毁动作object.des

22、troy()返回动作returnexpressionlist,发送动作object-set.signal-name(argumentlist,)终止动作terminate无解释动作if(expression)then(action)else(action)如果需要明确区别调用与发送,关键字call和send可以作为表达式的前缀,它们是可选的。何时使用何时使用状态图适合描述跨越多个用例的单个对象的行为,而不适合描述多个对象之间的行为协作。因此,常与交互图、活动图组合使用。不需要对系统中每一个类都画出它的状态图,一般仅给出那些比较关键、比较复杂的类的状态图。状态图有助于解决用户界面或控制型的对象中

23、存在的问题。四、活动视图四、活动视图活动视图活动视图活动图是强调计算过程中顺序的和并发步骤的状态机。在活动图中状态主要是活动状态或动作状态,完成一个任务所经历活动的顺序称为控制流,控制流箭头为实线活动产生的输入或输出称为对象,对象流箭头为虚线,对象以方框表示活动图活动图泳道技术泳道技术何时使用何时使用活动图最适合支持并鼓励并行行为,但不能清晰反映动作与对象之间的关系。因此适合在下列情况下应用:1、分析用例,可以使用一张活动图描述一个用例,也可以描述多个用例。2、理解牵涉多个用例的工作流3、处理多线程应用五、交互视图交互视图与状态图和活动图不同,交互图描述一组对象的整体行为 类元角色类元角色类元

24、角色类元角色表示参与协作执行的对象的描述;关联角色关联角色关联角色关联角色表示参与协作执行的关联的描述。协作协作协作协作描述了在一定的语境中一组对象以及用以实现某些行为的这些对象间的相互作用。交互交互交互交互是协作中的一个消息集合,这些消息被类元角色通过关联角色交换。消息消息消息消息是两个对象之间的单路通信,从发送者到接收者的控制信息流。消息可以被组织成顺序的控制线程。消息序列可以用两种图来表示:顺序图顺序图顺序图顺序图(突出消息的时间顺序)和协作图协作图协作图协作图(突出交换消息的对象间的关系)。顺序图顺序图顺序图将交互关系表示为一个二维图。纵向是时间轴,时间沿竖线向下延伸。横向轴代表了在协

25、作中各独立对象的类元角色。类元角色用生命线生命线生命线生命线表示。当对象存在时,角色用一条虚线表示;当对象的过程处于激活状态时,生命线是一个双道线。消息消息消息消息用从一个对象的生命线到另一个对象生命线的箭头表示。箭头以时间顺序在图中从上到下排列。顺序图顺序图顺序图顺序图主动对象主动对象拥有一个控制线程并且能初始化控制活动,不在另一个对象的作用域内运行,用具有重边线的矩形表示。被动对象被动对象是自身不具备线程控制的对象,它的操作在主动对象内的线程控制下执行。被动对象是使用单边矩形表示的,其中的对象名称带有下划线。顺序图表示顺序图表示每个对象显示在单独的列中。对象符号(对象名带有下划线的矩形框)

26、放置在代表生成这个对象的消息的箭头的端点,其垂直位置表示这个对象第一次创建的时间。如果对象在第一个操作前就存在,则对象符号处在图的顶部。主动对象整个生命周期,被动对象被激活期间均使用双实线大X表示销毁对象,调用以实心箭头表示,返回以虚线显示。协作图协作图协作是对对象和链总体安排的一个描述,这些对象和链在语境中通过互操作完成一个行为在协作图中用类的符号(矩形)表示类元角色,关联路径(实线)表示关联角色,关联角色路径上带有消息符号。不带有消息的协作图表明交互作用发生的语境,而不表示交互。协作图协作图消息表示消息表示消息:带有标签的箭头表示。每个消息包括一个顺序号、一张可选的前任消息的表、一个可选的

27、监护条件、一个名字和参量表、可选的返回值表。消息表示消息表示 前驱前驱前驱前驱是用逗号隔开的顺序号列表,并后跟反斜线(/),表示在列表中的所有顺序号代表的消息流发送之后本消息流才能发送。顺序表达式顺序表达式顺序表达式顺序表达式是顺序项列表,之间用冒号(:)隔开。*iteration-clause迭代迭代迭代迭代condition-clause分支分支分支分支迭代代表了给定深度上的消息序列。iteration-clause可以省略(在未指定迭代条件的情况下)。condition-clause用伪代码或程序设计语言实现。UML没有说明其形式,可以为*i:=1.n。条件表示一条消息的执行取决于con

28、dition-clause是否成立。condition-clause用伪码或程序设计语言实现。UML没有说明其形式,可以为xy。消息表示消息表示消息表示消息表示流流变成流:是从一个对象状态到另一个的转换。它用带有构造型become的箭头表示,并且可以用顺序号标记表示它何时出现。构造型copy不经常出现,它表示通过拷贝另一个对象值而得到的一个对象值协作图协作图可以将对象标识成四个组:存在于整个交互作用中的对象;交互作用中创建的对象(使用约束new)在交互作用中销毁的对象(使用约束destroyed);在交互作用中创建并销毁的对象(使用约束transient)。协作图协作图六、物理视图六、物理视图

29、物理视图物理视图物理视图用以描述系统的实现。UML使用两种视图来表示实现单元:实现视图和部署视图。实现视图将系统中可重用的块包装成具有可替代性的物理单元,这些单元被称为构件。实现视图用构件及构件间的接口和依赖关系来表示设计元素(例如类)的具体实现。构件是系统高层的可重用的组成部件。部署视图表示运行时的计算资源(如计算机及它们之间的连接)的物理布置。这些运行资源被称作节点。在运行时,节点包含构件和对象。构件和对象的分配可以是静态的,它们也可以在节点间迁移。如果含有依赖关系的构件实例放置在不同节点上,部署视图可以展示出执行过程中的瓶颈。构件构件构件是指系统中的一个物理实现片断,包括软件代码(源代码

30、、二进制代码、可执行代码)或者相应成分,如脚本或命令文件。源代码构件是指实现类的源代码包;二进制代码构件是编译后代码的包,二进制代码库是一个构件;可执行构件含有可执行代码。构件有两个特征:封装了实现系统功能的代码和某些构成系统状态的对象实例。因为它们的实例含有身份和状态,我们称后者为有身份的构件。构件表示构件表示节点节点节点是表示计算资源运行时的物理对象,通常具有内存和处理能力。节点可能具有用来辨别各种资源的构造型,如CPU、设备和内存等。节点可以包含对象和构件实例。节点用带有节点名称的立方体表示。节点间的关联代表通信路径。节点也有泛化关系,将节点的一般描述与具体的特例联系起来。节点表示节点表

31、示七、模型管理视图七、模型管理视图模型管理试图模型管理试图任何大的系统都必须被分成几个小的单元,这使得人们可以一次只处理有限的信息,并且分别处理这些信息的工作组之间不会互相干扰。模型管理由包及包之间的依赖关系组成。包提供了将设计元素分组的通用的组织机制。包间依赖关系反映了包与包之间的关系。八、扩展机制八、扩展机制扩展机制扩展机制UML提供了几种扩展机制,允许建模者在不用改变基本建模语言的情况下做一些通用的扩展。扩展机制包括约束、标记值和构造型。扩展是违反UML的标准形式的,并且使用它们会导致相互影响。约束约束约束是用文字表达式表示的语义限制。每个表达式有一种隐含的解释语言,这种语言可以是正式的

32、数学符号,如集合论表示法;或是一种基于计算机的约束语言,如OCL;或是一种编程语言,如C+;或是伪代码或非正式的自然语言。标记值标记值标记值是一对字符串一个标记字符串和一个值字符串存储着有关元素的一些信息。标记值可以与任何独立元素相关,包括模型元素和表达元素。标记是建模者想要记录的一些特性的名字,而值是给定元素的特性的值。构造型构造型构造型是在一个已定义的模型元素的基础上构造的一种新的模型元素。构造型的信息内容和形式与已存在的基本模型元素相同,但是含义和使用不同。总结总结总结总结总结总结类类类关联类关联泛化与实现泛化与实现包包构件与节点构件与节点用例用例用例关系用例关系状态状态状态状态状态图状

33、态图活动图活动图顺序图顺序图协作图协作图RUP简介简介UML能够用来为系统进行面向对象建模,但是并没有指定应用UML的过程,它仅仅是一种语言,它是独立于任何过程的。如果想要成功的应用UML一个好的过程是必要的。合理的过程能够有效的测度工作进度,控制和改善工作效率。目前有很多的过程,其中能够和UML最佳结合的是RUP,该过程是提出UML的人开发的,能够与UML很好的结合。RUP简介简介RUP是RationalUnifiedProcess的简称。RUP是最佳软件开发经验的总结,它包括了软件开发中的六大经验:迭代式开发迭代式开发迭代式开发迭代式开发管理需求管理需求管理需求管理需求使用基于组件的软件体系结构使用基于组件的软件体系结构使用基于组件的软件体系结构使用基于组件的软件体系结构可视化建模可视化建模可视化建模可视化建模验证软件质量验证软件质量验证软件质量验证软件质量控制软件变更控制软件变更控制软件变更控制软件变更以上是判断是否真正实施RUP的一个重要标准。RUP软件开发生命周期软件开发生命周期

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 教育专区 > 职业教育

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服