描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302507987丛书名: 高等院校计算机教育系列教材
《面向对象程序设计(C#)》共分9章。第1章介绍面向对象技术的由来、地位及其重要性。第2章从计算机的角度介绍程序设计基础,涉及变量机制和过程式程序设计思想。第3章从人的角度介绍高端程序设计,涉及分类机制和面向对象程序设计思想,重点解析抽象、封装、继承、多态、接口等概念及其实现机制。第4章对比分析过程式、面向对象、面向接口、组件化等程序设计范式的应用,体验利用面向对象思想进行程序设计所带来的好处。从第5章开始,按软件分层体系结构,介绍用户界面层、业务逻辑层、数据访问层的实现技术。其中,第5章涉及业务逻辑层技术,介绍科学计算、文字处理、时间、事件等常见数据结构类的使用。第6章涉及用户界面层技术,介绍各种控件类的使用。第7章涉及数据访问层技术,介绍文件和数据库类的使用。第8章涉及数据的可视化技术,介绍图形、图像、动画等多媒体类的使用。第9章基于企业信息化目标,用一个管理信息系统原型的实现过程介绍面向对象技术的综合运用。
《面向对象程序设计(C#)》思路新颖、图文并茂,适用于计算机类专业(包括但不限于计算机科学与技术、软件工程、网络工程、信息安全、物联网工程等)的面向对象程序设计、桌面应用软件开发等课程教学,也可供从事软件开发的科研人员使用。
《面向对象程序设计(C#)》共分9章。第1章介绍面向对象技术的由来、地位及其重要性。第2章从计算机的角度介绍程序设计基础,涉及变量机制和过程式程序设计思想。第3章从人的角度介绍高端程序设计,涉及分类机制和面向对象程序设计思想,重点解析抽象、封装、继承、多态、接口等概念及其实现机制。第4章对比分析过程式、面向对象、面向接口、组件化等程序设计范式的应用,体验利用面向对象思想进行程序设计所带来的好处。从第5章开始,按软件分层体系结构,介绍用户界面层、业务逻辑层、数据访问层的实现技术。其中,第5章涉及业务逻辑层技术,介绍科学计算、文字处理、时间、事件等常见数据结构类的使用。第6章涉及用户界面层技术,介绍各种控件类的使用。第7章涉及数据访问层技术,介绍文件和数据库类的使用。第8章涉及数据的可视化技术,介绍图形、图像、动画等多媒体类的使用。第9章基于企业信息化目标,用一个管理信息系统原型的实现过程介绍面向对象技术的综合运用。
《面向对象程序设计(C#)》思路新颖、图文并茂,适用于计算机类专业(包括但不限于计算机科学与技术、软件工程、网络工程、信息安全、物联网工程等)的面向对象程序设计、桌面应用软件开发等课程教学,也可供从事软件开发的科研人员使用。
第1章 概述 1
1.1 面向对象探源 1
1.1.1 关于计算 1
1.1.2 主机计算 2
1.1.3 网络分布计算 3
1.1.4 组件技术 4
1.1.5 面向对象技术 5
1.2 .NET框架 7
1.2.1 微软技术的发展 7
1.2.2 .NET规范及其实现 8
1.3 C#程序设计语言 10
1.3.1 C#语言的特点 10
1.3.2 Hello, World 10
1.4 Visual Studio集成开发环境 12
1.4.1 启动集成开发环境 12
1.4.2 解决方案与项目类型 13
1.4.3 用控制台应用程序项目
实现HelloWorld 14
1.4.4 用Windows窗体应用程序
项目实现HelloWorld 16
习题1 19
第2章 程序设计基础 20
2.1 程序设计与编程 20
2.1.1 计算机的本质 20
2.1.2 程序的本质 21
2.1.3 程序设计 22
2.1.4 程序设计语言 24
2.2 数据存储 25
2.2.1 变量与常量 26
2.2.2 数据类型 27
2.2.3 数据类型的跨语言特性 28
2.3 数据运算与运算过程 29
2.3.1 数据运算类型 30
2.3.2 算法的基本结构 34
2.3.3 条件语句 35
2.3.4 迭代语句 37
2.3.5 跳转语句 39
2.4 数据与代码的组织 40
2.4.1 同类型数据的组织 40
2.4.2 不同数据类型的聚合 41
2.4.3 程序代码的组织 41
习题2 44
第3章 面向对象基础 45
3.1 对象与类 45
3.1.1 分类思想 45
3.1.2 类和对象释义 46
3.2 C#类与对象 47
3.2.1 模拟“王婆卖瓜” 47
3.2.2 类的定义及其封装性 50
3.2.3 对象的创建和使用 51
3.2.4 方法(Method) 52
3.2.5 参数(Parameter) 52
3.2.6 参数传递模式 53
3.2.7 属性(Property) 55
3.2.8 构造方法与析构方法
(Constructor & Destructor) 56
3.2.9 运算符重载 58
3.2.10 索引器 60
3.3 类的继承与多态 61
3.3.1 类之间的继承关系
(Inheritance) 62
3.3.2 类的多态性(Polymorphism) 62
3.4 抽象类与接口 67
3.4.1 抽象类 67
3.4.2 密封类 68
3.4.3 接口(Interface) 69
习题3 71
第4章 程序设计范式 72
4.1 程序设计范式的概念 72
4.1.1 从面向对象说起 72
4.1.2 范式(Paradigm) 73
4.1.3 语言之争 74
4.2 程序设计范式的应用 77
4.2.1 无范式方案 78
4.2.2 过程范式方案 78
4.2.3 面向对象范式方案 79
4.2.4 面向接口进行程序设计 81
4.3 组件导向式程序设计 83
4.3.1 过程式方案 83
4.3.2 面向对象式方案 83
4.3.3 组件导向式方案 84
4.4 反射机制* 85
4.4.1 反射探源 85
4.4.2 组件探秘 86
4.5 装箱和拆箱* 87
4.5.1 计算机内存布局 87
4.5.2 值类型与引用类型之间的
转换 88
习题4 89
第5章 实用化程序设计 90
5.1 程序设计环境 90
5.1.1 .NET框架环境 90
5.1.2 编译过程 91
5.1.3 FCL类库 93
5.2 .NET框架中的常用类 96
5.2.1 科学计算 96
5.2.2 文字处理 97
5.2.3 时间处理 100
5.2.4 随机数生成 100
5.3 数据结构类 101
5.3.1 泛型 101
5.3.2 集合类及其遍历 102
5.3.3 集合类的应用 104
5.4 事件驱动 106
5.4.1 委托 107
5.4.2 事件模型 108
5.4.3 专用委托和事件类 110
5.5 语言集成查询 111
5.5.1 LINQ简介 111
5.5.2 Lambda表达式 113
5.5.3 LINQ的使用 115
5.6 程序的容错能力 116
5.6.1 异常处理 116
5.6.2 输入数据的容错 117
习题5 118
第6章 可视化程序设计 119
6.1 工具箱的使用 119
6.1.1 成本计算程序的界面改造 119
6.1.2 控件属性的编辑 121
6.1.3 控件事件处理代码框架的
生成 122
6.1.4 自动生成的窗体应用程序
代码框架结构 123
6.1.5 编写程序代码 124
6.2 我的百宝箱 126
6.2.1 软件需求 126
6.2.2 创建项目并调整主窗体
属性 127
6.2.3 菜单和工具栏控件的
使用 128
6.2.4 实现业务窗体界面 130
6.2.5 实现应用程序的退出功能 132
6.3 神秘的飞溅屏 133
6.3.1 准备工作 134
6.3.2 画面淡入 134
6.3.3 把握进度 136
6.4 业务窗口 137
6.4.1 新书到了 137
6.4.2 学会选择 140
习题6 143
第7章 数据存储 144
7.1 文件概念和文件类 144
7.1.1 文件释义 144
7.1.2 文件操作流程 145
7.1.3 .NET框架的文件类 147
7.1.4 文件与目录操作 149
7.1.5 文件的读写操作 151
7.1.6 数据的流动 152
7.2 “我的百宝箱”中的文件处理 153
7.2.1 文件的打开和保存 154
7.2.2 文件的加密与解密 155
7.2.3 自动调整文本显示控件的
大小 159
7.3 数据库和数据库设计 160
7.3.1 数据库概念 160
7.3.2 数据库的设计 162
7.3.3 数据库的创建 163
7.3.4 ADO.NET“家族”一览 166
7.4 “我的百宝箱”中的数据库处理 168
7.4.1 书籍信息的保存 168
7.4.2 动态构造出版社下拉列表 171
7.4.3 图书维护 173
7.4.4 图像数据的存取操作 179
习题7 181
第8章 图形绘制技术 182
8.1 图形处理基础 182
8.1.1 多媒体与用户体验 182
8.1.2 Windows窗体的那点事 182
8.1.3 GDI的坐标系 183
8.2 工欲善其事,必先利其器 184
8.2.1 宣纸——Graphics 184
8.2.2 画笔、颜料和刷子 185
8.2.3 基本画法 186
8.3 图形类的应用 187
8.3.1 绘制水池形状 187
8.3.2 降龙十八掌 189
习题8 191
第9章 综合应用 192
9.1 应用软件开发 192
9.1.1 工程目标 192
9.1.2 他山之石 193
9.1.3 技术之外 195
9.2 需求分析与设计 196
9.2.1 企业信息化与信息系统 196
9.2.2 企业经营与ERP 197
9.2.3 数据建模与功能建模 198
9.2.4 软件体系结构 202
9.3 程序实现 203
9.3.1 构建体系结构和主控界面 203
9.3.2 实现主控模块 205
9.3.3 实现实体层的Employee类 206
9.3.4 实现UIL层的
EmployeeUI类 206
9.3.5 实现BLL层的
EmployeeBL类 211
9.3.6 实现DAL层的数据库类 213
习题9 216
参考文献 217
镰刀、锄头等第一代人力工具可把物质资源加工成材料,扩展了人的体质功能,孕育了农业时代的生产力,创建了农业文明。机车、机床等第二代动力工具可把能量资源转换成为动力,扩展了人的体力功能,形成了工业时代的生产力,建立了工业文明。
20世纪后半叶,人类开始认识到信息也可以作为一种资源,甚至是更为重要的资源。综合利用物质材料、能源动力和信息知识,可制造新一代既有活力又有智能的生产工具。第三代生产工具用于扩展人类的智力功能,从而培育出信息时代的生产力,把工业文明进一步升华为更加辉煌的信息文明。
为迎接信息社会的来临,以信息化带动工业化,以工业化促进信息化,走出一条科技含量高、经济效益好、资源消耗低、环境污染少、人力资源优势得到充分发挥的新型工业化道路,是世界各国现代化的必然选择。
在引领时代的软件行业,软件工程师始终是最为紧俏的科研人才。当今软件开发人才的培养速度难以企及软件行业的发展,主要在于对程序设计的片面理解和传统的教育模式。随着软件技术的发展,企业对软件人才的需求不再呈现金字塔式的结构。现在,许多初级程序设计工作更多的是使用自动化工具完成,程序设计的门槛已经降低。在人才培养上,过多地强调程序设计语言的语法式教学或过细地解析API的列表式培训已经不合时宜,难以有效地培养合格的软件工程师。
众所周知,作为第三代智能工具的典型代表,计算机的主要功能是实现计算的自动化,涉及计算的对象(数据)和计算的过程(算法)。数据和算法用程序来描述,计算自动化的核心任务就是程序设计。除了数据和算法,程序设计还涉及程序设计语言、计算环境、程序设计范式等多个方面。程序设计类的教材,有的突出程序设计语言,有的偏重程序设计工具,难以将程序设计所涉及的方方面面有效结合起来。本书以面向对象范式为主线,将程序设计语言、工具库和方法学等有机“串接”起来,注重文化传承,中西结合,以及现实世界与机器世界的关联,旨在培养深刻理解程序设计核心概念、基本原理,掌握实用程序设计技术和方法,具备自主学习和终身学习的意识,具有不断学习、适应发展、能解决实际应用问题的能力的实用型软件工程师。
面向对象程序设计范式具有封装、继承、多态等优点,能显著提高程序的可重用性和可扩展性,是现代开发大型应用软件的主要技术。支持面向对象程序设计范式的程序设计语言有很多,如C 、Java、C#等。20世纪80年代以来,C/C 一直是使用最为广泛的商业化程序设计语言。高校计算机相关专业普遍开设有面向对象程序设计类课程,使用的教材一般是用C 进行描述的。但是,C 过度的功能扩张破坏了面向对象的设计理念,而且学习周期长,开发效率低,软件行业迫切需要一种能在控制力和生产率之间达到良好平衡的全新程序设计语言。因此,C 已经难以适应行业和高校的教学要求。C#是一种简单、现代、通用、完全面向对象的程序设计语言。它从C/C 发展而来,汲取了C/C 、Delphi、Java等多种语言的精华,具有语法简洁、与Internet结合紧密、安全高效、灵活兼容等优点。C#语言简洁易懂,更适合高校和培训机构传授面向对象设计理念和技术。从C#入手,可以更容易体验和感悟现代化程序设计方法和技术,掌握可重用面向对象软件的开发方法,大幅度提高复杂软件系统的生产率和质量。本书是我校“面向对象程序设计”精品资源共享课程教改研究的结晶,用C#语言描述和介绍面向对象程序设计范式,思路新颖、图文并茂,不仅适用于本科院校的学生,也可作为各类培训班学生面向对象程序设计或桌面应用开发类课程的首选学习用书。
本书作者是具有软件开发和项目管理经验的大学教师。作为国家注册的高级程序员,在软件企业长期从事软件开发、程序设计、技术培训等工作,开发过多项软件系统。从教后,主讲计算机科学基础、面向对象程序设计、软件工程、程序设计范式、软件设计模式、软件项目管理等多门课程,对软件工程、程序设计、技术培训、专业教育等有着深刻的理解和丰富的实践经验。本书是作者教学和培训经验的积累,具有如下特色。
(1) 概念探源:计算机科学知识源于欧美国家,从源头梳理概念可以帮助读者把握知识发展脉络,为跟踪学习先进技术指引方向,培养技术研究能力和终身学习意识。本书的大部分核心概念都从Wikipedia指出出处,对一些容易引起混淆的概念,都针对原文进行了详细解析。我国计算机相关术语来自英文资料,在引进时可能会遇到翻译障碍。例如,C语言的“函数”由function翻译而来,而“函数”术语本身是由清朝数学家李善兰翻译而来。但从程序设计角度,function译为“功能模块”或“过程模块”也许更便于理解。本书的概念探源试图引导学生从概念入手逐步加深对程序设计语言实现机理的理解,进而掌握程序设计技术和方法。
(2) 注重思想:一种程序设计语言可以体现多种范式,如C#语言既支持过程式,也支持面向对象、组件化等思想;一种范式也可以在多种程序设计语言中体现,如C 、Java、C#等语言都支持面向对象程序设计范式。每门语言都有各自的特点及难点。针对不同的任务,应该用不同的语言实现。同一个任务,用同一种语言实现,不同的方法会有不同的效率。本书解析了用不同思想解决同一问题的优缺点,以加深对面向对象程序设计范式的理解。书中还适当点缀中国文化思想,在增强趣味性的同时,对于中西方文化的结合和传承也有一定的启示意义。
(3) 分层递进:从基础级的变量与过程到对象级的封装、继承与多态,从模式级的委托与事件到实用级的集合与泛型,从应用级的图形处理、文件存储、数据库访问到企业级的复杂软件项目开发,逐层递进,分类学习。本书前半部分(第1~4章)以概念及C#语言实现机理为主,强调计算机与现实之间的关系;后半部分(第5~9章)以应用.NET框架类为主,强调程序设计的实用性。
(4) 案例驱动:本书所涉及的主要概念都以完整的案例加以说明,与现实紧密结合,避免了技术的枯燥性,增强了实用性和趣味性。第6~8章用一个完整的案例串接起来形成一个有机的整体,为实现多层应用程序打下基础。第9章以企业信息化为目标,实现了一个基于分层软件体系结构的管理信息系统的原型。以此案例作为软件开发能力构建的目标,可有的放矢地驱动学习的进程。
另外,本书还为重要的知识点配备了全程板书式授课的教学微视频,可用于MOOC模式的教学或自学。
在本书的编写过程中,参考了很多国内外同行的有关资料,西南石油大学计算机科学学院的廖浩德、杨力、杨云、高磊、王世元,现代教育中心的向海昀、汪立欣,教务处的符晓等教师参加了写作思路的研讨、收集资料、编写和程序调试等工作。张豫新全程负责教材的编写和出版事宜,包括案例设计、文字录入、图形绘制、内容合成和编辑审校等。西南石油大学教务处、教材科、计算机科学学院和理学院等部门的领导、工作人员和教师多年来对作者始终给予了热情的支持和鼓励。清华大学出版社对本书的出版十分重视并做了周到的安排,使本书得以在短时间内顺利出版。在此向他们表示诚挚的谢意。
由于作者水平有限,疏漏之处在所难免,敬请广大读者批评指正。
编 者
1.1 面向对象探源
Object-oriented programming (OOP) is a programming paradigm based on the concept of “objects”, which may contain data, in the form of fields, often known as attributes; and code, in the form of procedures, often known as methods.
——摘自https://en.wikipedia.org/wiki/Object-oriented_programming
开宗明义,概念先行。这段摘自Wikipedia的英文原文介绍的Object-oriented programming在我国大陆译为“面向对象程序设计”。这个术语一般用其缩写OOP简称,由来已久,早已响彻业界。后续章节将以这个定义为主线,围绕相关概念展开学习和讨论。本节介绍与此相关的行业大背景,追根溯源,了解面向对象概念、.NET平台,以及C#语言的来龙去脉,为深入学习相关理论和技术做好准备。
1.1.1 关于计算
说到计算,人们并不陌生。形容一个人“精于计算”,一般是指其数学功底深厚。这里的计算(computing),特指与计算机相关的目标导向活动,包括计算机软硬件系统的设计和建造、信息的采集和处理、通信和娱乐媒体的创建与使用,以及用计算机进行科学研究等。简而言之,这里的计算是计算机设计和使用的研究,包括理论、实验和工程等。计算机的主要功能是实现计算的自动化,涉及计算的对象(data,即数据)和计算的过程(algorithm,即算法)。数据和算法用程序(program)来描述,计算自动化的核心任务就是程序设计(programming)。
随着计算理论的日渐成熟和计算系统的飞速发展,计算科学已划分成许多理论和实践领域。从工程角度看,计算机硬件制造和软件开发各自发展,形成了计算机工程和软件工程两大独立的学科。计算机硬件和软件产品集成起来,可应用于不同的领域,形成各种各样的信息系统(相关技术统称为信息技术)。当然,不管怎么演化和划分,程序设计都是最为基本的活动,是各计算学科都不可或缺的内容。计算机科学的发展如图1-1所示。
程序由描述计算对象的数据结构和描述计算过程的算法构成,程序设计还涉及表示程序的语言(即程序设计语言)和运行程序的平台(即计算环境)。就程序运行平台来说,从早期基于单机的主机计算到后来基于Internet的网络分布计算,计算环境发生着深刻的变革。只有真正了解计算环境的这种翻天覆地的变化,才有可能理解新一代程序设计语言所提供的机制和特性,并快速掌握这些更为先进的程序设计技术和方法。
图1-1 计算机科学的发展
1.1.2 主机计算
现代计算机遵循的是匈牙利数学家约翰·冯·诺依曼(John von Neumann)于1945提出的体系结构,如图1-2所示。这种体系结构由中央处理器(Central Processing Unit,CPU)、存储器(Memory Unit)、输入设备(Input Device)和输出设备(Input Device)构成。其中,CPU又由算术/逻辑运算器(Arithmetic/Logic Unit)、处理器寄存器、含有指令寄存器和程序计数器的控制器(Control Unit)构成。由于存储器用于存储数据和指令,这种体系结构的计算机又称为存储程序(stored-program)计算机。
图1-2 冯·诺依曼体系结构
基于冯·诺依曼体系结构的计算系统(computing system)由硬件(hardware)和软件(software)组成,如图1-3所示。硬件是构成计算系统的物理部件的集合,都是有形的物体,包括主机和外部设备两大部分。主机的核心是一块集成电路主板,用于连接计算机的其他部分,包括CPU、存储器、磁盘驱动器(如CD、DVD、硬盘等)。主机可以通过主板上的端口或扩展槽连接外部设备,如显示器、键盘、打印机、音箱、麦克风等。软件是能够被硬件存储和执行的指令的集合,一般分为系统软件和应用软件两个部分。系统软件包括设备驱动程序、操作系统和一些用于计算机维护的实用工具软件;应用软件则泛指系统软件之外的所有软件。
图1-3 计算系统组成
计算环境是指运行应用程序的平台,包括硬件平台和软件平台,如图1-4所示。
图1-4 主机计算环境
在图1-4中,底层是计算机实体层,可以是各种品牌和类型的计算机。硬件之上是操作系统,用于管理计算机的软硬件资源并提供公共服务,就像一台扩展了硬件功能的虚拟机,一般视为抽象机层。抽象机也可以有多层,如运行Java程序的JVM(Java Virtual Machine)、运行C#程序的CLR(Common Language Runtime)等都属于虚拟机。这里的主机计算是指基于单台计算机的程序运行环境,对应的程序设计相对比较简单。
1.1.3 网络分布计算
Internet出现后,随着网络应用需求的飞速增长,网络分布计算逐渐成为新一代计算和应用的主流。这时的计算涉及主机之间的资源共享和协同工作,如图1-5所示。
图1-5 网络分布计算的主要特征
图1-5所示的计算环境,真正的挑战来自如何突破软件平台、硬件系统、时间、地点的限制。计算机硬件可能是不同厂商生产的,型号可能不同;操作系统可能是Unix、Windows等不同软件;计算机系统可能分布于不同的地点;用户可能在不同的时间使用应用软件。图中看似分布在不同地点不同平台上的应用软件其实是一个整体,如图1-6所示。
图1-6 网络分布计算环境
1.1.4 组件技术
在从主机计算向网络分布计算过渡的过程中,软件系统的规模和复杂度呈几何级数增加,程序设计语言和方法都面临着前所未有的挑战。
面对规模越来越大的软件,为了降低复杂度,提高开发效率,人们提出了组件式程序设计方法。组件式方法是“搭积木”思想在程序设计领域的开拓性应用。因为组件(积木)具有可重用性和互操作性,可以通过组件集成来高效地构建复杂的软件系统。
20世纪90年代以来,出现了三种典型的组件技术,即CORBA、COM、JavaBeans。
1. CORBA
CORBA (Common Object Request Broker Architecture,公共对象请求代理体系结构)是OMG(Object Management Group,对象管理组织)于1991推出的组件技术。OMG于1989年由3COM、Apple、美国航空、佳能、DG、HP、IBM、Philips、Unisys和Sun等多家公司联合创建,是一个开放型非营利组织,负责制定和维护协同企业应用的计算机工业规范。发展至今,已有八百多家公司、大学和国际组织参与其中。OMG制定的其他标准还有UML(Unified Modeling Language,统一建模语言)和IDL(Interface Definition Language,接口定义语言)等。
2. COM/DCOM/COM
COM(Component Object Model,组件对象模型)是微软公司于1993年提出的一种组件技术,是软件对象组件之间相互通信的一种方式和规范,是一种平台无关、语言中立、位置透明、支持网络的中间件技术。DCOM(Distributed COM,分布式COM)和COM 是COM的发展,分别于1996年和1999年推出。
3. JavaBeans
JavaBeans是Sun公司于1997年在Java的JDK 1.1中引入的组件技术,是一个面向对象程序设计接口,可以用它创建可重用的应用程序或能在主流网络操作系统平台配置的程序模块(组件)。
CORBA、COM、JavaBeans各有优缺点,都面临着不断改进和发展的要求。例如, 继CORBA 1.0后,OMG又分别于1996年8月推出2.0、2002年7月推出3.0,目前的最新标准是2004年3月12日推出的CORBA 3.0.3。Sun于2000年随J2EE(Java 2 Platform, Enterprise Edition,Java 2平台企业版)引入服务器端的组件技术EJB(Enterprise JavaBeans,企业级JavaBeans)和网页编程工具JSP(Java Server Page,Java服务器网页),使得Java成为一种功能完备的分布式计算环境。COM源自OLE(Object Linking and Embedding,对象链接和嵌入),OLE源自DLL(Dynamic Link Libraries,动态链接库),ActiveX控件是COM的具体应用,ATL(Active Template Library,活动模板库)是开发COM的主要工具,也可以用MFC直接开发COM。继COM 后,微软又于2002年推出了.NET框架,其核心技术就是用来代替COM组件功能的CLR(Common Language Runtime,公共语言运行库)。
这些组件技术是各大公司为使软件开发更符合人类的行为习惯而开发的新技术。利用这些技术,可以开发出各种各样的功能组件,将它们按需组合,就可以构成复杂的应用系统。
这样做不仅能提高软件定制的效率和软件产品的质量,也使得软件系统易于升级和维护。例如可以“现场”替换软件系统中的组件、可以在多个软件系统中重用同一个组件、可以方便地将组件部署到分布式网络环境等。
CORBA、COM、JavaBeans等组件技术都与面向对象技术密切相关。要掌握组件式程序设计方法,面向对象技术是关键。
1.1.5 面向对象技术
现在回到本章开篇主题“面向对象程序设计”,中英对照如下:
———————————————————————————————
Object-oriented programming (OOP) is a programming paradigm
面向对象程序设计(OOP)是一种程序设计范式,
based on the concept of “objects”,
它基于“对象”概念,
which may contain
对象可以包含:
data, in the form of fields, often known as attributes;
数据,以字段的形式体现,常称为属性;
and code, in the form of procedures, often known as methods.
代码,以过程的形式体现,常称为方法。
————————————————————————————————
“对象”,也许是学习程序设计技术的路上最易明白的概念了。我们看到的每个从身边走过的人,就是一个个具体的对象。对象有其自身的特性,如年龄、身高等,也有其自身的行为,如走路、微笑等。对应到程序设计,由于派别或翻译等原因,很容易把这些原本简单的概念弄混淆了。这涉及三个“世界”的术语转换问题,如图1-7所示。
图1-7 三个世界的变换
首先是从现实世界向概念世界过渡。例如,现实世界中的一个人事部门,有许多实实在在的员工“实体”。要对这些员工进行有效的管理,需要对他们进行了解。人事部门经理分析这些员工,在大脑(概念世界)中对员工信息进行抽象,形成了自己的看法(关注点),建立了信息模型(即抽象数据类型),如图1-8所示。
图1-8 员工信息
当然也要关注他们的行为表现,如签到、写作、说话等。
作为软件工程师,要为这个部门经理开发一套人事管理软件,就得把部门经理的概念模型转换成程序世界的“类”,如图1-9所示。
图1-9 员工类
程序世界的类相当于一个模板,利用这个模板可以创建具体的“对象”。例如:
Employee emp = new Employee(); //用Employee类实例化一个emp对象
emp.name = “张三”; //emp对象映射了现实世界中张三这个员工
本书第2章、第3章将具体介绍数据字段的表示、代码过程的实现。
1.2 .NET框架
微软公司于2000年6月推出了用来代替COM的.NET。这是微软面向第三代Internet的计算计划,是微软继用Windows取代DOS之后的又一项战略性举措。.NET是一个分布式计算环境,提供了一个安全、一致、标准的模型和环境,简化了分布式应用程序开发的难度,能大幅度地提高软件系统的生产率和质量。它面向异构硬件平台、操作系统和网络,为软件提供最大限度的可重用性、互操作性和可扩展性,以实现软件系统之间的智能交互和协同工作,提高整个网络的利用率和效率,特别是企业级的系统集成和资源优化,给开放性企业的生产力水平带来质的飞跃。目前,.NET已成为Windows应用和Web应用的主流开发模型。
1.2.1 微软技术的发展
微软技术的发展路线如图1-10所示。
20世纪90年代末,使用Microsoft平台的Windows程序设计演化出了许多分支:大多数程序员使用的是Visual Basic、C或C ,使用C和C 的程序员中,有的使用Win32 API(Application Programming Interface,应用程序设计接口),有的使用MFC(Microsoft Foundation Classes,微软基础类库),有的程序员已经转向COM。
这些技术都有自身的问题。例如,Win32 API不是面向对象的,使用它比使用MFC需要更多的工作量;MFC是面向对象的,但缺乏一致性;COM概念简单,但实际编码很复杂且代码也较难阅读。况且,这些程序设计技术主要针对的是桌面应用开发,对Internet则显得力不从心。
图1-10 微软组件技术的发展历程
早期的程序代码短小精悍。随着问题规模的越来越大,程序代码也越来越复杂。难以阅读的程序代码必然会给开发和维护带来困难。于是,程序员开始重温那“激情燃烧的岁月”,希望用一种集成的、面向对象的开发框架把一致性和优雅性带回到程序中,回归到代码简洁的时代。为此,他们对下一代计算平台提出了新的要求,希望达到以下目标。
1. 运行环境(Execution Environment)
(1) 安全(Security);
(2) 多平台(Multiple Platforms);
(3) 性能(Performance)。
2. 开发环境(Development Environment)
(1) 面向对象的开发环境(Object-Oriented Development Environment);
(2) 一致的程序设计体验(Consistent Programming Experience);
(3) 用行业标准进行沟通(Communication Using Industry Standards);
(4) 简化开发(Simplified Development);
(5) 语言独立(Language Independence);
(6) 互操作(Interoperability)。
为了满足这些需求,微软公司开始开发一个能满足这些目标的代码运行环境和应用开发环境,这就是.NET。
.NET将Internet作为构建新一代操作系统的基础,在理念中包含了对操作系统和网络设计思想的延伸。微软计划用.NET彻底改变软件的开发、发行和使用方式,构建第三代Internet平台,解决各种协同合作的问题,实现信息的高效沟通和分享,让整个Internet为人们提供全方位的服务。
1.2.2 .NET规范及其实现
微软为.NET技术制定了一套完整的规范CLI(Common Language Infrastructure,公共语言基础结构)。CLI是针对可执行代码格式,以及能执行该代码的运行环境的一种技术规范,包括CTS(Common Type System,公共类型系统)、CLS(Common Language Specification,公共语言规范)、CIL(Common Intermediate Language,公共中间语言),以及其他相关的标准化文档、协议和规范等。
CTS定义了一套类型系统的框架,是被编译器、工具和CLI本身所共用的一种统一类型系统。CTS是一个模型,定义了在声明、使用和管理类型时,CLI应遵循的规则。CTS框架使跨语言集成、类型安全和高性能的代码执行成为可能。CLS是一组语言规则的集合,是语言设计者和框架(类库)设计者之间的一种协定。如果某语言符合CLS的所有规则,就是标准的.NET语言,可与其他.NET语言跨语言集成;如果某组件使用了CLS规定的功能,就是标准的.NET组件,可与其他.NET组件交互。CIL则是一种中性的、与处理器无关的指令语言,任何.NET程序都可被编译成CIL代码,CIL代码可以被翻译成不同系统平台的机器代码。
微软在Windows平台实现的CLI就是.NET框架(Framework)。该框架由程序设计工具、FCL(Framework Class Library,框架类库)和CLR(Common Language Runtime,公共语言运行机)构成,如图1-11所示。
图1-11 .NET框架的构成
CLR是程序的运行环境,它管理程序的运行,包括内存管理、垃圾回收、代码安全验证、代码执行、线程管理,以及异常处理等。BCL是一个大型类库,.NET框架和程序员都可以使用。程序员编码和调试时使用的程序设计工具包括Visual Studio 集成开发环境(IDE)、.NET兼容的编译器(例如C#、Visual Basic .NET、F#、IronRuby、managed 等)、调试器,以及诸如ASP.NET、WCF的Web服务器端开发技术。
CLR改变了传统的主机计算结构,如图1-12所示。
图1-12 基于CLR的主机计算环境
可以看出,由于用.NET语言开发的应用程序运行在CLR上,因此,CLR相当于操作系统之上的又一层虚拟机。CLR对程序执行的细节进行了包装,程序员无须关注程序的执行环境,只需专注于程序的业务逻辑和功能流程,从而提高了开发效率。
1.3 C#程序设计语言
20世纪80年代以来,C/C 一直是使用最为广泛的商业化程序设计语言。C/C 具有复杂的底层控制能力,但程序的安全性缺乏保障,且学习周期长,开发效率低。软件业迫切需要一种基于Web标准的全新程序设计语言,将底层系统控制和高端应用开发紧密结合起来,在控制力和生产率之间达到良好的平衡,C#语言应时而生。
1.3.1 C#语言的特点
C# is a simple, modern, general-purpose, object-oriented programming language.
——摘自https://www.microsoft.com/net/
C#是一种简单、现代、通用、面向对象的程序设计语言。
C#语言的语法与C/C 、Java风格类似,支持简单异步模式(simple async patterns)、语言集成查询(language integrated queries,LINQ)、自动内存管理(automatic memory management)等机制,可用于移动(mobile)、Web、云(cloud)、桌面(desktop)、游戏(gaming)、物联网(IoT)等应用软件的开发。随着.NET技术的普及,C#语言成为.NET平台最受欢迎的开发语言。
C#从C/C 发展而来,在继承C/C 强大功能的同时,汲取了Java等多种语言的精华,兼有Delphi等RAD(Rapid Application Development,快速应用开发)语言的高效性,具有语法简洁、面向对象、与Internet紧密集成、安全高效、灵活、兼容性好等特点。作为.NET平台的核心语言,C#能充分享受CLR所提供的服务,可方便地与VB.NET、F#等其他.NET兼容语言开发的应用程序或组件进行集成和交互。
C#底层控制能力强,高端应用开发快。它就像一把飞刀,不花哨也不滞重,看上去十分简单,反复练习才能运用自如。庸手只能用它削削苹果,高手却能百步穿杨。
C#的学习包括C#语言本身、FCL类库两大部分。前者简洁,易学易用;后者庞杂,需反复琢磨,掌握类库的使用规律,持之以恒,就能成为个中高手。
1.3.2 Hello, World
“Hello, World”是跨入一门新语言的门槛,经典的C#代码如下:
using System;
namespace SayHi
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(“Hello, World!”);
}
}
}
评论
还没有评论。