Объектно-ориентированный вопрос - PullRequest
3 голосов
/ 03 апреля 2011

Я недавно дал часть курсовой работы, и мой учитель сказал, что мой подход неправильный, и мне сняли оценки. Я был бы признателен, если бы кто-то мог сказать мне, что я сделал неправильно и как я могу это исправить .. (игнорируйте синтаксис, но идея есть, это было в цели c, но я думаю, что тот же принцип применим)

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 ]

3 голосов
/ 03 апреля 2011

Проблема в том, что данное вам задание носит функциональный характер.

Естественно, ваше решение направлено на функциональное решение и отходит от искусственной ориентации объекта, которая требовалась сверху.

Вы можете поместить решение в «истинную» объектно-ориентированную одежду, как того требует ваш учитель (ввод переменных в класс), но, на мой взгляд, это не естественно.

1 голос
/ 03 апреля 2011

Я согласен с Питером Г., это проблема функционального характера, я считаю.Тем не менее, другим решением было бы создание класса 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);
    }
}
1 голос
/ 03 апреля 2011

Ваш учитель может быть не совсем прав,

в ООП у нас есть нечто, называемое «статический класс», которое не содержит свойства уровня экземпляра (динамические свойства), так же, как вы реализуете код выше,

этот статический класс содержит общие методы, которые используются другими классами

например, в псевдокоде:

<b>
//class for translating phrases
class translator {

  static string translate(string phrase,string destination_language) {
    //return the 'phrase' in 'destination_language'
  }
}
</b>
0 голосов
/ 03 апреля 2011

Это, вероятно, больше похоже на то, что мог бы хотеть ваш учитель (на псевдо-ООП-языке):

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 может быть создан различными способами, новызывается всегда одинаково (и, например, заменяется во время выполнения другим объектом, который вычисляется другим способом).Это идиома "функтор".

0 голосов
/ 03 апреля 2011

Ваш инструктор, вероятно, хотел бы, чтобы вы могли написать

object3.calculate(object1, object2);

, а не просто поместить функцию в класс и вызвать объектно-ориентированный.

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

не более "объектно-ориентированный", чем

namespace Calculations
{
    int calculate(int a, int b);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...