面向对象设计(大三上)--往年试卷题+答案

news2025/1/30 14:57:51

目录

1. UML以及相关概念

1.1 动态图&静态图

1.2 交互图

1.3 序列图

1.4 类图以及关联关系

1.4.1类图

1.4.2 关系类型

(1) 用例图中的包含、扩展关系(include & extend)

(2) 类图中的聚合、组合关系(aggragation & composition)

1.5 图对象以及职责划分 boundary/entity/control objects

2. 开发模型与方法

2.1 迭代开发&增量开发

2.2 开发流程以及风险管理 UP & XP

2.3 凝聚力与类设计 cohesion

3. 面向对象设计原则

3.1 6个主要设计原则

4. 实现策略

4.1 自顶向下&自底向上 top-down & bottom-up strategies

4.2 依赖管理

5. 设计模式

5.1 MVC模式 Model View Controller design pattern

5.2 单例模式

6. 质量评估指标

6.1 类之间的耦合性 CBO

6.2 类的响应数 RFC

6.3 类的方法权重 WMC

7. 实例分析与建模

7.1 基于已知信息去建模

(1) 已知用例描述文档,要求绘制序列图

(2) 已知类图,要求绘制序列图

7.2 场景建模

(1) 航班情景

(2) 商店情景

(3) 在线书城情景

(4) 医院情景

(5) 电影院情景

(6) 运动会场景

7.3 代码设计与分析

(1) 单例模式代码撰写

(2) 接口方法更新

(3) 依赖管理&组件构造顺序

8.在PPT中提到但没展开讲的概念

8.1 UML概念

8.1.1 UML图

8.1.1.0 UML所有图的简介

8.1.1.1 状态图 statechart diagram

8.1.1.2 部署图 deployment diagram

8.1.1.3 组件图 component diagram

8.1.2 UML五视图

8.1.3 N元关联 (N-ary Association)

8.1.4 观察者模式 (Observer Pattern)

8.2 分层架构 layered architecture

8.3 螺旋模型 spiral model

8.4 框架中的热点 hotspot

8.5 数据存储 data storage

8.6 对象标识 object identity


补充,部分题前的“【...次】”是综合出现次数。

1. UML以及相关概念

1.1 动态图&静态图

UML diagrams can be described as either dynamic or static. Explain the difference between these two types of diagrams. Name one example of each type. (5%)【22 final】

答案:Dynamic diagrams describe what happens in the object network. example: Sequence Diagram.Static diagrams describe properties the object network can have. example: Class Diagram.动态图描述系统随时间的行为,主要关注交互和过程。例如:时序图。静态图展示系统的结构,主要关注组件及其关系。例如:类图。

1.2 交互图

In modelling with UML, what is the key goal in building interaction diagrams? What models may change as a result of this process? (5%)【22 final】

答案:The purpose of an interaction diagram is to show how objects collaborate over time through method calls and information exchange. Its change will affect the resulting sequence diagram and interaction diagram.

交互图的目的是显示对象如何通过方法调用和信息交换来随时间推移进行协作。它的改变会影响到导致序列图、交互图。

1.3 序列图

单例模式的序列图

Draw 2 interaction diagrams showing a client calling the getInstance method of a singleton class. One diagram should show what happens the first time the method is called and one should show the second time the method is called. (10%)【22 final】

答案:左图展示了第一次调用时创建的instance,有图展示了第二次调用时不再创建新的而是返回同一个instance。

1.4 类图以及关联关系

1.4.1类图

【2次】Given the class diagram below showing an association class (Attempt), give an example in Java code of how these classes could be implemented. Ensure that the implementation allows the record recording of students having multiple attempts on a single module. (5%)【】

答案:Iterative development is where development is organized as a repeated completion of the development activities. Wach iteration of development process will achieve a part of the overall development or potentially refactor a part that has already been completed. Increment development organize development into phases. By adding new functionalities or improving the existing functionalities in prototype. 

迭代开发指循环完成或改进系统的部分,每次迭代完成一个新部分或重构已完成的旧部分。增量开发指将开发划分为小而可管理的prototype模块并逐步增加系统功能,每次给prototype加新功能或改进旧功能。

1.4.2 关系类型

(1) 用例图中的包含、扩展关系(include & extend)

Include关系用于表示一个用例(基用例)包含另一个用例(子用例)的行为。这种关系通常用于抽象出公共的行为,将其放入单独的用例中,然后由其他用例包含。Extend关系则表示一个用例(基用例)可以在某些条件下扩展另一个用例(扩展用例)的行为。基用例本身是完整的,即使没有扩展用例的参与也能完成其功能。

What is the includes relationship? Explain how an includes relationship defined in the use case diagram has an effect on the development of the system. (5%)【22 final】

答案:

Use case inclusion refers one use case may be performed as a part of another.

Effect: improve code reuse and modular design by identifying and extracting common behaviors early in development, ensuring the shared behavior is only developed once.

用例图中的包含关系表示可重用的功能,可被多个用例包含。

影响:通过在开发初期识别通用行为,促进代码重用和模块化设计,确保共享功能只需开发一次。

【2次】Explain the includes and extends relationships in use case modelling.(5%)【22 final & 15 final】

答案:

inclusion指用例作为其他用例的一部分来执行,通过分解并合并公共功能来避免重复。比如alter booking和delete booking都包括display booking。

extends表示在特定条件下用例的扩展可选行为,在不改变原始流的情况下增加了额外的功能。比如如果用户有优惠券,Complete Order可以扩展为Apply Discount。

(2) 类图中的聚合、组合关系(aggragation & composition)

What type of object structure is denoted by the following class diagram? Why might aggregation be more appropriate?(5%)【21 resit】

答案:

•Component is the base class. Assembly and Part are subclasses of Component.

Assembly contains Component objects, which suggests that an assembly can contain multiple components.

In composition, the lifecycle of the Component is tightly bound to the lifecycle of the Assembly. When an Assembly is destroyed, its Component objects are also destroyed. In aggregation, the Component could exist independently of the Assembly, allowing it to be shared across multiple assemblies. This means the components can exist without the whole, making aggregation more suitable if the parts can exist outside of the assembly context.

Component是基础类,Assembly和Part是它的子类。
程序集包含组件对象,这表明程序集可以包含多个组件。

在组合中,组件的生命周期与程序集的生命周期紧密相连。当一个Assembly元素被销毁时,它的Component对象也会被销毁。在聚合中,组件可以独立于程序集存在,允许它在多个程序集之间共享。这意味着组件可以在没有整体的情况下存在,如果部件可以存在于组装上下文之外,则聚合更加合适。

Describe the meaning of aggregation in UML. What are the formal properties of aggregation? (5%)

答案:

Aggregation in UML represents a "whole-part" relationship, where the part can exist independently of the whole. It's a weaker association compared to composition, where the whole class doesn't own the part. The part can exist without the whole, and multiple parts can be associated with one whole. Aggregation is denoted by a hollow diamond at the association end, and the multiplicity of parts is usually greater than one. Aggregation represents a "has-a" relationship, implying that the whole contains the part, but the part's lifecycle is independent.

Formal Properties of Aggregation:

  1. Independent Lifecycles: The part can exist without the whole.
  2. Representation: Depicted by a hollow diamond at the whole end of the association.
  3. Multiplicity: A whole can have multiple parts, but each part belongs to one whole.
  4. Non-strong Ownership: The whole doesn’t own the part, unlike in composition.

UML中的聚合表示“整体-部分”关系,其中部分可以独立于整体存在。与作文相比,这是一种较弱的联系,在作文中,整个班级并不拥有这个部分。局部可以脱离整体而存在,多个部分可以与一个整体相关联。聚合用关联端的空心菱形表示,部分的数量通常大于1。聚合表示一种“有”关系,这意味着整体包含部分,但部分的生命周期是独立的。
聚合的形式性质:
1. 独立的生命周期:部分可以脱离整体而存在。
2. 代表:在协会的整个末端用一个空心钻石来描绘。
3. 多元性:一个整体可以有多个部分,但每个部分都属于一个整体。
4. 非强所有权:整体不拥有部分,不像组成部分。

1.5 图对象以及职责划分 boundary/entity/control objects

Distinguish between boundary, control and entity objects in the context of the Unified Process. (5%)【15 final】

答案:

entity: store data (Represent core data and business logic)

boundary: handle interaction between system and external uses (Handle user interaction and system input/output.)

control: ensure interaction undergo correctly (manage the system’s logic and flow)

实体:存储数据(表示核心数据和业务逻辑)
边界:处理系统与外部用户之间的交互(处理用户交互和系统输入/输出)。
控制:确保交互正确进行(管理系统的逻辑和流程)

【2次】For each of the three class diagrams below (a, b & c), what type of class is being represented? For each explain what this tells us about the class. (5%)【21 resit & 15 final】

答案:

a: email boundary class, acting as an interface to deal with interactions between system and external uses. Under this condition, email boundary may represent an Email UI or API to handle sending and receiving emails.

b: email control class, to handle the logic flow or processing in system, ensuring interactions happen correctly. Under this condition, email control may handle email management.

c: email entity, to maintain data that closely related to system and databases. Under this condition, it may store the content and state of an email.

a:电子邮件边界类,作为处理系统和外部使用之间交互的接口。在这种情况下,email边界可以代表一个email UI或API来处理发送和接收email。

b:邮件控制类,处理系统中的逻辑流或处理,确保交互正确发生。在这种情况下,邮件控制可以处理邮件管理。

c:电子邮件实体,维护与系统和数据库密切相关的数据。在这种情况下,它可以存储电子邮件的内容和状态。

【3次】For each of the three diagrams below (a, b & c), name the type of connection between the classes. What is the difference between b and c? (5%)【16 final & 18 final & 19 final】

答案:

a: a simple association between email and body, meaning that the email class has no responsible for the lifecycle of the body class

b: email class aggregates body class, body class can exist independently of the email class, and the destruction of the email class does not result in the destruction of the body class

c: email class composites of body class, body class depends on email class, and the destruction of the email class would result body class’s destruction

2. 开发模型与方法

2.1 迭代开发&增量开发

【4次】Distinguish between Iterative development and Incremental development. (5%)【22 final】

答案:

Iterative development is where development is organized as a repeated completion of the development activities. Wach iteration of development process will achieve a part of the overall development or potentially refactor a part that has already been completed.

Increment development organize development into phases. By adding new functionalities or improving the existing functionalities in prototype.

迭代开发指循环完成或改进系统的部分,每次迭代完成一个新部分或重构已完成的旧部分。

增量开发指将开发划分为小而可管理的prototype模块并逐步增加系统功能,每次给prototype加新功能或改进旧功能。

【3次】When using modelling in an iterative process it can be difficult to maintain consistency between models and code. What causes this difficulty? Compare and contrast two possible solutions to this problem. (10%)【21 Final & 20 Final & 19 Final】

答案:

In an iterative process, maintaining consistency between models and code is challenging due to frequent changes in both. As the code evolves with each iteration, the models may become outdated or inaccurate, leading to discrepancies. This occurs because models often represent the design at a specific point in time, while the code might reflect ongoing changes.

Two solutions to this problem are model-driven development (MDD) and code generation.Both solutions aim to bridge the gap, but MDD emphasizes design consistency, while code generation focuses on reducing manual discrepancies.

• MDD focuses on keeping models as the primary source of truth, ensuring that any changes to the code are reflected in the models. However, it requires rigorous model management and frequent updates.

• Code generation uses models to automatically generate code, maintaining consistency by reducing manual changes. But this may limit flexibility and control over the final implementation.

在迭代过程中,由于模型和代码的频繁变化,维护两者之间的一致性是具有挑战性的。随着代码不断更迭,模型可能会变得过时或不准确,从而导致差异。这是因为模型通常表示特定时间点的设计,而代码可能反映正在进行的更改。
这个问题的两个解决方案是模型驱动开发(MDD)和代码生成。这两种解决方案都旨在弥合差距,但是MDD强调设计一致性,而代码生成侧重于减少手工差异。

mdd关注于保持模型作为事实的主要来源,确保对代码的任何更改都反映在模型中。然而,它需要严格的模型管理和频繁的更新。

代码生成使用模型自动生成代码,通过减少手工更改来保持一致性。但这可能会限制最终实现的灵活性和控制力。

2.2 开发流程以及风险管理 UP & XP

During the analysis workflow, what is the goal of realizing use cases? What models/diagrams are created or updated as a result of this process? (5%)【22 final】

答案:

The goal is to describe how interacting objects can perform the specified use cases, which involves identifying the classes and objects needed to achieve these interactions

Models: Domain model, Interaction diagrams (sequence diagram), Class diagram (update new attributes and operations).

目标:定义系统如何通过确定所需的交互和组件来实现用例。

模型:域模型、交互图(比如序列图)、类图(更新属性和方法函数)。

Name the five core work flows of the Unified Process (UP). (5%)【19 final】

答案:

1. Requirements: Define what the system must do.
2. Analysis: Analyze the problem domain and behavior.
3. Design: Specify the architecture and components.
4. Implementation: Convert the design into code.
5. Test: Verify functions and fix defects.

1. 需求:定义系统必须做什么。
2. 分析:分析问题域和行为。
3. 设计:指定体系结构和组件。
4. 实现:将设计转换为代码。
5. 测试:验证功能并修复缺陷。
这些工作流迭代地发生,以确保项目的稳定性和完整性。

Describe how the work flows (and the amount of time spent on each work ow) in the Unified Process change as a project moves through various iterations and phases. You should support your explanation with a diagram. (10%)【19 final】

答案:

In the Unified Process (UP), workflows evolve across 4 phases:

1. Inception: Focuses on business modeling & requirements to establish feasibility.

2. Elaboration: Emphasizes analysis & design, refining architecture while reducing risks.

3. Construction: The bulk of implementation & testing occurs, developing a functional system.

4. Transition: Concentrates on deployment & user feedback, ensuring a smooth release.

diagram:

+------------+-------------+-------------+--------------+------------+
| Workflow   | Inception   | Elaboration | Construction | Transition |
+------------+-------------+-------------+--------------+------------+
| Business   | High        | Medium      | Low          | Low        |
| Analysis   | Medium      | High        | Medium       | Low        |
| Design     | Low         | High        | Medium       | Low        |
| Impl/Test  | Low         | Medium      | High         | Medium     |
| Deploy     | None        | Low         | Medium       | High       |
+------------+-------------+-------------+--------------+------------+

【2次】Name the 5 core values of eXtreme Programming (XP). (5%)【18 final & 22 final】

答案:

1. Communication: Open communication between team members.
2. Simplicity: Focus on simple, workable solutions.
3. Feedback: Regular feedback from users and testing.
4. Courage: Take risks and make necessary changes.
5. Respect: Value the contributions of each team member.

1. 沟通:团队成员之间开放的沟通。
2. 简单:专注于简单可行的解决方案。
3. 反馈:来自用户和测试的定期反馈。
4. 勇气:敢于冒险,做出必要的改变。
5. 尊重:重视每个团队成员的贡献。
这些价值有助于指导XP实践并改进软件开发。

【3次】Discuss the importance of testing in large scale software development. In particular, contrast the approaches to testing in the waterfall model and in the unified process. Discuss one risk that the Unified Process minimises in its approach. (10%)【21 resit & 19 final 16 final】

答案:

The importance of testing: Testing can ensure the re

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2286471.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

芯片AI深度实战:进阶篇之vim内verilog实时自定义检视

本文基于Editor Integration | ast-grep,以及coc.nvim,并基于以下verilog parser(my-language.so,文末下载链接), 可以在vim中实时显示自定义的verilog 匹配。效果图如下: 需要的配置如下: 系列文章: 芯片…

几种K8s运维管理平台对比说明

目录 深入体验**结论**对比分析表格**1. 功能对比****2. 用户界面****3. 多租户支持****4. DevOps支持** 细对比分析1. **Kuboard**2. **xkube**3. **KubeSphere**4. **Dashboard****对比总结** 深入体验 KuboardxkubeKubeSphereDashboard 结论 如果您需要一个功能全面且适合…

TikTok 推出了一款 IDE,用于快速构建 AI 应用

字节跳动(TikTok 的母公司)刚刚推出了一款名为 Trae 的新集成开发环境(IDE)。 Trae 基于 Visual Studio Code(VS Code)构建,继承了这个熟悉的平台,并加入了 AI 工具,帮助开发者更快、更轻松地构建应用——有时甚至无需编写任何代码。 如果你之前使用过 Cursor AI,T…

【MySQL — 数据库增删改查操作】深入解析MySQL的 Retrieve 检索操作

Retrieve 检索 示例 1. 构造数据 创建表结构 create table exam1(id bigint, name varchar(20) comment同学姓名, Chinesedecimal(3,1) comment 语文成绩, Math decimal(3,1) comment 数学成绩, English decimal(3,1) comment 英语成绩 ); 插入测试数据 insert into ex…

强大到工业层面的软件

电脑数据删不干净,简直是一种让人抓狂的折磨!明明已经把文件扔进了回收站,清空了,可那些残留的数据就像牛皮癣一样,怎么也除不掉。这种烦恼简直无处不在,让人从头到脚都感到无比烦躁。 首先,心…

全面解析文件包含漏洞:原理、危害与防护

目录 前言 漏洞介绍 漏洞原理 产生条件 攻击方式 造成的影响 经典漏洞介绍 防御措施 结语 前言 在当今复杂的网络安全环境中,文件包含漏洞就像潜藏在暗处的危险陷阱,随时可能对防护薄弱的 Web 应用发起致命攻击。随着互联网的迅猛发展&#xff…

基于Django的Boss直聘IT岗位可视化分析系统的设计与实现

【Django】基于Django的Boss直聘IT岗位可视化分析系统的设计与实现(完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统采用Python作为主要开发语言,利用Django这一高效、安全的W…

【Rust自学】14.6. 安装二进制crate

喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 14.6.1. 从cratea.io安装二进制crate 通过cargo_install命令可以从crates.io安装二进制crate。 这并不是为了替换系统包,它应…

【Redis】hash 类型的介绍和常用命令

1. 介绍 Redis 中存储的 key-value 本身就是哈希表的结构,存储的 value 也可以是一个哈希表的结构 这里每一个 key 对应的一个 哈希类型用 field-value 来表示 2. 常用命令 命令 介绍 时间复杂度 hset key field value 用于设置哈希表 key 中字段 field 的值为…

低代码产品表单渲染架构

在React和Vue没有流行起来的时候,低代码产品的表单渲染设计通常会使用操作Dom的方式实现。 下面是一个表单的例子: 产品层 用户通过打开表单,使用不同业务场景业务下的表单页面,中间的Render层就是技术实现。 每一个不同业务的表单…

多线程-线程池的使用

1. 线程池 1.1 线程状态介绍 当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。线程对象在不同的时期有不同的状态。那么 Java 中的线程存在哪几种状态呢?Java 中的线程 状态被定义在了 java.lang.Thread.…

计算机网络 IP 网络层 2 (重置版)

IP的简介: IP 地址是互联网协议地址(Internet Protocol Address)的简称,是分配给连接到互联网的设备的唯一标识符,用于在网络中定位和通信。 IP编制的历史阶段: 1,分类的IP地址: …

Linux学习笔记——网络管理命令

一、网络基础知识 TCP/IP四层模型 以太网地址(MAC地址): 段16进制数据 IP地址: 子网掩码: 二、接口管命令 ip命令:字符终端,立即生效,重启配置会丢失 nmcli命令:字符…

供应链系统设计-供应链中台系统设计(十)- 清结算中心概念片篇

综述 我们之前在供应链系统设计-中台系统设计系列(五)- 供应链中台实践概述文章中针对中台到底是什么进行了描述,对于中台的范围也进行划分,如下图所示: 关于商品中心,我们之前用4篇文章介绍了什么是商品中…

C++,STL 简介:历史、组成、优势

文章目录 引言一、STL 的历史STL 的核心组成三、STL 的核心优势四、结语进一步学习资源: 引言 C 是一门强大且灵活的编程语言,但其真正的魅力之一在于其标准库——尤其是标准模板库(Standard Template Library, STL)。STL 提供了…

OpenAI-Edge-TTS:本地化 OpenAI 兼容的文本转语音 API,免费高效!

文本转语音(TTS)技术已经成为人工智能领域的重要一环,无论是语音助手、教育内容生成,还是音频文章创作,TTS 工具都能显著提高效率。今天要为大家介绍的是 OpenAI-Edge-TTS,一款基于 Microsoft Edge 在线文本…

node 爬虫开发内存处理 zp_stoken 作为案例分析

声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 前言 主要说3种我们补环境过后如果用…

Hive:struct数据类型,内置函数(日期,字符串,类型转换,数学)

struct STRUCT(结构体)是一种复合数据类型,它允许你将多个字段组合成一个单一的值, 常用于处理嵌套数据,例如当你需要在一个表中存储有关另一个实体的信息时。你可以使用 STRUCT 函数来创建一个结构体。STRUCT 函数接受多个参数&…

冯诺依曼系统及操作系统

目录 一.冯诺依曼体系结构 二.操作系统 三.系统调用和库函数概念 一.冯诺依曼体系结构 我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系 截至目前,我们所认识的计算机,都是由一…

Scrapy如何设置iP,并实现IP重用, IP代理池重用

前置知识 1/3乐观锁 2/3 Scrapy流程(非全部) 3/3 关于付费代理 我用的"快代理", 1000个ip, 每个ip1min的有效期, 你用的时候, 把你的链接, 用户名填上去就行 设置代理IP 🔒 & 帮助文档: ①meta ②meta#proxy$ 语法: ①proxy的设置: Request对象中…