目录

  • 1 绪论
    • 1.1 本章导读
    • 1.2 计算机程序设计语言的发展
    • 1.3 面向对象方法的由来
    • 1.4 面向对象的基本概念
    • 1.5 面向对象的软件开发
    • 1.6 计算机程序的基本术语
    • 1.7 程序的开发过程
    • 1.8 本章小结
    • 1.9 章节测验
  • 2 C++简单程序设计
    • 2.1 本章导读
    • 2.2 C++语言的产生和特点
    • 2.3 程序实例
    • 2.4 字符集与词法记号
    • 2.5 基本数据类型
    • 2.6 常用运算符与表达式
    • 2.7 语句
    • 2.8 数据的输入和输出
    • 2.9 算法的基本控制结构
    • 2.10 例2输入一个年份,判断是否闰年
    • 2.11 例3比较两个数的大小
    • 2.12 例4输入一个0~6的整数,转换成星期输出
    • 2.13 例5求自然数1~10之和
    • 2.14 例6输入一个整数,将各位数字反转后输出
    • 2.15 例7用do…while语句编程,求自然数1~10之和
    • 2.16 例8输入一个整数,求出它的所有因子
    • 2.17 自定义数据类型
    • 2.18 本章小结
    • 2.19 章节测验
  • 3 函数
    • 3.1 本章导读
    • 3.2 函数的定义与使用
    • 3.3 例1编写一个求x的n次方的函数
    • 3.4 例2数制转换
    • 3.5 例3编写程序求π的值
    • 3.6 例4寻找并输出回文数
    • 3.7 例5公式计算
    • 3.8 例6投骰子的随机游戏
    • 3.9 例7输入两个整数,求平方和
    • 3.10 例8求n!
    • 3.11 例9用递归法计算不同组合数
    • 3.12 例10汉诺塔问题
    • 3.13 函数的参数传递
    • 3.14 内联函数
    • 3.15 带默认参数值的函数
    • 3.16 函数重载
    • 3.17 使用C++系统函数
    • 3.18 本章小结
    • 3.19 章节测验
  • 4 类与对象
    • 4.1 本章导读
    • 4.2 抽象
    • 4.3 封装
    • 4.4 继承
    • 4.5 多态
    • 4.6 类的定义及类成员的访问控制
    • 4.7 对象
    • 4.8 类的成员函数
    • 4.9 例1时钟类的完整程序
    • 4.10 构造函数
    • 4.11 复制构造函数
    • 4.12 例2Point类的完整程序
    • 4.13 析构函数
    • 4.14 例3求游泳池改造预算
    • 4.15 组合
    • 4.16 例4类的组合,线段(Line)类
    • 4.17 前向引用声明
    • 4.18 结构体和联合体
    • 4.19 例5个人银行账户管理程序
    • 4.20 本章小结
    • 4.21 章节测验
  • 5 数据的共享与保护
    • 5.1 本章导读
    • 5.2 作用域与可见性
    • 5.3 例1作用域实例
    • 5.4 例2变量的生存期与可见性
    • 5.5 多文件结构和编译预处理命令
    • 5.6 本章小结
    • 5.7 章节测验
  • 6 数组和指针
    • 6.1 本章导读
    • 6.2 数组
    • 6.3 例1数组的声明与使用
    • 6.4 例2使用数组名作为函数参数
    • 6.5 例3对象数组
    • 6.6 指针
    • 6.7 例4指针的定义、赋值与使用
    • 6.8 例5void类型指针的使用
    • 6.9 例6用3种方法输出int型数组各元素
    • 6.10 例7利用指针数组输出单位矩阵
    • 6.11 本章小结
    • 6.12 章节测验
  • 7 继承与派生
    • 7.1 本章导读
    • 7.2 类的继承与派生
    • 7.3 不同继承方式下类成员的访问控制
    • 7.4 例1Point类公有继承
    • 7.5 例2Point类私有继承
    • 7.6 类型兼容规则
    • 7.7 例3类型兼容规则
    • 7.8 派生类的构造和析构函数
    • 7.9 虚基类
    • 7.10 本章小结
    • 7.11 章节测验
  • 8 多态性
    • 8.1 本章导读
    • 8.2 多态性概述
    • 8.3 运算符重载
    • 8.4 例1复数类加减法运算重载为成员函数形式
    • 8.5 例2将单目运算符“++”重载为成员函数形式
    • 8.6 虚函数
    • 8.7 本章小结
    • 8.8 章节测验
  • 9 异常处理
    • 9.1 本章导读
    • 9.2 异常处理的基本思想
    • 9.3 异常处理的实现
    • 9.4 本章小结
  • 10 2024年秋季学期直播
    • 10.1 2024-09-07 08:00 ~ 2024-09-07 11:25
    • 10.2 2024-09-07 13:40 ~ 2024-09-07 17:05
    • 10.3 2024-09-08 08:00 ~ 2024-09-08 11:25
    • 10.4 2024-09-08 13:40 ~ 2024-09-08 17:05
面向对象的软件开发



软件开发所经历的生命周期

总的来说,软件开发都会经历一下生命周期

  • 分析需求:分析问题领域,了解用户的需求

  • 软件设计:设计软件的总体架构,把整个软件系统划分成大大小小的多个子系统,设计每个子系统的具体结构

  • 软件编码:用选定的编程语言来编写软件功能,实现软件设计阶段所勾画出来的软件蓝图

  • 软件测试:测试软件是否实现特定的功能,以及软件的运行性能

  • 软件部署:为用户安装软件系统,帮助用户正确的使用软件

  • 软件维护:修复软件中存在的BUG,当用户的需求发生变化时(增加新的功能,或更改现有功能的实现方式)修改相应的软件模块

为了提高软件的开发效率,降低软件的开发成本,一个良好的软件系统应具备以下特点

  • 可重用性:减少软件的重复代码,避免重复编程

  • 可扩展性:当软件系统的需求必须放生更改时,可以方便的在现有架构的基础上构建新的子系统,也不需要改变软件系统的现有结构且不影响其它以存在的子系统

  • 可维护性:当软件系统的某个功能需要更改时只需修改相关子系统的少量代码即可,而不需要修改软件系统中的多个子系统。

如何才能使软件系统具备以上特点呢?加入吧整个软件系统分解成多个小的子系统,每个子系统之间相对独立把这些子系统像最积木一样灵活的组装起来构成整个大的软件系统。这样设计出来的软件肯定能获得以上的优良特性。软件系统中的子系统具备以下特性:

  • 结构稳定性:软件设计阶段把一个软件系统划分成更小的子系统时,设计合理,是系统的结构健壮能适应用户变化的需求

  • 可扩展性:当软件必须增减新的功能时,能够在现有子系统的基础上创建出新的子系统,该子系统继承了原有子系统的一些特性,并且还具有一些新的特性,从而提高的系统的可重用性及可扩展性

  • 内聚性:每个子系统只完成特定的功能,每个子系统不会有功能的重叠

  • 可组合性:若干个小的子系统组合起来就成了一个完整的大系统,子系统的可组合性会提高软件的可维护性及可重用性 并简化开发过程

  • 松耦合:每个子系统之间相对独立,修改一个子系统不会影响到其它的子系统。

面向对象开发

咋面向对象的开发方法中把软件系统看成是各种对象的集合,对象就是最小的子系统,一组相关的对象能够组合成更复杂的子系统。面向对象的开发方法具有以下优点

  • 把软件系统堪称是各种对象的集合,这更符合人类的自然思维方式

  • 软件需求的改动往往是功能的改动,而功能的执行者————对象一般不会有太大的变化这使得按照对象设计出来的系统结构比较稳定

  • 对象包括属性(数据)和行为(方法)把对象的数据及方法的实现方式一起封装起来,这使得方法以及与之相关的数据不再分离,提高的子系统的相对独立性,从而提高的软件的可维护性

  • 支持封装、继承、多态和抽象,提高的系统的可重用性、可维护性和可扩展性

对象模型:

在面向对象的分析和设计阶段,致力于建立模拟问题领域的对象模型,建立对象模型包括自底向上的抽象过程也包括自顶向下的分解过节过程。

建立对象模型的第一步使从问题领域入手,彻底搞清用户的需求,然后建立正确的对象模型,开发人员需要进行一下自低向上的抽象思维

  • 吧问题领域的属性和行为抽象成具体的对象

  • 把具有相同属性和行为的对象抽象成类

  • 若多个类中存在共性(具有相同的属性和行为)把这些共性抽象到父类中

在自底向上的抽象过程中,为了使子类能更好的继承父类的属性和行为,可能需要自顶向下的修改,从而使类体系更加合理。由于这种类体系的构造是由具体到抽象,再从抽象到具体,符合人类的思维规律,因此能更好更快的完成任务。