面向对象小作业.docx
- 文档编号:9540215
- 上传时间:2023-05-19
- 格式:DOCX
- 页数:12
- 大小:37.77KB
面向对象小作业.docx
《面向对象小作业.docx》由会员分享,可在线阅读,更多相关《面向对象小作业.docx(12页珍藏版)》请在冰点文库上搜索。
面向对象小作业
UML面向对象建模课程作业
姓名:
学号:
学院:
计算机科学与工程学院
班级:
硕研16-2
授课教师:
山东科技大学
2016.12
1、什么是内聚,什么是耦合?
并举例有哪些形式内聚和耦合。
内聚:
一个模块内各个元素彼此结合的紧密度,内聚性又称块内联系
耦合:
一个软件结构内不同模块之间互联程度的度量,耦合性又称块间联系
内聚性分类(从上到下由弱到强)
(1)偶然内聚。
模块中的代码无法定义其不同功能的调用。
但它使该模块能执行不同的功能,这种模块称为巧合强度模块。
(2)逻辑内聚。
这种模块把几种相关的功能组合在一起,每次被调用时,由传送给模块参数来确定该模块应完成哪一种功能
(3)时间内聚:
把需要同时执行的动作组合在一起形成的模块为时间内聚模块。
(4)过程内聚:
构件或者操作的组合方式是,允许在调用前面的构件或操作之后,马上调用后面的构件或操作,即使两者之间没有数据进行传递。
(5)通信内聚:
指模块内所有处理元素都在同一个数据结构上操作(有时称之为信息内聚),或者指各处理使用相同的输入数据或者产生相同的输出数据。
(6)顺序内聚:
指一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素输出就是下一功能元素的输入。
(7)功能内聚:
这是最强的内聚,指模块内所有元素共同完成一个功能,缺一不可。
耦合性分类(从上到下由强到弱)
(1)内容耦合(ContentCoupling)
如果发生下列情形,两个模块之间就发生了内容耦合。
1.一个模块直接访问另一个模块的内部数据;
2.一个模块不通过正常入口转到另一模块内部;
3.两个模块有一部分程序代码重叠(只可能出现在汇编语言中);
4.一个模块有多个入口。
(2)公共耦合(CommonCoupling)
若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。
公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。
(3)外部耦合(ExternalCoupling)
一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。
(4)控制耦合(ControlCoupling)
如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。
(5)印记耦合(StampCoupling)
如果一组模块通过参数表传递记录信息,就是标记耦合。
它是某一数据结构的子结构,而不是简单变量。
(6)数据耦合(DataCoupling)
如果一个模块访问另一个模块时,彼此之间是通过数据参数(不是控制参数、公共数据结构或外部变量)来交换输入、输出信息的,则称这种耦合为数据耦合。
(7)非直接耦合(NondirectCoupling)
如果两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的,这就是非直接耦合。
这种耦合的模块独立性最强。
2、软件项目失败的原因?
(1)在没有实质的数据和分析的情况下,就接受一个强制的日程安排或完成日期/里程碑日期。
组织中的某个人公开推测项目将在某一特定日期完成,这样在无意中整个团队都会致力于这一期限。
也许你的预算周期显示分配给这一项目的资金必须花费到今年年底或者下一个版本不会得到资金支持。
也许项目的利益相干人希望项目能在圣诞节前完成,知道项目已经结束他/她就可以安静地享受假期。
或者干脆就是因为利益相干人特别喜欢整数,希望项目能够在该月一号发布。
为什么一个开发团队会被设定一个主观的项目完成日期的原因五花八门。
过于狂热的计划经常导致项目人员配备过度的不幸现实是为什么软件项目失败的另一原因。
(2)添加过多的人员以实现不切实际的日程压缩。
项目经理如何处理过度乐观的项目计划?
一个常见的反应就是增加项目组成员,增加的成员经常会比完成项目所需的成员更多。
这样不仅会大幅增加项目的成本,还会降低项目质量。
让更多的人参与到项目中会增加错误传达的可能性,也会让不同部分的代码整合更具挑战。
此外,FrederickBrooks(1975)的主张“在延期项目中增加人手只会让项目更加滞后”是有一些道理的。
这些人员通常是从其他项目中调派而来。
这会让其他项目的项目计划更加滞后并且还要求新的成员能够赶上资深成员,这样整体来说生产力是下降的。
(3)未能考虑和调整需求的增长或变化并据此对计划和预算预期进行必要的调整。
“如果……不是更好么?
”这种话有时候是最可怕的,特别是在项目组建的过程中道听途说而来时。
当然,确实需要时间和场所进行头脑风暴,这些活动应该在第一阶段和第二阶段开展。
实际上,这两个阶段的目的就是要决定一个项目是否可行,以及应用应该具备哪些功能特性。
你可以如此考虑这个问题,第二阶段帮助你确定所要构建的内容,第三阶段则开始构建在第二阶段所确定的内容。
在这两个高级阶段之间存在一定的重叠,当处于阶段三时,对于一个产品发布版本来说,应该已经有了一个清晰的必要功能列表。
如果在没有增加开发时间和预算的前提下就增加功能,需求的增长就会成为问题。
实际上,这是在要求在更短的时间内完成更多的工作,这种手段早已被证明无效。
取决于其特性和时点,已有需求的变更也有可能成为问题。
只要变更发生在某一特定迭代的构建之前,使用敏捷开发方法的项目就可以处理这些明细需求的变更。
不过,对于任何会导致代码返工的软件架构方面的需求变更几乎必然会对项目的计划和预算产生影响。
(4)忽略事实和统计数据的情绪化或”全凭直觉的“利益干系人谈判。
或早或晚,我们都会与某个我们参与的具体项目紧密联系并在该项目的产出之上投入情感。
对于许多人来说,该项目可能关乎自己的声望;项目太大经不起失败,而这经常会让我们被我们的情感所控制。
当软件项目的成功或失败悬而未决导致个人的事业处于危险之中时,任何相关的业务决策很有可能都会受到影响。
压力可以让人思维混乱,特别是在赌注巨大之时。
为了给客户留下深刻的印象,某个利益相干人可能会要求一个12个月的项目计划安排,而完全不顾之前类似规模的项目报告均显示了15个月的生命周期。
利益相干人很可能会忽略项目成员的建议,并声称他“感觉”项目团队可以渡过难关。
在这种情况下,凭直觉可能是相当不利的并且有可能直接导致项目的失败。
(5)错误,但普遍认为众所周知的银弹可以独自解决项目吞吐量或过程问题。
当其他尝试都已失败时,一个常见的方法就是改变策略。
这时比较常见的想法就是“我们现在的所作所为一定是错误的”以及“我们的竞争对手在做些什么?
”也就在这时,“IT银弹”的思虑可能就会开始在办公室中蔓延。
例如,某人可能会建议组织,需要采用最新的流行开发方法。
虽然这可能会将组织引领至一个伟大的方向,但像这样的决策决不应该草草定论。
无论你的组织决定采用哪种开发方法,这也只是实现层面的变化。
仅仅是开发方法的转变并不足以完成开发操作的转换。
无论做出什么决策,为了能够成功实施,就需要各方均能接受并支持这一决策,并且需要为项目成员提供培训,而且所有人都需要为同样的标准负责。
否则,每次启动新的项目时,你的开发策略就基本相当于等待天空的星辰排列整齐,期盼奇迹发生一样。
如果没有经过深思熟虑,实现这种策略不仅存在令人难以置信的风险,同时也会减少团队成员在项目中期提供反馈的机会。
简而言之,造成软件项目失败的原因林林总总。
花点时间认真反思一下上述原因是否曾经也是导致你的组织中项目失败的元凶。
那么现在是否有了应对它的措施?
作为一个执行领导人,可以做的工作有很多,不过对开发操作提供支持仍需很大的勇气。
他们需要在合理的预期内运行。
显然,他们仍需要对自己的行为负责,因此就需要历史绩效数据作为证明他们能力的证据。
你需要从多个不同的维度搜集数据,包括项目的计划持续时间、所花费的精力、工作的范围、项目的整体质量以及所达到的生产力水平。
这种情况下,生产率指数(PI)以指数点数作为计量单位,这是一个有专利的QSM计算单位,范围从0.1到40。
它让项目之间的比较更有实际意义并且对软件开发因子作出了解释,其中包括如下变量:
管理影响、开发方法、工具、经验水平和应用程序类型的复杂度。
一旦某个组织建立了已完成项目的仓库,就可以计算定制化趋势线,用于基线创建。
这些趋势线作为参考点可用于组织内的项目比较。
项目相对于趋势线所处的位置表明了项目与平均水平的相比孰优孰劣。
这会让你对组织的当前能力有清晰的洞察。
3、面向对象设计比结构化设计优越在哪里?
(1)结构化设计方法,主张把软件系统按功能进行逐步的细分,因此也被称为面向功能的程序设计方法。
其采用自顶向下的理念,在设计阶段需要考虑每个模块应该分解成哪些子模块,每个子模块又该分解成哪些更小的子模块……以此类推,直到模块被细化为一个个函数
结构化设计方法的局限性:
1)设计不够直观,曲解了真实世界的对象性,也与人类思维的方式不一致
2)适应性差,可扩展性不强,维护成本高
(2)面向对象设计方法,基本思想是使用类、对象、继承、封装和消息概念进行程序设计。
面向对象的基本哲学是把世界抽象为各种各样具有自己运动规律和内部状态的对象,不同对象之间的相互作用和通信构成了完整的现实世界,这样构建的系统更符合现实世界的本来面目。
面向对象设计的优点:
1)与人类的思维习惯一致
2)稳定性好
3)可重用性好
4)易于开发大型的软件产品
5)可维护性好
4、用Spring框架怎么实现AOP技术?
AspectJ
1.1简介
AspectJ:
Java社区里最完整最流行的AOP框架。
在Spring2.0以上版本中,可以使用基于AspectJ注解或基于XML配置的AOP。
1.2在Spring中启用AspectJ注解支持
①导入JAR包
●.sf.cglib-2.2.0.jar
●com.springsource.org.aopalliance-1.0.0.jar
●com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
●spring-aop-4.0.0.RELEASE.jar
●spring-aspects-4.0.0.RELEASE.jar
②引入aop名称空间
③配置
aspectj-autoproxy> 当SpringIOC容器侦测到bean配置文件中的 aspectj-autoproxy>元素时,会自动为与AspectJ切面匹配的bean创建代理 1.3用AspectJ注解声明切面 ①要在Spring中声明AspectJ切面,只需要在IOC容器中将切面声明为bean实例。 ②当在SpringIOC容器中初始化AspectJ切面之后,SpringIOC容器就会为那些与AspectJ切面相匹配的bean创建代理。 ③在AspectJ注解中,切面只是一个带有@Aspect注解的Java类,它往往要包含很多通知。 ④通知是标注有某种注解的简单的Java方法。 ⑤AspectJ支持5种类型的通知注解: [1]@Before: 前置通知,在方法执行之前执行 [2]@After: 后置通知,在方法执行之后执行 [3]@AfterRunning: 返回通知,在方法返回结果之后执行 [4]@AfterThrowing: 异常通知,在方法抛出异常之后执行 [5]@Around: 环绕通知,围绕着方法执行 5、UML有几种图,每种图的作用? 举例说明。 UML的13种类型的图极其作用 1)用例图: 对系统的使用方式进行分类,即功能图 2)类图: 显示类和他们之间的相互关系 3)对象图: 只显示对象以及他们之间的相互关系 4)活动图: 显示人或对象的活动,其方式类似于流程图 5)状态机图: 显示生命周期种对象各种状态之间的转换 6)通信图: 显示在某种情形下,对象之间发送的消息 7)顺序图: 显示与通信图类似的信息,但强调的顺序而不是连接 8)包图: 显示相关的类如何组合,对开发人员有用 9)部署图: 显示安装已完成系统的机器、过程和部署制品 10)组件图: 显示可重用的组件(对象或子系统)极其接口 11)协作图: 协作图中表现了类操作中用到的参数,布局变量,操作中的永久链。 协作图强调发送和接收消息的对象之间的结构组织交互图,显示对象、对象之间的消息 12)时间图: 显示消息和消息状态的准确时间限制 13)复合结构图 6、举例说明多态的作用? (不能用上课讲的例子) 其实,继承的为重用代码而存在的理由已经越来越薄弱,因为“组合”可以很好的取代继承的扩展现有代码的功能,而且“组合”的表现更好(至少可以防止“类爆炸”)。 因此笔者个人认为,继承的存在很大程度上是作为“多态”的基础而非扩展现有代码的方式了。 什么是接口重用? 我们举一个简单的例子,假设我们有一个描述飞机的基类(ObjectPascal语言描述,下同): type plane=class public procedurefly();virtual;abstract;//起飞纯虚函数 procedureland();virtual;abstract;//着陆纯虚函数 functionmodal(): string;virtual;abstract;//查寻型号纯虚函数 end; 然后,我们从plane派生出两个子类,直升机(copter)和喷气式飞机(jet): copter=class(plane) private fModal: String; public constructorCreate(); destructorDestroy();override; procedurefly();override; procedureland();override; functionmodal(): string;override; end; jet=class(plane) private fModal: String; public constructorCreate(); destructorDestroy();override; procedurefly();override; procedureland();override; functionmodal(): string;override; end; 现在,我们要完成一个飞机控制系统,有一个全局的函数plane_fly,它负责让传递给它的飞机起飞,那么,只需要这样: procedureplane_fly(constpplane: plane); begin pplane.fly(); end; 就可以让所有传给它的飞机(plane的子类对象)正常起飞! 不管是直升机还是喷气机,甚至是现在还不存在的,以后会增加的飞碟。 因为,每个子类都已经定义了自己的起飞方式。 可以看到plane_fly函数接受参数的是plane类对象引用,而实际传递给它的都是plane的子类对象,现在回想一下开头所描述的“多态”: 多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。 很显然,parent=child;就是多态的实质! 因为直升机“是一种”飞机,喷气机也“是一种”飞机,因此,所有对飞机的操作,都可以对它们操作,此时,飞机类就作为一种接口。 多态的本质就是将子类类型的指针赋值给父类类型的指针(在OP中是引用),只要这样的赋值发生了,多态也就产生了,因为实行了“向上映射”。 7、什么是业务逻辑? 举例说明 业务逻辑是领域模型的核心,代表了应用解决领域问题所应用的流程、公共、算法、决策树、各类方法、查询等。 8、用例描述的方法。 用例图只是简单地用图描述了一下系统,但对于每个用例,我们还需要有详细的说明,这样就可以让别人对这个系统有一个更加详细的了解,这时我们就需要写用例描述。 对于用例描述的内容,一般没有硬性规定的格式,但一些必须或者重要的内容还是必须要写进用例描述里面的。 用例描述一般包括: 简要描述(说明)、前置(前提)条件、基本事件流、其他事件流、异常事件流、后置(事后)条件等等。 下面说说各个部分的意思: 简要描述: 对用例的角色、目的的简要描述; 前置条件: 执行用例之前系统必须要处于的状态,或者要满足的条件; 基本事件流: 描述该用例的基本流程,指每个流程都“正常”运作时所发生的事情,没有任何备选流和异常流,而只有最有可能发生的事件流; 其他事件流: 表示这个行为或流程是可选的或备选的,并不是总要总要执行它们; 异常事件流: 表示发生了某些非正常的事情所要执行的流程; 后置条件: 用例一旦执行后系统所处的状态; 9、举例说明用例之间< 10、Java里不允许多继承,为什么? 多继承容易出现一些冲突问题,如有两个类B和C继承自A。 假设B和C都继承了A的方法并且进行了覆盖,编写了自己的实现。 假设D通过多重继承继承了B和C,那么D应该继承B和C的重载方法,那么它应该继承哪个的呢? 是B的还是C的呢? C++中经常会掉入这个陷阱,虽然它也提出了替代的方法来解决这个问题。 我们在Java中就不会出现这个问题。 就算两个接口拥有同样的方法,实现的类只会有一个方法,这个方法由实现的类编写。 动态的加载类会让多重继承的实现变得困难。 另外,多继承也不经常被使用,我们使用Java已经很长时间了,我们有多少次因为缺少多重继承而面临困难呢? 我个人的经验是一次都没有。 因为多重继承很少有机会被用到,所以更安全的做法是去掉它而保持简单性。 就算是碰到需要多重继承的情景,我们也可以找到替代方法。 我的观点是,去掉对多重继承的支持不是Java的缺陷,对开发者来说是件好事。 11、什么是构件? 构件有什么特点? 什么叫中间件? 构件: 构件是系统中可替换的物理部分,它包装了实现而且遵从并提供一组接口的实现 规格说明: 对于构件,必须有一个它所提供服务的抽象描述。 通俗地说,每个构件都必须提供特定的服务 一个或多个实现: 构件是一种物理概念,必须被一个或多个实现所支持,当然这些实现都必需符合规格说明 受约束的构件标准: 每一个构件,在实现时必须遵从某种构件标准 封装方法: 也就是构件遵从的封装标准 部署方法: 构件要运行时,首先要部署它 中间件: 顾名思义,中间件就是处于中间的软件。 但这种不是从功能,或者特性来定义的概念,而是用位置来定义的名字,就容易被不同的人从不同角度赋予其不同的含义。 IDC曾经给中间件下的定义是中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机服务器的操作系统之上,管理计算资源和网络通信。 我国学术界一般认可的定义是中间件是指网络环境下处于操作系统、数据库等系统软件和应用软件之间的一种起连接作用的分布式软件,主要解决异构网络环境下分布式应用软件的互连与互操作问题,提供标准接口、协议,屏蔽实现细节,提高应用系统易移植性(北京大学梅宏)。 中科院软件所研究员仲萃豪形象地把中间件定义为平台+通信。 这个定义限定了只有用于分布式系统中的此类软件才能被称为中间件,同时此定义还可以把中间件与支撑软件和实用软件区分开来。 中间件处于操作系统软件与用户的应用软件的中间。 中间件在操作系统、网络和数据库之上,应用软件的下层,总的作用是为处于自己上层的应用软件提供运行与开发的环境,帮助用户灵活、高效地开发和集成复杂的应用软件。 形象地说就是上下之间的中间。 此外,中间件主要为网络分布式计算环境提供通信服务、交换服务、语义互操作服务等系统之间的协同集成服务,解决系统之间的互连互通问题。 形象地说就是所谓左右之间的中间。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 作业