目录
第1章面向对象编程概述/1
1.1面向对象程序设计概述/1
1.1.1面向对象程序设计/2
1.1.2面向对象程序分析示例/3
1.1.3面向对象可视化建模工具/4
1.1.4面向对象的主要概念/5
1.2面向对象程序设计的特点/7
1.2.1面向过程的方法的局限性/7
1.2.2面向对象程序设计的主要优点/8
1.3面向对象的系统开发/9
1.3.1典型的面向对象程序设计语言/9
1.3.2面向对象程序设计工具及设计流程/11
1.4仓颉语言与C++语言的对比分析/14
1.4.1程序示例/14
1.4.2对比分析/15
本章小结/17
习题1/17
第2章仓颉语言基础/19
2.1仓颉语言概述/20
2.1.1仓颉编程语言的特点/20
2.1.2第一个仓颉程序:“Hello,仓颉!”/21
2.2程序结构及设计环境/23
2.2.1函数结构与类结构/23
2.2.2仓颉程序的编程工具链/28
2.2.3仓颉程序集成化的IDE编程环境/30
2.3数据表示/32
2.3.1数据表示符/33
2.3.2操作运算符/36
2.3.3变量/40
2.3.4常量/42
2.3.5作用域/45
2.3.6表达式/47
2.4数据类型/51
2.4.1整数类型/52
2.4.2浮点类型/56
2.4.3布尔类型/57
2.4.4字符类型/57
2.4.5字符串类型/58
2.4.6元组类型 /61
2.4.7数组类型/64
2.4.8区间类型 /67
2.4.9其他类型/68
2.5类型转换/69
2.5.1数值类型转换/69
2.5.2进位记数制的转换/70
2.5.3Rune类型转换/70
2.6程序示例/71
示例1: 用函数编程实现闰年判断/71
示例2: 用插值字符串实现格式化输出/72
示例3: 用for in双循环输出乘法口诀表/73
示例4: 用条件和循环表达式判断素数/73
示例5: 字符串翻转的实现/74
示例6: 用函数式和命令式编程方法求公约数和公倍数/74
示例7: 用U+十六进制的形式输出汉字的Unicode码/75
本章小结/76
习题2/76
第3章函数编程/78
3.1函数/78
3.1.1定义函数/78
3.1.2调用函数/84
3.2函数类型/86
3.2.1函数返回类型/86
3.2.2嵌套函数/90
3.2.3const 函数/91
3.3Lambda 表达式/92
3.3.1Lambda表达式的定义/92
3.3.2Lambda表达式的基本使用/92
3.3.3Lambda表达式的返回类型和调用/94
3.4闭包/94
3.4.1Lambda表达式中的变量捕获/94
3.4.2闭包的变量初始化/95
3.4.3使用闭包时应注意的几个问题/95
3.5函数调用语法/95
3.5.1尾随 Lambda /96
3.5.2Flow 表达式/97
3.5.3变长参数/99
3.6函数重载/102
3.6.1函数重载的定义/102
3.6.2函数重载的规则/102
3.6.3函数重载决议/104
3.7操作符重载/104
3.8程序示例/106
示例1: 用高阶函数,实现对数组的统一操作/106
示例2: 多文档结构程序中的函数调用/108
示例3: 函数类型作为返回值,返回 Lambda 表达式/109
示例4: 嵌套函数使用闭包变量/109
示例5: Lambda 表达式推断类型并立即调用/110
示例6: 汉字元数据解构函数/110
本章小结/111
习题3/111
第4章结构体、枚举及模式匹配/113
4.1结构体数据类型/114
4.1.1结构体概述/114
4.1.2结构体的定义/115
4.1.3创建 struct 示例/120
4.1.4mut 函数/122
4.2枚举类型/123
4.2.1enum 类型的定义/123
4.2.2enum的使用/125
4.3Option类型/126
4.3.1Option类型的定义/126
4.3.2Option类型的使用/126
4.3.3Option 类型的解构/127
4.4模式匹配/128
4.4.1常量模式/128
4.4.2通配符模式/129
4.4.3绑定模式/129
4.4.4tuple模式/131
4.4.5类模式/132
4.4.6enum 模式/132
4.5模式的组合及类型/133
4.5.1模式的嵌套组合/133
4.5.2模式匹配的两种类型/133
4.5.3match表达式/136
4.5.4iflet 表达式/141
4.5.5whilelet 表达式/141
4.5.6其他模式的应用/142
4.6程序示例/144
示例1: 八面玲珑机器人/144
示例2: 多点距离计算/146
示例3: 文本生成计算/146
示例4: 汉字结构计算/148
示例5: 冒泡排序算法/149
本章小结/150
习题4/150
第5章类和对象/155
5.1类/156
5.1.1从结构体到类/156
5.1.2类的定义/157
5.2类的数据成员/159
5.2.1成员变量/159
5.2.2成员函数/161
5.3类的构造函数/163
5.3.1普通构造函数/164
5.3.2主构造函数/165
5.4类的成员函数/168
5.4.1实例成员函数/168
5.4.2静态成员函数/169
5.4.3抽象成员函数/169
5.5函数和操作符重载/170
5.5.1构造函数重载/170
5.5.2操作符重载/170
5.6类的终结器/171
5.7类成员及访问/172
5.7.1访问运算符/172
5.7.2访问修饰符/173
5.7.3访问属性/173
5.8对象/175
5.8.1创建对象/175
5.8.2 创建对象数组/177
5.8.3对象数据成员/178
5.8.4对象赋值语句/179
5.9类的作用域与自引用指针/180
5.9.1类的作用域/180
5.9.2自引用指针/181
5.10程序示例/182
示例1: 汉字类及生成计数器设计/182
示例2: 用对象作为成员确定类与类的关系/183
示例3: 使用对象数组管理点集并计算距离/184
示例4: 时间类Time设计/185
示例5: 利用枚举和类确定笛卡儿坐标系中点的位置属性/185
本章小结/186
习题5/187
第6章类继承和接口继承/189
6.1类继承/189
6.1.1继承与代码重用/189
6.1.2基类与派生类/190
6.2抽象类与抽象方法/192
6.3类继承中的对象赋值/194
6.4父类构造函数与super关键字/195
6.5覆盖和重定义/198
6.6接口继承/199
6.6.1接口定义/201
6.6.2接口继承/203
6.6.3接口实现/208
6.6.4Any类型/209
6.6.5在结构体中实现接口/210
6.7属性/214
6.7.1属性定义/215
6.7.2属性使用/218
6.8程序示例/220
示例1: 定义继承关系并实现方法重写/220
示例2: 使用抽象类与重写方法/220
示例3: 类对象赋值与动态绑定/221
示例4: 一个类实现多个接口/222
示例5: 使用属性(prop)封装成员变量/223
实例6: 类模式匹配与图形描述/223
本章小结/224
习题6/224
第7章子类型关系和多态性/227
7.1子类型关系/227
7.1.1子类型关系与子类型多态/228
7.1.2子类型的判定/228
7.2多态性/230
7.2.1编译时的多态/230
7.2.2运行时的多态/230
7.3类型转换/232
7.3.1数值类型之间的转换/232
7.3.2is和as操作符/232
7.4泛型/235
7.4.1泛型函数/236
7.4.2泛型接口/239
7.4.3泛型类/240
7.4.4泛型结构体/241
7.4.5泛型枚举/241
7.4.6泛型类型的子类型关系/242
7.4.7类型别名/243
7.4.8泛型约束/245
7.5扩展/247
7.5.1扩展的基本特性/247
7.5.2直接扩展/248
7.5.3接口扩展 /250
7.6程序示例/251
示例1: 用函数重载实现编译时的多态/251
示例2: 用方法重写实现运行时多态/251
示例3: 类型判定与安全转换/252
示例4: 泛型容器与交换函数/252
示例5: 用extend扩展字符串/253
本章小结/254
习题7/254
第8章集合与包/257
8.1仓颉集合的基本操作/257
8.1.1集合概述/257
8.1.2仓颉Array的基本操作/258
8.1.3仓颉Array的高级应用 /261
8.2ArrayList/263
8.2.1ArrayList的使用/263
8.2.2访问ArrayList元素/263
8.2.3修改 ArrayList/265
8.3HashSet/266
8.3.1HashSet 的使用/266
8.3.2访问 HashSet 成员/269
8.3.3修改 HashSet/270
8.4HashMap/272
8.4.1使用 HashMap/272
8.4.2访问和修改HashMap 成员/273
8.4.3使用HashMap进行数据管理/275
8.5自定义类型的集合处理/279
8.6包概述/280
8.6.1包的声明/281
8.6.2顶层声明的可见性/282
8.6.3包的导入/284
8.7程序示例/286
示例1: 用对象数组实现学生成绩管理/286
示例2: 基于 HashMap 的学生成绩管理系统/287
示例3: 基于接口与多态的支付系统/293
示例4: 单词去重与统计/295
示例5: 简易汉字结构字典的创建及查询/296
本章小结/297
习题8/297
第9章I/O操作与异常处理/300
9.1I/O流概述/300
9.1.1数据流/301
9.1.2数据流分类/302
9.1.3数据流操作/302
9.1.4数据流操作异常/302
9.2Stream操作函数/303
9.2.1copy()函数/303
9.2.2readString()函数/304
9.2.3readStringUnchecked()函数/305
9.2.4readToEnd()函数/306
9.3I/O节点流/306
9.3.1标准流/306
9.3.2文件流/310
9.4I/O处理流/312
9.4.1缓冲流/312
9.4.2字符串流/313
9.5异常及异常处理/314
9.5.1定义异常/314
9.5.2throw和处理异常/315
9.5.3普通try表达式/316
9.5.4trywithresources 表达式/317
9.6使用 Option处理异常/319
9.6.1模式匹配/319
9.6.2Coalescing操作符 (??)/320
9.6.3问号操作符 (?)/320
9.6.4getOrThrow()函数/321
9.7程序示例/322
示例1: 学生成绩文件的读取/322
示例2: 日志文件复制/322
示例3: 异常处理与trycatchfinally/323
示例4: 文件写入以及关闭与自动文件资源管理/324
示例5: 使用Option类型的快速查找/324
本章小结/325
习题9/325
第10章网络与并发编程/328
10.1网络与并发编程概述/328
10.1.1C/S与B/S网络模式/328
10.1.2多线程并发编程/329
10.2Socket 编程/330
10.2.1TCP 编程/331
10.2.2UDP 编程/332
10.3TCP聊天程序设计/333
10.3.1TcpServerSocket类/333
10.3.2TcpSocket类/334
10.4HTTP编程/335
10.4.1stdx包的安装/335
10.4.2stdx程序测试/336
10.4.3HTTP多线程网络编程/338
10.5WebSocket编程/340
10.5.1服务器端程序/340
10.5.2客户端程序/341
10.6网络编程示例/343
示例1: 网络注册用户管理/343
示例2: 服务器端与客户端数据通信/345
示例3: 多线程文件下载与日志记录/347
示例4: UDP 多客户端消息收发/348
示例5: WebSocket 实时消息回显/348
本章小结/349
习题10/349
参考文献/352
附录A习题参考答案/353
