面向对象的问题

时间:2011-04-03 10:51:16

标签: c++ objective-c object

我最近做了一个课程作业,我的老师说我的方法是错的,我的标记被取消了。如果有人能告诉我我做错了什么以及如何解决这个问题,我将不胜感激。(忽略语法,但想法就在那里,这是客观的,但我想同样的原则也适用)

main class()
{

int variable1; 
int variable2; 
int variable3; 

CalculationClass object1; 
variable3 = object1.calculate(variable1,variable2); 

}

CalculationClass()
{
           int calculate(int a, int b)
           {
              int c;
              c = a+b;
              return c;
           }
}

在反馈中,老师说我的面向对象的方法是错误的。因为我在计算类中没有任何变量,所以我可以将所有内容放在主类中并从那里调用它。

这是真的吗?怎么解决这个问题? (我只是把变量放在计算类中吗?? - 我发现通过参数传递变量更容易。)

感谢您的帮助

5 个答案:

答案 0 :(得分:3)

问题在于赋予你的作业具有功能性。

当然,您的解决方案转向功能性解决方案,远离顶部所需的人工面向对象。

您可以将解决方案放在像教师要求的“真正的”面向对象服装中(将变量放入课堂)但在我看来并不自然。

答案 1 :(得分:1)

你的老师可能不完全正确,

在OOP中我们有一个名为'静态类'的东西,它不包含 实例级属性(动态属性), 与实现上述代码的方式相同,

此静态类包含其他类使用的共享方法

例如伪代码:


//class for translating phrases
class translator {

  static string translate(string phrase,string destination_language) {
    //return the 'phrase' in 'destination_language'
  }
}

答案 2 :(得分:1)

我同意Peter G.这是一个功能性问题,我相信。然而,另一种解决方案是创建一个类Number,一个包含计算和其他转换方法的int包装器,以及您可能需要的功能。

示例:

Number num1 = Number(variable1);
Number num2 = Number(variable2);
Number num3;

num3 = num1.plus(num2); //Personally I believe this looks more OOP ;)

这将以某种方式实现:

class Number(){
    int var;

    Number(int v){var = v;}//constructor

    Number plus(Number otherNum){//calculation
        return Number(this.var + otherNum.var);
    }
}

答案 3 :(得分:0)

您的教练可能希望您能够写

object3.calculate(object1, object2);

不只是将一个函数放在一个类中并调用该面向对象。

class Calculations
{
     int calculate(int a, int b);
}

不再是“面向对象”而不是

namespace Calculations
{
    int calculate(int a, int b);
}

答案 4 :(得分:0)

这可能更像是老师想要的(用伪OOP语言):

class Computation
{
    private int a, b;

    public Computation(int a_, int b_)
    {
        a = a_; b = b_;
    }

    public int compute()
    {
        return a + b;
    }
};

int main()
{
    int v1, v2;
    ...
    Computation c(v1, v2);
    v3 = c.compute();
}

这里的要点是类Computation可以用各种不同的方式构造,但总是以相同的方式调用(例如,在运行时由另一个计算不同方式的对象替换)。这是“函子”的习语。