电子书 编程

基于 Go 语言的面向对象编程(英文版电子书)

¥1.90 已售 0
✓ 自动发货 ✓ 永久有效 ✓ 售后保障

资源介绍

书籍核心内容(一)整体结构本书分为两大部分,第一部分聚焦于使用 Go 语言实现基于对象的编程,涵盖基于对象开发的基础知识、Go 语言的关键方面,以及 “微宇宙”μU 的介绍,并展示多种经典算法;第二部分则是柏林自由大学计算机科学研究所计算机科学教师培训课程的教学项目文档,还有作者基于这些项目开发的部分程序系统,例如机器人、日程日历、生命游戏、Go 寄存器机、电子手写笔、单地址机 Mini、图书库存管理系统、Inferno(一种几乎可管理任何数据集的系统)、林登迈耶系统、火车站运营系统、空间图形表示系统以及柏林地铁和城铁网络系统等。(二)第一部分:基于 Go 语言的面向对象编程实现面向对象开发基础程序生命周期:核心包含系统分析、系统架构、用户手册和构建这几个阶段。系统分析需深入研究系统中的功能流程与数据流,明确自动化部分,同时要考虑计算机使用对系统结构的影响,还要权衡成本效益,判断部分功能是否值得自动化。系统架构阶段要将整个系统分解为组件及明确组件间依赖,遵循组件内部强关联、易于理解、可构建、可测试和可维护且相对独立于其他组件的原则,每个组件需分为规范和实现两部分,且二者要严格分离在不同文本文件中,这一分离模式有诸多优势,如保护规范不被随意修改、降低组件使用者的知识负担、支持多种实现方案。用户手册阶段要准确描述系统外部行为和操作方式,包括对象在屏幕等设备上的呈现形式以及用户输入输出方式,设计时需考虑用户体验,参考相关问题确保用户能清晰了解自身位置、可执行操作等。构建阶段包括每个组件的规范、实现以及系统集成,规范要明确抽象数据类型及访问操作的语法和语义,实现需确定具体数据类型和算法,测试也作为实现的一部分,系统集成则是构建输入循环和选择菜单整合组件。基于对象的系统架构优势:在规范方面,虽许多常见编程语言缺乏语法支持保障前提条件或效果,但理想的语言层面应通过方程对操作进行代数规范。在实现方面,由于组件专注于单一数据类型,其规范的可理解性、清晰度和服务最小化得以保证,数据传输也能最小化,抽象数据类型的使用还能自动确保信息隐藏原则和组件独立性,同时组件具有通用性和完整性,且具备可扩展性。此外,该架构能有效管理复杂性,支持组件的独立开发和替代实现,避免全局变量带来的问题,还利于原型的后续开发、构建可复用程序部分以及去中心化程序开发。Go 语言的相关方面Go 语言简介:Go 语言的设计工作于 2007 年秋季在谷歌启动,2009 年 11 月发布,2012 年 3 月底发布首个稳定版本 Go 1。它支持多种抽象层次的编程,可集成汇编或 C 编写的程序部分及系统库,也能开发小程序,还能将多个组件组建成实现抽象设计模式的组件。安装相关:可从官方网站获取编译器、源代码、许可条款等,安装说明也可在相关网站找到。安装时需设置一些环境变量,可在 /etc/profile.d 目录下创建 go.sh 文件进行配置,之后重启计算机使定义生效,也可从指定网站下载该文件。安装 Go 时,需以 root 身份在 /usr/local 目录下操作,先删除旧版本(若有),再导入 Go 仓库。包的概念:Go 中的组件概念体现为包,分为程序包和库包。程序包实现可执行程序,其源代码原则上可在任意目录,但建议放在\(GOSRC的子目录下,且源文件开头需是package main。库包为其他包提供服务,可分布在多个文件中,有简单的导出机制,可包含初始化部分且能嵌套,库包的源文件需放在\)GOSRC 下与包名匹配的目录中。包的导入和导出有简单语法,导出标识符以大写字母开头,导入指令需在包的开头,导入的标识符使用时需加包名前缀。库包的规范可采用接口形式,支持 “继承” 其他接口,也可存在多种实现,构造函数在规范中可通过特定方式处理以隐藏实现细节,包也可实现抽象数据对象,还可仅定义接口作为其他接口的使用模式,包的嵌套对大型软件系统的系统架构非常有利,程序包和库包的初始化分别通过 main 函数和 init 函数实现,init 函数会在使用包的函数前执行,若包有多个 init 函数,执行顺序不确定,导入多个包时初始化顺序由导入依赖决定。具体数据类型变量:Go 中的具体数据类型包括原子数据类型、数组、切片、结构体、引用类型(指针类型)、函数类型、接口类型、映射类型和通道类型等。声明具体变量时,编译器会在程序翻译时为变量的值分配内存空间,该内存空间仅为该变量的值预留,可通过 & x 获取其起始地址。不同原子数据类型有不同的类型大小,复合数据类型的类型大小可据此计算,也可通过 unsafe 包的 Sizeof 函数获取变量的内存空间需求。Go 为具体变量或表达式提供了常见的标准操作,如赋值、相等性判断、顺序比较等,还有 fmt 包和 file 包的相关操作以及获取内存地址和大小的操作。引用和参数:Go 只有值参数,可通过指针实现类似其他语言中变量参数的效果。以 inc 函数为例,通过传递变量的起始地址,在函数内部使用解引用运算符 * 来修改变量的值,这体现了指针的使用方式,也说明值参数并非绝对能防止传递变量被修改,关键在于传递的是引用而非变量本身。抽象数据类型变量(对象):抽象数据类型通过包的定义部分以接口形式定义,仅指定名称,在实现部分通常以引用形式实现。抽象变量的声明与具体变量类似,但有两个重要区别,其值是引用,类型大小为计算机处理器的地址宽度,且声明后需显式为实际值分配内存空间,这通过构造函数实现,在 Go 中抽象数据类型在实现中的类型名与规范中不同。值语义与引用语义:对于具体变量,赋值操作会复制值,之后修改一个变量不影响另一个;而对于对象,赋值操作复制的是引用,修改一个对象会影响另一个。在相等性检查和大小比较方面,具体变量是对值进行操作,对象则是对引用进行操作,且 Go 中不定义引用的大小比较运算符。在序列化方面,具体变量可通过地址和大小访问其内存中的字节序列,而对象由于信息隐藏和引用特性,无法直接作为字节序列存储或传输,需特殊操作实现类似值语义的效果。微宇宙(Microuniverse)概述:微宇宙严格遵循面向对象编程的所有原则,包含众多用于各种用途的抽象数据类型和对象的包,许多包源于作者的计算机科学教学活动,最初用 Modula-2 编写,后转换为 Java,现移植并扩展到 Go 语言,核心包是 obj 包,还包含用户界面构建相关包和多种集合包等。安装:微宇宙的源代码可从指定网站获取,建议定期查看是否有新版本。安装时,root 用户可在 $GOSRC 目录下,普通用户可在主目录的 go/src 子目录下,通过 tar 命令解压 μU.tgz 文件,在满足前提条件的情况下,使用 go install μU 命令创建 μU 库,目录下的 gi 脚本也很有用,需复制到路径包含的目录中。安装前提是 Linux 操作系统且已安装 Go,还需安装 C 库、X-Window、等宽字体、OpenGL、图像格式转换工具和 TeX 排版系统等,不同 Linux 发行版安装方式有所差异,在控制台运行还需确保相关文件的权限设置,在 X-Window 下远程计算机运行需进行相应配置,Windows 系统建议使用虚拟机安装 Linux 发行版,MacOS 系统的适配情况会在指定网站发布。微宇宙仅用于教学,有相应许可条款,且不保证软件无错误,严禁用于重要用途,发现错误和歧义可反馈。命名规则:微宇宙中,数据类型或对象的规范及操作定义在 def.go 文件中,实现的名称通常具有自解释性,若只有一种或有标准实现,对应文件以抽象数据类型名命名,构造函数通常使用 New 标识符,多种实现时会在标识符后添加额外字符。构造函数 New:每个对象使用前需通过构造函数生成,构造函数的基本形式为 func New () Abc,在实现部分先分配内存,设置初始值,最后返回对象,调用操作对象的函数前需确保对象已通过构造函数创建,否则会导致程序异常。对象包(obj 包):该包包含多个重要接口,如 Equaler(用于对象相等性检查和复制)、Comparer(用于对象大小比较)、Clearer(用于对象清空和空值检查)、Coder(用于对象编码和解码)、Object(整合上述四个接口)、Stringer(用于对象字符串标识)、Formatter(用于数据的不同格式表示)、Valuator(用于带值对象的值操作)等,每个接口都有相应的方法和函数,支持对对象的各种操作和判断。输入输出:这部分包括屏幕输出和键盘(含鼠标)输入,概念上始终分离。屏幕相关有颜色、字体、屏幕 / 窗口大小、光标形状、线宽和鼠标指针外观等包,屏幕包 scr 提供抽象数据对象 Screen,支持多种屏幕操作,如重置输入、查询屏幕参数、设置颜色、操作光标、输出文本和图形、查询和设置鼠标参数等,使用时需注意初始化和清理操作。键盘包 kbd 封装了键盘和鼠标的访问,提供键名、读取键盘缓冲区、查询鼠标存在和等待按键等功能,区分不同类型的键,支持命令的深度效果,通过通道将字符和命令作为消息发送给屏幕处理。编辑器包 obj 中的 Editor 接口用于在屏幕指定位置输出和修改对象,支持行或像素坐标。输入输出字段包 box 提供抽象数据类型 Box,用于在屏幕行内定义宽度的字段输出和编辑字符串,支持不同模式和颜色设置。错误消息和提示包 errh 用于输出错误消息和用户提示,有特定的显示和确认机制。打印机包 prt 是抽象数据对象,依赖 TEX 安装,提供定义字体、获取页面行列数和打印字符串等功能。选择包 sel 提供抽象数据对象,支持从列表中交互式选择和选择颜色或字体。菜单包 menu 的 Menue 接口支持构建程序的菜单控制,可任意嵌套,叶子节点包含可执行语句,其他节点为菜单。对象集合:集合是原子类型变量或 Object 类型对象的有序集合,每个集合有一个当前对象或当前对象未定义,新创建的集合为空。集合包含多种方法,如清空、检查包含对象、获取对象数量、移动当前对象指针、插入和删除对象、读取当前对象、检查对象是否存在、遍历集合、合并集合以及排序和检查排序状态等,由 Collector 接口定义。Seeker 接口扩展 Collector 接口,支持在集合中特定位置访问对象。Predicator 接口扩展 Collector 接口,提供基于谓词的对象数量统计、判断、搜索、遍历、指针移动、对象转移和删除等方法。序列包 seq 的 Sequence 接口整合多种接口,支持序列的反转和旋转等操作,实现基于双向链表。栈包 stk 的 Stack 接口实现栈结构,基于序列,遵循 LIFO 原则。缓冲区(队列)包 buf 和 bbuf 分别提供无限队列 Buffer 和有限队列 BoundedBuffer,基于序列或切片实现,遵循 FIFO 原则。优先级队列包 pqu 和 bpqu 分别提供无限优先级队列 PrioQueue 和有限优先级队列 BoundedPrioQueue,基于堆实现,根据对象优先级插入和获取对象。集合包 set 的 Set 接口实现有序集