LINUX.ORG.RU

ооп и функциональщина кратко, внятно.

 , , ,


11

7

Дабы не слать напраслину на любителей создавать классы и объекты, пытаюсь разобраться в плюсах, которые отличаются от родителя, на первый взгляд, только названиями файлов, функций и приемами организации мышления погромиста. Так вот, эти ваши классы даже в учебнике называют почти структурами, а мизерное отличие сомнительного профита легко можно решить и в анси си(далее - ансися) при ближайшем обновлении. Ансися страдает перегрузкой названий функций для каждого из подлежащих обработке типов, отсутствием удобной иногда перегрузки функций, что, конечно минус, но не критично, ибо решаемо. Сиплюсик конечно удобен школьникам, тяжело принимающим всякие %s %d %x и так далее в качестве аргументов принтфов и сканфов, но зачем создавать для этого отдельный язык? Ведь << и >> становится лишним препятствием при освоении, если параллельно сдвиги битов читать. Итого, я вывел для себя, что в попытке облегчить участь программиста, разработчики языка усложнили его до степени родителя, не получив особенного профита. Чем же ооп так всем нравится, если оно не облегчает код?

★★★★★

Последнее исправление: cetjs2 (всего исправлений: 1)
Ответ на: комментарий от Nirdosh

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

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

их надо добавить в плюсы или в минусы? :-)

Минусы — это новый ЯП?)

geekless ★★
()

Кто-нибудь уже объясните ТСу, что означают слова «процедурный» и «фунциональный».

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

Спасибо, надо Вирта потыкать, пока ооп-любители не покусали

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

идиоматичные для с++

Зачем? Или кресты с каких-то пор разучились Си компилировать?

хочу синтаксис под задачу адаптировать немного

Если хотите использовать кресты, то лучше не использовать макросы.

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

я всего лишь хочу адаптировать синтаксис под задачу. Не знаю как намекнуть тонко, поэтому намекну толсто: как в лиспе, например.

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

их надо добавить в плюсы или в минусы? :-)

Смотря какая сила воли.

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

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

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

ОМГ. Ты понимаешь, что это диагноз? Ну в смысле, завязывай с программированием. ХЗ, в чем твоё призвание, может ты певец там или художник.

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

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

minakov ★★★★★
() автор топика

А в девелопмент опять про сиськи срутся...

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

Менделеевы всякие тоже были кто сварщик как я, кто сортиры подметал

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

Так ить я потому и злой сегодня - атмега на дефолтном генераторе в 1мгц мусор шлет, а протеус нормально работает. Все козлы, а все из-за ооп, потому что когда все функции явно работают с данными, ничего не портится, а стоит только залезть в эзотерику и дергать объедки с классами - начинается абстракция и вакханалия

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

я всего лишь хочу адаптировать синтаксис под задачу.

Боюсь, что таких глубин я ещё не постиг, и на данный момент считаю их ненужными. Скорее всего из-за того, что я их ещё не постиг.

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

база данных сотрудников, зарплаты

Это тебе про простые примеры просто пишут, чтоб мозги повернуть в нужную сторону. В реальности объемы на много больше.

Nirdosh
()

А еще эти сволочи придумали ссылки там, где все прекрасно обходились указателями!!11

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

а ломать общепринятую систему - это саботаж

не саботаж, а багет апологетов «стабильности(тм)»стабильного API и прочих рабов привычек красить тепловозы маникюрными кисточками и вытачивать мебель из дерева надфилями... предварительно напилив ими же остальные инструменты.

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

Спп позиционируется как ооп язык

4.2 Мультипарадигменный давно.

стандартный си, который функциональный или как там его.

Ггг... Процедурный тащемта, ну да ладно, функция-процедура это где-то близко, раз уж спп у ТСа ооп язык...

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

>тайпдефы как в си, которые портят читаемость

пфф, у кого портят - у кого улучшают :)

slackwarrior ★★★★★
()

Так вот, эти ваши классы даже в учебнике называют почти структурами

Когда в 1991-м(?), в отсутствии Интернета, форумов, вменяемых книжек я пытался понять, что же такое _по сути_ (а не на идиотских примерах) ООП в Си++, то мне месяц, наверное, потребовалось на то, чтобы это понять :) Что объекты — это те же самые структуры, только с приватной по умолчанию видимостью переменных и функций. А всё остальное — просто новое поле терминов для описания этого явления :) Дальше даже как-то и учить стало нечего :)

KRoN73 ★★★★★
()

убери тег функциональзина пожалуйста.

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

POD

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

KRoN73 ★★★★★
()

Сиплюсик конечно удобен школьникам, тяжело принимающим всякие %s %d %x и так далее в качестве аргументов принтфов и сканфов, но зачем создавать для этого отдельный язык?

А теперь берёшь GoF и читаешь. Потом читаешь ещё раз и так до просветления. Ибо сейчас то, что ты несёшь - это бред человека, который не писал ничего сложнее Hello World и университетских лаб. Ты сейчас даже не понимаешь чем процедурный C отличается от функциональных ЯП и от ОО ЯП.

Norgat ★★★★★
()

по сабжу, C++ это такой вывернутый наизнанку C, в нём ВСЁ НАОБОРОТ. А основной прикол Страуструпа в том, что он специально всё вывернул, а вот синтаксис оставил тем же, и даже семантику почти. Это такой хитрый план.

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

Но на си++ будет короче и наглядней.

4.2

Конечно

Matrix A, B, C;
C = A + B;
короче и нагляднее, но это до тех пор, пока ты не полез смотреть в Matrix &Matrix::operator+(const Matrix &B) const{}

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

В плюсах классы вообще не отличаются от структур.

плюсах вообще НЕТ структур, есть только классы с нелепыми умолчаниями, которые называются «struct».

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

Области видимости по :: - удобство, но одна инструкция не причина для создания нового языка

попробуй наваять на сишечке класс с виртуальными функциями. Например функцию вставки в коллекцию, которая умеет вставлять в список. Сделал? Я не сомневался. А теперь, не ломая рабочий код, смени список на красно-чёрное дерево.

В этом сила C++: он умеет менять кобыл на переправе, т.е. без особых костылей менять _внутреннюю_ организацию данных.

Т.е. в коде у тебя написано

i++;
и это просто увеличение индекса на 1. НЕ ломая этот код, ты можешь сделать так, что i++ будет иметь смысл «переход на следующий(postorder) элемент дерева».

В сишечке конечно тоже можно так сделать, но лишь ценой кривых и косых указателей на таблицы указателей на функции.

Ну а уж про замену шаблонов макросами так и вообще говорить смешно. Обычно это просто невозможно.

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

«Когда в 1991-м» (с) стандарт читали не все, даже если у них была машина времени :)

За 9 лет к тому времени много диалектов наплодили :) А вот литературы было мало. Страуструп переводной у меня только ещё год спустя, наверное, впервые появился :)

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

плюсах вообще НЕТ структур, есть только классы с нелепыми умолчаниями, которые называются «struct».

POD-структуры, не?

попробуй наваять на сишечке класс с виртуальными функциями. Например функцию вставки в коллекцию, которая умеет вставлять в список. Сделал? Я не сомневался. А теперь, не ломая рабочий код, смени список на красно-чёрное дерево.

Pimpl, не?

Т.е. в коде у тебя написано
i++;
и это просто увеличение индекса на 1. НЕ ломая этот код, ты можешь сделать так, что i++ будет иметь смысл «переход на следующий(postorder) элемент дерева».

Спорно. Некоторым людям™ не нравится, что строка «i++» не очевидно показывает «мы тут переходим к следующему элементу дерева».

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

плюсах вообще НЕТ структур, есть только классы с нелепыми умолчаниями, которые называются «struct».

POD-структуры, не?

да. Но начинающему следует помнить, что POD это специальный, и довольно редко используемый инструмент. И что он отстреливает не ноги, а яйца. Напрочь (: По типу перезагрузки new.

Pimpl, не?

да, как вариант. Но я не очень понимаю, как его реализовать на C, что-бы он был не слишком убог и хоть как-то работал.

Спорно. Некоторым людям™ не нравится, что строка «i++» не очевидно показывает «мы тут переходим к следующему элементу дерева».

знаешь, когда по ТЗ «некоторые люди» должны напейсать Over9000 строк кода с этим i++, то лучше дать им абстрактный базовый класс, если ТЗ такое, что совершенно неясно, какая структура должна использоваться для этого i++(или если надо использовать более одной структуры данных). 95% пхп программистов выпадут в осадок, если узнают, что такой код

for($j = 0; $j < 10; $j++)
·   $a[$j] = $j;

$a["3.1415926"] = 17;//ВНЕЗАПНО
вполне себе валидный, и отлично работает.

Я не спорю, это можно и на C сделать, но сделать ТАКОЕ на C++ намного проще.

emulek
()

Чем же ооп так всем нравится, если оно не облегчает код?

Не совсем понятно что значит «облегчает». ООП позволяет поддерживать проекты значительного объёма и сложности при минимальных затратах времени, делает код легко читаемым, а повторное использование кода лёгким. Ну и в С++ снимаются многие ограничения присущие С, например объявление переменных в любом месте. Что непонятно то?

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

делает код легко читаемым

Ну и в С++ снимаются многие ограничения присущие С, например объявление переменных в любом месте.

IRL это только ухудшает читаемость кода.

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

А зачем эта самая читаемость кода нужна?

//перлобог

anonymous
()

Тему надо называть «пьяный гон на C++», уважаемый мошенник.

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

Просто убей себя.

сразу после вас.

И да, а зачем нужен ваш коммент, в контексте нашей беседы?

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

число звёзд никак не коррелирует с наличием мозгов, а уж тем более со знанием какого-то конкретного ЯП.

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

$a[«3.1415926»] = 17;//ВНЕЗАПНО

Я пхп не знаю, но мне интересно. Там строка приведется в число, а потом число с плавающей точкой в инт? Или $a станет каким-то хэшем с ключами какого-то типа пошире? Вообще - ужасно.

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

Или $a станет каким-то хэшем с ключами какого-то типа пошире?

AFAIK там строка останется строкой. А число — числом.

Вообще - ужасно.

что в этом «ужасного»? Такое практически везде, в bash даже есть (хотя в нормальных языках надо описывать каждый массив по своему, а в php принято УМВР-стиль)

Наоборот, можно например сделать очередь:

вставка в конец: $q[] = "next"

удаление первого в очереди: foreach($q as $k=>$v){unset($q[$k]); break;}

Можно разряжённый массив сделать, в котором большинство индексов просто не существует.

Многое можно. Просто взять, и сделать. Чем это плохо-то?

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

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

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

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