unname22
P.M.
|
Объявил тут в соседней, ныне закрытой, ветке OCTAGON, дескать применение ООП повышает надежность кода:
Да понял я, что вы не поняли. ООП не для сокращения писанины, а для того же, для чего и GOTO запрещали, для повышения надёжности.
При прямом вопросе как, от ответа он уклонялся и юлил, меняя тему. В общем чтобы наконец-то увидеть ответ на вопрос пришлось завести отдельную ветку.
|
|
lexanet
P.M.
|
Может повысить надежность, в плане повышения эффективности поиска и локализации ошибок. Особенно в чужом коде. Так же, как и "запрет" goto. Но, не более. Это все инструмент. Главное, что в голове у создателя. Это чисто мое мнение. Сам сижу на "чистом" С. ООП эпизодически.
|
|
unname22
P.M.
|
lexanet Вы ведь понимаете, что это не ответ. Я перед этим вообще выразил скепис в необходимости везде совать ООП, поскольку на практике просто ниразу не видел, чтобы его применение действительно оправдывало затраты. Это просто бич какой-то. Везде суют ООП, везде где нужно и ненужно стремятся всунуть БД и так далее. Неужели уровень современного программиста настолько упал даже по сравнению с тем, что было два десятилетия назад?
|
|
Бывший
P.M.
|
А какая альтернатива, ассемблер что-ли? Сейчас требования к срокам разработки предъявляют немилосердные. И - да, уровень погроммиста уже не тот. Вернее, понимание программирования поменялось.
|
|
lexanet
P.M.
|
Originally posted by unname22:
Неужели уровень современного программиста настолько упал
Да. Уровень входа ниже плинтуса. В принципе, это нормально. И современные среды разработки с интеллектуальными системами генерации кода или подсказки следующего шага этому способствуют. Пусть будет больше программистов, плохих и хороших А насчет ООП, меня учили этому в институте, лет 20 назад. Так до сих пор не пригодилось
|
|
Бывший
P.M.
|
Я не спец по программированию, но читал старые книжки про программирование (по времени написания МС-ДОС только появился), рассуждения программистов о будущем их отрасли, в том числе и Го То, и сетования на то что погроммисты уже не те, итд.
|
|
OCTAGON
P.M.
|
Русский не родной? Название темы поменяй.
|
|
OCTAGON
P.M.
|
Значит не родной. Я не про опечатку))
|
|
почти аноним
P.M.
|
29-5-2017 09:37
почти аноним
если писать софт не в одну харю, то по-любому нужно ооп. или всем держать в голове все строки. а нафига это надо. есть вася - он программит обработку клавиатуры, петя программит ввод-вывод по сети, коля - хранилище всех данных, куда вася пишет, а петя читает. и в любой момент времени их части могут вызывать друг-друга.
|
|
unname22
P.M.
|
почти аноним В данном случае ПОП ничем не хуже.
|
|
wolfo
P.M.
|
А чем именно ООП не нравится? Синтаксисом или организацией данных/кода?
|
|
lexanet
P.M.
|
Originally posted by wolfo:
А чем именно ООП не нравится?
Вопрос, есть ли у ООП реально преимущества перед ПОП в плане надежности. Я так думаю.
|
|
wolfo
P.M.
|
ок. переформулирую - что считать за ООП - синтаксис или структуру кода/данных например библиотека OpenSSL - это что? Компилируется Сями, а структура ООП
|
|
Бывший
P.M.
|
Originally posted by OCTAGON:
Значит не родной. Я не про опечатку))
Та опечатка кстати звучала на казахском языке не слишком цензурно
|
|
unname22
P.M.
|
wolfo Я в принципе про подход/ Он от синтаксиса и способов реализации не зависит.
|
|
wolfo
P.M.
|
Понятно. Ну так чему учили - из того и лепят. Обычное дело - для хранения 10 строк - SQL-база
|
|
HighMan
P.M.
|
unname22, и чего Вам неймеца? Во первых, Октагон мог не верно выразить мысль и, в результате, получилось, что применение ООП влияет на безопасность приложения Во вторых, возможно, что мысль была не верно интерпритирована руками и клавиатурой. У меня такое бывало. Как-то меня заклинило на GPS и GPRS. И на протяжении нескольких моих постов за навигацию отвечал GPRS. Меня, просто, поправили. А, вообще, ООП, обычно, сильно ускоряет написание кода. Например, писать на чистом WinAPI - тот еще геморрой. MSDN более чем существенно экономит время. А то, что приложение, написанное на WinAPI, работает быстрее.. . Какой смысл? Окно откроется на 0.000001 секунду быстрее? Или, например, пишется интерфейс для работы с БД. Гнаться за скоростью работы интерфейса? Оптимизировать код? Да ну нах! Под такую задачу, не то что С, а С# излишество. Проще забабахать на языке высокого уровня. Выигранные время, лучше потратить на оптимизацию SQL запросов. У каждого инструмента - своя область применения. Глупо ювелирным молоточком заколачивать сваи.
|
|
TemkA
P.M.
|
wolfo: ок. переформулирую - что считать за ООП - синтаксис или структуру кода/данныхнапример библиотека OpenSSL - это что? Компилируется Сями, а структура ООП
За ООП считать использование классов Если они там внутри есть - значит она написана с использованием ООП Остаётся вопрос формата внешнего API Некоторые делают двойной: и в виде классов и в виде функций, но тогда при каждом вызове извольте предъявлять все нужные структуры
|
|
TemkA
P.M.
|
Теперь отвечая на изначальный вопрос Если люди начинают увлекаться, то там наступает лютый пи#дец Типа перегрузки операторов и т.п. Уже никто толком не знает как там что работает Microsoft, кстати, этой самой увлеченностью изрядно испортил в принципе относительно стройный в начале C# Ведёт ли наступление непонимания к повышению надёжности - вопрос такой, интересный С другой стороны возьня со всякими низкоуровневыми вещами, когда там структуры начинают инициализровать memset'ом - тоже ещё тот цирк Нужна разумная грань И никакого STL'а
|
|
TemkA
P.M.
|
lexanet: Так же, как и "запрет" goto.
Меня вот больше напрягает манера некоторых товарищей зафигачить пачку return'ов внутри процедуры, перед каждым дублируя какие-то деинициализационные вещи. Обязательно где-нибудь да забудут что-то осовбодить, очистить и т.п.
|
|
ferrero
P.M.
|
Когда же всех мудагов забанят? Уже не смешно, весна закончилась, а бредни в самом разгаре.
|
|
TemkA
P.M.
|
unname22: Это просто бич какой-то. Везде суют ООП, везде где нужно и ненужно стремятся всунуть БД и так далее. Неужели уровень современного программиста настолько упал даже по сравнению с тем, что было два десятилетия назад?
Подождите Во-первых вы его будете вынуждены пользовать, если используемые вами сторонние библиотеки это подразумевают --------- https://www.codeproject.com/Articles/1181213/Easy-OpenCL-Multiple-Device-Load-Balancing-and-Pip Hardware.ClDevices gpu1 = Hardware.ClPlatforms.all().devicesWithMostComputeUnits()[0]; Pipeline.ClPipelineStage add = new Pipeline.ClPipelineStage(); add.addDevices( gpu1); ClArray;float; inputArrayGPU1 = new ClArray;float;(1024); ClArray;float; outputArrayGPU1 = new ClArray;float;(1024); add.addInputBuffers(inputArrayGPU1); add.addOutputBuffers(outputArrayGPU1); add.addKernels(@" __kernel void vecAdd(__global float * input, __global float * output) { int id=get_global_id(0); output[id]=input[id]+1.0f; }", "vecAdd", new int[] { 1024/*global range*/ }, new int[] { 256/* local range*/ }); d.prependToStage(mul); // prepends add stage to mul stage var pipeline = add.makePipeline(); // creates a 2-stage pipeline out of add and mul.
if(pipeline.pushData(new object[] { arrayToGetData }, new object[] { arrayToReceiveResult })) { Console.WriteLine("Needs M*2+1 iterations"); Console.WriteLine("Extra client arrays for both inputs and outputs of pipeline"); Console.WriteLine("First result is ready!"); } --------- Полу-чистый хорош, но много возьни всякой мелкой --------- https://www.codeproject.com/Articles/1178304/StringLib-C-Library-Adding-String-Type-to-C int main() { string string_a; string string_b; string_set(&string_a, "hello world\nnew line test"); string_newline(&string_a, "nothing to see here"); string_print(string_a); printf("SIZE: %d\n", string_getSize(string_a)); FILE *foo = fopen("text.txt", "w"); string_write(string_a, foo); fclose(foo); foo = fopen("text.txt", "r"); string_read(&string_b, foo); string_print(string_b); printf("SIZE: %d\n", string_getSize(string_b)); string_delete(&string_a); string_delete(&string_b); return 0; } --------- А вот когда людей самих куда-то уносит - это всё --------- https://www.codeproject.com/Articles/1088293/Units-and-measures-for-Cplusplus template;class T1, class T2, class T3; auto distance_moved(ACCELERATION::unit;T1; accel, VELOCITY::unit;T2; init_velocity, TIME::unit;T3; t) { return 0.5 * accel * t* t + init_velocity*t; } template;class T1, class T2, class T3; auto max_temperature_diff(TEMPERATURE::measure;T1; t1, TEMPERATURE::measure;T2; t2, TEMPERATURE::measure;T3; t3) { return (abs(t1 - t2) ; abs(t2 - t3)) ? ((t3 - t1) ; abs(t1 - t2)) ? (t3 - t1) : abs(t1 - t2) : ((t3 - t1) ; abs(t2 - t3)) ? (t3 - t1) : abs(t2 - t3); } --------- И там чем дальше, тем дремучей --------- The general implementation of Sys2Sys<> defines its factor constant as static constexpr double factor = #define ULIB_ENUMERATED_TERM(n) \ ( \ (dims: ##n != 0) ? \ int_power<dims: ##n> \ : f(Base2Base4Dim<n, from_sys="">::factor)\ : 1) ULIB_CONCAT_ENUMERATED_TERMS_FOR_ALL_DIMS(*) #undef ULIB_ENUMERATED_TERM ; </n,> which expands for 5 dimensions as: static constexpr double factor = ((dims: 1 != 0) ? int_power<dims: 1>: f( Base2Base4Dim<n, from_sys, to_sys>::factor): 1) * ((dims: 1 != 0) ? int_power<dims: 1>: f( Base2Base4Dim<n, from_sys, to_sys>::factor): 1) * ((dims: 1 != 0) ? int_power<dims: 1>: f( Base2Base4Dim<n, from_sys, to_sys>::factor): 1) * ((dims: 1 != 0) ? int_power<dims: 1>: f( Base2Base4Dim<n, from_sys, to_sys>::factor): 1) * ((dims: 1 != 0) ? int_power<dims: 1>: f( Base2Base4Dim<n, from_sys="">::factor): 1); </n,> --------- Вот он насуёт такого говна-только-ему-понятного и привет Вон даже форумный движок одурел и за смайлики посчитал
|
|
TemkA
P.M.
|
ferrero: Уже не смешно, весна закончилась, а бредни в самом разгаре.
Так про баб-то тем нету Выясняют правильность цитат на стенах в вагонах метро
|
|
HighMan
P.M.
|
TemkA: Меня вот больше напрягает манера некоторых товарищей зафигачить пачку return'ов внутри процедуры, перед каждым дублируя какие-то деинициализационные вещи. Обязательно где-нибудь да забудут что-то осовбодить, очистить и т.п.
+ много. Часто приходится многократно ретурнить, высвобождать ресурсы, закрывать соединения и т.д.. GOTO много меньшее зло, однако, все равно не использую. Не привык. Кстати, я так толком и не понял, почему использование goto, дурной тон? Вообще-то джамп и условные джампы, инструкции процессора. Почему же их использование в С/С++ дурной тон? Куда более дурной тон, на мой и не только мой взгляд, это нагромождение дефинишинов. Вот где моск заворачивается, однако, дефинишины используются повсеместно и без меры. Кстати, я в предыдущем посте допустил ошибку. Приплел MSDN, хотя имел в виду MFC
|
|
TemkA
P.M.
|
HighMan: Кстати, я так толком и не понял, почему использование goto, дурной тон?
Возможно потому, что это подразумевает использование лейблов Лейблы как бы предполагают их осмысленное наименование А ты типа должен уметь играться с нонеймовыми {}, а если совсем надо уж пометить "шо це було", то написать комментарий ------ Сейчас подчитаю что граждане пишут ------- Пока могу ещё добавить своё - "GOTO - удел Бейсика" А хуже Бейсика - только Паскаль
|
|
TemkA
P.M.
|
TemkA: Сейчас подчитаю что граждане пишут
Да, прочитал, мысли верные http://forum.sources.ru/index.php?showtopic=54769&st=0 Ссылаются на Бейсик и на возможности использования эквивалентных замен управления переходами == do { if( .. ) break; .... ... if( .. ) break; .... ... if( .. ) break; .... == == try { for(.. ) for(.. ) for(.. ) if(.. ) throw; } == Вот, кстати Пользующие экскепшены - отдельные пи..... . За это их всенепременно нужно закопать Хуже них - только любители assert'ов
|
|
Обломов
P.M.
|
Ужас, как это важно. Для России и самопознания.
|
|
TemkA
P.M.
|
Обломов: Для России и самопознания.
Россия не нужна Самопознание - тоже
|
|
Бывший
P.M.
|
Originally posted by TemkA:
Вон даже форумный движок одурел и за смайлики посчитал
Вы эта осторожнее! А то накидают сюда программных кодов сейчас, ганза взбесится и пойдет сама гулять по сети, попутно запуская ядерные ракеты по Вашингтону и Нью Йорку.
|
|
Бывший
P.M.
|
Originally posted by TemkA:
Пока могу ещё добавить своё - "GOTO - удел Бейсика" А хуже Бейсика - только Паскаль
Гм, я попрошу.. . ГоТо есть и в Паскале, и без Гото можно и в Басике спокойно кодить. Кстати самообъявление переменных в теле программы в Басике - на самом деле предполагает наличие высокого уровеня самодисциплины программиста. В Паскале-то думать особо не надо, компилятор первый возмутится по поводу необъявленных переменных в теле программы. Да, и судя по литературе гото - это анахронизм ещё с 80-х годов. Странно что его вообще вспоминают до сих пор.
|
|
TemkA
P.M.
|
Бывший: Странно что его вообще упоминают до сих пор.
Ну вот гугланул ради интереса goto inurl:github.com/openssl/openssl/ Вполне себе имеется https://github.com/openssl/openssl/blob/master/apps/ciphers.c хотя тут, наверное, оправдано
|
|
unname22
P.M.
|
HighMan: unname22, и чего Вам неймеца? Во первых, Октагон мог не верно выразить мысль и, в результате, получилось, что применение ООП влияет на безопасность приложения Во вторых, возможно, что мысль была не верно интерпритирована руками и клавиатурой. У меня такое бывало. Как-то меня заклинило на GPS и GPRS. И на протяжении нескольких моих постов за навигацию отвечал GPRS. Меня, просто, поправили. А, вообще, ООП, обычно, сильно ускоряет написание кода. Например, писать на чистом WinAPI - тот еще геморрой. MSDN более чем существенно экономит время. А то, что приложение, написанное на WinAPI, работает быстрее.. . Какой смысл? Окно откроется на 0.000001 секунду быстрее? Или, например, пишется интерфейс для работы с БД. Гнаться за скоростью работы интерфейса? Оптимизировать код? Да ну нах! Под такую задачу, не то что С, а С# излишество. Проще забабахать на языке высокого уровня. Выигранные время, лучше потратить на оптимизацию SQL запросов. У каждого инструмента - своя область применения. Глупо ювелирным молоточком заколачивать сваи.
Если бы он не верно выразил мысль - уже бы исправился. Исправил же он меня, когда я понятие "надежность" подменил на "безопасность" Касаемо второй части, я не подойду и близко к MSDN и тем более WinAPI. Если приспичит рисовать интерфейс, это скорее всего будет Tk как наиболее быстрый вариант, ну или Gtk+. А использование БД как затычки к каждой заднице я вообще не понимаю. Число задач, где реально нужна БД, это менее 1% от ее реального применения. В курсе, что до нескольких миллионов строк БД уступает и серьезно по производительности скажем работе с обычными текстовыми файлами. А то задрали уже со своим SQL. Ну ладно, это все мое мнение и тонкости. А я же жду ответа на конкретный вопрос, конкретно от OCTAGON-а, как же все-таки ООП повышает надежность?????
|
|
TemkA
P.M.
|
Бывший: и без Гото можно и в Басике спокойно кодить.
== 10 INPUT "What is your name: "; U$ 20 PRINT "Hello "; U$ 30 INPUT "How many stars do you want: "; N 40 S$ = "" 50 FOR I = 1 TO N 60 S$ = S$ + "*" 70 NEXT I 80 PRINT S$ 90 INPUT "Do you want more stars? "; A$ 100 IF LEN(A$) = 0 THEN GOTO 90 110 A$ = LEFT$(A$, 1) 120 IF A$ = "Y" OR A$ = "y" THEN GOTO 30 130 PRINT "Goodbye "; U$ 140 END == И как вы без IF'ов что-то сделаете ? Бывший: Кстати самообъявление переменных в теле программы в Басике - на самом деле предполагает наличие высокого уровеня самодисциплины программиста. В Паскале-то думать особо не надо, компилятор первый возмутится по поводу необъявленных переменных в теле программы.
А в чём самодисциплина ? В Си - тоже нужно было в начале функции, в Си++ - стало можно и по ходу дела
|
|
unname22
P.M.
|
TemkA: Меня вот больше напрягает манера некоторых товарищей зафигачить пачку return'ов внутри процедуры, перед каждым дублируя какие-то деинициализационные вещи. Обязательно где-нибудь да забудут что-то осовбодить, очистить и т.п.
Вот тут как раз всеми нелюбимый goto может быть полезен вместо return. Просто перейти к концу процедуры, где все конфигурируется обратно к дефолту и вызывается нормальный return. И как без goto на асме жить? скажете устарело? А например загрузчики? Да и на том же MSP430 ассемблер просто диво как хорош. Так что аккуратное применения goto при необходимости и включении головы может быть вполне полезным и понятным. Далее по вашим постам: Да си чистый хорош, но, там где ресурсы ограничены, те же контроллеры приходится все делать руками. А на больших мощностях на си только совсем уж ресурсоемкие вещи делать, а остальное ИМХО - удел высокоуровневых скриптовых языков. В юности я очень любил и люблю Perl, там даже производительность практически не уступает. Но приличные проблемы возникают когда надо делать порт в винду, либо тащить на какую-то встроенную системк, да и вообще переносить, гибкость и модульность тут начинают боком вылезать. Потому часто применяю Tcl и его диалекты. Накидал быстро полумакет,если устроило, переписал для производительности именно нужные части на сях и привет. Любителям ООП есть и питон с руби в этой области.
|
|
TemkA
P.M.
|
unname22: Касаемо второй части, я не подойду и близко к MSDN и тем более WinAPI
Так вы этот, Delphi'ст что ли типа ? Они тоже никуда не подходят. Им рантайма хватает внутреннего типа А формочки с событиями - встроенные unname22: Исправил же он меня, когда я понятие "надежность" подменил на "безопасность"
Ну я вам могу наверное про безопасность рассказать Из свежего Наверное когда у вас что-то типа TString UserResponse; ... if (Config::GetItem("AdminPassword") == UserResponse) то может быть всё хорошо А вот тут Intel отметился: if(strncmp(computed_response, user_response, response_length)) deny_access(); К сожалению оказалось, что response_length может быть равен 0 и тогда... Погуглите последнюю строчку - найдёте историю Изрядный Upppps получился
|
|
unname22
P.M.
|
TemkA:
Так вы этот, Delphi'ст что ли типа ?
Попрошу в этой теме матом не выражаться, тем более в мой адрес.
|
|
unname22
P.M.
|
TemkA: if(strncmp(computed_response, user_response, response_length)) deny_access();
Гуглить если честно особо некогда, но судя по всему интел в качестве оптимизации заложил "ленивость" в данное сравнение?
|
|
TemkA
P.M.
|
unname22: И как без goto на асме жить? скажете устарело? А например загрузчики?
Не писать на нём, потому как сильно мешает портабельности Те же ядра операционок пишутся на Си, с минимальным привлечением исключительно в архитектурно-зависимых местах unname22: Да си чистый хорош, но, там где ресурсы ограничены, те же контроллеры приходится все делать руками. А на больших мощностях на си только совсем уж ресурсоемкие вещи делать, а остальное ИМХО - удел высокоуровневых скриптовых языков
Мне в своё время рассказывали про всякие FPGA, что можно на Си, а компилятор всё это в вентили преобразует Судя по ссылкам - не врали https://stackoverflow.com/questions/8988629/can-you-program-fpgas-in-c-like-languages Если спуститься к более приземлённым вещам Например играм с Arduino, то там изначально вариант Си http://www.robotshop.com/blog/en/arduino-5-minute-tutorials-lesson-2-basic-code-blink-led-2-3639 https://www.arduino.cc/en/Tutorial/BuiltInExamples В совсем более скромных контроллерах там уже наверное вам придётся так или иначе, хотя может производители всё же любят своих клиентов и сделали компилятор Как-то давно ещё смотрел какие-то смарт-карты Java Card Как следует из названия - там Java Фигулька размером с сим-карту, а как-то вот успевает крутить unname22: В юности я очень любил и люблю Perl
Он, кстати, сдох
|
|
TemkA
P.M.
|
unname22: Гуглить если честно особо некогда, но судя по всему интел в качестве оптимизации заложил "ленивость" в данное сравнение?
Он заложил вход на все свои серверы, сделанные за 10 лет, со включенным AMT вход с пустым паролем...
|
|
Бывший
P.M.
|
Originally posted by TemkA: Ну вот гугланул ради интересаgoto inurl:github.com/openssl/openssl/ Вполне себе имеется https://github.com/openssl/openssl/blob/master/apps/ciphers.c хотя тут, наверное, оправдано
Там я не спец, но подозреваю что там тоже можно обойтись без. Originally posted by TemkA: == 10 INPUT "What is your name: "; U$ 20 PRINT "Hello "; U$ 30 INPUT "How many stars do you want: "; N 40 S$ = "" 50 FOR I = 1 TO N 60 S$ = S$ + "*" 70 NEXT I 80 PRINT S$ 90 INPUT "Do you want more stars? "; A$ 100 IF LEN(A$) = 0 THEN GOTO 90 110 A$ = LEFT$(A$, 1) 120 IF A$ = "Y" OR A$ = "y" THEN GOTO 30 130 PRINT "Goodbye "; U$ 140 END ==И как вы без IF'ов что-то сделаете ?
В смысле? Там рипиты можно использовать. Синтаксис не помню, но в Басике точно есть операторы цикла с пред- и/или цикла с пост-условием. Легко и изящно Originally posted by TemkA: А в чём самодисциплина ?В Си - тоже нужно было в начале функции, в Си++ - стало можно и по ходу дела
Самодисциплина в том что надо самостоятельно и прилежно объявлять все переменные в соответствующем разделе. Бэйсик-то всё и так схавает, конечно.. . но просто чтобы самому не запутаться. С другой стороны в нем заложена возможность как бы динамического объявления переменных. Например в каких-то условиях если не нужно, то переменная и не объявляется и не занимает ОЗУ, а когда нужно - она прямо в теле программы объявляется. Хотя.. . это уже прошлый век при нынешних гигабайтах озу, сэкономленные 2-4 байта выглядят как-то нелепо, да. О времена, о нравы
|
|
|