реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Использовать C++ как "улучшенный С" с классами, но в духе С...
winipuh
сообщение Sep 15 2013, 14:28
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 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++ в своих проектах в ближайшем будущем.

С другой стороны:
  • Много слышал о глубокой любви Линуса Торвальдса к С++. Дядечка этот умный и считаться с его мнением стоит
  • Некоторые полагают, что крайне опасно открывать двери к проекту для сферического С++ программиста. Честно говоря, такие посты как это или это самого наталкивают на такие мысли (ну или я чего-то не понимаю).
С учетом этого кажется, что от проекта на "С++ в духе С" лучше всем не станет, будет только яростная критика и со стороны "чистых С-программистов", и программистов на "чистом С++"...

Хотелось бы услышать мнение других. Приглашаю к дискуссии. sm.gif
Go to the top of the page
 
+Quote Post
Xenia
сообщение Sep 15 2013, 15:14
Сообщение #2


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



C++ никогда не порывал с духом C. sm.gif Т.е. можно писать на C++, используя только сишные конструкции, а от C++ используя лишь отдельные "вольности".
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Sep 15 2013, 15:42
Сообщение #3


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



"Вольностей" хватает в gcc --std=gnu99
Единственное, чего не хватает, чтобы остаться в чистом как слеза Си, - это шаблонов.
Правда, препроцессором вручную подобие темплейта можно изобразить за счет __builtin_typeof()
Go to the top of the page
 
+Quote Post
Tiro
сообщение Sep 15 2013, 15:48
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 781
Регистрация: 3-10-04
Из: Санкт-Петербург
Пользователь №: 768



Цитата(winipuh @ Sep 15 2013, 17:28) *
Хотелось бы услышать мнение других. Приглашаю к дискуссии. sm.gif

В проекте ScmRTOS использован как раз С++ без фанатизма. Т.е. используются все преимущества, которые можно получить во время компиляции, а не во время выполнения программы. На этом форуме один из разработчиков известен под ником AHTOXA. Сам сайт проекта тут. В описании хорошо описаны цели использования С++ в проекте. Я их разделяю.
Go to the top of the page
 
+Quote Post
winipuh
сообщение Sep 15 2013, 15:57
Сообщение #5


Частый гость
**

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



Бзусловно, Вы правы, Xenia. Собственно я о том же и говорил. Вопрос в другом.
Если есть проект, написанный фактически на Си, но с "улучшениями" С++ (описанными выше), призванными улучшить ясность, читаемость кода.
Нет ли опасности, что на самом деле другие разработчики, которым придется далее подерживать проект, не оценят этих стараний. Вдруг все будет наоборот — сторонник чистого Си будет плеваться и называть автора извращенцем, а приверженец С++ презрительно кривиться над "недопрограммой", потому что в ней не применяется ООП, не используется STL (или используется только малая часть) и т.п.?
Go to the top of the page
 
+Quote Post
Misile_Inc
сообщение Sep 15 2013, 17:10
Сообщение #6


Частый гость
**

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



STL нужно использовать когда знаете, как ее правильно использовать.
А пока надо писать так, как умеете, чтобы получилось хорошо и Вы понимали каждую строчку кода.
С++ поддерживает ООП, но не обязывает к нему. Мне кажется, никаких проблем с приверженцами С++ не должно быть.
Но стоит потратить некоторое время на изучение стандартной библиотеки C++. Будет из чего выбирать.

Сообщение отредактировал Misile_Inc - Sep 15 2013, 17:34
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Sep 15 2013, 19:20
Сообщение #7


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(winipuh @ Sep 15 2013, 19:57) *
...сторонник чистого Си будет плеваться и называть автора извращенцем, а приверженец С++ презрительно кривиться над "недопрограммой", потому что в ней не применяется ООП...



как то Вы странно противопоставляете си - си плас пласу. вообще-то если следовать рекомендациям K&R изложенных в их книге - то перейти на си плас плас не составит большого труда. т.е. си плас плас - это больше развитие, а не соперничество среди языков.

и ышо один момент. ООП - это к языку не имеет ни какого отношения. т.е. сначала идут ООА и ООП а уж потом выбор языка, в частности си плас плас (если о нём идёт речь). Но можно писать и на _не_ объектных языках. Кто запрещает то???

так, что в Вашем вопросе больше просматривается не совсем глубокое понимание вопроса касаемого ОО вещей.

Go to the top of the page
 
+Quote Post
winipuh
сообщение Sep 15 2013, 20:14
Сообщение #8


Частый гость
**

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



Боюсь, что Вы меня не совсем правильно поняли sad.gif

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

Итого, мне просто хотелось услышать мнения о проекте на С++, выполненном только в "структурном стиле" с использованием некоторых синтаксических возможностей плюсов (namespace, перегрузка функций, классы, возможно местами template-ы):
  1. От программистов на С — как бы они отнеслись к подобному проекту?
  2. От программистов на С++ — как бы они отнеслись к подобному проекту?
Вот и все. sm.gif

з.ы. Неоднократно читал вот эту тему, не хотелось бы, чтобы дискуссия скатилась в таком же направлении (ООП vs С и проч. бессмыслица). sad.gif

Go to the top of the page
 
+Quote Post
Misile_Inc
сообщение Sep 15 2013, 20:23
Сообщение #9


Частый гость
**

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



Цитата(kolobok0 @ Sep 15 2013, 22:20) *
ООП - это к языку не имеет ни какого отношения.

Ну это вы немножко перегнули. Надо выбирать язык, поддерживающий выбранный ранее стиль программирования. Писать- то на си можно, но на С++, Java и Python оно гораздо естественнее выглядит (Других языков не изучал).

winipuh,
Среди эмбеддеров (а таких здесь, скорее всего, большинство) достаточно мало настоящих ценителей С++ (По сравнению с адептами С и ассемблера). Так что Резкую критику такого подхода здесь вы вряд ли получите. А среди ценителей ООП достаточно много людей, плохо понимающих работу ЭВМ на низком уровне. Поэтому их мнение тоже не стоит принимать как абсолютно верное - стоит иметь свое sm.gif читайте книги (только не по языкам- их надо изучать по стандартам, а по алгоритмам, паттернам, железу), развивайтесь - формируйте свой стиль, свое мнение.

Сообщение отредактировал Misile_Inc - Sep 15 2013, 20:28
Go to the top of the page
 
+Quote Post
Tiro
сообщение Sep 15 2013, 20:40
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 781
Регистрация: 3-10-04
Из: Санкт-Петербург
Пользователь №: 768



Цитата(winipuh @ Sep 15 2013, 23:14) *
Я знаю, что ООП, равно как и структурное или обобщенное программирование — это парадигмы, которые язык позволяет использовать, но не принуждает к этому.

Осталось развернуть телегу и лошадь, и все будет в порядке. Есть способы декомпозиции сложных систем и их связей (структурная модель, объектная модель, включение, наследование) и есть средства разработки, которые их поддерживают. Языки разрабатывались под эти способы декомпозиции. С - под структурную систему, С++ - под объектную.
Оба позволяют разрабатывать программы и структурные, и объектные, но степень поддержки модели будет разная, и трудоемкость тоже.

Цитата(winipuh @ Sep 15 2013, 23:14) *
[list=1]
[*]От программистов на С — как бы они отнеслись к подобному проекту?
[*]От программистов на С++ — как бы они отнеслись к подобному проекту?

Имхо:
1) +
2) +
Go to the top of the page
 
+Quote Post
Idle
сообщение Sep 16 2013, 10:46
Сообщение #11


Местный
***

Группа: Участник
Сообщений: 351
Регистрация: 5-04-05
Пользователь №: 3 874



Цитата(winipuh @ Sep 15 2013, 18:28) *
Дядечка этот умный и считаться с его мнением стоит.

Не стоит. Его мнения есть смысл учитывать в применении к проекту "Linux kernel". Он и модульность не любит, без которой ничерта не протестируешь - bs для коммерции.
В объектном стиле в том же Linux кое-что написано [1], [2].
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Sep 16 2013, 11:58
Сообщение #12


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 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) *
...хотелось услышать мнения о проекте на С++, выполненном только в "структурном стиле" с использованием...


отвечая на ваш вопрос, о "структурном стиле". дело в том, что объектный подход - есть собственно единственно правильным. или скажем по другому. при решении задач посредство ОО метода мы имеем _более_статичную_модель_ = как следствие имеем меньше переделок = как следствие имеем меньше кода = как следствие имеем меньше человеко часов... И заметьте - это только один(или сколько там образовалось?) плюс(ов)!!! а их ышо куча и маленькая тележечка!!! sm.gif про упрощение сапота, пониженного уровня вхождению в тему, гибкость, и т.д. и т.п. можно долго говорить... и это только эта метОда даёт. я бы с удовольствием познакомился с другой методологией - но пока нетю...



Сообщение отредактировал kolobok0 - Sep 16 2013, 12:00
Go to the top of the page
 
+Quote Post
DASM
сообщение Sep 16 2013, 12:16
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Цитата(kolobok0 @ Sep 16 2013, 15:58) *
отвечая на ваш вопрос, о "структурном стиле". дело в том, что объектный подход - есть собственно единственно правильным. или скажем по другому.

Такие безаппеляционные заявления то ли молодость выдают, то ли.. Вот прямо таки единственно ? И жизнь обязана быть углеродной и требовать воды ?
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Sep 16 2013, 12:39
Сообщение #14


Знающий
****

Группа: Участник
Сообщений: 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++ в своих проектах в ближайшем будущем.

С другой стороны:
  • Много слышал о глубокой любви Линуса Торвальдса к С++. Дядечка этот умный и считаться с его мнением стоит
  • Некоторые полагают, что крайне опасно открывать двери к проекту для сферического С++ программиста. Честно говоря, такие посты как это или это самого наталкивают на такие мысли (ну или я чего-то не понимаю).
С учетом этого кажется, что от проекта на "С++ в духе С" лучше всем не станет, будет только яростная критика и со стороны "чистых С-программистов", и программистов на "чистом С++"...

Хотелось бы услышать мнение других. Приглашаю к дискуссии. sm.gif


Ужас, ужас, ужас..
Namesace и default parameters для улучшения читаемости?
что такое "улучшение читаемости"?
Меньше букв, красивее названия?
Не перевариваю namespace.
Ну будет вначале файла using;
и что, помог неймспейс? Как понять куда функция относится, особенно если 2 одинаковые
из разных неймспесов?
А дифоулт параметерс?
Мне каждый раз надо идти в хедер проверять что там по дифоулту передается?

Никогда не обращал внимания че там Линус говорит, но тут он 100% в точку.
Чем меньше С++ увлекатся, тем лучше.
Переболеть им надо, но это не панацея, 70% из его фенечек лучше непользовать.
Он сейчас между Java и C.
Ни там ни там толком не заменяет.

Если можно авойднуть С, то его лучше авойднуть.
Особенно в микроконтроллерах.
Да, не в последнюю очередь изза меньшей прозрачности и предсказуемости
как код будет скомпилирован.



--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Sep 16 2013, 12:46
Сообщение #15


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(DASM @ Sep 16 2013, 16:16) *
...молодость выдают...


угумс. в душе все 18 мну. в ванной итого меньше sm.gif

ну а если по Вашей реплики - кмк я дальше разжевал полёт мысли. или Вы только первое предложение увидели? ик...
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 00:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.01514 секунд с 7
ELECTRONIX ©2004-2016