|
К знатокам, Локальные переменные. |
|
|
|
 |
Ответов
|
Sep 24 2007, 11:14
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата 3. У меня логика посылки\повтора посылки отделена от логики "выцепления" пакета из потока байт (начало\конец пакета, длина, crc и т.д.). У вас - нет. Если в новом протоколе формат пакетов будет другой, в вашем случае придется по живому резать весь код; в моем - просто написать новый обработчик. У меня тоже отделена. Функция посылки пакета и приема (DO_RS) - одна, а вызов во внешнем цикле (RS_TRX), там и думаем, чего делать при ошибках. Пример реализации я написал выше. Что не так? Цитата 4. Параметры - время ожидания, число повторов и т.д. задаются в одном месте. Их четко видно в коде и легко поменять на другие. У вас они вшиты в ваши функции. Нет проблем. Я делаю #define и все видно. Какие вопросы? Тоже легко поменять... Цитата Лично мне удобнее организовывать код как несколько кирпичиков, которые можно складывать друг с другом в разных вариантах без переделки самих кирпичей, а только за счет "разного цемента" . Т.е., я написал такой кирпичик, отладил его в рамках какого-нибудь проекта, а затем без изменений (вообще!) использую в другом. За счет ООП я могу, имея один кирпич, несколькими строками кода наклепать несколько подобных. Постепенно я улучшаю кирпичи, при этом они автоматически улучшаются и в старых проектах после перекомпиляции (или старые проекты становятся полностью неработоспособными , но это уже проблема осторожного улучшения и использования системы контроля версий). Слова. Именно такими словами тут попрекают тех, кто говорит - "мне не нужен С++". Хорошо, допустим, я в своей уверенности, что цпп - от лукавого, не прав. Я привел пример кода, расскажите, чем бы ооп украсило (или улучшило) данный код? Не забудьте рассмотреть проблему в контексте оптимальности выходного кода.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Sep 24 2007, 11:53
|
Знающий
   
Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153

|
Цитата(Rst7 @ Sep 24 2007, 15:14)  У меня тоже отделена. Функция посылки пакета и приема (DO_RS) - одна, а вызов во внешнем цикле (RS_TRX), там и думаем, чего делать при ошибках. Пример реализации я написал выше. Что не так? У вас ф-ция DO_RS намертво привязана к конкретному уарту, конкретному таймеру и конкретному формату пакетов. При изменении любой из составляющих, вам придется менять ф-цию DO_RS. Если в программе два канала связи с внешними устройствами, вам потребуется ровно две функции DO_RS, даже если протокол одинаков. А если 4 - то 4 ф-ции. А если 8 ... Цитата Нет проблем. Я делаю #define и все видно. Какие вопросы? Тоже легко поменять... Опять же, если "каналов" несколько, то ... Цитата Слова. Именно такими словами тут попрекают тех, кто говорит - "мне не нужен С++". Хорошо, допустим, я в своей уверенности, что цпп - от лукавого, не прав. Я привел пример кода, расскажите, чем бы ооп украсило (или улучшило) данный код? Не забудьте рассмотреть проблему в контексте оптимальности выходного кода. Тут похоже религиозная война начинается Чем украсило - уже рассказал в постах выше. Если переписать это с использованием ООП, то вы получаете легко тиражируемый (без изменений) код. А если у вас много протоколов, то суммарный объем написанного кода уменьшается, вместе с числом потенциальных ошибок. Что касается оптимальности. Да, если использовать общий код, вы получите оверхед по сравнению со специализированным. Там, где этот оверхед принципиален, возможно от общего кода придется отказаться и переписать его руками для конкретного случая. Но таких мест в реальной программе крайне мало, и обычно связь с внешними устройствами по RS-485 (232) таким местом не является. Если используется сколь-нибудь длинная линия, то скорости там порядка 9600. Вы напираете на "ненужность с++", но говорите фактически о ненужности ООП. Никто не мешает использовать ООП и на чистом С. Еще раз обращаю ваше внимание на winAPI. Не знаю, что в Линуксе, но подозреваю - что-то в этом духе...
|
|
|
|
|
Sep 24 2007, 12:23
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата(Непомнящий Евгений @ Sep 24 2007, 14:53)  У вас ф-ция DO_RS намертво привязана к конкретному уарту, конкретному таймеру и конкретному формату пакетов. При изменении любой из составляющих, вам придется менять ф-цию DO_RS. А вам - необходимый метод. Не забываем, что таймера тоже обычно разные. А если мы сделаем таймер програмный, то надо просто озаботиться, чтобы к нему был нормальный интерфейс (тут правда, вы можете подумать, что я заговорил словами, употребляемыми при ООП, однако это не так. Это ООП подхватило слово интефейс  ) Цитата Если в программе два канала связи с внешними устройствами, вам потребуется ровно две функции DO_RS, даже если протокол одинаков. А если 4 - то 4 ф-ции. А если 8 ... Опять же, если "каналов" несколько, то ... Да и хрен с ними, с двумя. Все равно будет примерно одинаково, что класс с разными методами, что две функции. Да и в моем способе две функции будут меньше - потому что результирующий код работает с регистрами, а не с памятью для хранения переменных. Если у меня будет много однотипных каналов, я переделаю этот код так, чтобы и рыбку съесть (т.е. будет одна функция) и остальное сделать (хоть 32) Цитата Тут похоже религиозная война начинается  Нет. Напали на человека, что ему надо на плюсы переписывать, а я предложил посмотреть на алгоритм. Цитата Чем украсило - уже рассказал в постах выше. Если переписать это с использованием ООП, то вы получаете легко тиражируемый (без изменений) код. А если у вас много протоколов, то суммарный объем написанного кода уменьшается, вместе с числом потенциальных ошибок. Что касается оптимальности. Да, если использовать общий код, вы получите оверхед по сравнению со специализированным. Там, где этот оверхед принципиален, возможно от общего кода придется отказаться и переписать его руками для конкретного случая. Но таких мест в реальной программе крайне мало, и обычно связь с внешними устройствами по RS-485 (232) таким местом не является. Если используется сколь-нибудь длинная линия, то скорости там порядка 9600. Да зачем же носить с собой то, что не пригодится в других проектах... Цитата Вы напираете на "ненужность с++", но говорите фактически о ненужности ООП. Никто не мешает использовать ООП и на чистом С. Еще раз обращаю ваше внимание на winAPI. Не знаю, что в Линуксе, но подозреваю - что-то в этом духе... Скажем так, я против повального увлечения ООП. И особенно против высказываний класса "А вот на плюсах (ооп) будет круто, а на чистом си - это плохо, немодно, нет классов, я не могу код использовать в другом проекте, я не могу исправить две строчки/дефайна" и т.д. И просьба. Не надо говорить, что я не делал больших проектов, или мал опыт, или... Ну вообщем, давайте не будем приводить аргументы этого класса. Цитата(dxp @ Sep 24 2007, 15:06)  Вы на какой вопрос отвечаете? Я спросил не "что такое полиморфизм", это я знаю и без википедии. Я спросил, где в обсуждаемом вами с оппонентом примере просматривается оный полиморфизм? Не просматривается. Однако, предвидя один из возможных дальнейших ходов беседы (вот полиморфизм - это да!) ответил в воздух. Извините, поспешил. Могу ли я узнать, будет ли поворот в сторону обсуждения данной проблемы? Если да, то, может быть вы прокомментируете мой ответ (или скажем так, позицию).
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Sep 24 2007, 12:59
|
Знающий
   
Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153

|
Цитата(Rst7 @ Sep 24 2007, 16:23)  А вам - необходимый метод. Не забываем, что таймера тоже обычно разные. А если мы сделаем таймер програмный, то надо просто озаботиться, чтобы к нему был нормальный интерфейс (тут правда, вы можете подумать, что я заговорил словами, употребляемыми при ООП, однако это не так. Это ООП подхватило слово интефейс  ) А вот тут вы не правы. Мне надо будет написать внешнюю функцию, которая будет включать и выключать этот таймер. А в прерывании таймера дернуть метод объекта TCanal. Ф-ция включения и выключения таймера же состоит всего из пары строк и ее написание не сравнимо с копированием всего DO_RS и выкусыванием всех обращений к таймеру. А если таймеры не симметричные - типа 0 и 1/3 в Атмеге128, то геморроя прибавится. Цитата Да и хрен с ними, с двумя. Все равно будет примерно одинаково, что класс с разными методами, что две функции. Еще раз. Класс TCanalXXX у меня не меняется вообще никогда. Почему? Потому что он использует таймер, вызывая две функции, которые реализует "цемент" - а именно - ext_startTimer(byte timerID, uint interval) ext_stopTimer(byte timerID) УАРТ он использует, также вызывая внешние функции. При добавлении нового экземпляра канала, мне надо добавить вполне конкретный маленький кусочек кода в каждую из этих внешних функций. И все. Цитата Да и в моем способе две функции будут меньше - потому что результирующий код работает с регистрами, а не с памятью для хранения переменных. Да. Более того, ваш код быстрее. В нем таймер включается непосредственно, а не вызовом внешней функции. В данном случае, имхо, этот оверхед не принципиален. Если он будет принципиален - я воспользуюсь шаблоном или макросом. Цитата Если у меня будет много однотипных каналов, я переделаю этот код так, чтобы и рыбку съесть (т.е. будет одна функция) и остальное сделать (хоть 32) Ну это и будет ООП в чистом виде. Вы сложите все, что касается канала в структуру и будете передавать всем функциям либо указатель, либо ее номер в некотором глобальном массиве. Вопрос: почему не сделать так сразу? Цитата Да зачем же носить с собой то, что не пригодится в других проектах... А кто знает, что понадобится, а что не понадобится. Не хотите оверхеда - настраивайте директивами препроцессора... Цитата Скажем так, я против повального увлечения ООП. И особенно против высказываний класса "А вот на плюсах (ооп) будет круто, а на чистом си - это плохо, немодно, нет классов, я не могу код использовать в другом проекте, я не могу исправить две строчки/дефайна" и т.д. ООП надо использовать разумно и там, где нужно (как и все остальное  ). Местами он сильно облегчает жизнь. Цитата И просьба. Не надо говорить, что я не делал больших проектов, или мал опыт, или... Ну вообщем, давайте не будем приводить аргументы этого класса. Да я вроде ничего такого не утверждал... Или это тоже "в воздух"? Цитата Не просматривается. Однако, предвидя один из возможных дальнейших ходов беседы (вот полиморфизм - это да!) ответил в воздух. Извините, поспешил. Могу ли я узнать, будет ли поворот в сторону обсуждения данной проблемы? Если да, то, может быть вы прокомментируете мой ответ (или скажем так, позицию). Крут не полиморфизм, а те возможности, которые он дает. Вы говорите: вам нужен костыль на нижнем уровне. Ваше решение: переписать этот самый уровень для данного проекта. Полиморфизм: вытащить специфичный код в отдельный объект и подключать тот вариант, который вам нужен. Если вы не хотите оверхеда - используете не отдельный объект, а макросы. Цитата(dxp @ Sep 24 2007, 16:49)  Кстати, тождество С++ === ООП совсем не верно. С++ - язык гибридный, мультипарадигменный, как его называют. Т.е. в нем вполне гармонично уживаются и процедурная, и объектная, и объектно-ориентированная парадигмы. Всякая из них к своему месту. Насчет гармоничности - я на delphikingdom иногда захожу - так там это смешение парадигм называют скорее свалкой и считают это большим минусом C++ по сравнению с паскалем\дельфи. Впрочем, это уже наверное злостный офтоп.
|
|
|
|
Сообщений в этой теме
SasaVitebsk К знатокам Sep 6 2007, 00:58 dxp Все равно как-то туманно. Вы бы псевдокод привели,... Sep 6 2007, 04:33 alexander55 Цитата(SasaVitebsk @ Sep 6 2007, 04:58) П... Sep 6 2007, 04:53 Сергей Борщ Да, действительно мутновато. Если я правильно поня... Sep 6 2007, 05:02 MALLOY2 Можно еще все нужные переменные загнать в 1 структ... Sep 6 2007, 05:49 Dog Pawlowa Цитата(SasaVitebsk @ Sep 6 2007, 03:58) П... Sep 6 2007, 07:51 alexander55 Цитата(Dog Pawlowa @ Sep 6 2007, 11:51) Я... Sep 6 2007, 09:20 SasaVitebsk Лучше всех понял проблему Сергей Борщ. Я так и сде... Sep 6 2007, 11:27 scifi Цитата(SasaVitebsk @ Sep 6 2007, 15:27) В... Sep 6 2007, 13:05  SasaVitebsk Цитата(scifi @ Sep 6 2007, 16:05) Быстрее... Sep 6 2007, 19:45 Rst7 Цитата(SasaVitebsk @ Sep 6 2007, 14:27) К... Sep 8 2007, 10:49  SasaVitebsk Всем спасибо. Буду осмысливать и пробовать - экспе... Sep 9 2007, 14:54   Rst7 Цитата(SasaVitebsk @ Sep 9 2007, 17:54) В... Sep 10 2007, 06:10 vmp Похоже, здесь основная проблема - это ограничения ... Sep 7 2007, 13:42 dxp Цитата(vmp @ Sep 7 2007, 20:42) Похоже, з... Sep 8 2007, 10:12  Сергей Борщ Цитата(dxp @ Sep 8 2007, 13:12) Там (в EW... Sep 8 2007, 11:39 mdmitry Возможно, поможет сократить время выполнения генер... Sep 8 2007, 22:28 SasaVitebsk Тут проскочила чья-то фраза, что компилятор лучше ... Sep 18 2007, 09:21 alexander55 Цитата(SasaVitebsk @ Sep 18 2007, 13:21) ... Sep 18 2007, 09:49 vmp Цитата(SasaVitebsk @ Sep 18 2007, 13:21) ... Sep 18 2007, 10:45  rezident Цитата(vmp @ Sep 18 2007, 16:45) Для отде... Sep 18 2007, 13:08   vmp Цитата(rezident @ Sep 18 2007, 17:08) Изв... Sep 18 2007, 13:35    Dog Pawlowa Цитата(vmp @ Sep 18 2007, 16:35) Особенно... Sep 18 2007, 16:30     singlskv Цитата(Dog Pawlowa @ Sep 18 2007, 20:30) ... Sep 18 2007, 17:13     IgorKossak Цитата(Dog Pawlowa @ Sep 18 2007, 19:30) ... Sep 18 2007, 18:07      Rst7 Цитата(IgorKossak @ Sep 18 2007, 21:07) Е... Sep 19 2007, 05:23       alexander55 Цитата(Rst7 @ Sep 19 2007, 09:23) А вот C... Sep 19 2007, 05:57       dxp Цитата(Rst7 @ Sep 19 2007, 12:23) А вот C... Sep 19 2007, 12:18        Rst7 Цитата(dxp @ Sep 19 2007, 15:18) Отнюдь. ... Sep 19 2007, 12:34         alexander55 Цитата(Rst7 @ Sep 19 2007, 16:34) ключево... Sep 19 2007, 12:54         dxp Цитата(Rst7 @ Sep 19 2007, 19:34) Хуже бу... Sep 19 2007, 13:21          SasaVitebsk Цитата(dxp @ Sep 19 2007, 16:21) C++ - эт... Sep 21 2007, 18:26           singlskv Цитата(SasaVitebsk @ Sep 21 2007, 22:26) ... Sep 21 2007, 18:54     SasaVitebsk Цитата(Dog Pawlowa @ Sep 18 2007, 19:30) ... Sep 18 2007, 23:46 singlskv Цитата(SasaVitebsk @ Sep 18 2007, 13:21) ... Sep 18 2007, 18:41  zltigo Цитата(singlskv @ Sep 18 2007, 21:41) Соб... Sep 18 2007, 19:34   singlskv Цитата(zltigo @ Sep 18 2007, 23:34) Загну... Sep 18 2007, 19:47    zltigo Цитата(singlskv @ Sep 18 2007, 22:47) лет... Sep 18 2007, 19:57     singlskv Цитата(zltigo @ Sep 18 2007, 23:57) Дела ... Sep 18 2007, 20:16  dxp Цитата(singlskv @ Sep 19 2007, 01:41) А в... Sep 19 2007, 04:18   singlskv Цитата(dxp @ Sep 19 2007, 08:18) С++ на ... Sep 19 2007, 19:59    zltigo Цитата(singlskv @ Sep 19 2007, 22:59) Оче... Sep 19 2007, 21:03     singlskv Цитата(zltigo @ Sep 20 2007, 01:03) Оба э... Sep 19 2007, 21:27      alexander55 Цитата(singlskv @ Sep 20 2007, 01:27) Пов... Sep 20 2007, 04:58       Непомнящий Евгений Цитата(alexander55 @ Sep 20 2007, 08:58) ... Sep 20 2007, 11:42        singlskv Цитата(Непомнящий Евгений @ Sep 20 2007, 15... Sep 20 2007, 16:13         dxp Цитата(singlskv @ Sep 20 2007, 23:13) При... Sep 21 2007, 03:49         Непомнящий Евгений Цитата(singlskv @ Sep 20 2007, 20:13) А н... Sep 21 2007, 04:36          dxp Цитата(Непомнящий Евгений @ Sep 21 2007, 11... Sep 21 2007, 05:50           Непомнящий Евгений Цитата(dxp @ Sep 21 2007, 09:50) P.S. В т... Sep 21 2007, 06:49            dxp Цитата(Непомнящий Евгений @ Sep 21 2007, 13... Sep 21 2007, 07:14             Maddy Цитата(dxp @ Sep 21 2007, 11:14) Ну, не з... Sep 21 2007, 08:46              dxp Цитата(Maddy @ Sep 21 2007, 15:46) Не фле... Sep 21 2007, 09:12               Maddy 2 dxp - Thanks Sep 21 2007, 09:31           alexander55 Цитата(dxp @ Sep 21 2007, 09:50) P.S. В т... Sep 21 2007, 06:51           singlskv Цитата(dxp @ Sep 21 2007, 09:50) Под джит... Sep 21 2007, 20:44            dxp Цитата(singlskv @ Sep 22 2007, 03:44) джи... Sep 22 2007, 16:52             singlskv Цитата(dxp @ Sep 22 2007, 20:52) , давайт... Sep 22 2007, 17:49              zltigo Цитата(singlskv @ Sep 22 2007, 20:49) Кон... Sep 22 2007, 18:11               singlskv Цитата(zltigo @ Sep 22 2007, 22:11) Это в... Sep 22 2007, 19:21                zltigo Цитата(singlskv @ Sep 22 2007, 22:00) Вот... Sep 22 2007, 19:33                 singlskv Цитата(zltigo @ Sep 22 2007, 23:33) Если ... Sep 22 2007, 20:09                  zltigo Цитата(singlskv @ Sep 22 2007, 23:09) Вы ... Sep 22 2007, 20:39                   singlskv Цитата(zltigo @ Sep 23 2007, 00:39) - 16b... Sep 22 2007, 21:13                    zltigo Цитата(singlskv @ Sep 23 2007, 00:13) Да,... Sep 22 2007, 21:36                     singlskv Да, далеко мы уже удалились... от темы,
единствен... Sep 22 2007, 21:47                      zltigo Цитата(singlskv @ Sep 23 2007, 00:47) Т.к... Sep 22 2007, 22:22                dxp Цитата(singlskv @ Sep 23 2007, 02:21) Это... Sep 23 2007, 08:59                 singlskv Цитата(dxp @ Sep 23 2007, 12:59) А если п... Sep 23 2007, 14:35                  dxp Цитата(singlskv @ Sep 23 2007, 21:35) Хор... Sep 23 2007, 16:10                   singlskv Цитата(dxp @ Sep 23 2007, 20:10) То, что ... Sep 23 2007, 17:20                    dxp Цитата(singlskv @ Sep 24 2007, 00:20) Ну ... Sep 24 2007, 03:38                  zltigo Цитата(singlskv @ Sep 23 2007, 17:35) zlt... Sep 23 2007, 19:21                   singlskv Цитата(zltigo @ Sep 23 2007, 23:21) Такие... Sep 23 2007, 21:00                    zltigo Цитата(singlskv @ Sep 24 2007, 00:00) Zlt... Sep 23 2007, 21:52                     singlskv Цитата(zltigo @ Sep 24 2007, 01:52) Дело ... Sep 23 2007, 22:50              dxp Цитата(singlskv @ Sep 23 2007, 00:49) Дав... Sep 22 2007, 18:56    dxp Цитата(singlskv @ Sep 20 2007, 02:59) Вы ... Sep 20 2007, 03:19 SasaVitebsk Большое спасибо за развёрнутый совет. Похоже надо ... Sep 22 2007, 17:17 dxp Цитата(SasaVitebsk @ Sep 23 2007, 00:17) ... Sep 23 2007, 13:52 SasaVitebsk Попробую я вмешаться. Я тоже делал много изделий с... Sep 23 2007, 21:36 Rst7 Лично я в данном моменте (обмен по RSу, например) ... Sep 24 2007, 07:05 Непомнящий Евгений Цитата(Rst7 @ Sep 24 2007, 11:05) Теперь ... Sep 24 2007, 08:35  Rst7 Цитата(Непомнящий Евгений @ Sep 24 2007, 11... Sep 24 2007, 08:51   alexander55 Цитата(Rst7 @ Sep 24 2007, 12:51) Неужели... Sep 24 2007, 09:28   Непомнящий Евгений Вдогонку
Цитата(Rst7 @ Sep 24 2007, 12:51... Sep 24 2007, 09:51    Rst7 Цитата(Непомнящий Евгений @ Sep 24 2007, 12... Sep 24 2007, 10:14 Непомнящий Евгений Мой класс TCanal посылает запрос, ждет получения о... Sep 24 2007, 09:25 Rst7 Цитата(Непомнящий Евгений @ Sep 24 2007, 12... Sep 24 2007, 09:39  Непомнящий Евгений Цитата(Rst7 @ Sep 24 2007, 13:39) Или тут... Sep 24 2007, 10:38 dxp Цитата(Rst7 @ Sep 24 2007, 18:14) Слова. ... Sep 24 2007, 11:28  Rst7 Цитата(dxp @ Sep 24 2007, 14:28) Я что-то... Sep 24 2007, 11:53   dxp Цитата(Rst7 @ Sep 24 2007, 18:53) Ну да..... Sep 24 2007, 12:06   Непомнящий Евгений Цитата(Rst7 @ Sep 24 2007, 15:53) Моя пра... Sep 24 2007, 12:08   dxp Цитата(Rst7 @ Sep 24 2007, 19:23) Не прос... Sep 24 2007, 12:49
2 страниц
1 2 >
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|