📚 Object Oriented Programming

There are 6 OOP homeworks.

第一次作业: OOP的UML建模基础

Due: 2025-09-27 closed
Upload Link: 英雄请明年再来

Exercise Requirements

  1. 设计“图书(Book)”类的UML图,需包含以下内容:
    • 属性:ISBN号(唯一标识)、书名、作者、出版年份、库存量
    • 方法:
      1. 借阅书籍(减少库存量,返回是否成功)
      2. 归还图书(增加库存量)
      3. 获取图书详情(返回所有属性的字符串)
    • 要求:标注所有属性与方法的可见性(public/private)
  2. 设计“学生(Student)”与“课程(Course)”的关联类图,需包满足以下要求:
    • 学生属性:学号、姓名、年级
    • 学生方法:选课、退课
    • 课程属性:课程号、课程名、学分
    • 课程方法:添加学生、移除学生
    • 关联关系:
      1. 一个学生可以选择多门课(最大9门)
      2. 一门课程可被多个学生选择(无上限)
  3. 设计“形状(Shape)”及其特殊类的类图,结构如下:
    • 一般类:Shape
      • 属性:颜色
      • 抽象方法:计算面积、计算周长
    • 特殊类1:Circle
      • 新增属性:半径
      • 重写父类的面积和周长计算方法
    • 特殊类2:Rectangle
      • 新增属性:长、宽
      • 重写父类的面积和周长计算方法
  4. 设计以下两个场景的类图,明确整体与部分的关系:
    • 场景 1:
      • 构成:“电脑(Computer)”与 “CPU”、“内存(Memory)”、“硬盘(HardDisk)”
      • 关系:电脑由 CPU、内存、硬盘组成,部件无法脱离电脑独立存在(组合关系)
    • 场景 2:
      • 构成:“班级(Class)” 与 “学生(Student)”
      • 关系:班级包含学生,学生可脱离班级存在(聚合关系)

第二次作业: OOP的建模思想

Due: 2025-09-30 closed
Upload Link: 英雄请明年再来

Exercise Requirements

  1. Object technology is …?
    • A. A set of principles guiding software construction.
    • B. A new theory striving to gain acceptance
    • C. A dynamic new language by Grady Booch.
    • D. Based on the principles of abstraction and modularity.
  2. A model is …?
    • A. Is not necessary when team members understand their job.
    • B. Has to be structural AND behavioral.
    • C. Is a simplification of reality.
    • D. Is an excuse for building an elaborate plan.
  3. Why do we model?
    • A. Helps to visualize a system.
    • B. Gives us a template for constructing a system.
    • C. Documents our decisions.
    • D. All of the above.
  4. The best models are connected to …?
    • A. Java-script code.
    • B. Reality.
    • C. C++.
    • D. Issues that tie it to an object-oriented developer.
  5. Which project would be least likely to require a model?
    • A.    B.
    • C.     D.
  6. Which principles of modeling are correct?
    • A. The model you create, influences how the problem is attacked.
    • B. The best kinds of models are those that let your chose your degree of details.
    • C. The best models are connected to reality.
    • D. Create models that are bult and studied separately.
  7. Which process characteristic is not essential to working with the UML?
    • A. Iterative and incremental.
    • B. Use-case driven.
    • C. Resilient.
    • D. Architecture-centric.
  8. The state of an object …?
    • A. Is defined by a “state”attribute or set of attributes.
    • B. Does not normally change over time.
    • C. Is defined by an object’s attributes and relationships.
    • D. Is the only condition in which an object may exist.
  9. The visible behavior of an object is modeled by its …?
    • A. Attributes.
    • B. Responsibilities.
    • C. Operations.
    • D. Methods.
  10. Encapsulation …?
    • A. Allows direct manipulation of things that have been encapsulated.
    • B. Is often referred to as information hiding.
    • C. Causes costly and extensive maintenance.
    • D. Causes changes to affect clients during implementation.
  11. What happens when you incorporate modularity into you plan?
    • A. It reduces something complex into manageable pieces.
    • B. It builds modules that talk to each other.
    • C. Creates systems too large to understand.
    • D. Parts of your system cannot be independently developed.
  12. A class …?
    • A. Is an encapsulation of an object.
    • B. Represents the hierarchy of an object.
    • C. Is an instance of an object.
    • D. Is an abstract definition of an object.
  13. Polymorphism can be described as ?
    • A. Hiding many different implementations behind one interface.
    • B. Inheritance.
    • C. Information placing.
    • D. Generalization
  14. What phrase best represents a generalization relationship?
    • A. Is a part of.
    • B. Is a kind of.
    • C. Is a replica of.
    • D. Is an inheritance of
  15. Which of the following would you use to organize elements into groups?
    • A. Package.
    • B. Class.
    • C. Encapsulation.
    • D. Generalization.

第三次作业:系统静态模型设计

Due: 2025-10-27 closed
Upload Link: 英雄请明年再来

Exercise Requirements

  1. 某国际酒店集团与连锁咖啡品牌联合推出跨业态积分奖励计划,客人无论在集团下属酒店入住、餐饮消费,抑或在任意合作咖啡店购买饮品、甜点,甚至参加双方共同举办的营销活动,均可按不同比例累积积分;积分可用于兑换免费住宿、房型升级、饮品券、第三方礼品或抵扣现金,支持“纯积分”与“积分+现金”两种模式;系统需区分个人会员与企业会员,并依据过去十二个月内的消费总额自动评定普通、银卡、金卡、白金四个等级,等级越高积分加速系数越大;会员可随时在线查询余额、即将过期的积分及历史交易,运营团队每周需获得积分发放与核销汇总表,财务部门每月需得到应付未付积分负债报表以便计提,合作咖啡品牌每季度需收到跨品牌积分结算清单用于资金清算;所有积分交易必须可追溯且不可物理删除,仅允许冲正,系统须通过 REST API 与现有酒店 PMS、咖啡 POS 实时交互,并在兑换时校验会员等级与库存;请据此完成面向对象静态建模,识别关键类、属性、关系与必要假设,提交类图与简要说明。

  2. 某综合性大学教务处决定升级现有的“学生第二课堂综合素质认证系统”,该系统需统一管理全校本科生在学术科研、创新创业、志愿服务、文化艺术、体育竞技五大类第二课堂活动中获得的素质学分,学生每参加一次活动便按活动级别(院系级、校级、省级、国家级)与获奖情况累积不同分值的素质学分,系统应支持学生线上申报活动记录、上传佐证材料、查看个人学分余额及年度已获学分明细,指导教师可在线审核并评定学分,院系管理员可批量导入活动成果数据并设定每项活动的学分上限,系统须根据学生前三学期累计获得的素质学分自动评定“基础合格”“良好”“优秀”三个等级并在每学期末生成预警名单推送给辅导员,教务处每学期需导出“各院系第二课堂学分分布统计表”用于教学质量评估,每年需向学校审计处提交“素质学分认定与异动明细报表”以备财务与审计核查,所有认定记录一旦确认便不可物理删除仅允许冲正,系统需通过REST API与现有教务学籍系统实时同步学生基础信息并与财务系统对接完成活动经费结算,请据此完成面向对象静态建模,识别关键类、属性、关系与必要假设,提交类图与简要说明。


第四次作业:OOP基础特性综合练习

Due: 2025-11-19 closed
Upload Link: 英雄请明年再来

Exercise Requirements

综合练习:综合运用本次课程学习到的C++与Java基本特性,实现一个路径类,并测试其基本功能。

  1. 创建一个名为 Route 的类,用于管理一系列二维点(Point)组成的路径。
  2. Route类的基本功能包括:
    1. 添加点:实现addPoint方法,向路径中添加新点;
    2. 计算路径总长度:实现getTotalLength方法,计算路径总长度;
    3. 查找最远点:实现findFarthest方法,查询距离原点(0,0)最远的点;
  3. 在main函数中完成以下测试:
    1. 创建一个Route对象;
    2. 向Route对象随机添加至少6个不同的坐标点;
    3. 计算并输出该路径的总长度;
    4. 查找并输出距离原点(0,0)最远的点。

第五次作业:OOP继承与封装综合练习

Due: 2025-12-10 closed
Upload Link: 英雄请明年再来

Exercise Requirements

一、GIS地理实体系统(C++版)

  1. 设计基类GeographicEntity,需要实现一个地理实体的基类,包含以下要素:
    • 使用访问控制符(private/protected/public)区分数据隐私性
    • 将核心不变数据设为私有,中间数据设为受保护
    • 通过虚函数定义接口规范
    • 正确使用基类指针/引用处理派生类对象
    • 构造函数需要初始化所有私有成员和受保护成员
    • 析构函数需要执行清理操作,并输出析构信息(便于追踪对象生命周期)
    • 需要考虑异常情况(如ID为空的处理)
  2. 设计派生类Point,需要实现一个点实体类继承自GeographicEntity
    • 正确调用基类构造函数(使用初始化列表)
    • 展示派生类对基类函数的重写(面积计算返回0)
  3. 设计派生类LineString,需要实现一个线实体类继承自GeographicEntity
    • 展示受保护成员的使用
    • 添加函数实现线段长度计算(可使用欧式距离)
    • 重写函数实现面积段长度计算(返回0)
    • 每次getLength都需要判断是否重新计算长度
    • 动态管理容器成员
  4. 设计派生类Polygon,需要实现一个面实体类继承自GeographicEntity
    • 展示派生类对基类函数的正确重写
    • 在构造函数中初始化面积和周长
    • 每次添加顶点后需要重新计算面积和周长
  5. 测试任务
    1. 创建测试程序main.cpp
      • 使用基类指针数组或vector<GeographicEntity*>存储不同类型的派生类对象
      • 创建3个Point对象,3个LineString对象,3个Polygon对象
      • 通过基类指针调用函数
      • 输出所有地理实体的信息(类型、坐标、计算结果等)
    2. 内存管理与对象生命周期追踪
      • 正确使用newdelete动态分配和释放对象
      • 在析构函数中输出析构信息,验证销毁顺序
      • 观察构造与析构的执行顺序,理解派生类对象的生命周期
    3. 演示派生类成员重写
      • 展示不同派生类对calculateArea()render()的不同实现
      • 调用派生类特有的成员函数(如getElevation(), getLength(), getPerimeter()
      • 验证访问控制的正确性(尝试访问私有成员应产生编译错误)

二、GIS地理实体系统(Java版)

  1. 设计基类GeographicEntity,需要实现一个地理实体的基类,包含以下要素:
    • 使用访问控制符正确区分成员可见性
    • 通过protected提供派生类需要的访问权限
    • 构造函数初始化所有私有和受保护成员
    • 自动记录对象创建时间
    • 初始化属性列表为空列表
    • 构造函数应包含参数合法性检查
  2. 设计派生类Point,需要实现一个点实体类继承自GeographicEntity
    • 使用super()调用基类构造函数
    • 展示派生类对基类函数的重写(面积计算返回0)
  3. 设计派生类LineString,需要实现一个线实体类继承自GeographicEntity
    • 使用List容器动态管理坐标点
    • 每次添加点后自动更新总长度
    • 展示受保护方法被派生类调用的场景
    • 正确实现坐标距离计算
  4. 设计派生类Polygon,需要实现一个面实体类继承自GeographicEntity
    • 展示派生类对基类方法的重写
    • 复杂的数学计算
    • 受保护方法的合理使用
    • 在构造函数和修改方法中维护数据一致性
  5. 测试任务
    1. 创建测试程序Main.java
      • 创建List<GeographicEntity>存储不同类型的派生类对象
      • 创建3个Point对象,3个LineString对象,3个Polygon对象
      • 输出所有地理实体的信息
    2. 演示继承
      • 遍历集合,调用getEntityType()calculateArea(),观察多态行为
      • 对不同类型的对象进行类型转换并调用派生类特有方法
      • 使用instanceof进行类型检查
    3. 演示派生类成员重写
      • 实现集合统计功能:计算所有实体的总面积、平均坐标等
      • 调用派生类特有的成员函数(如getElevation(), getLength(), getPerimeter()

第六次作业:综合大练习

Due: 2026-01-08 closed
Upload Link: 英雄请明年再来

Exercise Requirements

一、综合练习一

1.1 客户背景

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

1.2 客户需求

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

  • 存储不同类型的空间对象,每个对象都有基本的属性信息(ID、名称、创建时间等)和空间信息
  • 对于点要素,需要记录经纬度坐标;对于线要素,需要记录构成线的顶点序列;对于面要素,需要记录边界顶点序列
  • 能够按照不同的标准对数据进行分类管理,比如按数据类型分类(自然地物、人工地物等),按数据质量分类(高精度、中精度、低精度)
  • 支持基本的空间计算功能,比如计算点之间的距离、线的长度、面的面积
  • 能够对数据进行查询,比如按名称查询、按区域范围查询、按属性条件查询
  • 所有的空间对象都应该能够输出标准格式的文本描述,方便我们导出和记录

另外,系统要考虑扩展性,因为将来可能会增加新的数据类型或新的分析功能。对了,我们有些数据需要支持版本管理,能记录数据的修改历史。 我们主要在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 客户需求

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

  • 需要管理各种类型的POI(兴趣点)数据,包括公共服务设施(学校、医院、派出所)、商业设施(商场、餐厅)、交通设施(公交站、地铁站)等。不同类型的POI有不同的属性,比如医院有床位数,学校有学生人数,商场有营业面积
  • 每种设施都要能够对外提供标准的服务接口,比如可查询、可导出、可统计
  • 需要对数据进行分类统计,比如统计某个区域内各类设施的数量、计算设施的空间分布密度等
  • 系统要有良好的日志记录功能,记录数据的加载、查询、更新等操作

另外,框架的设计要足够灵活,我们不确定将来会接入什么样的新数据源或新的设施类型,希望能够方便地扩展。 这个框架不需要用户界面,主要是给其他开发人员使用的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. 关键设计的文字说明。

📚 Artificial Intelligence

There are 3 AI homeworks.

第一次作业: AI话题组团报告

Due: 2025-10-17 closed
Upload Link: 英雄请明年再来

Exercise Requirements

分组话题

  1. 如果AI让“工作”不再是谋生手段,现行的社会保障体系将何去何从?

  2. AIGC的著作权到底属于谁?

  3. 情感陪伴AI会重塑亲密关系吗?

  4. 未来的世界权力格局是否因为人工智能技术的普及而更加集中?

  5. 人工智能是如何抹平社会对于特定人去潜在的歧视?

  6. 我们是否需要建立人造生命的伦理规则?

  7. 自动驾驶的“电车难题”真的存在吗?

  8. 你怎么看在校学生使用人工智能完成自己的学科作业?

  9. 我们是否需要有意识的类人主体?

  10. 你怎么看人工智能可能让程序员的身份从“开发者”到“审核者”的转变?

  11. 人工智能技术正价急速社会的两性平等,还是在加剧两性偏见?

  12. 企业采用算法招聘到底是效率提升还是新型歧视?

  13. 当 AI 开始“读心”之后,神经信号直接解码语言的伦理边界在哪里?

  14. 黑箱 AI 参与的公共决策里,公民的“解释权”如何落地?


第二次作业: 个人主题报告

Due: 2025-12-26 closed
Upload Link: 英雄请明年再来

Exercise Requirements

同学们根据个人兴趣自主选择题目,收集资料,完成课堂报告。 要求所报告内容与“GIS”与“AI”两个关键词相关。


大作业: 个人主题报告

Due: 2026-01-08 closed
Upload Link: 英雄请明年再来

Exercise Requirements

同学们根据个人课堂报告对应的文字报告文档。