是否可以将算法放入类中?

 sex丶帆布鞋 发布于 2023-02-12 22:20

我有一个复杂的算法.它使用许多变量,在初始化时计算辅助数组,并沿途计算数组.由于算法很复杂,我将其分解为几个函数.

现在,我实际上并没有看到这可能是一种习惯性的方式; 我的意思是,我只是习惯将算法作为函数.用法只是:

Calculation calc(/* several parameters */);
calc.calculate();
// get the heterogenous results via getters

另一方面,将它放入类中具有以下优点:

我不必将所有变量传递给其他函数/方法

在算法开始时初始化的数组在每个函数的整个类中都是可访问的

我的代码更短,(imo)更清晰

混合方式是将算法类放入源文件中,并通过使用它的函数访问它.算法的用户不会看到该类.

有没有人有宝贵的想法可以帮助我?

非常感谢你提前!

3 个回答
  • 我认为将算法(或者更好的是,计算)表示为类是非常惯用的.OOP中对象类的定义之一是"对该数据进行操作的数据和函数".具有输入,输出和中间数据的compex算法完美匹配此定义.

    我已经多次自己完成了这项工作,它简化了(人工)代码流分析,使整个事情更易于推理,调试和测试.

    2023-02-12 22:30 回答
  • 我有一个复杂的算法.这使用了许多变量,在初始化时计算辅助数组,并且还沿途计算数组.[...]

    现在,我实际上并没有从惯用的方式看出这可能是一个类

    事实并非如此,但许多人做同样的事情(我也做了几次).

    不要为算法创建类,而是考虑将输入和输出转换为类/结构.

    也就是说,而不是:

    Calculation calc(a, b, c, d, e, f, g);
    calc.calculate();
    // use getters on calc from here on
    

    你可以写:

    CalcInputs inputs(a, b, c, d, e, f, g);
    CalcResult output = calculate(inputs); // calculate is now free function
    // use getters on output from here on
    

    这不会产生任何问题,并执行相同(实际上更好)的数据分组.

    2023-02-12 22:32 回答
  • 如果客户端代码的抽象是算法,那么您可能希望保留纯粹的功能接口,而不是在那里引入其他类型.另一方面,这种功能在源文件中实现是很常见的,该源文件为内部使用定义了公共数据结构或类,因此您可能具有:

    double calculation( /* input parameters */ )
    {
        SupportClass calc( /* input parameters */ );
        calc.part1();
        calc.part2();
        //  etc...
        return calc.results();
    }
    

    根据代码的组织方式,SupportClass将位于源文件中的未命名命名空间(可能是最常见的情况),或者位于"私有"标头中,仅包含在算法中涉及的源中.

    2023-02-12 22:33 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有