-
- инкапсуляцией, полиморфизмом и наследование никак не связано ООП.
Многие считают что ООП==С++. IBAH(156 знак., 05.10.2020 14:06)
- То, что вы называете ООП на Си, на самом деле может считаться всего
лишь псевдо-ООП. У ООП есть вполне четкое определение. - Argon(05.10.2020 14:28, ссылка)
- Все ошибочно определяют ООП через
инкапсуляцию-наследование-полиморфизм. Но эти понятия абсолютно
ортогональны Объекту. Проблемы происходят из-за того что за ООП
выдают Инкапсуляционно Полиморфически Наследовательно
Ориентированное Программирование (ИПНОП) - IBAH(05.10.2020 17:48)
- Ваши слова похожи на бред. По крайней мере гугл не знает про ИПНОП. Argon(343 знак., 05.10.2020 21:09)
- Может не надо? - lloyd(05.10.2020 21:17, ссылка)
- Хотите доказать, что на С можно изобразить то же, что и на C++? А я
и не утверждал обратного, этот пример частично подпадает
определение из википедии про "совокупность объектов, каждый из
к-рых является экземпляром определенного класса". Однако умные
дядьки в заключении по ссылке пишут, что без атрибутов ООП это не
ООП -> - Argon(05.10.2020 22:41, ссылка)
- Нельзя, в том-то и дело. Суть не в ООП однако, а в метапрограммировании. ООП на самом деле важный конечно элемент, но не краеугольный камень. Лишь срез под определённым углом. Но можно посмотреть и под другим. На мой взгляд намного важней понятие ТИПА, как сущности способной обладать теми или иными наборами свойств (членов, методов, функций), в т.ч. и другими типами и шаблонами типов. Будет ли там наследование с полиморфизмом -- не принципиально. - fk0(07.10.2020 18:17)
- Хотите доказать, что на С можно изобразить то же, что и на C++? А я
и не утверждал обратного, этот пример частично подпадает
определение из википедии про "совокупность объектов, каждый из
к-рых является экземпляром определенного класса". Однако умные
дядьки в заключении по ссылке пишут, что без атрибутов ООП это не
ООП -> - Argon(05.10.2020 22:41, ссылка)
- Может не надо? - lloyd(05.10.2020 21:17, ссылка)
- Ваши слова похожи на бред. По крайней мере гугл не знает про ИПНОП. Argon(343 знак., 05.10.2020 21:09)
- Все ошибочно определяют ООП через
инкапсуляцию-наследование-полиморфизм. Но эти понятия абсолютно
ортогональны Объекту. Проблемы происходят из-за того что за ООП
выдают Инкапсуляционно Полиморфически Наследовательно
Ориентированное Программирование (ИПНОП) - IBAH(05.10.2020 17:48)
- То, что вы называете ООП на Си, на самом деле может считаться всего
лишь псевдо-ООП. У ООП есть вполне четкое определение. - Argon(05.10.2020 14:28, ссылка)
- Процент отсева кандидатов в правоверные адепты как признак
истинности учения – это пять. - SciFi(04.10.2020 21:15)
- Имхо хватит уже этой вкусовщины. Пора переходить к автоматической
оценке качества кода на основе алгоритмов машинного обучения. s_h_e(196 знак., 04.10.2020 23:49)
- Есть одна маленькая проблемка. Машину обучали тоже программисты, причём такие, специфические, в своей теме они конечно спецы, а в нормальном программировании -- не очень... Причём для обучения наверняка использовали баги из открытых проектов. А проекты разные бывают. У микрософта одни, у студентов другие... - fk0(05.10.2020 10:57)
- Подобная штука уже активно используется. Благодаря ей последнее
время идет волна утекших исходников - потому что после загрузки
кодика приходят хакеры и выгружают копию себе. Множество контор до
автоматической оценки качества кода доросли, а до того чтобы
сменить настройки доступа к серверу установленные по умолчанию -
нет. - AlexG(05.10.2020 02:55)
- Сцылку на продукт/сервис можно? s_h_e(144 знак., 05.10.2020 08:34)
- Я имел ввиду SonarQube AlexG(73 знак., 05.10.2020 15:42, ссылка)
- Да, точно, оттуда много утечек. Нашел еще deepcode, но как-то их анализ кода ядра Линукс не впечатляет) - s_h_e(05.10.2020 15:53)
- Я имел ввиду SonarQube AlexG(73 знак., 05.10.2020 15:42, ссылка)
- Сцылку на продукт/сервис можно? s_h_e(144 знак., 05.10.2020 08:34)
- А на чем нейросеть будем тренировать? На упавших Боингах? На
обмотанных вокруг столбов Тестах? Введем критерий - user death per
million lines of code per hundred hours up time? - Evgeny_CD(04.10.2020 23:58)
- А почему учитывать только действительные смерти, есть ведь еще накопительные. - Kabdim(05.10.2020 12:25, ссылка)
- Для начала можно взять десяток завсегдатаев Сахары, пристегнуть к
креслам, раздать планшеты и туда выводить образцы. Свайп вправо -
понравилось, влево - не понравилось. Или наоборот, не помню. - s_h_e(05.10.2020 00:02)
- Т.е. по результатам code review. Обычно превращается в балаган. - fk0(05.10.2020 10:59)
- Разница в том, что код ревью проводит живой человек, на которого можно давить. А тут будет бездушная железка или сторонний сервис. s_h_e(108 знак., 05.10.2020 12:08)
- Т.е. по результатам code review. Обычно превращается в балаган. - fk0(05.10.2020 10:59)
- Эээ, не надо передергивать! Не признак истинности, а признак
сложности в освоении (что, кстати, минус ООП). Однако, каждому
свое. Для МК, даже с 1Мб флэши ООП нафиг не сдалось. - Argon(04.10.2020 21:27)
- О господи, "ООП не осилили". Я понимаю, вы бы страдали какой-нибудь
шаблонной метамагией из C++20. lloyd(117 знак., 05.10.2020 17:58)
- Не знаю к чему этот ваш выпад, я привел кое-какие наблюдения. Можно
было бы предположить, что сдуваются полные новички, но нет, люди с
прошлым опытом в программировании тоже куда-то пропадают. Argon(44 знак., 05.10.2020 21:54)
- Наверное, потому что надо код писать, а не о высоких материях
рассуждать? Все эти концепции и парадигмы создаются с вполне
конкретной целью: повысить сопровождаемость кода. Наследование
используется, когда есть несколько подпрограмм, которые ведут себя
схоже, и можно общие части вынести в уровень пониже. Прототипная
модель (js, lua) в этом отношении даже удобнее - класс-родитель
имееют доступ к данным класса-потомка. При этом для "клиента" кода
все будет спрятано за lloyd(746 знак., 06.10.2020 21:05)
- Microsoft? "Функция куда-то пошла и начала что-то делать..." (C) не
помню откуда. А всегда ли есть понимание, что за event-driven
моделью стоят
суровыечаще детерминированные конечные автоматы? Я вот часто вижу, что состояние как единая сущность в мозгу программиста не воспринимается и размазывается по десятку переменных, порождая массу новых непредусмотренных состояний, тупиковых переходов, и прочих ошибок. - fk0(07.10.2020 18:23)- Понимание-то может и есть, но когда надо "код, быстраа", обычно никто их на бумажке не рисует. lloyd(299 знак., 07.10.2020 19:26)
- Прототипная модель -- это CRTP что ли, если в терминах C++? - fk0(07.10.2020 18:20)
- Глянул википедию, что-то сложна. Прототипная модель в Lua - это когда у объекта не находится метода или поля, он ищет ее в метатаблице. Эти метатаблицы можно соединять в иерархию наследования. Но сами "методы" класса работают с фактическим объектом, а не его метаипостасями, поэтому методы вызываются у реализации, а не у этого класса. lloyd(574 знак., 07.10.2020 19:22)
- Microsoft? "Функция куда-то пошла и начала что-то делать..." (C) не
помню откуда. А всегда ли есть понимание, что за event-driven
моделью стоят
- Наверное, потому что надо код писать, а не о высоких материях
рассуждать? Все эти концепции и парадигмы создаются с вполне
конкретной целью: повысить сопровождаемость кода. Наследование
используется, когда есть несколько подпрограмм, которые ведут себя
схоже, и можно общие части вынести в уровень пониже. Прототипная
модель (js, lua) в этом отношении даже удобнее - класс-родитель
имееют доступ к данным класса-потомка. При этом для "клиента" кода
все будет спрятано за lloyd(746 знак., 06.10.2020 21:05)
- Не знаю к чему этот ваш выпад, я привел кое-какие наблюдения. Можно
было бы предположить, что сдуваются полные новички, но нет, люди с
прошлым опытом в программировании тоже куда-то пропадают. Argon(44 знак., 05.10.2020 21:54)
- Заставь дурака богу молиться -- лоб себе расшибёт. ООП это лишь парадигма. То как ты будешь смотреть на код. От её (не)применения мало что меняется, если до крайностей не доходить. - fk0(05.10.2020 11:01)
- Почему для МК ООП не надо? - evgeniy1294(04.10.2020 21:40)
- Не знаю как в C++, а в Java просто капец какой оверхед. В
компилированном коде, говорят, сохраняются все имена
переменных/методов/классов. Argon(386 знак., 04.10.2020 22:00)
- Вот в этом и отличие C++ от C# или Java. В том, что в последних "капец какой оверхед". - fk0(05.10.2020 11:08)
- В C++ оверхед как правило нулевой, а иногда и отрицательный,
например std::sort() vs qsort(). - йцyкeн(04.10.2020 22:55)
- А если нужно сделать 10 сортировок разных типов данных/предикатов и
флеша для кода в обрез? - Kabdim(05.10.2020 12:41)
- Ну, qsort ведь никуда не делся. Кроме того, мне ваш пример кажется
чисто умозрительным. В моей практике такое не встречалось. Скорее
наблюдается другое: там, где я раньше применил бы сортированный
массив, теперь больше чем в половине случаев я использую map, и
нужда в сортировке отпадает. - йцyкeн(05.10.2020 13:02)
- Увы, но между qsort и std::sort -- огромная пропасть. Странно этого не понимать. Начиная с того, что std::sort таки работает с объектами любых типов, а qsort только с имеющими тривиальный конструктор копирования. Потом qsort гораздо менее эффективен из-за сортировки обменом (std::sort требует чтоб value_type у итератора был перемещаемым и из-за этого может не тупо менять один сдругим, но двигать по памяти за ~вдвое меньшее число операций). qsort может сортировать только fk0(327 знак., 06.10.2020 02:25)
- Я веду к тому что мнение "оверхед у темплейтов нулевой" несколько
упрощеннолукавое. Есть ситуации, особенно в эмбедед
программировании, где оверхед МП начинает быть чувствительным. - Kabdim(05.10.2020 13:12)
- Да, пример с std::sort() был не самый удачный, учитывая, что в
предыдущем посте речь шла о размере, а не о скорости. Однако
аргумент о том, что шаблоны ведут к "code bloat" тоже лукавый. Как
бы предполагается, что без шаблонов дублирования кода не
происходит, но на деле ещё как происходит. Откройте реальный проект
на тёплом ламповом Си - копипасты там будет предостаточно. - йцyкeн(05.10.2020 13:34)
- На холодном транзисторном C++ многие библиотечные функции на самом деле ничего не дублируют. Тот же std::vector не плодит функции под кажды отдельный тип, а использует обобщённые функции где целесообразно. Разумеется не сам по себе, а код так написан руками. - fk0(06.10.2020 02:29)
- Некоторые считают, что "explicit is better than implicit". - s_h_e(05.10.2020 13:37)
- Да, пример с std::sort() был не самый удачный, учитывая, что в
предыдущем посте речь шла о размере, а не о скорости. Однако
аргумент о том, что шаблоны ведут к "code bloat" тоже лукавый. Как
бы предполагается, что без шаблонов дублирования кода не
происходит, но на деле ещё как происходит. Откройте реальный проект
на тёплом ламповом Си - копипасты там будет предостаточно. - йцyкeн(05.10.2020 13:34)
- Ну, qsort ведь никуда не делся. Кроме того, мне ваш пример кажется
чисто умозрительным. В моей практике такое не встречалось. Скорее
наблюдается другое: там, где я раньше применил бы сортированный
массив, теперь больше чем в половине случаев я использую map, и
нужда в сортировке отпадает. - йцyкeн(05.10.2020 13:02)
- Кстати отличный пример, когда C++ с шаблонами обставляет другие
языки. А то тут один товарищ утверждал, мол метапрограммирование не
нужно. - fk0(05.10.2020 11:06)
- Ну и чего ты продолжаешь передергивать? Если ты вдруг забыл, я
писал что МП плох в простоте и безошибочности использования и это
огромная проблема. Но его безальтернативность в С++ очевидна. У нас
разные точки зрения и ничего плохого в этом нет. - Kabdim(05.10.2020 12:52)
- Следуя такой логике, язык PIC18 -- совершенно безошибочный, там
всего-то 35 простых инструкций... fk0(58 знак., 06.10.2020 02:13)
- Неа, следуя твоей логике я бегаю по саванне с камнем примотанным к палке и охочусь на мамонтов, потому что так еще проще чем программировать с МП. ) - Kabdim(06.10.2020 12:37)
- Это нормальная логика, если твоя цель - не надуть до бесконечности
щеки на рынке труда, накачанном очередным биржевым пузырем, а
получить (выдать) полезный результат. - s_h_e(06.10.2020 10:03)
- Полезный результат это такая, очень неопределённая, эфемерная
сущность. В чём он полезный, и как его измерять. В
американизированных фирмах есть такая должность -- product owner.
По идее он, или CTO, с достаточным техническим бэкграундом должны
хорошо понимать жизненный цикл (почти всегда программного)
продукта. Он отнюдь не заключается в том, чтоб просто "любому
студенту написать программу за три месяца", как это часто думают
те, которым нужен быстрый результат. А потом fk0(4420 знак., 06.10.2020 20:38)
- Когда-то я ездил на автомобиле с впрыском, но при этом педаль газа соединялась с дроссельной заслонкой тросиком. Сейчас между ними 100500 строчек (говно)кода. Откуда взялась эта сложность? Но уходить она явно никуда не собирается. - йцyкeн(06.10.2020 21:59)
- Сам себе противоречишь, тут же оверинжиниринг и тут же сложность-константа. Нихрена не константа. По минимальной сложности есть ограничения, а в плюс можно огого как улететь. Это миллион раз обсуждалось, могу только повторится. Проблема плюсов не сложность, а то, что их применяют там, где здоровенный кусок спецификации языка нахрен не упал. А это практически везде. И это всегда издержки. s_h_e(414 знак., 06.10.2020 21:16)
- На рынке есть бесконечное множество контор, которым нужен быстрый
результат - лифты, умные дома, контроллеры собачьих будок и прочие
ардуины, там знание языка не нужно. А есть Huawei и Quantenna,
которые пылесосом выкачивают топовых спецов, предлагая зарплаты в
районе 200к. evgeniy1294(128 знак., 06.10.2020 12:32)
- И про них тоже. Есть у них быстрые решения. Нужно через пол года на рынке продукт. Пусть говно, а не продукт, но если его не вывести на рынок через пол года -- в следующем году по направлению вообще работы не будет. Причин почему -- масса, начиная с того, чтоб направление получило финансирование менеджерам нужна какая-то демонстрация, нужен фидбэк от продажников и т.д. -- никто не будет вкладываться непонятно во что, нужно конкурировать за средства с другими направлениями, fk0(1183 знак., 06.10.2020 20:52)
- Про хуявей не знаю, а куантенна это давно уже онсеми. И нихрена они про знание языка не спрашивали у меня например, спрашивали в основном про алгоритмы и понимание общих принципов работы выч. систем. s_h_e(183 знак., 06.10.2020 12:46)
- Полезный результат это такая, очень неопределённая, эфемерная
сущность. В чём он полезный, и как его измерять. В
американизированных фирмах есть такая должность -- product owner.
По идее он, или CTO, с достаточным техническим бэкграундом должны
хорошо понимать жизненный цикл (почти всегда программного)
продукта. Он отнюдь не заключается в том, чтоб просто "любому
студенту написать программу за три месяца", как это часто думают
те, которым нужен быстрый результат. А потом fk0(4420 знак., 06.10.2020 20:38)
- Следуя такой логике, язык PIC18 -- совершенно безошибочный, там
всего-то 35 простых инструкций... fk0(58 знак., 06.10.2020 02:13)
- Проблема в том, что это "обставляет" в обычной разработке не нужно
(т.е. нужно, но в очень ограниченном наборе сфер). На болидах F1 на
работу никто не ездит. - s_h_e(05.10.2020 12:15)
- Что значит не нужно? Тебе значит колёса, педали, руль дай, а всё
что под капотом -- не нужно. Вот как-то так звучит. Без того, что
"не нужно" -- элементарно не сделать библиотечных функций. Тех,
которые "в обычной разработке". Ты говоришь, мол не нужно, а сам
пользуешься но не замечаешь. Как-то так. - fk0(06.10.2020 02:16)
- Любую библиотечную функцию можно написать на ассемблере,
гарантирую. - s_h_e(06.10.2020 10:09)
- Очевидно, что std::sort ты на ассемблере не напишешь при всём
желании. И даже на подмножестве C++ без шаблонов. В том у суть
метапрограммирования, оно лежит уже в другом пространстве,
измерении, не достигаемом любнми "классическими" средствами. - fk0(06.10.2020 21:03)
- Ну ладно вам, эти все шаблоны в динамических языках вообще не
нужны, кек. А если сильно нужны - то генерируется текст и eval() на
него (нет, правда) - lloyd(06.10.2020 21:07)
- Шаблоны работают не на уровне текста, а в пространстве типов. На уровне текста далеко не уедешь, ведь захочется не просто подставлять, а ещё понимать что именно тебе подсунули и в зависимости от аргумента делать выбор. В динамических языках динамическая же диспетчеризация. И в ряде статических (где нет статического полиморфизма). Что в лучшем случае -- далековато от оптимального кода. Если этот случай вообще наступит, возвращаясь к сортировке, а не припомню где можно fk0(1888 знак., 07.10.2020 12:29)
- В чём сила шаблонов C++?
В правде.В том, что они не ломают строгую статическую типизацию, так что сравнивать их с динамическими языками абсолютно некорректно даже по функционалу. Про скорость я даже заикаться не буду. - йцyкeн(06.10.2020 22:05)- Вообще-то не ломают никакую типизацию, только отодвигают время
опредления типа к моменту компиляции в месте использования. Хотя
сравнивать действительно некорректно, в динамиеских языках можно
натворить еще больше дичи, чем с шаблонами. - Kabdim(07.10.2020 11:37)
- Ключевое слово было "статическую". - йцyкeн(07.10.2020 12:24)
- Давайте с другого конца, вот к примеру: Kabdim(54 знак., 07.10.2020 12:31)
- Если это C++, то конечно статическая. То же самое, что int i = 0; - йцyкeн(07.10.2020 12:47)
- А если: #define MAKE_VAR(a,b) auto a = b MAKE_VAR(i, 0); ---- А
почему тогда статическая типизация ломается в таком (к примеру)
выражении Kabdim(519 знак., 07.10.2020 15:24)
- В вашем примере статическая типизация работает как доктор прописал:
если при объявлении переменной она получила тип
vector<int>, потом его поменять нельзя. - йцyкeн(07.10.2020 18:14)
- Мои глаза, из-за жарких споров с другим участником конфы, прочитали не то что было вами написано. Извиняюсь. - Kabdim(08.10.2020 15:44)
- В вашем примере статическая типизация работает как доктор прописал:
если при объявлении переменной она получила тип
vector<int>, потом его поменять нельзя. - йцyкeн(07.10.2020 18:14)
- А если: #define MAKE_VAR(a,b) auto a = b MAKE_VAR(i, 0); ---- А
почему тогда статическая типизация ломается в таком (к примеру)
выражении Kabdim(519 знак., 07.10.2020 15:24)
- Если это C++, то конечно статическая. То же самое, что int i = 0; - йцyкeн(07.10.2020 12:47)
- Давайте с другого конца, вот к примеру: Kabdim(54 знак., 07.10.2020 12:31)
- Ключевое слово было "статическую". - йцyкeн(07.10.2020 12:24)
- Вообще-то не ломают никакую типизацию, только отодвигают время
опредления типа к моменту компиляции в месте использования. Хотя
сравнивать действительно некорректно, в динамиеских языках можно
натворить еще больше дичи, чем с шаблонами. - Kabdim(07.10.2020 11:37)
- Ну ладно вам, эти все шаблоны в динамических языках вообще не
нужны, кек. А если сильно нужны - то генерируется текст и eval() на
него (нет, правда) - lloyd(06.10.2020 21:07)
- Вот не надо так говорить в присутствии людей, которые реально писали на ассемблере. Когда-то у меня не было выбора, теперь выбор есть, и добровольно на эти галеры я не вернусь. - йцyкeн(06.10.2020 11:31)
- Очевидно, что std::sort ты на ассемблере не напишешь при всём
желании. И даже на подмножестве C++ без шаблонов. В том у суть
метапрограммирования, оно лежит уже в другом пространстве,
измерении, не достигаемом любнми "классическими" средствами. - fk0(06.10.2020 21:03)
- Любую библиотечную функцию можно написать на ассемблере,
гарантирую. - s_h_e(06.10.2020 10:09)
- F1 из семейства стм32 ещё вполне себе в ходу, вообще-то. - SciFi(05.10.2020 12:19)
- Что значит не нужно? Тебе значит колёса, педали, руль дай, а всё
что под капотом -- не нужно. Вот как-то так звучит. Без того, что
"не нужно" -- элементарно не сделать библиотечных функций. Тех,
которые "в обычной разработке". Ты говоришь, мол не нужно, а сам
пользуешься но не замечаешь. Как-то так. - fk0(06.10.2020 02:16)
- Ну и чего ты продолжаешь передергивать? Если ты вдруг забыл, я
писал что МП плох в простоте и безошибочности использования и это
огромная проблема. Но его безальтернативность в С++ очевидна. У нас
разные точки зрения и ничего плохого в этом нет. - Kabdim(05.10.2020 12:52)
- подписываюсь! утверждаю что даже для МК с 16к флеша и 2к озу также
работает. ибо ООП не в коде и размере чегото а в форме мышления и
изобразительном инструменте оного. - klen(04.10.2020 23:55)
- Переписывал тяжелый в сопровождении код в ООП. Размер загружаемого модуля уменьшился с 32 кБ до 28 кБ. И что интересно - дальнейшее добавление функционала практически не увеличивало размер загружаемого модуля. И добавление нового функционала уже не приводило к капитальным поломкам программы (как это происходило раньше). - _volkanaft_(05.10.2020 04:56)
- А если нужно сделать 10 сортировок разных типов данных/предикатов и
флеша для кода в обрез? - Kabdim(05.10.2020 12:41)
- Задача ООП состоит в структурировании кода, 1МБ флеша вмещает в себя сотни тысяч строк кода, организовать такой объём без ООП непросто. evgeniy1294(311 знак., 04.10.2020 22:41)
- Казалось бы, при чем тут ООП. Чистый ООП очень хорошо ложится на
гуи, которые есть и у микроконтроллеров. - lloyd(04.10.2020 22:11)
- Где-то есть, а где-то нет. Где-то вместо него HTML или другой какой язык разметки. - Cкpипaч(04.10.2020 22:23)
- Патамушта ещё не разобрались с неявными приведениями типов в арифметических выражениях, а вы уже лезете со своим наследованием :-) - SciFi(04.10.2020 21:45)
- Не знаю как в C++, а в Java просто капец какой оверхед. В
компилированном коде, говорят, сохраняются все имена
переменных/методов/классов. Argon(386 знак., 04.10.2020 22:00)
- О господи, "ООП не осилили". Я понимаю, вы бы страдали какой-нибудь
шаблонной метамагией из C++20. lloyd(117 знак., 05.10.2020 17:58)
- Имхо хватит уже этой вкусовщины. Пора переходить к автоматической
оценке качества кода на основе алгоритмов машинного обучения. s_h_e(196 знак., 04.10.2020 23:49)
- инкапсуляцией, полиморфизмом и наследование никак не связано ООП.
Многие считают что ООП==С++. IBAH(156 знак., 05.10.2020 14:06)