对象基础很不错的教材.ppt

上传人:tia****nde 文档编号:12793172 上传时间:2020-05-24 格式:PPT 页数:85 大小:1,008.31KB
返回 下载 相关 举报
对象基础很不错的教材.ppt_第1页
第1页 / 共85页
对象基础很不错的教材.ppt_第2页
第2页 / 共85页
对象基础很不错的教材.ppt_第3页
第3页 / 共85页
点击查看更多>>
资源描述
第五章面向对象基础,掌握面向对象的基本概念。掌握UML用例图、活动图和类图的应用。理解软件建模语言的作用。了解UML的5个视图的作用。了解UML顺序图、交互图、组件图、配置图、包图和状态图的应用。,主要内容,1.面向对象的概念2.UML语言3.视图4.用例图5.活动图6.状态图7.交互图8.顺序图9.类图10.配置图11.组件图,1.面向对象的概念,什么是对象?在现实世界中的任何有属性的单个实体或概念,都可看做对象。学生张三是一个对象,具有姓名、学号、班级等属性;一个银行账户是一个对象,具有用户名、余额等属性;一份订单也是一个对象,具有货品名、单价、数量等属性。除了描述对象的属性之外,还可以说明对象所拥有的操作。例如,打印学生的姓名、学号和班级;查询一个顾客的账户余额;打印订单的价格等等。对象的操作是对象的动态特征。软件中的对象封装了一组属性和对属性进行的操作,是对现实世界中的对象实体的抽象。,什么是类?类是具有相同属性和相同行为的对象集合。学生是一个类,其中的一名学生张三是学生类的一个实例,其属性有:姓名=张三,学号=J20080101,班级=计算机08-1:具有的操作可以是获得或设置属性值,或与其他对象用消息通信。例如,获得学生的姓名、修改班级号,向其他对象发送消息。实际上,类就是一个创建对象的模板,定义了该类所有对象的属性和方法。每个对象都属于一个类,属于某个类的一个具体对象称为该类的实例。,消息机制为了实现某个功能,对象之间通过发送消息相互通信,这可能发生在同一个类的不同对象之间,也可以在不同类的对象之间。例如,用鼠标点击屏幕对话框中的一个命令按钮时,一条消息发给了对话框对象,通知它命令按钮被按下了,它就开始执行相应的操作。一般来说,发送一条消息至少要说明接受消息的对象名、消息名(什么操作),还要对参数加以说明。,封装面向对象程序设计的特点是将属性和方法封装在一起,就是类。封装隐藏了对象内部的处理细节,内部的变化不被其他对象所知。例如电脑在不断的升级,但是机箱还是方的,里面装的CPU和内存已是今非昔比了,人们用机箱把CPU和内存封装起来,对外只提供一些标准的接口,如USB插口、网线插口和显示器插口等等,只要这些接口不变,内部怎么变,也不会影响用户的使用方式。封装的优势:便于复用,即在不同或相同的软件中重复使用已有的对象。例如,学生对象可应用在学籍信息管理系统中,也可以应用在学校图书馆信息管理系统中作为一类读者管理封装隐藏了对象内部的处理细节,内部的变化不被其他对象所知,对减少需求变更产生的影响是有效的保障。,继承性如果两个类有继承关系,子类拥有父类的所有数据和方法。被继承的类称为父类,子类可以在继承父类的基础上进行扩展,添加新属性和方法;也可以改写父类的方法,就是说方法的名称是相同的,但具体的操作可以不同。,例如,若把“学生”信息作为一个类,继承它可以生成多个子类,如“小学生”、“中学生”和“大学生”等。这些子类都具有“学生”的特性,因此“学生”类是它们的“父亲”,子类是“小学生”、“中学生”、“大学生”类,它们自动拥有“学生”类的所有属性和方法。,继承优点如下:便于复用,相同的属性和方法在父类中定义,子类直接复用程序结构清晰,维护工作量减少,例如增加“研究生”的处理需求时,只要通过添加“研究生”子类,程序员不必了解“小学生”,“中学生”等类的处理过程,代码的修改量比较结构化方法少。当父类的某个操作对子类不合适时,子类可以采用“重载”继承,既在父类的基础上修改继承。使得每个子类既兼容父类的主要属性和方法,又能够反映自己特殊的属性和方法。,多态性定义是:同一操作作用于不同类的实例,将产生不同的执行结果。例如,类Shape是任意多边形对象,它有1个方法:deaw();有3个子类Circle、Square和Triangle,分别继承Shape类的draw()方法。,classShapevoiddraw()/父类的方法draw()classCircleextendsShapevoiddraw()Systemoutprintln(”Circle)classSquareextendsShapevoiddraw()Systemoutprintln(”Square)classTriangleextendsShapevoiddraw()Systemoutprintln(Triangle”),客户端主程序:Shapes=newShape3;/3个实例s0=newCircle();/园继承父类s1=newSquare();/正方继承父类s2=newTriangle();/三角继承父类for(inti=0;i3;i+)si.draw();,该程序的执行结果为:CircleSquareTriangle,2.UML语言,Booch、Rumbaugh和Jacobson三人创建了统一建模语言UML。UML1.0(1997年1月)及UML1.1(1997月11月)。1997年11月17日,OMG(对象管理组织)采纳UML1.1作为基于面向对象技术的标准建模语言。2003年OMG组织正式通过了UML2.0标准。,注意:,UML是一种标准的图形化建模语言,它是面向对象分析与设计方法的表现手段。它:不是一种可视化的程序设计语言,而是一种可视化的建模语言;不是工具或知识库的规格说明,而是一种建模语言规格说明,是一种表示的标准;不是过程,也不是方法,但允许任何一种过程和方法使用它。,3.视图(View),从理想化的角度来说,如果有一张图画能清晰直观正确地描述系统的结构和功能,又易于理解和交流是最好的。但靠一幅图描述系统所有方面的信息是不可能的。应该从多个角度描述系统,比如业务流程、功能结构、各个部件的关系等方面,完整地描述系统用一组视图分别反映系统不同方面,每个视图描述系统的一个特征面。视图之间会有部分重叠。,视图-用例视图,用于描述系统的功能集,是从系统外部以用户角度对系统做的抽象表示。用例视图所描述的系统功能依靠于外部用户或另一个系统触发激活,为用户或另一个系统提供服务,实现与用户或另一个系统之间的交互。用例视图是其他视图的核心和基础。用例图,视图逻辑视图,逻辑视图描述用例视图中提出的系统功能的实现。与用例视图相比,逻辑视图主要关注系统内部,它既描述系统的静态结构,也描述系统内部的动态协作关系。系统的静态结构在类图和对象图中进行描述,而动态模型则在状态图、时序图、协作图以及活动图中进行描述。,视图组件视图,组件是不同类型的代码模块,它是构造应用的软件单元。组件视图描述系统的实现模块以及它们之间的依赖关系。组件视图主要由组件图构成。,视图并发视图,并发视图主要考虑资源的有效利用、代码的并行执行以及系统环境中异步事件的处理。除了将系统划分为并发执行的控制以外,并发视图还需要处理线程之间的通信和同步。并发视图由状态图、协作图、活动图组成。,视图配置视图,配置视图体现了系统的实现环境,反映系统的物理架构。例如,计算机和设备以及它们之间的连接方式。在配置视图中,计算机和设备称为结点。配置视图还包括一个映射,该映射显示在物理架构中组件是怎样分配的。例如,在各个计算机上运行的程序和对象。配置视图主要由配置图表示。,4.用例图认识用例图,用例,角色,关系,注意:图中的虚线是解释,用例图:用于描述一组用例、角色以及它们之间的关系。一个系统的用例图通常是概要地反映整个系统提供的外部可见服务和工作范围。用例图的基本元素:用例、角色和关系。进行需求分析时,通常将整个系统看作一个黑盒子,从系统外部的视点出发观察系统:它应该做什么?谁要它做?做了以后的结果送给谁?这些正是用例图要表现的。,用例,在UML中用例的符号是一个椭圆,通常以动词或短语来命名。用例是软件开发的核心元素,需求是由用例来表达的,界面是在用例的辅助下设计的,类是根据用例来发现的,测试数据是根据用例来生成的,整个开发的管理和任务分配,也是依据用例来组织的。用例简直太重要了!,角色,角色是指与系统交互的人或物。角色可以有四种类型:系统的使用者、硬件设备、外部系统和时间。系统使用者是最重要的角色,例如,在图书信息管理系统中的系统使用者有读者和图书馆的工作人员,包括采购、编目和办公室的工作人员。其他外部应用系统。硬件设备,不同的硬件设备具有不同的特性和不同的处理方式。时间作为角色,经过一定的时间触发系统中的某个事件。,关系角色与用例之间的关系,通信关系描述角色与用例之间的关系。例如,当读者还书时,图书馆工作人员启动系统的“还书”用例,进行还书处理。用例也可以启动与角色的通信,例如,还书时,如果该书有预订记录,则系统的“通知”用例启动与读者的通信,通知读者前来借书。,用例之间的关系,包含关系这是一种继承关系。包含关系用于构造多个用例共同的活动。例如,在ATM系统中,取钱、查询、更改密码等功能都需要验证用户名和密码。这种情况下应该将密码验证功能独立出来,便于复用、减少冗余。,用例之间的关系(续),扩展关系允许一个用例扩展另一个用例的功能。例如,在图书信息管理系统中,读者还书时,系统检查所还图书是否有预订记录,如果有则执行“通知”用例。在UML中扩展关系表示为箭头和extend形式。,注意,使用关系和扩展关系之间的区别,A使用B本质上是A一定使用B,同时增加自己的专属行为;而A被用例B扩展是说明A是一个一般用例,B是一个特殊用例,A在某些条件下可能使用B。,用例或角色之间的继承关系,泛化关系有时角色或用例之间存在一种继承关系。例如,客户区分为公司客户与个人客户,公司客户又区分为政府机构和私人公司,这时,描述角色之间的关系就可以用泛化关系表示。,注意,用例之间的泛化关系就像类之间的泛化关系一样,子用例继承父用例的行为和含义。例如,一个银行系统中,有一个“验证用户”用例,用于验证用户的合法性,它有两个特殊的子用例,一个是“检查密码”,另一个是“检查指纹”,它们都有父用例“验证用户”的行为,并且可以出现在父用例出现的任何地方,还可以添加自己的行为。,用例图实例,以前面图书信息管理系统为例,画出用例图。先找出参与系统地的角色:(1)读者描述:可以查询图书;预订和取消预订图书;(2)工作人员描述:帮助读者实现借书、还书、预订书、取消预订、查询操作;,接下来我们从角色入手寻找用例。主要角色“读者”通过“流通组工作人员”实现预订图书、取消预订、借书、还书等活动。由此,可以找出下面的一些用例:(1)预订图书本用例提供了预订图书的功能,读者可以通过浏览器直接从网上预订图书;图书管理员也可以根据读者的要求预订某本图书。(2)取消预订本用例提供取消预订图书的功能。(3)还书完成还书任务,在还书是要检查所还的书是否超期、是否有其他读者预订,有的话要通知预订者。(4)借书提供借阅书功能。,分析这个用例图,发现“还书”用例应该被扩展,因为在还书时检查所还图书是否有预订记录,若有,则应该通知预订者前来借书。当欲借图书已全部被借出时,应该可以转向“预订”用例。读者可以直接从网上查询、预订或取消预订图书。根据以上几点,画出初始的用例图如下:,如果读者所借图书是预订过的,那么应该怎么修改这张图?,注意,在画用例图时要特别注意:用例图是系统分析、设计和实现的一个最基础的图形,在初期是不一定要考虑太多的处理细节。一个用例内部的具体处理细节是由其他图形工具描述的,用例图只是反映系统的总体功能,以及与这些功能的相关的角色。有些人可能在画“借书”用例时,情不自禁地就考虑了“输入读者号和书号”,“检查图书是否在库?”,“图书数量减1”,“添加读者借书记录”等等,一旦考虑了这些细节,就会发现用例图画不下去了。因此,读者注意用例图中部要考虑处理细节。,5.活动图,描述从一个活动到另一个活动的控制流,用于对系统的动态特性建模。在需求分析时用活动图描述一个用例内部活动流的操作步骤、决策点、活动的执行者和活动影响的对象。,认识活动图图书馆图书信息管理系统借书活动图,活动图中的主要图形元素,泳道:活动图中的分隔线,说明谁负责执行该泳道中的活动。开始状态:活动流的开始点。表示符号为。活动:活动流可能由多个活动组成,一个活动的表示符号为椭圆。操作:一个活动可以有多个操作步骤,这些操作可能发生在进入活动时、退出活动时、活动内或特定的事件发生时。,对象:活动流影响的实体对象。活动可能会改变某个对象的状态,将活动影响的对象及其状态也标识在活动图中,使得活动图表示的信息更加完整。表示的符号为。用虚线表示哪个活动影响对象的状态。交接:是描述活动流如何从一个活动转移到下一个活动的。表示符号是活动之间的箭头线。决策:活动流中的分支判断点,在这点上根据条件判断活动流走哪个分支路径。表示符号为菱形。,同步:活动流中多个活动可以同时发生。例如,下面的图示说明活动1、活动2和活动3是同时进行的,当三个活动完成之后,进行另一个同步,也叫做连接。结束点:活动流的结束点。,并发活动,图书馆图书信息管理系统借书活动图的说明,图中有两个泳道,说明借书用例所涉及的角色有两个:读者和图书馆工作人员。读者以“借书申请”活动开始这个工作流,这个活动将读者编号和图书编号传递给图书馆工作人员,由工作人员检查“读者”类,看该“读者编号”是否存在;然后检查读者的借书数量是否已经超出限制,如果读者编号有效,并且借书数量没有超限,则检查图书是否在库中,否则,提示读者“读者无效”。如果欲借图书已经都被借出,则提示“图书已经被借出,是否预订?”,当读者确认预订后,转去执行“预订处理”。如果,库中有欲借图书,则首先检查“预订记录”,如果该读者是否已经预订了此书,则删除预订记录。修改此书在库数量,创建“借书记录”,结束借书过程。,注意:,活动图描述多个角色之间的处理非常有效,一张活动图只能有一个开始状态,但可以有多个结束状态。一个活动可以与多个实体对象相关,这里的相关指的是一种访问操作。在上面“借书”活动图中,“检查读者有效”的活动,要访问“读者”对象和“借还书记录”对象,检查“读者编号”的有效性和读者借书数量。,6.状态图,状态图用于对系统动态特征建模,主要是帮助理解反应型对象的行为变化。一个反应型对象是这样的对象,它的行为是通过对来自外部的事件作出反应来刻画的。状态图中主要描述一个对象的三种信息:1)对象的各种状态;2)引起状态变化的事件;3)每个状态改变时所发生的动作。,认识状态图,注意,读者要注意状态图与活动图的区别,活动图反映多个对象之间的交互,状态图反映一个对象的各个状态的变化。例如在图书管理信息系统中,我们可以对“读者”对象、“图书”对象的状态变化画出状态图;而对借书、还书、采购这些活动画出活动图。,状态图中的转移可以由三部分组成:事件条件/动作其中的每一部分都可以省略。事件导致对象从一个状态变换到另一个状态,但有时也可以没有事件而自动发生对象的状态转移,这时对象可能在一个状态下完成某些活动后自动转移到其它状态。括号中的条件是控制转移发生的条件,例如,上图中借书的事件发生时,能否转移到借出状态,要先检查借阅者证件是否有效,并且书库有该书,满足了这些条件后,作出库动作,图书状态到达“借出”状态。,7.交互图,在需求分析阶段,根据获得的用例图、活动图和状态图来细化系统的需求,找出系统中对象和对象之间的关系,反映对象之间关系的工具是交互图。交互图有两种:一种是按时间顺序反映对象之间相互关系的顺序图;另一种是集中反映各个对象之间通讯关系的合作图。,通过创建交互图,分析人员可以逐步理清用例内的活动顺序,明确用例活动流程中需要什么对象、对象之间相互发送什么消息、什么角色启动流、消息按什么顺序发送。开发人员看到顺序图就可以明白与一个用例相关的对象有哪些,这些对象之间的关系,以及每个对象的责任。通常一个用例可能包含多个处理流程,在分析时,每个流程最好分别画顺序图。,交互图中包含对象和消息两类元素,创建交互图的过程实际上是向对象分配责任的过程。但是,应特别注意:向合适的对象指定合适的责任。例如,一般应用程序中,窗口和窗体对象的主要责任是实现用户输入和信息浏览功能,不应加入太多的业务处理功能,否则,一旦业务逻辑发生变化,将会影响界面,界面的改动又会影响业务处理逻辑。,为了创建顺序图和合作图,首先要检查事件流,确定需要多少流程,一般创建主流程、替换流程和错误流程。在创建交互图时可以使用模式,例如检查用户的安全级别、错误处理日志、进程间通讯、数据库操作等等。把这些模式放入独立的交互图中,在需要它们的时候直接引用相应的模式,也就是说,这些模式具有可重用性。,注意,描述一个用例中的几个对象协同工作的行为,应该使用交互图;描述跨越多个用例的单个对象的行为,应当使用状态图;如果想描述跨越多个用例的对象之间的行为则应该使用活动图。,8.顺序图,顺序图是按时间顺序反映对象之间传递的消息。顺序图的顶部放置相关的对象,沿对象向下的虚线表示对象的生命线,两个对象生命线之间的横线表示对象之间传递消息,消息线的箭头形状表示消息的类型。对象也可以向自己发送消息。消息线上标注消息名,也可以加上参数并标注一些控制信息。,认识顺序图,顺序图中也可以用虚线画出返回的消息,但是为了保持画面的简洁,通常不画出返回的消息。当一个对象接收到一条消息后启动了某个活动则这个对象被激活。激活用生命线上一个细长的矩形表示。实际上激活的概念在串行的执行过程中并不是很必要,通常只在并行过程中使用激活。,简化的顺序图,合作图,合作图也是反映用例中各个对象之间消息传递的图形工具。在顺序图中,消息按时间顺序排序,而在合作图中,不反映消息的时间顺序,但更容易看出对象之间的关系。UML中提供了顺序图和合作图的相互转换,认识合作图,9.类图,面向对象方法的三个最重要的技术是用例图、类图和交互模型。无论是面向对象的分析还是面向对象的设计和实现,类图都是最核心技术。它不仅能够表现信息的结构,还能够反映系统的行为。事实上,软件开发不同时期的类图反映了不同层次上的抽象。在需求分析阶段,类图用于研究领域的概念,主要反映实体类和界面类;在设计阶段,类图描述类与类之间的接口和控制;在实现阶段,类图描述系统中类的具体实现。,类是包含信息和影响信息行为的逻辑元素。类的符号是由三个格子的长方形组成,有时下面两个格子可以省略。最顶部的格子包含类的名字,类的命名应尽量用应用领域中的术语,有明确的含义,以利于开发人员与用户的理解和交流。中间的格子说明类的属性。最下面的格子是类的操作行为。,认识类图,类的获取是一个依赖于人的创造力的过程。实践中,寻找类有两种办法:一种是从用例的描述开始,检查用例描述中的每个名词。另一种是检查时序图中的对象,研究对象具有的共同属性和操作来发现类。注意,并不是所有的类都能够从工作流和交互图中找到。,属性是与类相关联的信息,描述该类对象的共同特点。例如,“客户”类有“客户名”、“地址”、“电话”等属性。常见的属性可见性有Public、Private和Protected三种,在UML类图中分别表示为“+”、“-”和“#”,属性的类型可以是基本数据类型,例如整数、实数、布尔型、字符串型等,也可以是用户自定义的类型。一般它由所使用的程序设计语言确定。约束特性则是用户对该属性性质一个约束的说明。例如“只读”说明该属性是只读属性。,操作是与类相关的行为,用于修改、检索类的属性或执行某些动作。操作通常也被称为功能,但是它们被约束在类的内部实现,只能作用到该类的对象上。,寻找类的操作比较简单,实际上,在创建交互图时,就在寻找类的操作。在识别类的操作时,下面几个问题有助于寻找类的操作:,1)有哪些类会与该类交互,包括该类本身?2)该类接收哪些类(包括自己)发送的消息,收到消息之后进行什么处理?3)该类向哪些类发送消息,消息的内容是什么,在发送消息之前该类需要做什么处理?4)该类中需要哪些操作来维持自身属性的一致性、完整性,以及自身属性的更新?5)系统是否需要该类具有另外一些职责?,在类图中,描述类的操作分三个部分:操作名、返回类型和参数表。在UML中描述操作的信息有五个部分:可见性操作名(参数表):返回类型约束特性。,“客户”类中有“取客户地址”的操作,它在UML中表现形式如下:GetAddr(CustomerNo:String):String其中“+”表示该操作是公有操作,GetAddr是操作名,调用时需要参数“CustomerNo”,操作的返回类型也为字符串,约束特征被省略了。常见的操作可见性有Public、Private和Protected三种,在UML类图中分别表示为“+”、“-”和“#”。,类之间的关系有关联关系、组成关系、泛化关系。要寻找关系,可以检查交互图,大多数关系信息已经在交互图中列出,重温这些图,获得类之间的关系。,类之间的关系示例,类的版型可以将类进行分类,并且有助于理解每个类的责任,例如,Form版型的类负责向用户显示信息和接收用户信息,不同版型的类具有不同的职责。分析过程中,可以根据功能将类分为实体类、边界类和控制类。,边界类位于系统于外界的交界处,包括所有的窗体、报表、系统硬件接口、与其它系统的接口。,实体类实体类保存要存入永久存储体的信息。实体类通常在事件流或交互图中,是对用户最有意义的类。,控制类控制类负责协调其它类的工作。每个用例中至少应该有一个控制类,它控制用例中的事件顺序。一般地,控制类接收的消息并不多,而发出的消息比较多,因为它更多地是向其它类委托责任。,注意,不要试图使用所有的符号。从简单的开始,例如,类、关联、属性和继承等概念。在UML中,有些符号仅适用于特殊的场合,只有当需要时才使用。根据项目所处的开发阶段,用正确的观点来画类图。如果处于分析阶段,应画概念层类图;在设计阶段,应画说明层类图;当考察某个特定的实现技术时,则应画实现层类图。,10.配置图,配置图反映了系统的物理模型,表示系统运行时的处理节点以及节点中组件的配置。图书馆信息管理系统的配置图。其中办公室、采编部和借阅部的PC机上部署了本地的应用,采用C/S结构。而远程读者可以通过互联网进行图书查询、图书预订、缺书登记等操作,采用B/S结构。,认识配置图,连线上的内说明通信协议或者网络类型。节点用一个立方体表示,节点名放在左上角,其中的每个组件代表一个负责某种应用处理的软件包,配置图中显示了各个软件包在系统运行时的分布情况。,11.组件图,组件图描述组件以及它们之间的关系,用于表示系统的静态实现视图。图书馆信息管理系统的组件图。其中图书馆.java是启动该系统的组件,与借书相关的界面都被封装在借书组件中,与查询相关的界面被封装在查询组件中,其他类推。借书界面组件依赖于借书处理组件,借书处理组件依赖于数据库实体-关系类组件,其他组件的关系类似。,认识组件图,当发布一个较复杂的应用系统时,例如这个应用系统有可执行文件、数据库、其他动态链接库、资源文件、页面文件,对于分布式系统可能还会有分散到各个节点上的多个可执行组件,这时可以用组件图展示、发布组件及其组件之间的关系。例如,下图中可执行文件组件find.exe依赖于dbacs.dll和nateng.dll,而find.html组件依赖于find.exe,组件index.html依赖于find.html组件。有了这个组件图就好像得到了整个系统的联络图一样。,本章要点,结构化方法存在的主要问题:分析阶段的主要模型是数据流模型,设计阶段的主要模型是软件模块结构,数据流程图和软件模块结构图之间需要进行转换,转换有一定的随意性。功能变化就会导致软件模块结构发生变化,造成了软件结构不稳定。结构化设计将数据定义与处理数据的过程相分离,不利于软件复用。面向对象的主要概念:类是具有相同属性和相同行为的对象集合。对象是类的一个实例。对象之间通过发送消息相互通信。类封装了属性和方法,封装隐藏了对象内部的处理细节。通过继承,子类拥有父类的所有属性和方法,并可以在继承父类的基础上进行扩展,添加新属性和方法;也可以改写父类的方法。通过多态技术使同一操作作用于不同类的实例时,产生不同的执行结果。UML是一种标准的图形化建模语言,它是面向对象分析与设计方法的表现手段。其本质表现是:它是一种可视化的建模语言,不是可视化的程序设计语言,不是工具或知识库的规格说明,不是过程,也不是方法,但允许任何一种过程和方法使用它。UML提供了5种视图(用例视图、逻辑视图、组件视图、并发视图和配置视图),9种图(用例图、类图、对象图、状态图、顺序图、合作图、活动图、组件图、配置图)可以描述任何复杂的系统。,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!