Что такое ООП? Часть #2 ★ Сравниваем ООП и ФП

Поділитися
Вставка
  • Опубліковано 24 гру 2024

КОМЕНТАРІ • 39

  • @ivanboroda6908
    @ivanboroda6908 Рік тому

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

    • @MasterLid
      @MasterLid  Рік тому +1

      Смотря для чего вы изучаете Haskell. Если для саморазвития, то почему бы и нет. Если для получения работы, то просто загляните на хаха.ру, поищите вакансии с хаскелем. Готов поспорить, их там немного. Даже на относительно популярный Rust не так много вакансий.
      По поводу Python -- тут вопрос не менее сложный. Мне нынешняя ситуация с ним напоминает историю с PHP лет 10-15 назад, когда этот неплохой инструмент прочно превратили в язык говнокодинга. А сейчас различные говнокурсы и инфоцыгане выпускают питонистов пачками. С одной стороны, вроде бы язык востребован (по уверениям тех же инфоцыган), с другой стороны, если питонистов выпускают пачками, а количество вакансий всё-таки не безгранично, то каковы шансы новоиспечённому питонисту найти работу? У меня нет готового ответа для вас. Изучите рынок вакансий на хаха, например.

    • @АнатолийПетрович-в8и
      @АнатолийПетрович-в8и 5 місяців тому

      Если будете учить хаскель, 100% придется учить плюсы впридачу., потому что весь ввод/вывод а так-же обходные инструменты в метсах где вывод типов хаскеля не вывозит - придется писать на них.
      Вообще хаскель - это одеальный язык для описания доменной области и написаниия декларативных скриптов и логики для тех, кто хочет писать на плюсах

  • @АнатолийПетрович-в8и
    @АнатолийПетрович-в8и 5 місяців тому

    14:20 - кибернетику никто не пытается подменять математикой. их стараются разнести на разные слои абстракций с четким направлением зависимостей между ними. И это огромный плюс. Даже те кто не знаем про монады, может написать гораздо более простой, поддерживаемый и тестируемый код в ФП стиле, чем в ООП

  • @cathynest459
    @cathynest459 3 роки тому +2

    на 2й минуте рука нажала на "подписаться". Спасибо за видео!

  • @АнатолийПетрович-в8и
    @АнатолийПетрович-в8и 5 місяців тому

    8:43 - и конечный автомат и машина тьюринга очень легко описываются на ФП. Во многом именно из-за этого Функциональщики на этих языках работать и любят

  • @АнатолийПетрович-в8и
    @АнатолийПетрович-в8и 5 місяців тому

    12:40 - у тебя и в ФП варианте и в ООП варианте приложение одинаковой степени "масштабируемости". И там и там не описаны абстракции,вместо них TODO комментарии. И там и там если описать абстракции получится одинаково простые для масштабирования приложения, но ООП код вырастет еще сильнее, чем ФП код

  • @АлександрЛебедев-ь4ю4р

    Чётко! Приятно посмотреть.

  • @АнатолийПетрович-в8и
    @АнатолийПетрович-в8и 5 місяців тому

    14:35 - никто не заставляет вводить глобальные переменные. Ты сам ее ввел, и сам ругаешься. Все то-же самое можно было описать чистыми функциями.

  • @АнатолийПетрович-в8и
    @АнатолийПетрович-в8и 5 місяців тому

    13:10 - тебе никто не мешал цвет автомобиля в ФП варианте описать с помошью HEX или union-типа, или даже хотябы абстрактной строки

  • @kitN
    @kitN 2 роки тому +1

    Будет только положительный коммент, за такой "безводный" контент руки не поднимутся писать гневный)) Лучи добра мастер, взаимно.

    • @MasterLid
      @MasterLid  2 роки тому

      А что, есть желание написать гневный? : )
      Так напишите. Я конструктивную критику не удаляю.
      Только за откровенное хамство или рекламу сразу бан выписываю.

    • @kitN
      @kitN 2 роки тому

      Нет ни желания, ни повода ув. Мастер : )

  • @mitruslatovous6
    @mitruslatovous6 2 роки тому

    Чистые функции, функции высших порядков, лямбда функции - бьюсь в экстазе ))

  • @_AbUser
    @_AbUser 11 місяців тому

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

    • @MasterLid
      @MasterLid  11 місяців тому

      Это слишком упрощённо сказано. ООП, помимо группировки функций в объекты, предоставляет ещё инкапсуляцию (упрятывание) и наследование. Так что просто к группировке тут всё не сводится. : )

    • @_AbUser
      @_AbUser 11 місяців тому

      @@MasterLid Не уверен, по скольку я только начал, но про наследование не то, что бы его вообще был бы смысл отдельно упоминать... мы в принципе же можем, в ходе задания какой ть функции использовать еще и ранее заданную функцию, что как бы и является аналогом наследования, и не получается ли "те же яйца, только в профиль"? Только в ООП ему почему то привесили отдельный ярлык, что бы по больше слов использовать..
      Ну а переменные - это отдельно да..., в теории программа представляет собой сборную из модулей, от разным программеров, это получается что то типа "защиты от дурака" если они вдруг свои переменные одинаково назвали... Тогда получается Геральд и Ривия.Геральд и это два разных Герольда.. ))) Но и в принципе это все, просто один дополнительный индефикатор разделить функции и переменные, что бы не сливались в одно и то же.. Не? Что то типа адреса..

    • @АнатолийПетрович-в8и
      @АнатолийПетрович-в8и 5 місяців тому

      Есть нюансы.
      1. В ФП функция получает какие-то данные на вход и всегда возвращает новые данные на выход (уже существующие данные никогда не изменяются). В ООП методы могут изменять уже существующие объекты и структуры.
      2. В ФП данные отдельно, функции отдельно. В ООП данные и логика их изменения объеденены в объекты. Ключевым для объекта является именно опубликованное поведение.
      3. Ключевые различия начинаются, когда требуется реализовать инверсию зависимостей для несвязанных модулей. В ООП мы используем референсные ссылки и интерфейсы. Сценарий бцдет описан как транзакционный скрипт. В ФП мы либо используем композицию двух модулей в третьем, который знает о них обоих - это самый простой вариант. Либо сложный вариант: импользуем Монады. Монады нужны чтобы писать сценарии с четкой последовательностью шагов, возможностью сбоя на каждом шаге и возможно еще какой-то скрытой логикой логикой, но в Функциональном стиле (т.е. по сути сценарий на языке формул). Благо в этом примере ни первое ни второе не потребовалось

    • @_AbUser
      @_AbUser 5 місяців тому

      @@АнатолийПетрович-в8и Это все не правильно... Функция как и ООП - это всего лишь правило, предназначенное для замены нескольких действий одним, или нескольких переменных - одной.Как формулируется правило? - желательно одной строчкой , чтобы исключить возможность двоякого интерпретирования... Если что то требует вагон текста для формулирование и вагон абстрактных терминов, понятных только двум людям: тому кто про них рассказывает и его психиатору, то это заблуждение, или секта. Не имеет права относиться ни к науке ни к логике, только к какому ть подвальному аккультизму...
      Процесс ради процесса... Молимся от сюда и до обеда, а потом жертвоприношение...

    • @АнатолийПетрович-в8и
      @АнатолийПетрович-в8и 5 місяців тому

      @@_AbUser Уточните, пожалуйста, что именно неправильно?

  • @ИванСапронов-з8ь
    @ИванСапронов-з8ь 3 роки тому

    Спасибо!

  • @MrPieNo1
    @MrPieNo1 4 роки тому +1

    Твой основной ЯП - java? Что на счёт питона не только для ai и ml?
    Канал хороший, но почему ты не распространяешь его? Реклама там в пабликах вк, у популярных ютуб-программистов.
    Функциональщики - самые "странные" среди программистов.

    • @MasterLid
      @MasterLid  4 роки тому +2

      Мой любимый язык -- это Java, да. Хотя занимаюсь сейчас в основном фронтендом на TypeScript.
      На питоне ничего серьезного не писал, поэтому не тот уровень знаний, чтобы ролик о нем создавать.
      По поводу продвижения канала -- мне некогда (и лень) этим заниматься, денег на нём я не планирую зарабатывать. Кому интересно, тот смотрит, получает ценную информацию.

    • @MrPieNo1
      @MrPieNo1 4 роки тому +1

      @@MasterLid , вполне аргументированно, спасибо.

    • @volmaks3396
      @volmaks3396 3 роки тому

      @@MasterLid хорошие объяснения, а насчёт продвижения, делайте ролики про JS и TS, это само себя раскрутит)

    • @ЕвгенийАвдеев-и6п
      @ЕвгенийАвдеев-и6п 3 роки тому

      Что насчёт C# как языка?
      Не кажется ли он более приятным чем Java?

    • @ascar66
      @ascar66 3 роки тому

      @@MasterLid скажи пожалуйста стоит ли учить являясь джава разработчиком js или лучше сразу учить TS

  • @MasterLid
    @MasterLid  3 роки тому +2

    Мне тут написал адепт функционального программирования гневную отповедь в комментах, а потом потёр её. Тем не менее, отвечу ему и возможным другим адептам.
    1. Разумеется, я не стал во всех подробностях объяснять, что такое ФП, потому что во-первых, я в этом не специалист, а во-вторых, ролик не об этом.
    2. Вы никогда не отнимете у программистов на ООП работу просто потому, что вас тупо меньшинство. Для понимания функционального программирования (особенно если идти дальше пресловутой чистой функции) нужно шарить в математике, а на это способны не все.
    3. И ровно по этой же причине ФП никогда не достигнет всеобщего охвата и не станет повсеместно используемой технологией, потому что человечество не умнеет, а, к сожалению, наоборот тупеет.
    4. Вас никто не пытается разоблачать. Скорее это вы бизнесу навязываете свое ФП, напирая на простоту тестирования, но забывая упомянуть, насколько увеличивается стоимость продукта и сроки разработки (да, ФП это дорого и долго).
    Всех вам благ, адепты ФП, лучи добра! Взаимно желаю и дальше вариться в своих монадах!

    • @ArseniyProsvirnin
      @ArseniyProsvirnin 3 роки тому +6

      Видимо, комментарий потёрли вы.
      Общий посыл моего месседжа был в том, что даже не пытались представить код в функциональном стиле, поэтому сравнение крайне не корректное.
      Ваш пример похож на сравнение двух велосипедов, причём у второго вы специально сняли руль и колёса и говорите, что он хуже.
      Никто не навязывает вам ФП. ФП навязывается сам.
      Как давно вы перебирали коллекцию c помощью конструкции for? Думаю, лет пять назад, а ведь до этого, если бы вы показали кому-нибудь конструкцию вроде
      someArray = myArray.filter(findSomething) вас бы назвали "безумным функциональшиком".
      Даже Java перенимает лучшие идеи из мира фп. Посмотрите на тип Optional
      Фп это не языки, а концепции. Вот и всё. А вы ни одну не показали.

    • @ArseniyProsvirnin
      @ArseniyProsvirnin 3 роки тому

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

    • @MasterLid
      @MasterLid  3 роки тому

      Я ничего не тёр. Текст вашего комментария я узнал только из письма, которое пришло уведомлением на почту.
      Предлагаю разойтись миром. С момента выхода ролика я немного пересмотрел точку зрения на чистые функции. В определенных ситуациях они довольно полезны. Так что действительно давайте заниматься каждый своим делом.

    • @АлександрПушкин-ю8п
      @АлександрПушкин-ю8п 3 роки тому +1

      с путном 3 согласен. Поголовное ооп, бесконечные библиотеки, яп питон, с++ - все для леммингов) Главное пишите свой никому ненужный спагетти-код и побольше, бизнесу нужен гавнокод.
      а по пункту 4 - просто голословное дилетантское высказывание. Есть крупные исследования проведенные еще в 99 году очень известными личностями, когда еще пытались бороться с этой заразой, что ооп замедляет скорость разработки отнимая время у разработчиков "Productivity Analysis of Object-Oriented Software Developed in a Commercial Environment". Есть миллион статей и высказываний дурости ооп с рабочими примерами от отцов основателей. И даже сам создатель ооп, сожалеет и не считает современное ооп - ооп. Он вообще не то имел ввиду.
      А по поводу навязывания, именно ооп агрессивно продвигаться реально сектантами в массы, можно еще макрософт поблагодарить и за триллион книг авторов-теоретиков, не создававших ничего, но зато уверяющих как ооп полезно и какая это серебряная пуля. Никто никому не навязывает, вы не найдете информации по ФП в интернете, как и не найдете инфу по другим стилям прогинга. Зато ооп везде. Никто вам ничего не навязывает, варитесь в свой джава-питонской тусовке и не трогайте другие способы создания кода. Бесит дилетантство, голословность и когда с умным видом подают чушь.