Перейти к содержанию
    

C++ и ООП для микроконтроллеров AVR

Мущщины! Вы бы сначала определились в терминах. :) Что вы понимаете под ООП, например? (Hint: классы С++ как таковые - не ООП; шаблоны - не ООП; перегрузка операций - тоже не ООП; и еще много чего в С++ - не ООП :) ).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

классы С++ как таковые - не ООП;

 

Как это? Класс это и есть описание объекта. Со всеми понтами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как это? Класс это и есть описание объекта. Со всеми понтами.

 

ООП - это программирование, когда программа представляет собой набор взаимодействующих объектов. Классы С++ - это некая усовершенствованная разновидность обычных С-шных струтур. Если вы пишете на plain C и используете структуры - совсем не факт, что у вас ОО-программа.

 

 

Что вы думаете по поводу ООП для микроконтроллеров AVR на языке C++?

 

Солидарен с Tcom - нравится -пишите, не нравится - не пишите.

В ряде случаев, имхо, С++ сильно облегчает жизнь, причем без всякого оверхеда по сравнению с ручным кодированием того же на plain C. С другой стороны, он дает возможность писать в обычном C-стиле. Использовать ли STL, динамическую память, вирутальные функции, шаблоны - это исключительно ваш выбор...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мущщины! Вы бы сначала определились в терминах. :) Что вы понимаете под ООП, например? (Hint: классы С++ как таковые - не ООП; шаблоны - не ООП; перегрузка операций - тоже не ООП; и еще много чего в С++ - не ООП :) ).

Я лично только одно: Организация Освобождения Палестины. :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ООП - это программирование, когда программа представляет собой набор взаимодействующих объектов.

 

Не возражаю, а вот дальше Вы неправы.

 

Классы С++ - это некая усовершенствованная разновидность обычных С-шных струтур.

 

Это неверно. Тут материализм в чистом виде. Количество (усовершенствований) переходит в качество:

 

Класс — это тип, описывающий устройство объектов. Понятие «класс» подразумевает некоторое поведение и способ представления. Понятие «объект» подразумевает нечто, что обладает определённым поведением и способом представления. Говорят, что объект — это экземпляр класса. Класс можно сравнить с чертежом, согласно которому создаются объекты. Обычно классы разрабатывают таким образом, чтобы их объекты соответствовали объектам предметной области.

 

Можно конечно пользовать классы как банальные структуры, но это не будет ООП. Класс - это и есть базовый примитив ООП. Без него, как описателя объектов, ООП не получится - нет нужного способа. Хотя, конечно, можно реализовать ООП средствами Plain C, но зачем?

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как это? Класс это и есть описание объекта. Со всеми понтами.

Класс - это тип, определяемый пользователем. Не более того. ООП - парадигма программирования, в основе которой лежит создание иерархии наследуемых типов с виртуальными функциями (методами), которая дает возможность использовать полиморфизм (в данном случае: переопределяемое на рантайме поведение). ООП начинает рулить там, где мы сразу (на уровне базового класса - родителя) знаем "что" мы хотим, но пока не знаем "как" это сделать. Это "как" будет известно на этапе определения классов-потомков - каждый потомок имеет свое собственное "как". И, построив такую иерархию, мы получаем возможность единообразно рулить разными объектами через интерфейс базового класса. Очень сильно экономит силы и время, когда применяется к месту. Например, даже простейший GUI - канонический пример, где рулит ООП.

 

Что касается накладных, то их там нет. Чтобы на том же С построить ту же функциональность, придется городить массивы указателей на функции, сами функции и т.п. Выйдет ровно то же самое. Только будет гора запутанного кода, и сделать ошибку там куда проще.

 

Классы как таковые можно использовать сами по себе, как пользовательские типы. Никто не заставляет использовать их только в ООП.

 

Шаблоны - это просто параметризованные типы, т.е. механизм создания классов по шаблону. К ООП относятся так же, как и классы.

 

Ну, а прочие средства С++, как перегрузка операторов, исключения, RTTI и др., - это просто всмомогательные средства языка.

 

Если все использовать с пониманием, то никакого оверхеда С++ по сравнению с С не дает, т.к. многие его средства - это абстракции уровня этапа компиляции.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А так, конечно, очень удобно, что в структуру можно нормальным и явным образом добавлять функции. Безусловно. Иногда очень удобно.
Это и в чистом СИ можно устроить через указатели и тоже явным образом:). А вот шаблоны, идеология конструктор-деструктор, перегрузка, наследование, и ещё масса всего - это действительно удобно. Но всеми фичами СИ++ пользоваться на АВР нет возможности, а так-как я идеалист - то для меня нет смысла вообще. Да для программирования под конкретную ОС на ПК СИ++ действительно рулит. Ну и для мощных встраиваемых архитектур несомненно тоже.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Класс - это тип, определяемый пользователем.

 

И описывающий устройство объекта. Все остальные ООПшные пляски оперируют именно объектами. Я утверждаю, что класс - это базис ООП. Однако, если используя классы, не пользовать эти самые пляски, то классы превращаются в банальные структуры. И никакого ООП нет. Т.е. я не вижу смысла проводить различие между применением ООП и классов - если есть классы, но не пользуются методологии ООП, нет смысла говорить о классах - в этом случае они суть просто структуры данных. В этом состоит смысл моего недоуменного "Как это?", возможно, с точки зрения формальной логики и не совсем корректного.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я утверждаю, что класс - это базис ООП.

Зря. Объектно-ориентированные программы можно писать и без классов - даже на ассемблере. И так и делали, пока не появился более удобный для этого инструментарий.

 

Однако, если используя классы, не пользовать эти самые пляски, то классы превращаются в банальные структуры. И никакого ООП нет. Т.е. я не вижу смысла проводить различие между применением ООП и классов - если есть классы, но не пользуются методологии ООП, нет смысла говорить о классах - в этом случае они суть просто структуры данных. В этом состоит смысл моего недоуменного "Как это?", возможно, с точки зрения формальной логики и не совсем корректного.

Нет, классы - это далеко не структуры. Структура (если речь идет о сишной структуре) - это просто агрегатный тип, содержащий в себе один и более других типов. А класс - это тип, определяемый пользователем. Этот тип обладает законченностью - он умеет:

 

  • конструировать себя, как надо пользователю, и грамотно удалять (если надо);
  • он скрывает представление (инкапсуляция, абстракция);
  • он может вводить новые операции на объектами своего типа (путем перегрузки операторов);
  • он, наконец, позволяет строить новые типы на базе существующих (наследование), но это тоже еще не ООП - без полиморфизма.

Поверьте, даже без ООП все эти перечисленные возможности - это очень немало и сильно помогают в софтописании. В том числе и под AVR. Т.к. совершенно не тянут никаких накладных расходов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Объектно-ориентированные программы можно писать и без классов - даже на ассемблере. И так и делали, пока не появился более удобный для этого инструментарий.

 

Конечно. Но для этого необходимо сделать какой-то унифицированный способ описания объектов. Аля класс. Т.е. "тип, описывающий устройство объектов". Не путайте класс-ключевое_слово_плюсов и класс-понятие_ООП(тип, описывающий устройство объектов).

 

Поверьте, даже без ООП все эти перечисленные возможности

 

Что-то разговор не о том. Топикстартер про использование ООП. А мы?

 

И вообще, чего Вы на меня напали? ;) Прочтите топик, разве я где-то утверждал про накладные расходы? Разве я отговаривал топикстартера от ООП?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Программирование в ООП обычно требует динамического выделения памяти.

Что является чистым идиотизмом в embedded. Ибо в автокомпьютере, которые управляет зажиганием не должно быть ситуаций - "не могу выделить память для объекта". А в этм случае динамическое выделение лишается какого-либо смысла. Значит его вполне заменяет статическое. (Т.е. динамическое выделение памяти не имеющее отказов в условиях конечной памяти - есть статическое выделение).

 

И да и нет. Приведу простой пример:

 

Устройство связано с компом по RS485 интерфейсу. По этому интерфейсу поступают команды под них выделяется память динамически. Объекты разных размеров и на этапе написания длина их неизвестна. При нехватке памяти - никакого краха не происходит. Просто приостанавливается подгрузка, до момента разгрузки памяти по мере исполнения команд.

 

Всё это прекрасно работает на AVR.

 

Это я не к ООП, а просто в отрицание что "динамическое выделение памяти ... является чистым идиотизмом в embedded".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И вообще, чего Вы на меня напали? ;) Прочтите топик, разве я где-то утверждал про накладные расходы? Разве я отговаривал топикстартера от ООП?

Да, что вы, я совсем не напал. :) И не на вас - т.е. посты-то ко всем адресованы. Просто мне показалось, что народ считает, что ООП - это любые С++'ные фишки. Вот и постарался внести ясность.

 

За ООП, кстати, не агитирую - эта вещь хороша к месту, и пихать куда попало ее - наживать геморрой. А вот классы сами по себе штука универсальная, и их можно использовать практически без ограничений, в том числе и на AVR. (это тоже ко всем, не только к вам :) ).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

За ООП, кстати, не агитирую - эта вещь хороша к месту, и пихать куда попало ее - наживать геморрой. А вот классы сами по себе штука универсальная, и их можно использовать практически без ограничений, в том числе и на AVR. (это тоже ко всем, не только к вам :) ).

А я бы агитировал за ООП, в условиях корпоративной разработки проектов и их дальнейшего сопровождения альтернативы ООП ИМХО не вижу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в условиях корпоративной разработки проектов

 

Окститесь. Корпоративная разработка для AVR? :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А я бы агитировал за ООП, в условиях корпоративной разработки проектов и их дальнейшего сопровождения альтернативы ООП ИМХО не вижу.

Возможно, вы имели в виду объектное программирование? Т.е. использование классов/объектов? Или именно ООП?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...