软件工程中的继承与设计模式

40、指出以下继承关系中哪些是规格继承,哪些是实现继承:• 矩形类继承自多边形类。• 集合类继承自二叉树类。• 集合类继承自包类(包被定义为无序集合)。• 玩家类继承自用户类。• 窗口类继承自多边形类。

  • 规格继承
  • 矩形类继承自多边形类
  • 玩家类继承自用户类

  • 实现继承

  • 集合类继承自二叉树类
  • 集合类继承自包类
  • 窗口类继承自多边形类

41、考虑一个支持软件开发人员的工作流系统。该系统使管理人员能够根据活动和工作产品对开发人员应遵循的流程进行建模。管理人员可以为每个开发人员分配特定的流程,并为每个工作产品的交付设定截止日期。该系统支持多种类型的工作产品,包括格式化文本、图片和URL。管理人员在编辑工作流时,可以在运行时动态设置每个工作产品的类型。假设你的一个设计目标是设计该系统,以便将来可以添加更多类型的工作产品,你会使用哪种设计模式来表示工作产品?

  • 可使用策略模式。
  • 策略模式定义了一系列的算法,并将每个算法封装起来,使它们可以相互替换。
  • 在这个工作流系统中,不同类型的工作产品可看作不同的算法策略。
  • 当需要添加新的工作产品类型时,只需新增一个策略类,而无需修改现有代码,符合设计目标。

42、考虑以下设计目标。指出你会考虑用于满足每个目标的候选模式:• 对于一个遗留的银行应用程序,封装现有的业务逻辑组件。• 对于一个国际象棋程序,使未来的开发者能够用更好的算法替代决定下一步行动的规划算法。• 对于一个国际象棋程序,使监控组件能够根据对手的风格和响应时间在运行时切换规划算法。• 对于一个老鼠解迷宫的模拟程序,使路径评估组件能够独立于老鼠考虑的移动类型来评估不同的路径。

  1. 对于封装遗留银行应用程序的现有业务逻辑组件,可考虑使用 外观模式(Facade Pattern) ,它为子系统中的一组接口提供一个统一的高层接口,使得子系统更易使用。

  2. 对于让未来开发者用更好算法替代国际象棋程序中决定下一步行动的规划算法,可考虑 策略模式(Strategy Pattern) ,该模式定义了一系列的算法,并将每个算法封装起来,使它们可以相互替换。

  3. 对于让国际象棋程序的监控组件根据对手风格和响应时间在运行时切换规划算法,同样可考虑 策略模式 ,因为它允许在运行时动态改变对象的行为。

  4. 对于使老鼠解迷宫模拟程序的路径评估组件独立于老鼠移动类型评估不同路径,可考虑使用 策略模式 ,将路径评估算法封装成不同的策略,实现独立评估。

43、考虑 java.util 包中用于对象有序集合的 List 接口。为以下操作编写 OCL 形式的前置条件和后置条件:1. int size():返回列表中的元素数量。2. void add(Object e):在列表末尾添加一个对象。3. void remove(Object e):从列表中移除指定的对象。4. boolean contains(Object e):如果列表中包含该对象,则返回 true。5. Object get(int idx):返回位于索引 idx 处的对象,列表中第一个对象的索引为 0。

以下是各操作的前置条件和后置条件的 OCL 表达式:

  1. int size()
    - 前置条件:无
    - 后置条件:
    ocl context List::size() post: result = self->size()

  2. void add(Object e)
    - 前置条件:无
    - 后置条件:
    ocl context List::add(e: Object) post: self->at(self->size()) = e

  3. void remove(Object e)
    - 前置条件:
    ocl self->includes(e)
    - 后置条件:
    ocl context List::remove(e: Object) post: not self->includes(e) and self->size() = self@pre->size() - 1

  4. boolean contains(Object e)
    - 前置条件:无
    - 后置条件:
    ocl context List::contains(e: Object) post: result = self->includes(e)

  5. Object get(int idx)
    - 前置条件:
    ocl idx >= 0 and idx < self->size()
    - 后置条件:
    ocl context List::get(idx: int) post: result = self->at(idx)

44、考虑 java.util 包中的 Collection 接口,它是 List 和 Set 的父接口。为以下操作编写前置条件和后置条件,并确保符合里氏替换原则。操作包括:1. int size() 返回集合中的元素数量;2. void add(Object e) 向集合中添加一个对象;3. void remove(Object e) 从集合中移除一个对象;4. boolean contains(Object e) 如果对象在集合中则返回 true。

以下是各操作的前置条件和后置条件:

  1. int size()
    - 前置条件:无
    - 后置条件:返回值为集合中元素的数量,且值大于

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值