Exercise Requirements

一、综合练习一

1.1 客户背景

某地理信息研究所需要开发一个轻量级的地理空间数据管理系统原型,用于内部科研项目的数据组织与基础分析。

1.2 客户需求

我们研究所经常需要处理各种类型的地理空间数据,包括点数据(比如气象站点、采样点)、线数据(比如道路、河流)和面数据(比如行政区划、土地利用斑块)。现在的问题是,这些数据分散在不同的文件中,格式也不统一,查询和分析起来很麻烦。我们希望有一个系统能够统一管理这些数据。具体来说,系统应该能够:

另外,系统要考虑扩展性,因为将来可能会增加新的数据类型或新的分析功能。对了,我们有些数据需要支持版本管理,能记录数据的修改历史。 我们主要在Linux服务器上运行程序,所以不需要图形界面,命令行操作就可以。你们能帮我们设计并实现这样一个系统的核心功能吗?

1.3 任务要求

1.3.1 概念模型设计
  1. 从客户需求中提取并整理出明确的功能需求清单(至少8项)和非功能需求清单(至少3项)。
  2. 识别系统中的核心类和它们之间的关系,绘制完整的UML类图,类图必须包含:
    1. 所有类的名称、属性和方法;
    2. 类之间的继承关系;
    3. 类之间的组合/聚合关系;
    4. 接口的定义与实现关系;
    5. 关键方法的参数和返回值类型。
  3. 撰写设计说明文档(800-1200字),解释:
    1. 如何运用继承体现“is-a”关系;
    2. 如何运用多态实现功能的灵活扩展;
    3. 如何设计接口来约束不同类的行为;
    4. 为什么这样划分类的职责。
1.3.2 系统实现
  1. 一般类实现:
    1. 设计抽象基类表示通用的地理空间对象;
    2. 合理使用纯虚函数和普通虚函数;
    3. 实现构造函数、虚析构函数
    4. 使用适当的访问控制(public/protected/private)。
  2. 继承关系体系:
    1. 实现至少3层继承关系;
    2. 派生类正确重写基类的虚函数;
    3. 合理使用构造函数初始化列表;
    4. 体现代码复用和功能扩展。
  3. 多态机制:
    1. 使用基类指针/引用操作派生类对象;
    2. 实现运行时多态;
    3. 至少实现一个函数重载示例;
    4. 展示多态带来的灵活性。
  4. 接口与抽象:
    1. 定义至少2个接口;
    2. 不同类实现相同接口展示一致性;
    3. 使用接口类型进行统一管理继承关系体系。
  5. 内存机制:
    1. 正确使用动态内存分配(new/delete);
    2. 实现深拷贝(拷贝构造函数、赋值运算符);
    3. 避免内存泄漏;
    4. 合理使用智能指针(可选加分项)。
1.3.3 测试要求
  1. 编写main函数,创建至少10个不同类型的对象;
  2. 演示以下功能:
    1. 对象的创建与属性设置;
    2. 通过基类指针调用派生类方法(多态);
    3. 使用接口进行统一操作;
    4. 空间计算功能(距离、长度、面积);
    5. 数据查询功能;
    6. 对象的复制与赋值。
  3. 提供测试输出结果截图和说明文档。
1.3.4 提交要求
  1. 3.4 提交要求
    1. 项目说明README:
    2. 编译方法
    3. 运行方法
    4. 成员分工
  2. 代码注释覆盖率>30%;
  3. 关键设计的文字说明。

二、综合练习二

2.1 客户背景

某智慧城市项目组需要构建一个地理信息服务的基础框架,为上层应用提供标准化的GIS数据访问和处理能力。

2.2 客户需求

我们正在做智慧城市项目,需要整合多个部门的地理信息数据,包括城市设施数据、环境监测数据、交通数据等。这些数据格式各异,我们希望建立一个统一的服务框架来管理它们。具体来说,系统应该能够:

另外,框架的设计要足够灵活,我们不确定将来会接入什么样的新数据源或新的设施类型,希望能够方便地扩展。 这个框架不需要用户界面,主要是给其他开发人员使用的API,所以核心是要把架构设计好。能帮我们实现这个框架的核心功能吗?

2.3 任务要求

2.3.1 概念模型设计
  1. 从客户需求中提取并整理出明确的功能需求清单(至少8项)和非功能需求清单(至少3项)。
  2. 识别系统中的核心类和它们之间的关系,绘制完整的UML类图,类图必须包含:
    1. 所有类的名称、属性和方法;
    2. 类之间的继承关系;
    3. 类之间的组合/聚合关系;
    4. 接口的定义与实现关系;
    5. 关键方法的参数和返回值类型。
  3. 撰写设计说明文档(800-1200字),解释:
    1. 如何运用继承体现“is-a”关系;
    2. 如何运用多态实现功能的灵活扩展;
    3. 如何设计接口来约束不同类的行为;
    4. 为什么这样划分类的职责。
2.3.2 系统实现
  1. 一般类实现:
    1. 设计抽象基类表示通用的地理空间对象;
    2. 合理使用抽象函数和普通函数;
    3. 合理使用final关键字;
    4. 使用适当的访问控制(public/protected/private)。
  2. 继承关系体系:
    1. 实现至少3层继承关系;
    2. 派生类正确重写基类的函数;
    3. 合理使用构造函数初始化列表;
    4. 体现代码复用和功能扩展。
  3. 多态机制:
    1. 使用基类指针/引用操作派生类对象;
    2. 实现运行时多态;
    3. 至少实现一个函数重载示例;
    4. 展示多态带来的灵活性。
  4. 接口与抽象:
    1. 定义至少2个接口;
    2. 不同类实现相同接口展示一致性;
    3. 使用接口类型进行统一管理继承关系体系。
  5. 内存机制:
    1. 正确使用动态内存分配(new/delete);
    2. 实现深拷贝(拷贝构造函数、赋值运算符);
    3. 展示多态的实际应用价值;
    4. 合理使用智能指针(可选加分项)。
2.3.3 测试要求
  1. 编写main函数,创建至少15个不同类型的对象;
  2. 演示以下功能:
    1. 对象的创建与属性设置;
    2. 通过基类指针调用派生类方法(多态);
    3. 使用接口进行统一操作;
    4. 空间计算功能(距离、长度、面积);
    5. 数据查询功能;
    6. 对象的复制与赋值。
  3. 提供测试输出结果截图和说明文档。
2.3.4 提交要求
  1. 项目说明README:
    1. 编译方法
    2. 运行方法
    3. 成员分工
  2. 代码注释覆盖率>30%;
  3. 关键设计的文字说明。