代码之家  ›  专栏  ›  技术社区  ›  waiwai933

何时使用oop而不是数组

  •  0
  • waiwai933  · 技术社区  · 15 年前

    什么时候应该使用OOP而不是数组?我的项目规模有关系吗?

    提供一些背景:我正在为我的朋友制作一个小程序。基本上,他想把不同的分数加起来,以便能看到他的成绩。(是的,我知道有商业软件,但这也是一个有趣的练习。)不管怎样,他可能会不时地希望程序重新计算所有分数,所以我必须阅读前面的条目。我对数组比较熟悉,所以我打算使用这些数组,但是OOP可能是一个同样好的工具。所以,基本上,我应该什么时候使用OOP?

    6 回复  |  直到 15 年前
        1
  •  2
  •   rocketmonkeys    15 年前

    与其他人一致,数组和OOP是两个不同且重叠的概念。就像是说,“我今天该怎么工作?准时,还是在车里?”你可以两者兼得,它们是两件不同的事情。

    假设你在程序中有一个人(你的朋友)有一组分数,你把所有的分数加起来找到一个分数,然后用一个“数组”(列表、序列、向量等)

    C++:

    vector<float> myScores;
    myScores.push_back(100.0);
    myScores.push_back(50.5);
    myScores.push_back(10.0);
    float calcGrade(vector<float> scores) {
        float grade = 0;
        for (unsigned int i=0; i<scores.size(); i++) {
            grade += scores[i];
        }
        return grade / scores.size();
    }
    calcGrade(myScores)
    

    蟒蛇:

    scores = []
    scores.append(100.0)
    scores.append(50.5)
    scores.append(10.0)
    def calcGrade(scores):
        grade = 0
        for i in scores:
            grade += i
        return grade / len(scores)
    calcGrade(scores)
    

    但是,如果你的程序中有多个得分多的人,那么你应该考虑使用更好的结构来保存数据。你可以做一个更OOP的方法

    class Person {
        vector<float> scores;
        float calcGrade();
    }
    

    或者简单地用多维数组。但在那一点上,你可能需要一些“OOP”在你的程序中。

        2
  •  11
  •   ChssPly76    15 年前
        3
  •  4
  •   James Black    15 年前

    数组可以在OOP中使用,所以您似乎混淆了概念。

    如果您觉得使用赋值类会有帮助,那么您可以很容易地使用它来建模程序,但是如果您只想使用C并使用静态数组,那么这也可以。

    基本上,决定你想要如何建模你的应用程序,然后,在大多数语言中,你可以使用数组,如果你觉得这是最好的。

    但是,如果你有一个未知的分数,那么把它们放在一个列表中。当你想把它们加在一起的时候,如果你想的话,把列表转换成一个数组,但是如果你只是经常把它们加在一起,我看不出会给你带来什么好处。

        4
  •  1
  •   anno    15 年前

    如果吉米是对的,你会问哪个更好?

    class grades
    {
       public:
          int grade1;
          int grade2;
    };
    

    int grades[2];
    

    都不…你最好用一个int向量。

        5
  •  1
  •   user187568    15 年前

    这家伙在问联想技巧。是使用聚合还是继承。我建议你参考一下 Association (object-oriented programming) . 然后你可以根据你的架构设计来决定。

        6
  •  0
  •   DevFred    15 年前

    比起手写循环,我更喜欢标准函数:

    #include <numeric>
    float sum = std::accumulate(scores.begin(), scores.end(), 0.0f);
    float average = sum / scores.size();