当前位置首页 > 计算机 > UML理论/建模
搜柄,搜必应! 快速导航 | 使用教程

国产UMLMDA工具开发实践

文档格式:PPT| 89 页|大小 1.10MB|2024-12-09 发布|举报 | 版权申诉
第1页
第2页
第3页
下载文档到电脑,查找使用更方便 还剩页未读,继续阅读>>
1 / 89
此文档下载收益归作者所有 下载文档
  • 版权提示
  • 文本预览
  • 常见问题
  • 单击此处编辑母版标题样式,,单击此处编辑母版文本样式,,第二级,,第三级,,第四级,,第五级,,,*,国产UML & MDA工具开发实践,,Trufun software,,欢迎访问,,议题,,技术实践,,UML建模工具开发实践,,MDA工具开发实践,,管理和运营实践,,Trufun的实践之路,,提问,,UML建模工具开发实践,,不打无准备的仗,,系统架构,,UML建模工具开发三步曲,,UML建模工具开发高阶探讨,,未来的UML建模工具,,,不打无准备的仗,,心理准备,,竞争对手是谁?IBM、Borland,,投入不一定产出,,资金准备,,周期长,,没有终点,,投入巨大,,,,不打无准备的仗(续),,技术准备,,前沿领域:UML,MDA,XMI,CWM,MOF…,,大型工具软件开发的软件工程技术,,项目组织,,软件过程,,质量控制,,成本控制,,其他相关技术:,,语言的正反向工程,,……,,不打无准备的仗(续),,人才准备,,项目组织,,系统架构,,系统设计,,系统开发,,测试,,管理和营销,,系统架构,,,PPI,,(Plato PlugIn Interface),OpenAPI,OpenIDE,Plato,,PlugIns,Kant MDA Engineer,Java MDA,C# MDA,Document Builder,Web Publisher,……,Plato Platform,Workbench,Window Manager,View Manager,Graph Framework,UML Foundation,Plato Core Compnent,,建模工具开发三步曲,,构建完备的图形系统(Graph Framework),,构建UML对象类库(UML Foundation),,基于二者,构建UML IDE,,,第一步:构建图形系统,,什么是图形系统?即矢量绘图系统。

    这是UML建模的基础的基础成功范例:Visio.这是目前公认做的最好的图形系统参考开源代码:JGraph(Java)JGraph是一个强力的,轻量级的,具有丰富特色的,而且彻底开放源码的图形构件建议:如果要使用开源代码,建议使用BSD协议、LGPL协议或Apache相关协议代码第一步:构建图形系统(续),,要实现的功能:,,图形绘制:,,基本图形: Text, Rect, Circle, Line…,,可连接的图形:Node, Edge.,,外部图像:如bmp,wmf, emf….,,图形交互,,Undo/Redo,,Cut,Copy,Paste,,Move,Resize, Rotate…,,Text, Font, BgColor,ForeColor…,,Format: Nudge, Ordering, Align, Distribute…,,Group, UnGroup,,,第一步:构建图形系统(续),,要实现的功能:,,视图:,,Zoom out, Zoom In.,,OverView….,,图形输入输出,,复制图像到Clipboard,,保存到文件:最好是XML文件,或SVG读取文件,,打印,,其他UI支持:,,ToolBox,,Property Editor,,第二步:构建UML对象类库,,本质:MOF在编程语言上的映射。

    JMI:MOF在JAVA语言上的映射建议使用JMI接口并使用已经有的JMI实现(如NetBeans的实现)例如poseidon就将原来ArgoUML采用的nsuml类库改为NetBeans的实现第二步:构建UML对象类库(续),,特别提出的功能,,要具备高度的扩展性:因为UML从1.3,1.4一直到2.0,对象及对象关系变化非常大要充分支持UML Profile :Tag, Stereotype和其他建模工具的模型共享:要支持XMI的导入导出支持UML对象操作的还原:undo/redo,,,第三步:构建UML IDE,,将图形系统和UML对象类库完美的融合,构建一个完整的UML应用环境二者的结合架构:MVC,,将图形看作是UML对象的视图(View)将UML对象看作是图形的Model(模型)一个UML对象可以有多个视图表示第三步:构建UML IDE (续),,针对UML定制图形环境,,实现所有框图类型:Class Diagram, UseCase Diagram, StateChart Diagram…,,实现所有可见的UML对象视图:类、接口、依赖、关联、用例、角色、状态、对象…,,定制工具箱和工具生成规则:如类和类之间不可以用实现关系连接、状态图不可以绘制类…,,第三步:构建UML IDE (续),,创建UI,,作个漂亮的Splash,,创建主菜单:最好是可以merge的菜单。

    创建快捷菜单(Context Menu):不同的元素显示不同的快捷菜单创建工具栏,,创建工具箱,,创建属性编辑器,,创建其他窗口:如Output Window, Model Browser…,,UML建模工具开发高阶探讨,,高阶话题1:开放性必须有高度的开放性的原因:,,Eclipse,,Firefox,,,UML建模工具开发高阶探讨(续),,高阶话题1:开放性开放什么?,,你的UI是否可以由用户随心所欲定制?UI包括主菜单、工具栏、工具箱、窗口、快捷菜单…..,,是否支持脚本:如果对你的应用进行扩展,都要进行编译,会吓退很多人为什么BASIC语言那么受初学者欢迎,就是因为它不用编译是否公开API:是否你系统的所有必须公开的对象都已经公开?如用户通过脚本来修改一个类的名字,或者用户可以通过脚本来打开一个外部文件UML建模工具开发高阶探讨(续),,高阶话题1:开放性如何开放?,,将所有UI的定义都放在外部文件中,文件最好是易读的XML格式整理你的系统类库,公开所有必须公开的类、类的属性、方法以及详细的说明支持适合的脚本:如JavaScript,VBScript等定义插件结构UML建模工具开发高阶探讨(续),,高阶话题2:强大的插件,,现在或者将来必须具备的插件,,Web Publish:并非所有的相关人员都安装建模工具,当你向其他人来介绍你的设计时,最好的办法将模型转换为网页。

    这样,每个人都可以看到你的成果Document Builder:如果在建模的同时,就能同时构造好相关文档(如需求分析、系统设计)该多好!,,其他建模工具模型文件导入导出:如可以导入Rose的MDL文件格式UML建模工具开发高阶探讨(续),,高阶话题2:强大的插件,,现在或者将来必须具备的插件,,编程语言插件:现在的编程语言很多,但是起码可以支持常用的如Java、C#等反向工程,,模型验证,,正向工程,,其他:如J2EE的单元测试、部署等内嵌IDE:如Together(TCC,可以直接编辑、编译、调试)和其他IDE的集成:如和JBuilder的代码同步UML建模工具开发高阶探讨(续),,高阶话题2:强大的插件,,现在或者将来必须具备的插件,,数据库插件:如Rose的DataModeler当然,还是PowerDesigner的数据建模功能最强XML插件:如DTD和Schema的建模支持CVS,,…,,,,,UML建模工具开发高阶探讨(续),,高阶话题3:谁集成谁?,,UML工具集成编程工具,,编程工具集成UML工具,,,未来的UML建模工具,,手绘建模?,Ideogramic UML允许你用手建模,,,未来的UML建模工具(续),,集成、集成,,集成到编程IDE,,全程建模(和生命周期其他工具集成),,和过程集成,,和行业集成,,可执行的模型?模型虚拟机?MDA!,,,未来的UML建模工具(续),,简单的过程,,,交互设计,,智能化,,模型的重构,,工具之间的模型交换,,团队建模,,向组件迁移,,注:本节来自作者和UMLChina的think合写的”UML工具发展趋势”一文,,MDA工具开发实践,,基于那个UML IDE?,,系统架构:通用的语言生成框架,,不仅仅生成代码--验证、编译、调试、测试、部署、运行,,谁来开发所有语言的MDA?--开放,,走向未来--真正的MDA,,基于那个UML IDE?,,IDE选择要点,,是否支持UML 扩展(UML Profile)?,,是否足够开放?,,UI扩展性,,完整的支撑API,,产品是否成熟?,,,基于那个UML IDE?(续),,举例:,,Arcstyler基于Rose.,,Arcstyler基于MagicDraw,,AndroMDA基于MagicDraw,,Kant基于Plato,,,系统架构:通用的语言生成框架,,Runtime Model2,XMI,UML Model Facade,Runtime Model1,,MDA Cartridges,Java Cartridge,C# Cartridge,…,Templates(Source, Build , Unit Test, Run…),Source Code, Build File, Unit Test File, Run File,,不仅仅生成代码,,模型验证,,编译,,调试,,测试,,部署,,运行,,谁来开发所有语言的MDA?,,编程语言非常多,,每个人都可以开发自己喜欢的编程语言的MDA Cartridge,,脚本 VS 编译,,,走向未来--真正的MDA,,动作语义,,UML 2.0是否已经足够?,,模型虚拟机?,,商业建模=软件开发的全部?,,,管理和运营实践,,潜在用户:谁在或可能使用UML建模工具和MDA工具?,,目标用户:谁有可能购买UML建模工具和MDA工具?,,和竞争对手相比,你的优势和不足,,生存的问题是最大的问题。

    酒香还怕巷子深,,距离成功只差一步,,潜在用户确定,,随之UML建模工具自身功能的发展,UML在软件开发中的作用的变化:,,UML建模和代码没有关联,,UML模型可以生成代码框架,,UML建模工具可以和编程工具交互并迭代开发,,UML建模工具和编程工具集成,,UML模型虚拟机,,可有可无,必不可少最重要的,,潜在用户确定(续),,无论采用哪一个软件过程理论,其中的哪个过程不需要UML?以RUP为例,,需求:领域模型、业务模型、用例模型,,分析:分析模型,,设计:设计模型,,实现:实现模型,,测试:测试模型,,潜在用户确定(续),,结论:,,软件开发行业中技术人员几乎每个人都是UML建模工具的潜在用户,,和现在编程工具人手一套一样,不久的将来,UML建模工具也必将人手一套而MDA工具根据PSM关联的编程语言的不同,以及工具自身功能的程度,会为不同阶层、不同需求的开发人员所选用在未来,如果模型虚拟机足够的成熟,MDA工具将取代UML建模工具和编程工具成为必备工具目标用户确定,,根据市场细分原则,进行自身产品定位和市场定位,有针对性的调整产品研发策略和市场开发策略市场细分:,,高端用户:高投入高产出。

    目前不考虑IBM,Borland,,中小软件企业:高度竞争市场积极参与利润所在个人:低价产品线大学和培训机构:免费赠与和合作和竞争对手相比,你的优势和不足,优势,,本土化,,快速反应能力,,产品短小精悍,,,和竞争对手相比,你的优势和不足(续),不足,,硬件:资金、人才、管理,,品牌知名度,,前沿技术的研发投入,,产品 VS 解决方案(全生命周期管理),,生存的问题是最大的问题,,产品是否足够成熟?,,产品是否能够带来销售收入?,,销售收入能否带来财务平衡?,,销售收入能否带来盈利?,,短线?长线?,,酒香还怕巷子深,,知道你的产品而没有购买,是产品研发不够;不知道你的产品而没有购买,是产品营销不够高投入营销 VS 低成本营销,,基本的营销策略,,口碑,,网络,,共享软件,,免费,,距离成功只差一步,,产品足够好,但是由于成本的原因无法快速和有效的推广应对策略,,融资,,改进营销策略,,现在是一步,但时间的流逝会让它变成十步、百步、千步、万步……,,Trufun的实践之路,,Trufun的历史,,Trufun的产品,,Trufun Plato --UML建模工具,,Trufun Kant --MDA 工具,,Trufun 的历史,,04/1/30:注册国际域名。

    04/2/2: 开通网站04/3/15:在网站发布Trufun Plato 1.0试用版04/4/17:开通网站论坛04/6/14:发布Trufun Plato 2.004/7/14:开始建构MDA软件Trufun Kant04/11/7:发布,,05/2/27:发布基于全开放式架构的Trufun Plato 2005(V3.0)及Trufun Kant 2005(V0.0.1, MDA for Java)网站全新改版05/5/29:发布升级版Trufun Plato 2005(V3.3)及Trufun Kant 2005(V0.3, MDA for C#)05/6/1:发布Plato免费版Trufun的产品,,楚凡科技目前拥有两大品牌CASE产品:,,UML建模产品,:Trufun PlatoTrufun Plato 是专业的UML建模工具,全面支持OMG标准UML V1.4,是全球第一款中文UML建模工具,是微软推出.Net Framework以来全球第一款基于.Net的大型桌面应用程序,是为中国UML用户量身定做的全中文用户界面的优秀产品MDA产品,:Trufun KantTrufun Kant 是基于Trufun Plato的MDA工具,即中国第一个基于UML的模型驱动架构开发工具,也是是全球第一款中文MDA开发工具。

    Trufun Kant覆盖了软件开发的各个环节,使用Trufun Kant,不仅可以通过UML进行需求捕获、系统分析、系统设计,同时可以进行代码生成、编译、调试、运行、打包、部署, 以模型驱动整个软件开发,真正实现了以模型为中心的软件开发新模式,从软件工具层面支持开发者创建“可执行的模型”Trufun Plato 功能介绍,,优秀的UML建模支持,,方便高效的集成环境和易用使用的用户界面,,功能强大的插件,,设计模式支持,,基于OpenIDE和OpenAPI的全开放式环境,,其他:主题、随机附带的大量建模例程、全中文联机帮助和建模指南…,,,UML建模支持--框图,,Plato支持UML1.4所有框图类型:,,Class Diagram,,UseCase Diagram,,StateChart Diagram,,Activity Diagram,,Sequence Diagram,,Collaboration Diagram,,Component Diagram,,Deployment Diagram,,UML建模支持:类图,,,UML建模支持:用例图,,,UML建模支持:状态图,,,UML建模支持:活动图,,,UML建模支持:协作图,,,UML建模支持:序列图,,,UML建模支持:部署图,,,强大的元素规格定义对话框,,,UML建模支持-UML Profile支持,,Tag扩展:用户可针对每个模型元素定义自己的Tag及Tag值,,构造型(Stereotype)扩展:,,可针对元素类型定制元素构造型,,可以指定构造型的显示图标,,可以指定构造型在框图上的显示样式,可以是外部的wmf或emf文件,,UML建模支持-构造型扩展,,,UML建模支持-XMI支持,,支持XMI格式的模型文件交互,,Trufun模型可以导出为XMI,,Trufun可以导入XMI格式的模型文件,,优秀的建模环境和用户界面,,全中文的使用界面,,美观的用户界面,类Visual S 的Dockable界面组件,强大的属性编辑器,灵活的工具箱...,,支持Cut, Copy, Paste;,,模型元素查找、定位功能。

    视图的缩放、鸟瞰脚本和代码区支持语法高亮显示优秀的建模环境和用户界面,,高效的拖放支持:可以通过拖放改变命名空间,也可以将模型从模型导航器拖放到框图上灵活全面的图形编辑功能:各种对齐方式、各种自动图形分布、图形叠放次序、图形微移另外也包括深受用户欢迎的类图自动布局功能支持打印,图像复制及图像文件导出功能;,,支持用户工作空间(Workspace)的保存和打开支持模型文件的自动备份使得Trufun Plato更加健壮、更加安全,,支持主题,预定义众多配色方案的主题,建模更加色彩缤纷!,,,优秀的建模环境和用户界面-启动页,,功能强大的插件-Rose模型导入,,可以将Rose模型转换为XMI格式,,可以读入XMI格式的模型,,功能强大的插件-数据库反向工程,通过ODBC支持所有数据库类型,,可以选择要进行反向工程的表和视图功能强大的插件-文档构造,,通过“文档构造”功能生成各种文档(如需求分析、系统分析或设计)等可以直接生成rtf格式提供各种文档模板和报表模板功能强大的插件-文档构造,,,功能强大的插件-Web Publish,,将模型发布为网页功能强大的插件-实时代码生成,,在修改模型的同时,生成选中的编程语言代码。

    支持14种常用的编程语言C#, VB.Net, J#, JScript.Net,C++.Net,C, Ansi C++, Delphi, Perl, Php, Python, Eiffel, Java, Caml等14种语言 可以直观的帮助初学者理解模型和语言的映射关系功能强大的插件-实时代码生成,,,设计模式支持,,支持24种设计模式包括所有GoF的设计模式每个模式作为工具箱的一个工具,选中工具,在框图选择插入位置,会弹出对话框,此时可对模式进行参数设置,“确定”后即可在类图上生成该模式模式支持全部采用脚本生成,用户可方便根据自己需求进行定制或添加自己的设计模式设计模式支持,,,全开放式的建模和二次开发环境,,Trufun核心由OpenIDE和OpenAPI组成OpenIDE构成界面和用户环境的基础所有用户界面和用户环境都通过OpenIDE来配置完成比如主菜单、快捷菜单、窗口、工具箱、工具栏、属性编辑器、资源、程序集OpenAPI构成建模的核心组件用户可以通过OpenAPI来操作系统对象、模型元素对象、并可以对系统行为进行扩展OpenIDE和OpenAPI由插件统一起来在Trufun看来,一切皆是插件。

    全开放式的系统-OpenIDE,,插件定义:,,插件的常规信息,:包括插件的显示名,开发者,版本等信息,显示在插件管理器列表中是否是语言插件,:语言插件如Java,非语言插件如Rose模型导入插件的接口类,:Trufun定义了许多系统事件,如果插件希望可以侦听这些事件,则必须实现插件接口如果不需要理会这些事件,则无需实现插件接口主菜单,:插件可以自行定义要显示在主菜单的菜单项菜单项可以显示在已有的菜单下,也可以自行创建新菜单快捷菜单,:菜单可以自行定义自己的快捷菜单快捷菜单是按照当前选中元素类型区分的,用户可以针对不同的元素类型来定义自己的快捷菜单比如,在Java插件中,针对类元素可以添加“新建入口操作”的快捷菜单工具栏:,插件可以定义的工具栏,也可以在已有工具栏上添加自己的工具工具箱:,在Trufun中,工具箱是根据框图类型划分的,当前框图类型不同,则工具箱也不同工具箱也可以根据用途的不同,区分为不同的工具类型,比如类图工具箱,就有常规类(画一些简单图形)和类图(绘制类、接口等类图元素)而插件可以选择在需要的框图工具箱添加自己的工具甚至自己的工具类型全开放式的系统-OpenIDE,,插件定义:,,属性编辑器扩展:,插件可以自定义在属性编辑器上显示的属性和属性的编辑。

    资源:,每个插件都可以定义自己的文本资源和图形资源,而且也可以进行国际化在Trufun中,所有资源都是.resource格式,可以方便的使用一些工具编辑、修改程序集:,如果你实现了插件接口,则需要将实现程序集(即dll)在此指定,以便系统引入此动态库UML属性定义,:所谓UML属性,实际上就是Tag-标记你可以在这里定义各种各样的Tag如果你的插件是语言插件,则模型语言设置为此语言时,所有Tag都会读进来其实,可以认为是插件自己的某些特定配置构造型定义:,如果是语言插件,你可以定义自己的构造型比如Java插件,你可以定义一个”Http Servlet”的构造型,以及该构造型在模型导航器中显示的图标,也可以指定在视图中显示的元图像文件(*.wmf或*.emf)数据类型定义,:语言插件在这里定义自己的数据类型除了数据类型之外,还可以定义自己的类库全开放式的系统-OpenAPI,,用户可以直接在脚本窗口通过OpenAPI来操作系统对象和系统行为比如:在脚本窗口输入” Application.About();”,然后运行脚本,即可看到打开了“关于”对话框最典型的使用OpenAPI开发的例子就是设计模式。

    所有设计模式都是通过脚本来调用OpenAPI实现脚本在\option\default\scripts目录下OpenAPI参考包含在Trufun Plato联机帮助中另外,OpenIDE的开发指南也已经发布,可以在网站下载Trufun Kant 功能介绍,,需求分析:用例图继承自Trufun Plato系统分析:业务流程图、类图、协作图、序列图等继承自Trufun Plato系统设计:类图、对象图、组件图、部署图继承自Trufun Plato生成源码和用户自定义源码,,编译,,单元测试,,运行,,,用Kant进行MDA(for Java)-设计,,用户可以通过反向工程将已有项目和源码导入到模型中Kant支持如下类型的Java反向工程:,,Java源文件,,Java字节码文件,,Jar(Zip),,反向工程可保留方法体,,,用Kant进行MDA(for Java)-设计,,Kant &Plato针对Java实现了Java专用的规格定义对话框下面是Java类的规格对话框:,,用Kant进行MDA(for Java)-设计,,下面是Java类属性的规格对话框,,用Kant进行MDA(for Java)-设计,,下面是Java类方法的规格对话框,,,用Kant进行MDA(for Java)-设计,,下面是Java接口的规格对话框,,,用Kant进行MDA(for Java)-生成源码,使用MDA生成源码和用实时代码插件生成源码有太多的不同:,,前者完全针对语言定制,考虑到语言的所有特性。

    而后者只是简单的映射前者生成的源码包括“用户代码保护区”,在此区域内的代码受到保护,但模型改变时再次生成代码时,保护区内代码不变而后者不支持前者生成的源码可以在Kant内直接进行编译、测试和运行后者不可以前者可以生成项目文件,如JBuilder项目文件,用JBuilder可以直接打开从而和JBuilder紧密集成用Kant进行MDA(for Java)-生成源码,在Kant中提供语法高亮显示的编辑器来打开和编辑源码,并提供资源管理器来管理源码文件用Kant进行MDA(for Java)-生成源码,在Trufun Kant中,是以构造型为识别特征来进行源码生成比如,一个普通类元素是不会被生成源码,但是,如果指定其构造型为"JavaClass",就可以对它生成Java类;而如果将其构造型指定为"TestSuite",就会对它生成一个测试类用Kant进行MDA(for Java)-生成源码,类型,构造型,说明,产生文件,Class,JavaClass,普通Java类,*.java,,ValueObject,值对象,*.java,,Enumeration,用Java类实现枚举类型,*.java,,TestSuite,单元测试类,*.java,,Applet,小应用程序,*.java,,JApplet,JFC小应用程序,*.java,,Generic Servlet,常规小服务程序,*.java,,Http Servlet,Http小服务程序,*.java,Interface,JavaInterface,普通Java接口,*.java,Model,,模型,*.jpx, *.library: Jbuilder项目文件,,*.bat,project.xml,*.properties: Ant项目文件,,用Kant进行MDA(for Java)-编译,Kant集成了JDK1.4,可以直接对生成的源码进行编译。

    编译结果显示在输出窗口编译错误信息用红色字体显示用户也可以配置自己的项目属性,配置自己编译所使用的JDK和类库用Kant进行MDA(for Java)-单元测试,Kant集成了优秀的Java单元测试工具JUnit,并提供工具箱“TestSuite”对其进行建模支持在Kant中,可以通过建模直接生成单元测试框架代码Kant还提供“测试”的运行类型,提供直接在Kant中进行单元测试的运行Kant支持单元测试和集成测试详情请查看Kant开发手册用Kant进行MDA(for Java)-运行,目前Kant可支持以下类型的Java应用运行:,,独立应用(Application),,小应用程序(Applet),,单元测试(Test),,未来版本将支持J2EE应用的部署、运行等提问,,关注楚凡科技!,,关注中国国产CASE软件的未来!,,。

    点击阅读更多内容
    最新文档
    2025年作风建设学习教育开展情况的报告范文.docx
    在2025年民营企业座谈会上的主持讲话范文.docx
    在2025年全县教育领域群众身边不正之风和腐败问题集中整治调度会上的讲话范文.docx
    工委副书记在2025年机关DeepSeek应用专题辅导培训班开班仪式上的讲话范文.docx
    在2025年DeepSeek大模型政务应用培训会上的讲话范文.docx
    在青年干部培训结业典礼上的讲话文稿.docx
    2025年副书记防汛工作会议上的讲话范文.docx
    2025年主管商务部门党组书记在理论学习中心组会上研讨发言文稿.docx
    2025年国企党委关于干部职工思想政治工作情况的报告范文.docx
    在机关单位作风建设学习教育突出问题专项整治工作部署会议上的讲话范文.docx
    医院领导2025年党风廉政建设推进会上的讲话范文.docx
    2025年关于开展“以案促改”工作实施方案供参考.docx
    在2025年安全生产专项整治暨化工行业风险防控部署会上的讲话范文.docx
    领导干部在“十五五”发展规划编制启动会上的讲话文稿.docx
    2025年书记在慰问老干部暨情况通报会上的主持讲话提纲范文.docx
    2025年作风建设实施方案文稿.docx
    在2025年DeepSeek政务应用培训会上的讲话范文.docx
    2025年领导在DeepSeek政务应用培训会上的讲话参考范文.docx
    2025年国企党委关于干部职工思想政治工作情况的报告文稿.docx
    在青年干部培养工作座谈会上的讲话范文.docx
    卖家[上传人]:jianchi2019
    资质:实名认证
    相关文档
    正为您匹配相似的精品文档