LINUX.ORG.RU

Ответ на: комментарий от V_L_A_D

> И, к слову, использовать вектор напрямую — тоже не комильфо, все равно нужна какая-то объектная обвертка над ним

Brain damage, таки да.

Хотя, чего еще от плюсовиков ожидать.

grusha
()
Ответ на: комментарий от V_L_A_D

Люди, которые работают с линейной алгеброй, любой алгоритм напишут с закрытыми глазами используя только double * и никакие абстракции им не нужны и только будут мешаться. Я когда был молодым и неопытным тоже придумывал всякую %уету типа абстракций матриц и векторов, но потом понял, что это только приводит к загромождению кода и к невозможности его повторного использования, особенно посторонними людьми.

Отсюда вывод - если не хочется связываться с выделением/освобождением ресурсов, то использовать надо vector в вызывающем коде и double * в математическом ядре. Если же выделением/освобождение не доставляет неудобств, то сойдет и обычный double * вообще без оберток.

Reset ★★★★★
()
Ответ на: комментарий от grusha

Классы не нужны, есть структуры (ООП это brain damage).

brain damage это когда изобретают ООП на Си и получаются монстры типа gobject.

Шаблоны - полезно, но не так чтобы очень, есть void *

к каким тормозам приводит использование void * вместо исходных типов известно всем, например qsort vs std::sort

Reset ★★★★★
()
Ответ на: комментарий от Reset

> > Классы не нужны, есть структуры (ООП это brain damage).

brain damage это когда изобретают ООП на Си и получаются монстры типа gobject.

И это тоже brain damage, само собой. ООП нет. Нет его.

к каким тормозам приводит использование void * вместо исходных типов известно всем, например qsort vs std::sort

Насчет сортировки я слышал, да. Если в каких-то особо невпупенных случаях вызов функции-компаратора это так уж накладно, можно свою функцию сортировки написать для конкретного типа. Можно еще примеры тормозов?

grusha
()
Ответ на: комментарий от grusha

И это тоже brain damage, само собой. ООП нет. Нет его.

Половина ядра это ООП, весь гуй это ООП. Без ООП никуда.

можно свою функцию сортировки написать для конкретного типа.

Зачем писать свой велосипед, если есть уже написанное?

Можно еще примеры тормозов?

По тем же причинам glib контейнеры vs stl контейнеры

Reset ★★★★★
()
Ответ на: комментарий от grusha

Насчет сортировки я слышал, да.

Вообще, раз слышал, но дела не имел, то это только говорит об отсутствии у тебя опыта. После этого все твои слова можно всерьез не принимать.

Reset ★★★★★
()
Ответ на: комментарий от Reset

> Половина ядра это ООП

И что, девелоперы ядра тоже мучаются от того, что пишут на Сях?

весь гуй это ООП

Современный гуй вообще дегенеративен и неюзабелен по большей части.

Без ООП никуда.

Без структурного программирования никуда, без использования кода как данных. А ООП это просто глупость, набор терминов, не добавляющих к указанным концепциям ничего.

Зачем писать свой велосипед, если есть уже написанное?

Взять написанное (не GPL если надо) и адаптировать в свой код, к примеру.

> Можно еще примеры тормозов?

По тем же причинам glib контейнеры vs stl контейнеры

Ну и glib говно, это ясно. Как насчет задач? Примеры тормозов?

grusha
()
Ответ на: комментарий от Reset

> Вообще, раз слышал, но дела не имел, то это только говорит об отсутствии у тебя опыта.

Высказывания в защиту ООП говорят об отсутствии опыта у тебя (ничего личного). С опытом иллюзии развеиваются.

grusha
()
Ответ на: комментарий от grusha

Ну и glib говно, это ясно. Как насчет задач? Примеры тормозов?

Любую generic реализацию контейнеров на Си возьми. Да можно всё что угодно написать с нуля под себя, но нафига это надо, если уже есть STL ?

А ООП это просто глупость, набор терминов, не добавляющих к указанным концепциям ничего.

пустые слова неподтвержденные ничем

Reset ★★★★★
()
Ответ на: комментарий от grusha

>Brain damage, таки да.

Хотя, чего еще от плюсовиков ожидать.

Мне кажется, данная дискуссия ни к чему сейчас не приведет. Вот закончите хотя бы 9 классов — тогда и поговорим;)

V_L_A_D ★★
()
Ответ на: комментарий от grusha

>Высказывания в защиту ООП говорят об отсутствии опыта у тебя (ничего личного). С опытом иллюзии развеиваются.

Высказывания вроде процитированного выше говорят либо о попытке троллинга, либо о юном возрасте их авторов.

А попытка называть использование абстрактных типов данных «объектно-ориентированным программированием» говорит о недостаточном владении предметом.

V_L_A_D ★★
()
Ответ на: комментарий от Reset

>Люди, которые работают с линейной алгеброй, любой алгоритм напишут с закрытыми глазами используя только double * и никакие абстракции им не нужны и только будут мешаться.

Скорее, это только потому что «так привыкли». Ну и, конечно, отсутствие стандартизированного ABI для C++ тоже играет свою роль.

Каких-то рациональных обоснований для неиспользования каких-то базовых возможностей для создания абстрактных типов данных и автоматического управления памятью я не вижу. Хотя сам я с линейной алгеброй редко работаю, поэтому, быть может, чего-то и не понимаю).

Я когда был молодым и неопытным тоже придумывал всякую %уету типа абстракций матриц и векторов, но потом понял, что это только приводит к загромождению кода и к невозможности его повторного использования, особенно посторонними людьми.

Странно, у меня как раз все было наоборот. Лет пять назад считал, что «я ж не какой-то индус, чтобы забыть вызывать free в пару к malloc»:). А сейчас же предпочитаю юзать готовые велосипеды из буста для автоматическим управлением ресурсов на стеке.

V_L_A_D ★★
()
Ответ на: комментарий от V_L_A_D

использовать готовые вещи для автоматического управления ресурсами на стеке и использование абстракций для матриц это разные вещи, как это совмещается я уже написал

Reset ★★★★★
()
Ответ на: комментарий от V_L_A_D

Действительно, дискуссия ни к чему не приведет - ООП убивает мозг. Меня ООП впечатляло как раз классе в 9-м (а C++ вообще был чуть ли не любимым языком), пока не набрался знаний и опыта.

Почитайте, что об этом Дейкстра и Вирт говорили - тоже тролли и школота.

А попытка называть использование абстрактных типов данных «объектно-ориентированным программированием» говорит о недостаточном владении предметом.

Где я их так назвал? Я прокомментировал заявление топикстартера «мне нужны классы».

grusha
()
Ответ на: комментарий от grusha

> пока не набрался знаний и опыта.

жалко, что тратите свое драгоценное время на невежд, а не стараетесь заткнуть Apple с Obj-C, Oracle и IBM с Java и С++ и т.д., ведь пока вы отвлеклись - быдлокодеры заняли все места и понапихивали везде свое это ООП

ahonimous
()
Ответ на: комментарий от ahonimous

а еще M$ с ихним C# - ОС для хомячков, и язык для хомячков

ahonimous
()
Ответ на: комментарий от V_L_A_D

Этот подход прекрасно сочетается с использованием математических ядер, написанными посторонними людьми, а также с чтением твоего кода докторами, взращенными на фортране. Это разумный компромисс между использованием Си++, который никто не знает и Си, который знают все. Что такое вектор все поймут, а если начнешь городить абстракции для матриц, то скорее всего твой код полетит в помойку :) Просто я много общался с академической средой и теперь пишу так как там принято :)

Reset ★★★★★
()
Ответ на: комментарий от grusha

>Где я их так назвал? Я прокомментировал заявление топикстартера «мне нужны классы».

Читаем, что вы написали:

Классы не нужны, есть структуры (ООП это brain damage)

Вы увидели слово «классы» и почему-то сразу заговорили про ООП, хотя речи о нем не было. О чем именно это говорит — о непонимании сути ООП или о незнании языка C++ или, опять же, о троллинге либо вашем юном возрасте — я не знаю.

Небольшой ликбез: классы — это просто удобный синтаксический сахар для создания абстрактных типов данніх. Более «безопасная» (за счет compile-time типов) замена связки «структура + функции для ее использования».

А ООП начинается тогда, когда мы начинаем использовать полиморфизм (в случае с C++ для этого нужно осилить хотя бы механизм виртуальных функций).

Почитайте, что об этом Дейкстра и Вирт говорили

Я предпочел бы апеллировать к конкретным цитатам Дейкстры и Вирта;)

V_L_A_D ★★
()
Ответ на: комментарий от V_L_A_D

> Небольшой ликбез: классы — это просто удобный синтаксический сахар для создания абстрактных типов данніх.

Вот именно (насчет «удобный» и «безопасный» только спорно). А ООП не существует.

А ООП начинается тогда, когда мы начинаем использовать полиморфизм (в случае с C++ для этого нужно осилить хотя бы механизм виртуальных функций).

Я ждал этого. ))) Полиморфизм изобрели одновременно с фон-неймановской архитектурой, и вовсю юзают в том же Си. Ты можешь говорить «здесь начинается ООП» - ну говори себе.

grusha
()
Ответ на: комментарий от V_L_A_D

А ООП начинается тогда, когда мы начинаем использовать полиморфизм (в случае с C++ для этого нужно осилить хотя бы механизм виртуальных функций).

ООП начинается когда есть некоторое множество объектов (абстракций некоторый предметов реального мира или некоторой модели) которые взаимодействуют друг с другом посылом сигналов, через интерфейсы свои интерфейсы. Именно с этого начинается ООП, а полиморфизмом оно уже продолжается.

Dudraug ★★★★★
()
Ответ на: комментарий от grusha

Вот именно (насчет «удобный» и «безопасный» только спорно). А ООП не существует.

Что значит не существует? ООП - подход к моделированию программы. Построенный на взаимодействие абстракций, а не на последовательности исполняемых модулей. Это в первую очередь способ проектирования. Полиморфизм лишь развитие этой идеи, он расширяет концепцию взаимодействия между объектами. ООП не может не быть. Он есть

Dudraug ★★★★★
()
Ответ на: комментарий от grusha

и вовсю юзают в том же Си.

Пример в студию. А если это так, то тут скорее лишь потому, что ООП - это способ проектирование и моделирование, в его терминах можно представить по сути все. То что это не всегда нужно я соглашусь, но тем не менее.

Dudraug ★★★★★
()
Ответ на: комментарий от V_L_A_D

Я предпочел бы апеллировать к конкретным цитатам Дейкстры и Вирта;)

++

Dudraug ★★★★★
()
Ответ на: комментарий от Dudraug

За терминологией ООП не стоит ничего, что не было известно до изобретения этой терминологии. ООП - это обо всем и ни о чем. Везде есть объекты, везде они как-то взаимодействуют.

И кстати - об абстракциях и моделях нельзя думать в отрыве от возможных реализаций.

grusha
()
Ответ на: комментарий от Dudraug

> >и вовсю юзают в том же Си.

Пример в студию.

Да почти в любой более-менее крупной программе. Ни разу не видел структуры с полями - указателями на функции?

grusha
()
Ответ на: комментарий от grusha

Да почти в любой более-менее крупной программе. Ни разу не видел структуры с полями - указателями на функции?

И? Для тебя ООП это только a.funct()? тогда мне тебя жаль

Dudraug ★★★★★
()
Ответ на: комментарий от Dudraug

Для меня ООП вообще нет, я это уже говорил. Можно сколько угодно растекаться о взаимодействии объектов и посылке сообщений - но как-то же это должно реализовываться. Вызовом функции, RPC, как угодно, но нужно знать как.

grusha
()
Ответ на: комментарий от grusha

Обощенная концепция файла, предложенная создателями Unix - отличный пример полиморфизма, и вообще одно из величайших достижений человечества.

grusha
()
Ответ на: комментарий от grusha

Походу ты совсем ничего не понимаешь. Просто хочешь быть как все, но при этом отрицаешь, что используешь ООП. Короче забей, подрастешь поймешь. Когда придешь на работу, где будут требовать С++ и ненавистные классы, то скажи начальнику, что С++ с его ООП не нужен.

Dudraug ★★★★★
()
Ответ на: комментарий от Dudraug

Итак, всё свелось к работе, да? Не к объективным критериям проектирования и разработки, а к текущей экономической конъюнктуре.

Сам я работаю в международной хардварной компании, пишу на Си, никакого ООП.

grusha
()
Ответ на: комментарий от Dudraug

Ты какой-то упоротый.

+1. Кроме того что ООП не нужен, аргументов не последовало.

Zodd ★★★★★
() автор топика
Ответ на: комментарий от Reset

Этот подход прекрасно сочетается с использованием математических ядер, написанными посторонними людьми, а также с чтением твоего кода докторами, взращенными на фортране.

Пытался писать в стиле Си, но получается немного громоздко. После фортрана конечно проще, но не в долгой перспективе.

Что такое вектор все поймут, а если начнешь городить абстракции для матриц, то скорее всего твой код полетит в помойку

Как то странно вы говорите, мол, вектор поймут, а матрицы не поймут. Вроде одного поля ягоды. Что мешает сделать абстракции как и для вектора?

Zodd ★★★★★
() автор топика
Ответ на: комментарий от grusha

Критерий говнософта в студию.

Zodd ★★★★★
() автор топика
Ответ на: комментарий от grusha

То есть концпция, которая упрощает, то что было раньше, обобщает, предоставляет некие патерны, готовые решения - это говно? Си не обладает должным инструментарием, да его можно сделать самому, но зачем? Если уже сделано? И на уровне синтаксиса, а не библиотек. С++ как раз тот язык. А ООП та концепция, которая обобщила, упорядочила, упростила, стандартизировала множество костыльных подходов которые были раньше, она позволила создать на основе этой концепции языки с синтаксисом поддерживающим то, ради чего раньше создавали костыли. А ты говоришь, что это все плохо.

Dudraug ★★★★★
()
Ответ на: комментарий от Dudraug

>Прочти пару дельных книг по ООП, обязательно uml почитай и патерны.

Черт, звучит как «постись, молись, слушай Радонеж» =)

Waterlaz ★★★★★
()
Ответ на: комментарий от Dudraug

>Походу ты совсем ничего не понимаешь. Просто хочешь быть как все, но при этом отрицаешь, что используешь ООП. Короче забей, подрастешь поймешь.

Извини, но хоть grusha и тролль, лжец, девственник, но не понимаешь тут ты =)

Waterlaz ★★★★★
()
Ответ на: комментарий от Waterlaz

Извини, но хоть grusha и тролль, лжец, девственник, но не понимаешь тут ты =)

И чего я не понимаю?

Dudraug ★★★★★
()
Ответ на: комментарий от Waterlaz

Черт, звучит как «постись, молись, слушай Радонеж» =)

Наверное для того, чтобы понять, что представляет из себя некоторая сущность надо с ней познакомится, а не говорить «не читал, но осуждаю». Для понимания ООП недостаточно изучить один или два языка, надо понять суть. ООП - это не более чем упрощение и стандартизация множества подходов.

Но конечно же, лучше считать себя илитой и говорить, что ООП не существует, что его просто нет. Что лучше каждый раз изобретать костыли не совместимые с друг с другом, лепить программу не пойми из чего, чем использовать готовую концепцию.

Хотя чего это я распинаюсь, ООП же не существует.

Dudraug ★★★★★
()

потому что есть куча альтернативных реализаций, подходящих для разных задач

annulen ★★★★★
()
Ответ на: комментарий от Zodd

Потому что называть vector абстракцией это слишком сильно, это просто обертка над сырой памятью, которая позволяет руками не вызывать malloc/realloc/free. А в случае с матрицей добавляется нетривиальная индексация и появляются всякие сложности. Потом не дай бог для этого дела кто-нибудь захочет перегрузить операторы +,*,- .... и в коде начнется такая каша, что писец.

Reset ★★★★★
()
Ответ на: комментарий от grusha

> Шаблоны - полезно, но не так чтобы очень, есть void *

OMFG

(и вообще, есть лисп с действительно мощной макросистемой)

А, это многое объясняет.

tailgunner ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.