【心得】从电梯看OO与PO

本文涉及个人对于面向对象(简称:OO),与面向过程(简称:PO)的理解,并通过电梯进行论述。


从能动的电梯开始

  • 第一步我们的目标是写一个能动的电梯,要求如下:
    • 能通过告诉他去第几层来移动到第几层。
    • 能告知移动合不合法
    • 能告诉大家他现在在第几层。
  • PO写法:
    • 变量:floor:存放当前楼层。
    • 常量:MAX:存放最高楼层。
    • 函数:
      • moveTo:将电梯移动到目标楼层。
      • isLegal:判断电梯目标楼层是否合法。
  • OO写法:
    • 类:elevator:
      • 变量·私有:floor:存放当前楼层。
      • 常量·私有:MAX:存放最高楼层。
      • 函数·公有:
        • 构造与析构函数。
        • moveTo:将电梯移动到目标楼层。
        • isLegal:判断电梯目标楼层是否合法。
        • getFloor:返回当前楼层。

这里并不能看出OO与PO的大区别,只能看出OO比PO多了一个类,一个构造与析构函数,一个getFloor函数,那么这些是不是多余的呢?


电梯的第一个客人

  • 这一次我们的电梯迎来了第一个客人,这会任务也很简单,需要把客人送到指定楼层再接下一个客人,要求如下:
    • 接受客人的请求方向,把电梯移动过去接客人。
    • 接受电梯的请求楼层,把电梯移动过去送客人。
    • 重复以上两步。
  • PO写法:
    • 分析:这回我们需要一个新的变量goal,来储存客人在第几层请求。之后使用moveTo移动过去,在储存客人要去几层,再moveTo过去,然后在外面套一个循环,就OK了。
    • 事例代码:
#include<一堆头文件> 

void moveTo(int goal){
    移动到goal; 
}

bool isLegal(int goal){
    判断是否合法; 
}

int main(){
    int goal;
    int floor;
    
    const int MAX;
    
    while(有输入){
        处理输入;
    } 
    
    return 0;
}
  • OO写法:
    • 分析:给类添加一个私有变量goal,添加公有方法setGoal,更改方法moveTo为私有
    • 事例代码:(不存在的)

猜你喜欢

转载自www.cnblogs.com/jhy16193335/p/8982304.html