
资源介绍
第一部分:基于对象的 Go 编程实现
1. 面向对象开发基础
程序生命周期:包含系统分析、系统架构、用户手册、构建四个核心阶段。
系统分析:识别系统中的对象,确定自动化范围及计算机化对系统结构的影响。
系统架构:将系统分解为组件,遵循强内聚、低耦合原则,严格分离组件的规格说明与实现。
用户手册:描述系统外部行为及操作方式,包括对象在屏幕的表示形式和系统操作的输入与命令。
构建:包括组件的规格说明、实现以及系统集成。
基于对象的系统架构优势:在规格说明上,虽许多编程语言缺乏语法支持来保障前提条件和效果,但代数规格说明是理想形式;在实现上,确保了可理解性、清晰度等,且支持实现的替换。
2. Go 语言特性
Go 的定位:既可以说是面向对象语言,也可以说不是,其支持不同抽象层次的编程。
安装相关:可在官网获取编译器等,安装时需设置环境变量,相关文件可从指定网址下载。
包(Packages):
分为程序包(实现可执行程序)和库包(为其他包提供服务)。
库包可分布在多个文件,有导出机制、初始化部分,还可嵌套。
包的导入和导出有简单的语法规则,导出标识符以大写字母开头。
变量与语义:
具体数据类型包括原子数据类型、数组、切片等,变量声明会分配内存空间。
抽象数据类型在 Go 中以接口形式定义,抽象变量本质是引用,其类型大小为处理器的地址宽度,需显式创建。
区分值语义和引用语义,在赋值、相等性检查、序列化等方面表现不同。
3. 微宇宙(Microuniverse)
安装:源码可从指定网址获取,安装需满足 Linux 操作系统、Go 已安装等前提条件,遵循特定许可条款,有统一的命名规则。
核心包与接口:
构造函数 New 用于创建对象。
对象包(obj)包含 Equaler、Comparer 等多个接口,分别用于对象的相等性检查、比较等操作。
输入输出:涉及屏幕、键盘、编辑器等相关包,提供了多种输入输出操作的方法。
对象集合:包括 Collector、Seeker 等接口及序列、栈、缓冲区等具体实现,用于管理对象的集合。
其他数据类型:还包括多种数字类型、常见类型、图形相关类型等。
第二部分:项目实践
4. 教学项目概述
教学项目特点:与商业 IT 系统开发有诸多不同,如处于教学和学习情境、参与者角色多样等。
各阶段要点:系统分析需限制在一定范围内;系统架构遵循前面提到的原则;用户手册要明确数据对象语义和访问操作等。
5. Robi 项目
项目目标:通过简单的 Robi 语言,实现从函数式到命令式范式的平滑过渡,介绍结构化编程等概念。
系统分析:Robi 是一个在矩形世界中活动的 “机器人”,可执行转向、移动等操作,能处理积木、标记方块等。
Robi 语言:包含语句、谓词、计数函数以及复合指令。
系统架构:较为扁平,有一个抽象数据类型机器人和包 robi 中的抽象数据对象。
用户手册:有 Robi 编辑器、Robi 协议、Robi-Sokoban、Robot Race 等程序,介绍了各自的操作方法。
构建:给出了机器人包 rob 和 robi 的规格说明。
练习:包括 “顺从的守卫” 问题和在迷宫中寻找积木等,要求给出无变量和递归的实现,以及迭代版本。
6. 日程日历(Appointment Calendar)
项目目标:创建个人日程安排程序,实现约会的录入、修改等功能,并能通过关键词搜索约会。
系统分析:识别出日历页、日属性、约会序列和约会、年度日历、月度和周度日历、约会日历等对象。
系统架构:包含多个包,如 day、clk 等,各包有依赖关系,形成组件层次结构。
用户手册:包括格式说明(如日历日期、时间等的格式)和系统操作(如屏幕循环切换、不同日历的操作等)。
构建:给出了相关包的规格说明。
7. 生命游戏(Life)
项目内容:包括 John Conway 的生命游戏和狐狸、野兔和植物的捕食者 - 猎物系统。
系统分析:生命游戏中细胞遵循特定生存规则;生态系统中狐狸、野兔和植物有各自的生存和相互作用规则。
系统架构:包含 life 包及子包 species 和 world,依赖一些微宇宙中的包。
用户手册:生命形式以小图标表示在屏幕上,程序操作包括系统选择、世界定义、世界编辑器等。
构建:给出了物种包和世界包的规格说明及实现相关内容。
8. Go 寄存器机(The Go Register Machine)
项目意义:寄存器机是介绍可计算性概念的合适机器模型,与图灵机等价,其编程语言简单但能解决复杂任务。
系统分析:寄存器机包括数据存储(寄存器和栈存储)、程序存储等组件,程序执行遵循特定规则。
指令系统:有赋值、修改、跳转等多种指令,各指令有特定的功能和前提条件。
用户手册:Go-RM 程序是 Go 程序,需遵循其语法要求,程序翻译和运行有特定命令,插入注释有助于程序正确性的证明。
构建:寄存器包是微宇宙的一部分,给出了其规格说明和实现。
练习:要求实现多种函数并进行测试。
9. 电子笔(The Electronic Stylus)
项目特点:最初是测试程序,后来选择 “二维图形” 作为对象,适合辅助黑板书写,有其优缺点。
系统分析:能管理多种图形,可对电子白板执行创建、修改等多种操作。
程序启动与操作:遵循人体工程学原则,主要使用少数按键操作,程序启动后可进行新图形的创建等操作。
系统架构:主要组件是带有事件控制的主程序 epen.go,使用了微宇宙中的多种数据类型。
构建:最重要的包是二维图形包,给出了其规格说明。
10. Mini 项目
项目目标:作为单地址机器的简单模型,介绍 imperative 编程的基本概念,具有图灵完备性。
系统分析:单地址机器包括处理器、数据存储、程序存储等组件,程序执行有特定机制。
指令系统:有存储、计算操作、比较等多种指令,各指令有特定功能。
用户手册:Mini 是模拟执行 mini 程序的程序,变量和标签有命名约定,程序操作使用特定按键。
构建:包括 prog、line、reg 三个包,给出了其规格说明。
练习:要求开发 mini 程序计算多种内容。
11. 书籍管理(Books)
项目目标:作为持久索引集的简单应用,管理书籍库存。
系统分析:每本书需记录领域、作者等数据,提供三种排序方式。
系统架构:包含多个对象,对应多个包,各包有依赖关系。
用户手册:介绍了程序的操作方法,如滚动浏览、修改条目等。
构建:给出了所用数据类型的规格说明。
12. Inferno 项目
项目目标:是书籍项目的抽象,用于管理任意可配置的数据集,可基于索引查找数据集,操作简单。
系统分析:基本组件包括掩码、分子、分子结构和原子,原子有多种类型。
系统架构:包含多个包,如 mol、stru 等,各包有依赖关系。
用户手册:包括 Inferno 程序的构建(确定窗口大小、创建掩码、构建分子结构)和系统操作(程序调用后的各种操作)。
构建:介绍了分子、结构、原子等相关包的规格说明和实现。
13. 林登迈耶系统(Lindenmayer Systems)
项目背景:1968 年由 Aristid Lindenmayer 创建,用于描述生物学中的发育过程,结合计算机图形学可用于植物建模等。
系统分析:涉及字母表、语言、语法等基本概念,L - 系统的语法有特定形式,其图形解释有相应规则。
图形解释示例:包括科赫岛、岛屿和湖泊、铺砌、空间填充曲线等多个例子。
系统架构:核心部分是语法和构建 L - 系统过程中的持续状态,有相应的对象和包。
用户手册:包括 L - 系统的创建和系统操作方法。
构建:介绍了相关库包的规格说明和实现。
这些项目涵盖了不同的应用场景,展示了基于对象的编程在 Go 语言中的实践应用,结合了理论知识和实际开发,有助于读者深入理解和掌握基于对象的 Go 编程。