我是一个C程序员,而且我是cpp.for新手,这是我想用S.O.L.I.D方式编写程序的一些可以理解的原因
我想用Arduino写一个面向对象的c++程序。
有classA、classB、ClassC和classD。
发送
我的问题是
如果我仅仅通过更改一个参数就可以将classA更改为SPI或其他外围设备,我该如何编程SerialPort?(对象或实体应该对扩展开放,但对
很抱歉我的英语不好,如果我不清楚,请在评论中提问
发布于 2019-05-31 06:44:48
嵌入式编程和OOP不是最好的朋友,特别是在像Arduino这样一个非常有限的系统中。在经典的OOP中,这两个问题的答案都是多态性(带有虚函数)。您可以为classA
创建一个接口,并在每个派生类中实现以不同方式获取数据。
class DataGatherer {
public:
virtual char* getData() = 0;
virtual ~IClassA () = default;
};
class SerialPortDataGatherer: public DataGatherer {
public:
char* getData() override {
//any code here
}
};
对于资源较少的解决方案,你可以很容易地将参数映射到一个函数(例如,使用一个简单的switch-case
语句),如果这些函数有共同的格式(比如它们返回数据数组或任何你实际需要的东西)。
enum DataSources {
SerialPort,
SPI
}
char* getDataFromSerialPort() {
// logic here
}
char* getDataFromSPI() {
// logic here
}
char* getData(DataSources source) {
switch(source) {
case SerialPort:
return getDataFromSerialPort();
case SPI:
return getDataFromSPI();
}
请注意,第一个版本可能在某些时候也需要切换大小写(在这里您决定应该使用哪种输入类型)。
https://stackoverflow.com/questions/56386192
复制相似问题