三层架构:业务逻辑层、抽象层、实现层
原则:依赖倒转

案例一:动物园

设计实现:

  • 抽象层:Animal
    提供接口 voice
  • 实现层:Dog、Cat
    分别实现 voice ,发出不同的声音
  • 业务层:main 函数调用,只通过 Animal 的指针统一实现业务

案例二:编写一个 C++ 程序, 计算程序员( programmer )工资

  1. 要求能计算出初级程序员( junior_programmer ) 中级程序员 ( mid_programmer )高级程序员( adv_programmer )的工资
  2. 要求利用抽象类统一界面,方便程序的扩展,比如:新增,计算架构师( architect ) 的工资

设计实现:

  • 抽象层:Programmer
    提供计算工资的接口
  • 实现层:JuniorProgrammer、MidProgrammer、AdvProgrammer
    分别对计算工资接口进行实现
  • 业务层:通过 Programmer 类统一管理,实现业务逻辑,同时业务的可扩展性更强,如新增架构师类型

案例三:电脑组装,面向抽象层编程

  1. 组装电脑有 3 个抽象类,抽象的 cpu,抽象的显卡,抽象的内存。
  2. 现在要求组装两台电脑,一台是 Intel 的 CPU,Intel 的显卡和 Intel 的内存。另一台是 Intel 的 CPU、Nvidia 的显卡和 Kingston 的内存条
  3. 针对抽象层编程。

设计实现:

  • 抽象层:CPU、Card、Storage 三个抽象类和一个组合类 Computer
  • 实现层:IntelCPU、IntelCard、IntelStorage、NvidiaCard、KingstonStorage 派生类
  • 业务层:创建两个 Computer 实例

案例四:几何图形

  1. 设计一个基类 Shape 包含成员函数 Show(), 将 Show() 声明为纯虚函数。
  2. Shape 类公有派生矩形类 Square(正方形)和圆类 Circle(圆形)
  3. 分别定义 Show() 实现其主要集合元素的显示。使用抽象类 Shape 类型的指针,当它指向某个派生类的对象时,就可以通过访问该对象的虚函数成员 Show()
  4. ShowArea() 分别显示各种图形的面积.最后还要显示所有图形的各个面积。要求积累指针数组,数组的每个元素指向一个派生类对象。

设计实现:

  • 抽象层:Shape 抽象类,有 Show()ShowArea() 两个纯虚函数
  • 实现层:Square、Circle 派生类,分别拥有自己的属性,并实现基类纯虚函数
  • 业务层:通过 Shape 指针数组管理

案例五:企业员工信息管理系统

  1. 某小型公司,主要有四类人员:经理、技术人员、销售经理和推销员。
  2. 现在需要存储这些人员的姓名、编号、级别、当月薪水。计算月薪总额并显示全部信息。
  3. 人员编号基数为 1000,每输入一个人员信息编号顺序加 1。
  4. 程序要有对所有人员提升级别的功能。本例中为简单起见,所有人员的初始级别均为 1 级。然后进行升级,经理升为 4 级,技术人员和销售经理升为 3 级,推销员仍为1级。
  5. 月薪计算办法是: 经理拿固定月薪 8000 元;技术人员按每小时 100 元领取月薪; 推销员的月薪按该推销员当月销售额的 4% 提成;销售经理既拿固定月薪也领取销售提成,固定月薪为 5000 元,销售提成为所管辖部门当月销售总额的 5%。

员工信息管理系统关系图

设计实现:

  • 抽象层:Employee,拥有姓名、编号、级别、当月薪水基础属性,并提供 pay()、displayStatus() 两个纯虚函数(接口)
  • 实现层:Technician、Manager、Salesman,SalesManager 虚继承于 Manager、Salesman,且分别有自己的特有属性
  • 业务层:分别显示基本信息并计算工资