计算机软件
2026/1/1大约 5 分钟
第3章 计算机软件
3.1 计算机软件概述
3.1.1 计算机系统构成
- 计算机系统 = 硬件 (Hardware) + 软件 (Software)。
- 两者缺一不可。
- 关系:
- 互相依存: 硬件是基础,软件是灵魂。
- 无严格界线:
- 软化: 硬件功能由软件实现。
- 硬化: 软件功能由硬件实现 (固件)。
- 协同发展: 相互促进。
3.1.2 程序、数据与软件
- 程序 (Program):
- 一组计算机能识别和执行的指令 (Instructions)。
- 特性: 完成确定任务、使用计算机语言描述、预先存储。
- 数据 (Data):
- 程序处理的对象 (输入数据) 和处理结果 (输出数据)。
- 软件 (Software):
- 定义: 程序 + 数据 + 文档。
- 文档 (Documentation): 开发、维护和操作相关的资料 (如说明书、设计报告)。
- 区别: "软件"是宏观概念 (产品/工程),"程序"是技术代码层面。
3.1.3 软件分类
- 系统软件 (System Software):
- 功能: 管理、监控和维护计算机资源,作为应用软件的平台。
- 核心: 操作系统 (Operating System)。
- 包括: 操作系统、语言处理程序 (编译器)、数据库管理系统 (DBMS)、系统服务程序 (驱动、工具)。
- 应用软件 (Application Software):
- 功能: 解决具体应用问题。
- 分类:
- 通用软件: Office, 浏览器, Photoshop, 游戏等。
- 定制软件: 户籍管理系统, 订票系统等。
3.1.4 软件发展与版权
- 发展阶段:
- 40s-50s: 机器语言/汇编,科学计算。
- 50s-60s: 高级语言,操作系统,出现软件危机 (开发效率低,质量难保)。
- 60s至今: 软件工程,软件测试,项目管理。
- 软件版权:
- 受《著作权法》保护。
- 许可 (License): 用户购买软件通常只获得使用权,而非版权 (复制/修改/销售权)。
- 类型: 商品软件 (付费)、共享软件 (试用后付费)、免费软件 (Freeware)、自由软件 (Open Source, 源代码公开)。
3.2 操作系统 (Operating System, OS)
3.2.1 操作系统概述
- 定义: 管理计算机硬件与软件资源的程序,是计算机系统的核心。
- 地位: 紧贴硬件的第一层软件,是其他软件的运行平台。
- 作用:
- 资源管理者: 协调 CPU、内存、外设的使用。
- 人机接口: 为用户提供操作界面。
- 应用基础: 为程序员提供 API (系统调用)。
3.2.2 操作系统的五大功能
- 处理机 (CPU) 管理:
- 进程 (Process): 运行中的程序。
- 多任务处理: 通过分时技术让多个程序并发运行。
- 存储管理:
- 分配内存空间,防止程序间冲突。
- 虚拟存储: 利用硬盘空间扩展内存容量。
- 设备管理:
- 管理 I/O 设备,通过驱动程序控制硬件。
- 文件管理:
- 按文件名存取,管理目录结构、存取权限、磁盘空间。
- 用户接口:
- 命令行 (CLI): 键入命令。
- 图形用户界面 (GUI): 窗口、图标、鼠标操作。
- 系统调用 (API): 供程序开发调用的内核函数。
3.2.3 常见操作系统
- 个人电脑 (PC):
- Windows: 微软开发,市场占有率最高。
- macOS: 苹果电脑专用。
- Linux: 开源内核,广泛用于服务器和嵌入式。
- 移动端:
- Android: 基于 Linux 核心,开源。
- iOS: 苹果移动设备专用。
- 服务器/大型机: Unix, Linux, Windows Server.
3.3 程序设计语言 (Programming Language)
3.3.1 程序设计语言基础
- 程序: 为了解决某个问题而采用程序设计语言编写的一个指令序列。
- 语言三要素:
- 语法: 符号的组合规则 (结构和形式)。
- 语义: 记号所表达的含义。
- 语用: 程序员与记号之间的关系。
3.3.2 程序设计语言分类
- 机器语言:
- 二进制代码表示,CPU 直接执行。
- 缺点: 难记、难写、难改,不同 CPU 不兼容。
- 汇编语言:
- 使用助记符 (如 MOV, ADD) 代替二进制。
- 需经过汇编程序翻译。
- 仍属于低级语言,依赖于具体计算机。
- 高级语言:
- 接近自然语言和数学公式,不依赖具体机器 (可移植)。
- 必须翻译成机器语言才能运行。
3.3.3 程序设计语言处理系统
- 翻译方式:
- 编译方式 (Compilation):
- 将源程序全部翻译成目标程序 (
.obj),再链接成可执行文件 (.exe)。 - 特点: 运行效率高。
- 例子: C, C++, Java, Pascal。
- 将源程序全部翻译成目标程序 (
- 解释方式 (Interpretation):
- 逐句翻译并立即执行,不产生目标程序。
- 特点: 开发调试灵活,运行效率相对较低。
- 例子: Python, JavaScript, BASIC, MATLAB。
- 编译方式 (Compilation):
3.3.4 常见高级程序设计语言
- 发展历程:
- 50年代: Fortran (科学计算)。
- 60年代: COBOL (商业), BASIC (简单易学)。
- 70年代: C 语言 (简洁、高效、可移植)。
- 90年代起: 面向对象 (Object-Oriented) 成为主流 (C++, Java, C#, Python)。
- 面向对象特征: 封装、继承、多态。
- 面向对象三要素: 属性、事件、方法。
3.4 算法与数据结构 (Algorithm & Data Structure)
3.4.1 算法 (Algorithm)
- 定义: 解决问题的方法和步骤,是软件的核心。
- 基本要求:
- 有穷性: 必须在执行有限步后结束。
- 确定性: 每一步含义明确,无二义性。
- 能行性: 每一步都是可执行的。
- 输入与输出: 有 0 个或多个输入,但至少有 1 个输出。
- 表示方法: 文字叙述、流程图 (直观)、伪代码 (易转为程序)、程序设计语言。
- 算法评价:
- 时间复杂度: 随问题规模 增大时所需的时间开销。
- 空间复杂度: 执行时占用的存储空间大小。
3.4.2 数据结构 (Data Structure)
- 定义: 相互之间存在一种或多种特定关系的数据元素的集合。
- 包含三个层面:
- 逻辑结构:
- 线性结构: 线性表、栈 (Stack, 后进先出)、队列 (Queue, 先进先出)。
- 非线性结构: 树形结构 (一对多)、图形结构 (多对多)。
- 存储结构 (物理结构):
- 顺序存储: 连续空间 (如数组)。
- 链式存储: 离散空间,通过指针连接 (如链表)。
- 数据的运算: 检索、插入、删除、更新、排序。
- 逻辑结构: