Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2010, 13:43   #1
Tiam
Новичок
Джуниор
 
Регистрация: 16.11.2010
Сообщений: 5
По умолчанию ООП. Как лучше реализовать?

Здравствуйте всем.
Собственно сабж:
Есть встроенная структура
Код:
struct MqlRates
  {
   datetime time;   
   double   open;      
   double   high;       
   double   low;        
   double   close;        
   long     tick_volume;  
   int      spread;       
   long     real_volume;  
  };
У меня есть класс в котором я эту структуру использую,
в классе есть метод, так вот вопрос:
Как лучше организовать метод:

Код:
void MyMethod(MqlRates rates)
{
    double body=rates.open-rates.close;
... 
...
}
или
Код:
void MyMethod(double open, double close)
{
    double body=open-close;
...
...
}
То есть передавать в метод весь объект и потом использовать нужные поля или передавать только нужные поля?

Последний раз редактировалось Stilet; 16.11.2010 в 13:58.
Tiam вне форума Ответить с цитированием
Старый 16.11.2010, 13:59   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Перегрузи эту функцию. Пусть дает возможность и так и так делать.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.11.2010, 14:08   #3
Tiam
Новичок
Джуниор
 
Регистрация: 16.11.2010
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Перегрузи эту функцию. Пусть дает возможность и так и так делать.
Сори что код не поставил(

Так зачем мне две функции с одинаковым функционалом?
Мне кажется, что логичней передавть именно целиком объект, а не конкретные поля, чтобы избежать ошибок при вызове метода, поскольку, можно же и ошибиться в передаваемых полях. Я вот только не знаю, как это на производительности скажется?
Tiam вне форума Ответить с цитированием
Старый 16.11.2010, 14:13   #4
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от Tiam Посмотреть сообщение
Так зачем мне две функции с одинаковым функционалом?
Так удобней. Незачем если Вы будете пользовать код только сами и никто другой. Но тогда данный вопрос не должен возникать впринципе.

Цитата:
Мне кажется, что логичней передавть именно целиком объект, а не конкретные поля, чтобы избежать ошибок при вызове метода, поскольку, можно же и ошибиться в передаваемых полях.
Нравится мне эта изотерика . Что если Вы ошибетесь в передаваемом объекте? Где логика?

Цитата:
Я вот только не знаю, как это на производительности скажется?
Объект в большинстве случаев передать медленней (обычно передается ссылка на него, но потом все равно надо читать поля). Это критично в Вашей задаче?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 16.11.2010, 14:27   #5
Tiam
Новичок
Джуниор
 
Регистрация: 16.11.2010
Сообщений: 5
По умолчанию

Цитата:
Нравится мне эта изотерика . Что если Вы ошибетесь в передаваемом объекте? Где логика?
Логика есть.
Допустим, у Вас есть, объект куб, обладающий свойствами длина, ширина, высота, цвет, плотность, материал, и т.д. , но Вам нужно посчитать его объем. В этом случае можно передать в метод, сам объект, а можно только нужные для вычисления длину, ширину и высоту. В коде понятней будет, или так
Код:
Cube cube;
cube.CalculateVolume(Cube cube);
или так
Код:
Cube cube;
cube.CalculateVolume(double width, double height, double length);
В случае с кубом все просто, а если какой сложной объект, то с передаваемыми параметрами и запутаться можно)
Цитата:
Объект в большинстве случаев передать медленней (обычно передается ссылка на него, но потом все равно надо читать поля). Это критично в Вашей задаче?
Не критично, просто задумался.
Tiam вне форума Ответить с цитированием
Старый 16.11.2010, 14:34   #6
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от Tiam Посмотреть сообщение
Логика есть.
Допустим, у Вас есть, объект куб, обладающий свойствами длина, ширина, высота, цвет, плотность, материал, и т.д. , но Вам нужно посчитать его объем. В этом случае можно передать в метод, сам объект, а можно только нужные для вычисления длину, ширину и высоту. В коде понятней будет, или так
Код:
Cube cube;
cube.CalculateVolume(Cube cube);
Если это логика, то я птица Финист . Почему куб должен вычислять объем другого куба? Извините, но это бред. Что если Вы передадите не тот куб? Я к чему веду - такой вариант защищает Вас от ошибок столько же сколько и второй.

Цитата:
или так
Код:
Cube cube;
cube.CalculateVolume(double width, double height, double length);
В случае с кубом все просто, а если какой сложной объект, то с передаваемыми параметрами и запутаться можно)
Как? Как Вы здесь запутаетесь? Здесь же черным по белому написано ширина, высота, длина. Не вижу причин для ошибки. Если же перепутать местами? Так я уже писал для второго примера - что если Вы и кубы местами перепутаете? Нужно вычислить для одного, а вычислите для другого? Это просто самообман. Вероятность ошибки одинакова в обоих случаях и зависит совсем не от передаваемого параметра.

И еще раз - куб не должен вычислять объем другого куба. Это кубам не свойственно. Этим должен заниматься кто-то другой, тогда и вероятность ошибки также снизится..
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 16.11.2010 в 14:37.
Utkin вне форума Ответить с цитированием
Старый 16.11.2010, 15:03   #7
Tiam
Новичок
Джуниор
 
Регистрация: 16.11.2010
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Если это логика, то я птица Финист . Почему куб должен вычислять объем другого куба? Извините, но это бред. Что если Вы передадите не тот куб? Я к чему веду - такой вариант защищает Вас от ошибок столько же сколько и второй.
Вы меня не правильно поняли, точнее я привел неправильный пример.
Самый подходящий пример в первом посте.
Если не брать в расчет перегрузку, то какой бы Вы из двух методов (первого поста) выбрали.

Я имел ввиду, что, объект, определенные поля которого мы передаем в функцию (что она с ним делает нас не касается), лучше передать целиком и пусть код внутри функции разбирается что с ним делать, а не передавать только нужные поля.
Хотя, я уже запутался
Tiam вне форума Ответить с цитированием
Старый 16.11.2010, 15:12   #8
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

В твоем случае я бы оформил кубы отдельным юнитом (или как там для С++) Ввел бы дополнительный класс, например геометр, или правильней стереометр, который бы и занимался вычислением объемов кубов, шаров и т.д. То есть перегрузка была бы по объектам класса. Для твоего примера первый вариант. Если же оставлять все как есть у тебя, то оба варианта.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 16.11.2010, 15:19   #9
Tiam
Новичок
Джуниор
 
Регистрация: 16.11.2010
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
В твоем случае я бы оформил кубы отдельным юнитом (или как там для С++) Ввел бы дополнительный класс, например геометр, или правильней стереометр, который бы и занимался вычислением объемов кубов, шаров и т.д. То есть перегрузка была бы по объектам класса. Для твоего примера первый вариант. Если же оставлять все как есть у тебя, то оба варианта.
Я не про кубы...
Забудь кубы)
Я про самый первый пост.
Tiam вне форума Ответить с цитированием
Старый 16.11.2010, 15:32   #10
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Оба варианта. Серьезно, мне так удобней.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ООП. Как лучше поступить? Kn793 Свободное общение 15 05.04.2010 09:59
ООП как лучше, и почему так. optimist32 Общие вопросы C/C++ 6 15.11.2009 04:43
Паскаль ООП. Примеры программ с использованием ООП SeЯgey Помощь студентам 5 13.05.2009 21:55