我正在用C ++编写一个用于微控制器的程序,我需要编写一个函数来通过连接到它的计算机输入一些数字。
此函数应执行许多不同且定义明确的任务,例如:从计算机获取数据(字符),检查字符是否有效,转换实际数字中的字符以及许多其他字符。作为单个函数编写,它至少会有500行。因此,我将编写一组较短的函数和一个“主”函数,以唯一有意义的顺序调用其他函数。这些函数永远不会在其余代码中调用(当然除了主函数)。最后一件事 - 函数需要相互传递很多变量。
组织这些功能的最佳方法是什么?我的第一个难点是在公共部分创建一个只有“main”函数的类,其他函数和不同函数共享的变量作为私有成员,但我想知道这是不是很好的做法:我认为它不是尊重“类”的C ++概念......例如,使用这个“函数组”我需要做类似的事情:
class GetNumbers {
public:
//using the constructor as what I called "main" function
GetNumbers(int arg1, char arg2) {
performFirstAction();
performSecondAction();
...
}
private:
performFirstAction() {...};
performSecondAction() {...};
...
bool aSharedVariable;
int anotherVariable;
...
};
我实际上需要从计算机输入这些数字:
GetNumbers thisMakesNoSenseInMyOpinion (x,y);
使“main”函数成为普通的类方法(而不是构造函数)似乎更糟糕:
GetNumbers howCanICallThis;
howCanICallThis.getNumbers(x,y);
...
//somewhere else in the same scope
howCanICallThis.getNumbers(r,s);
答案 0 :(得分:0)
这确实是一个软件设计问题。说实话,除非你与其他人分享这个组件,否则我真的会担心它的封装方式。
许多库(新旧)可能会创建一系列以特定方式使用的函数。有时它们具有内置的“状态机”,但没有特定的方式来强制执行功能按特定顺序使用。只要记录良好,这是可以的。一组函数可能以同一个单词为前缀,如果要重复使用,则打包为库,这样有人可以链接到您的dll并包含相应的标题。
https://en.wikipedia.org/wiki/Finite-state_machine
有限状态机(FSM)或有限状态自动机(FSA,复数:自动机),有限自动机,或简称状态机,是计算的数学模型。
组织一组计算的另一种方法是将它们打包为类,允许构造函数接受所需的输入,并且......
functor
(具有重载的()运算符集合的类)这有一些好处,因为如果以后您有多种方法来计算结果,您可以使用称为策略模式的东西即时替换它。
https://en.wikipedia.org/wiki/Strategy_pattern
在计算机编程中,策略模式(也称为策略模式)是一种行为软件设计模式,可以在运行时选择算法。
最后,只要你保持一致,你使用哪个并不重要。如果您希望在给定的语言中创建更“惯用”的东西,那么您必须去那里查看网络上的一些代码,以了解事情是如何完成的。不同的社区喜欢不同的风格,这些风格最终都是主观的。