|
Использовать 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++ в своих проектах в ближайшем будущем. С другой стороны: - Много слышал о глубокой любви Линуса Торвальдса к С++. Дядечка этот умный и считаться с его мнением стоит
- Некоторые полагают, что крайне опасно открывать двери к проекту для сферического С++ программиста. Честно говоря, такие посты как это или это самого наталкивают на такие мысли (ну или я чего-то не понимаю).
С учетом этого кажется, что от проекта на "С++ в духе С" лучше всем не станет, будет только яростная критика и со стороны "чистых С-программистов", и программистов на "чистом С++"... Хотелось бы услышать мнение других. Приглашаю к дискуссии.
|
|
|
|
|
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. Ни там ни там толком не заменяет. Если можно авойднуть С, то его лучше авойднуть. Особенно в микроконтроллерах. Да, не в последнюю очередь изза меньшей прозрачности и предсказуемости как код будет скомпилирован.
--------------------
Верить нельзя никому, даже себе. Мне - можно.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|