LINUX.ORG.RU

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

 , , ,


11

7

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

★★★★★

Последнее исправление: cetjs2 (всего исправлений: 1)

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

что тебе «печально»-то? Я прекрасно знаю, как такие вещи реализуются на практически любых ЯП, включая ассемблер. Но вот «очередь» на php мне доставляет.

И да, если ты думаешь, что это я придумал — ты ошибаешься. Я не претендую на приорритете данного открытия. Подсмотрел.

И наконец, если ты такой весь из себя умный и знающий, то поучи сынка, продемонстрируй свои скиллы. А то какой-то ты уныллый тролль.

emulek
()

зеленое и холодное кратко, внятно.

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

«Взять и поделить» (с)

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

И да, если ты думаешь, что это я придумал — ты ошибаешься. Я не претендую на приорритете данного открытия. Подсмотрел.

И в мыслях не было, куда уж тебе.

Но вот «очередь» на php мне доставляет.

Уж насколько php убогонький недоязычок, но быдлокодеры демонстрируют, что по сравнению с тем кодом, который они на нём творят, — сам язык недостижимый идеал. Можешь начать чтение документации отсюда http://www.php.net/manual/en/function.array-shift.php , вместо «подсматривания» способов, как вырывать зубы через задницу.

geekless ★★
()

императивщина
vs
декларативщина

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

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

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

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

Вы таки утверждаете, что

Matrix sum(const Matrix &A, const Matrix &B)
будет короче и нагляднее?

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

и это просто увеличение индекса на 1.

в итоге, чтобы понять что этот код означает в данном контексте, тебе придётся копаться в сорцах. inc-index был бы гааараздо понятнее, при этом букаф не намного больше.

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

и нафига, спрашивается, усложнять всем жизнь?

 int main() {
   mpz_class a, b, c;
 
   a = 1234;
   b = "-5678";
   c = a+b;

   cout << "sum is " << c << "\n";
   cout << "absolute value is " << abs(c) << "\n";
}

напиши вариант на С и сам все поймешь

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

Потому как alignment и endianness.

Ну alignment и подкрутить можно. А endianness.... Ну не предназначалсь та программа не для х86. В любом случае речь не о том, как данные переслать, а о том, что находятся индивиды, которые из лучших побуждений органически не приемлют нужные и полезные фичи языка, считая все это лишним.

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

Когда пишешь на низком уровне - вполне обычная практика ведь. Это если повыше подняться, может аукнуться.

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

Ну alignment и подкрутить можно.

pragma pack иногда умеет преподностить неприятные сюрпризы.

Ну не предназначалсь та программа не для х86.

Все так думают. А потом, лет через десять, тот несчастный, кому придется быдлокод поддерживать, будет тебя искать с топором.

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

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

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

Когда пишешь на низком уровне - вполне обычная практика ведь.

Ты идиот? Эта «практика» может работать только если компилятор совсем тупой, и если на Марсе хорошая погода.

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

Ты идиот?

NO U.

только если компилятор совсем тупой

на низком уровне

Ассемблеры никогда особым интеллектом не отличались. Как разложишь по памяти метки - так и будет.

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

напиши вариант на С и сам все поймешь

Я тебе сейчас DSL на Common Lisp приведу, обосрешься на классах делать.

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

Все так думают. А потом, лет через десять, тот несчастный, кому придется быдлокод поддерживать, будет тебя искать с топором.

Та там столько быдлокода было, что endianness был практически ине заметен на общем фоне.

Надо было этого ушлепка ткнуть хайлом в тот банальный факт....

Бессполезно. У таких индивидов ответ один - «Уминявсяработает, будуписатьтакдальше, отстаньтеотминя».

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

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

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

Отодвиньте вашу тарелку с борщом в сторону, специалисты по макросам! (комментарий)

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

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

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

А могут и вообще не оказаться в памяти! )

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

и да - сам ТС там говорил, что задача не имеет смысла

wota ★★
()
Ответ на: комментарий от wota
#define init(...) \
    []() { \
        struct base { \
            base() : __VA_ARGS__ {} \
            int x; \
            int y; \
            int z; \
        }; \
        struct calc : public base { \
            calc() : __VA_ARGS__ {} \
            int x = base::y + base::z; \
            int y = base::x - base::z; \
            int z = base::x - base::y; \
        }; \
        return calc(); \
    } ()

vs.

(define-initor init (1)
    ((x (+ y z))
     (y (- x z))
     (z (- x y)))
  (list :x x :y y :z z))

Спасибо, посмешил. А теперь представь, что будет на более сложных задачах.

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

Для себя я все понял, спасибо. Не переубедили - плюсики пока в моем понимании остались свалкой рюшечек для си, скрывающих от программиста то, с чем он работает. Не любил я строгую типизацию после перла, но с си понял, что я вижу каждый байтик данных, и тут плюсик снова все сокрыл. Абстракция так и осталась логически ненужной, т.к. есть typedef и #define. В будущем, когда данные моих программ вылезут за порог памяти мозга, я забуду с чем начинал работать и куда надо идти в коде, тогда подумаю над словами защитников C++ об улучшенной работе оного с огромными данными, по сравнению с голым си. Благодарю

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

vs.

как и все лисперы, ты забываешь скопипастить весь код ;) в С++ тоже ведь можно написать еще один макрос, чтоб оставить только формулы + список переменных

П.С. убегаю на несколько часов

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

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

будь в языке With (или какой импорт от структуры - что бы имя структуры не повторять(однако тогда в языке нужно регламентировать порядок перекрытия имён)) .

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

ну и может первый его язык освоение не имел синтаксиса агрегации данных кроме индексных массивов.

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

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

У таких индивидов ответ один - «Уминявсяработает, будуписатьтакдальше, отстаньтеотминя».

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

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

зависит от архитектуры :)

прикол что «что для одних константа для других переменная» применима к обоим сторонам «можно ли в ручную из набора „близь“ расположеных имён формировать блок данных » в одном и том же смысле как лицам считающие некоторые частные факты законами .

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

зависит от проекта .

чисто даже синтаксически работа с отдельными полями как одтельными сущностями , и лиш для «экспорта импорта» их размещение в одном блоке(вместо процедуры которая собирает и раздаёт)

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

будь возможность иметь алиасы (глобальные) для полей уникальной структуры то лучше бы завернуть все переменные в эту структуру -синглтон(в области её жизни) и иметь имена для полей как отдельных сущьностей без ниобходимости упоминать каждый раз имя этого агрегата.

а вот если чел просто структурами не пользуется - ну бывает травмы обучения чё уж.

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

как и все лисперы, ты забываешь скопипастить весь код ;)

Это весь код. Именно так будут писать пользователи: красиво и компактно на Common Lisp; уродливо и с кучей бойлерплейта на C++.

в С++ тоже ведь можно написать еще один макрос, чтоб оставить только формулы + список переменных

Так напиши.

Ну и самое главное, от распрекрасного ООП не осталось и следа.

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

ты реально не видел «сред программирования» в «60ых» :)

«реально реальные » программисты инструментировали написание кода и трансляции из мнемоник в маш код(0/1).

да базовые мнемоники «1 в 1» в некоторые битовые строки .

однако те же директивы уже есть команды не для трансляции , а для изменения состояния транслятора влиящие в какие битовые строки мнемоники отобразятся.

т.е асемблер принципиально отличается от хайуровневого языка только сильной привязкой к некоторой платформе .

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