事物
假设厂区有很多基站,我们需要实时了解基站的运行情况,那我们怎么去了解基站呢?一种是靠人力,每天巡检,断电开箱(效率太低)。第二种情况通过安装各种传感器,自动上报数据。对于第二种情况我们怎么通过软件形式构造一个虚拟的基站呢?此时我们就需要抽象,把我们需要了解的信息归为类,我们需要了解什么信息呢?厂区有很多基站,所以我们需要区分基站,所以我们需要一个号码,就像身份证号码一样,唯一的。我们也需要给基站去个名字,既然要了解基站的情况,那我们就一个状态值,表示当前是异常还是运行,基站温度也是我们需要了解的。总结起来就是唯一ID,名字,状态值,温度。c++中通过类表示一类事物的属性,以及关联的方法。关联的方法只是方便提供给自己或着使用者调用,让使用者少管闲事,只需获得东西就行,不用关心怎么获得。毕竟这是类内部的事情。
c++中的类
c++ 中的关键字private,protected,public限制属性或者方法的访问性,private,protected对外不开放,public对外开发,使用者可以访问这些属性或者接口。一会我会解释使用者或者被使用者。
enum State
{
STATE_ON,
STATE_OFF,
STATE_EXCEPTION,
STATE_SHORTCUT,
};
class BaseStation
{
public:
explicit BaseStation(std::string sn, std::string name, State state, double tempre)
{
this->sn = sn;
this->name = name;
this->state = state;
this->temperature = tempre;
}
~BaseStation(){}
public:
bool isNormal()
{
return state == STATE_ON?true:false;
}
private:
std::string sn;
std::string name;
State state;
double temperature;
};
int main()
{
BaseStation bs("1234567", "基站1", STATE_ON, 33);
while(true)
{
if (!bs.isNormal()) break;
std::this_thread::sleep_for(std::chrono::milliseconds(1000));//睡眠1秒
}
return 0;
}
在上面代码中我们创建了bs对象,并赋予了属性的值。现在我们解释为什么基于面向对象,在这里main函数是使用者,因为在main函数中创建的bs对象,所以bs对象是被使用者,使用者要想知道该基站是否正常,它只需要调用isNormal就行,在没有出现面向对象之前,如果我们想知道设备是否正常我们要先判断state,然后再确定基站是否正常,但是现在我只需要调用isNormal判断就行,我根本不想关注你里面有啥东西,这就是基于面向对象。使用者只想知道结果,你怎么得到的结果不关心。鉴于篇幅问题,这里给的例子很简单,但是讲的很明白。我以前也是这么理解的。