|
Использовать C++ как "улучшенный С" с классами, но в духе С... |
|
|
|
Sep 15 2013, 14:28
|

Частый гость
 
Группа: Участник
Сообщений: 127
Регистрация: 31-10-12
Пользователь №: 74 189

|
Иными словами, в стиле структурного программирования, но с применением некоторых полезных, на мой взгляд, возможностей С++ ("синтаксического сахара"): - namespace — Имена констант/типов/функций обычно снабжаются приставками для предотвращения конфликта имен и/или обозначения принадлежности к кругу решаемых задач. Namespace делает это необязательным. Есть возможность чаще использовать короткие имена, и лишь в отдельных местах - полное имя (с квалификатором "::"). Определенные через #define целые константы можно заменить на enum, вещественные/строковые - на static const переменные, макросы - на static inline функции.
- Перегрузка функций — Не требуется несколько функций с именами типа func(...) и func_ext(..., дополнительные параметры) и т.п. Сокращение количества имен функций, лучшая читаемость кода.
- Параметры функций по умолчанию — Улучшение читаемости кода. Например, "стандартный" вызов функции проще и писать, и отличать от вызова с особыми условиями. Что-то типа show_mode(mode) и show_mode(mode, "Error") вместо show_mode(mode, NULL) и show_mode(mode, "Error")...
- Классы — Без фанатизма. Часто есть некая структура (struct) и несколько функций для ее обработки, которым через параметр передается указатель на структуру. Класс делает тоже самое (неявно), но позволяет лучше логически связать стуктуру и функции. Плюс опять таки пространство имен.
Вот такие есть мысли о применении C++ в своих проектах в ближайшем будущем. С другой стороны: - Много слышал о глубокой любви Линуса Торвальдса к С++. Дядечка этот умный и считаться с его мнением стоит
- Некоторые полагают, что крайне опасно открывать двери к проекту для сферического С++ программиста. Честно говоря, такие посты как это или это самого наталкивают на такие мысли (ну или я чего-то не понимаю).
С учетом этого кажется, что от проекта на "С++ в духе С" лучше всем не станет, будет только яростная критика и со стороны "чистых С-программистов", и программистов на "чистом С++"... Хотелось бы услышать мнение других. Приглашаю к дискуссии.
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 21)
|
Sep 15 2013, 15:48
|
Знающий
   
Группа: Свой
Сообщений: 781
Регистрация: 3-10-04
Из: Санкт-Петербург
Пользователь №: 768

|
Цитата(winipuh @ Sep 15 2013, 17:28)  Хотелось бы услышать мнение других. Приглашаю к дискуссии.  В проекте ScmRTOS использован как раз С++ без фанатизма. Т.е. используются все преимущества, которые можно получить во время компиляции, а не во время выполнения программы. На этом форуме один из разработчиков известен под ником AHTOXA. Сам сайт проекта тут. В описании хорошо описаны цели использования С++ в проекте. Я их разделяю.
|
|
|
|
|
Sep 15 2013, 15:57
|

Частый гость
 
Группа: Участник
Сообщений: 127
Регистрация: 31-10-12
Пользователь №: 74 189

|
Бзусловно, Вы правы, Xenia. Собственно я о том же и говорил. Вопрос в другом. Если есть проект, написанный фактически на Си, но с "улучшениями" С++ (описанными выше), призванными улучшить ясность, читаемость кода. Нет ли опасности, что на самом деле другие разработчики, которым придется далее подерживать проект, не оценят этих стараний. Вдруг все будет наоборот — сторонник чистого Си будет плеваться и называть автора извращенцем, а приверженец С++ презрительно кривиться над "недопрограммой", потому что в ней не применяется ООП, не используется STL (или используется только малая часть) и т.п.?
|
|
|
|
|
Sep 15 2013, 20:14
|

Частый гость
 
Группа: Участник
Сообщений: 127
Регистрация: 31-10-12
Пользователь №: 74 189

|
Боюсь, что Вы меня не совсем правильно поняли  Цитата(kolobok0 @ Sep 15 2013, 23:20)  как то Вы странно противопоставляете си - си плас пласу. Не противопоставляю. Просто есть известное мнение одного известного человека о С++. Отсюда возникает мысль, что среди чистых С-программистов найдется немало людей, разделяющих его. Да и 10 страниц текста в википедии о "критике C++" только подкрепляют опасения... Цитата(kolobok0 @ Sep 15 2013, 23:20)  и ышо один момент. ООП - это к языку не имеет ни какого отношения. Нигде не утверждал обратного. Я знаю, что ООП, равно как и структурное или обобщенное программирование — это парадигмы, которые язык позволяет использовать, но не принуждает к этому. Цитата(kolobok0 @ Sep 15 2013, 23:20)  так, что в Вашем вопросе больше просматривается не совсем глубокое понимание вопроса касаемого ОО вещей. Вовсе не пытался изображать глубокое понимание ООП. Просто возникла мысль, что программисты на С++ стараются использовать ООП (и скорее всего не безосновательно), и поэтому будут косо смотреть на проект, выполненный на С++ но в рамках структурного программирования. Итого, мне просто хотелось услышать мнения о проекте на С++, выполненном только в "структурном стиле" с использованием некоторых синтаксических возможностей плюсов (namespace, перегрузка функций, классы, возможно местами template-ы): - От программистов на С — как бы они отнеслись к подобному проекту?
- От программистов на С++ — как бы они отнеслись к подобному проекту?
Вот и все.  з.ы. Неоднократно читал вот эту тему, не хотелось бы, чтобы дискуссия скатилась в таком же направлении (ООП vs С и проч. бессмыслица).
|
|
|
|
|
Sep 15 2013, 20:23
|

Частый гость
 
Группа: Участник
Сообщений: 174
Регистрация: 30-08-11
Из: Санкт-Петербург
Пользователь №: 66 926

|
Цитата(kolobok0 @ Sep 15 2013, 22:20)  ООП - это к языку не имеет ни какого отношения. Ну это вы немножко перегнули. Надо выбирать язык, поддерживающий выбранный ранее стиль программирования. Писать- то на си можно, но на С++, Java и Python оно гораздо естественнее выглядит (Других языков не изучал). winipuh, Среди эмбеддеров (а таких здесь, скорее всего, большинство) достаточно мало настоящих ценителей С++ (По сравнению с адептами С и ассемблера). Так что Резкую критику такого подхода здесь вы вряд ли получите. А среди ценителей ООП достаточно много людей, плохо понимающих работу ЭВМ на низком уровне. Поэтому их мнение тоже не стоит принимать как абсолютно верное - стоит иметь свое  читайте книги (только не по языкам- их надо изучать по стандартам, а по алгоритмам, паттернам, железу), развивайтесь - формируйте свой стиль, свое мнение.
Сообщение отредактировал Misile_Inc - Sep 15 2013, 20:28
|
|
|
|
|
Sep 15 2013, 20:40
|
Знающий
   
Группа: Свой
Сообщений: 781
Регистрация: 3-10-04
Из: Санкт-Петербург
Пользователь №: 768

|
Цитата(winipuh @ Sep 15 2013, 23:14)  Я знаю, что ООП, равно как и структурное или обобщенное программирование — это парадигмы, которые язык позволяет использовать, но не принуждает к этому. Осталось развернуть телегу и лошадь, и все будет в порядке. Есть способы декомпозиции сложных систем и их связей (структурная модель, объектная модель, включение, наследование) и есть средства разработки, которые их поддерживают. Языки разрабатывались под эти способы декомпозиции. С - под структурную систему, С++ - под объектную. Оба позволяют разрабатывать программы и структурные, и объектные, но степень поддержки модели будет разная, и трудоемкость тоже. Цитата(winipuh @ Sep 15 2013, 23:14)  [list=1] [*]От программистов на С — как бы они отнеслись к подобному проекту? [*]От программистов на С++ — как бы они отнеслись к подобному проекту? Имхо: 1) + 2) +
|
|
|
|
|
Sep 16 2013, 10:46
|
Местный
  
Группа: Участник
Сообщений: 351
Регистрация: 5-04-05
Пользователь №: 3 874

|
Цитата(winipuh @ Sep 15 2013, 18:28)  Дядечка этот умный и считаться с его мнением стоит. Не стоит. Его мнения есть смысл учитывать в применении к проекту "Linux kernel". Он и модульность не любит, без которой ничерта не протестируешь - bs для коммерции. В объектном стиле в том же Linux кое-что написано [1], [2].
|
|
|
|
|
Sep 16 2013, 11:58
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(winipuh @ Sep 16 2013, 00:14)  ...Просто возникла мысль, что программисты на С++ стараются использовать ООП... складывается такое очучение, что Вы не так трактуете ООП. Данная абривиатура расшифровывается как Объектно Ориентированное Проектирование и _никак_ иначе!!! Сначала идёт ООА (Анализ) и ООП (проектирование) А уж потом выбор языка(инструмента) и ваяние(программирование). Ну и опираясь на этот всем известный фундамент - объясните дураку как ООП зависит от языка??? Цитата(Misile_Inc @ Sep 16 2013, 00:23)  Ну это вы немножко перегнули. Надо выбирать язык, поддерживающий выбранный ранее стиль программирования. Писать- то на си можно,... После грамотного ООА и ООП Вы можете писать хоть на азме. Фиолетово. Да не будет кучи плюшек при "изложении лаконичности мысли", но заметьте - при этом Объектно Ориентированное Проектирование _не_ пострадает!!! Лично сам, создавая программки на азме, следую ОО подходам в построении программ. Программы выглядят не монолитным куском, а структурированные по объектам из бизнес логики. И если некая сущность не может "тявкать" по изначальным бизнес рамкам - то она этого никогда и не будет делать. Т.е. язык вторичен, в случае правильного подхода к процессу создания программного продукта. ну собственно ничего нового я не сказал, усё доходчиво описано у старика Буча... Цитата(winipuh @ Sep 16 2013, 00:14)  ...хотелось услышать мнения о проекте на С++, выполненном только в "структурном стиле" с использованием... отвечая на ваш вопрос, о "структурном стиле". дело в том, что объектный подход - есть собственно единственно правильным. или скажем по другому. при решении задач посредство ОО метода мы имеем _более_статичную_модель_ = как следствие имеем меньше переделок = как следствие имеем меньше кода = как следствие имеем меньше человеко часов... И заметьте - это только один(или сколько там образовалось?) плюс(ов)!!! а их ышо куча и маленькая тележечка!!!  про упрощение сапота, пониженного уровня вхождению в тему, гибкость, и т.д. и т.п. можно долго говорить... и это только эта метОда даёт. я бы с удовольствием познакомился с другой методологией - но пока нетю...
Сообщение отредактировал kolobok0 - Sep 16 2013, 12:00
|
|
|
|
|
Sep 16 2013, 12:39
|

Знающий
   
Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467

|
Цитата(winipuh @ Sep 15 2013, 10:28)  Иными словами, в стиле структурного программирования, но с применением некоторых полезных, на мой взгляд, возможностей С++ ("синтаксического сахара"): - namespace — Имена констант/типов/функций обычно снабжаются приставками для предотвращения конфликта имен и/или обозначения принадлежности к кругу решаемых задач. Namespace делает это необязательным. Есть возможность чаще использовать короткие имена, и лишь в отдельных местах - полное имя (с квалификатором "::"). Определенные через #define целые константы можно заменить на enum, вещественные/строковые - на static const переменные, макросы - на static inline функции.
- Перегрузка функций — Не требуется несколько функций с именами типа func(...) и func_ext(..., дополнительные параметры) и т.п. Сокращение количества имен функций, лучшая читаемость кода.
- Параметры функций по умолчанию — Улучшение читаемости кода. Например, "стандартный" вызов функции проще и писать, и отличать от вызова с особыми условиями. Что-то типа show_mode(mode) и show_mode(mode, "Error") вместо show_mode(mode, NULL) и show_mode(mode, "Error")...
- Классы — Без фанатизма. Часто есть некая структура (struct) и несколько функций для ее обработки, которым через параметр передается указатель на структуру. Класс делает тоже самое (неявно), но позволяет лучше логически связать стуктуру и функции. Плюс опять таки пространство имен.
Вот такие есть мысли о применении C++ в своих проектах в ближайшем будущем. С другой стороны: - Много слышал о глубокой любви Линуса Торвальдса к С++. Дядечка этот умный и считаться с его мнением стоит
- Некоторые полагают, что крайне опасно открывать двери к проекту для сферического С++ программиста. Честно говоря, такие посты как это или это самого наталкивают на такие мысли (ну или я чего-то не понимаю).
С учетом этого кажется, что от проекта на "С++ в духе С" лучше всем не станет, будет только яростная критика и со стороны "чистых С-программистов", и программистов на "чистом С++"... Хотелось бы услышать мнение других. Приглашаю к дискуссии.  Ужас, ужас, ужас.. Namesace и default parameters для улучшения читаемости? что такое "улучшение читаемости"? Меньше букв, красивее названия? Не перевариваю namespace. Ну будет вначале файла using; и что, помог неймспейс? Как понять куда функция относится, особенно если 2 одинаковые из разных неймспесов? А дифоулт параметерс? Мне каждый раз надо идти в хедер проверять что там по дифоулту передается? Никогда не обращал внимания че там Линус говорит, но тут он 100% в точку. Чем меньше С++ увлекатся, тем лучше. Переболеть им надо, но это не панацея, 70% из его фенечек лучше непользовать. Он сейчас между Java и C. Ни там ни там толком не заменяет. Если можно авойднуть С, то его лучше авойднуть. Особенно в микроконтроллерах. Да, не в последнюю очередь изза меньшей прозрачности и предсказуемости как код будет скомпилирован.
--------------------
Верить нельзя никому, даже себе. Мне - можно.
|
|
|
|
|
Sep 23 2013, 07:19
|
Знающий
   
Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515

|
Цитата(winipuh @ Sep 15 2013, 18:28)  С другой стороны: - Много слышал о глубокой любви Линуса Торвальдса к С++. Дядечка этот умный и считаться с его мнением стоит
- Некоторые полагают, что крайне опасно открывать двери к проекту для сферического С++ программиста. Честно говоря, такие посты как это или это самого наталкивают на такие мысли (ну или я чего-то не понимаю).
Что касается Линуса, я думаю, он вполне обоснованно опасается толпы неграмотных кодеров, не способных правильно писать на C++, а также плохой совместимости между реализациями C++, что грозит адскими проблемами при портировании ядра. Но это всё не наш случай. Автор второго поста(из Интела) вроде бы вообще ничего, кроме GUI, не писал, но при этом требует использовать GUI паттерны для всех программ без исключения. И это тоже не наш случай. Я использовал в микроконтроллерах именно "С с классами", и остался вполне доволен - это удобнее простого С. А ещё в C++ стандартизованы инлайн функции, и шаблоны тоже можно использовать(без фанатизма). Причём на шаблонах можно сделать эмбеддерский аналог STL для контейнеров, без аллокаторов, с хранением узла прямо в структуре объекта, который кладётся в контейнер. Это в некоторой степени даже удобнее традиционного STL.
|
|
|
|
|
Sep 23 2013, 08:10
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(Timmy @ Sep 23 2013, 10:19)  не способных правильно писать на C++, Отладка STL по шагам еще то удовольствие. И IAR совсем плохо воспринимает шаблоны. Тоже не наш случай. А "С с классами" это просто "модульный C". Я вот даже на C-и правильно писать не умею.  Не использовал никогда в жизни наверно более половины синтаксических конструкций C-и. И вообще считаю, что правильная разметка и стиль заменяет половину любого языка.
|
|
|
|
|
Sep 25 2013, 06:46
|
Знающий
   
Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515

|
Цитата(AlexandrY @ Sep 23 2013, 12:10)  Отладка STL по шагам еще то удовольствие. И IAR совсем плохо воспринимает шаблоны. Тоже не наш случай. А "С с классами" это просто "модульный C". И без шаблонов С++ предоставляет достаточно вкусных плюшек, чтобы использовать именно его. Причём ТС и не собирался пользоваться шаблонами  . Цитата Там что, реализация каждую неделю, как Виндоус апдейт, а не раз в 10 лет? Я имел в виду худшую совместимость между различными компиляторами C++, чем между компиляторами C. Интересно, а ядро Линукса вообще можно собрать не gcc?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|