1. Куча / Говнокод #25786

    −1

    1. 1
    https://www.youtube.com/watch?v=lfdAwl3-X_c

    Запостил: OlegUP, 30 Августа 2019

    Комментарии (47) RSS

    • >> 44:51
      Ты не охуел ли случайно?
      Ответить
      • Уголовный розыск.
        Мы его уже взяли.
        В качестве свидетеля, последуйте за мной.
        Ответить
    • Обсирать джавовские классы, это всё равно, что избивать младенцев
      Ответить
    • Я понял, если в процедурном стиле пишут:
      $data = file_get_contents($path);

      То в "ООП" надо писать:
      $data = new FileThatOnlyCanReturnItContentAsString($path)->getContent();


      Именно поэтому я за "процедурное программирование".
      Ответить
      • Ты очень правильно ООП в кавычки поставили


        ООП далеко не всегда удобно и вовсе не серебряная пуля, однако для некоторых задач оно не так уж и плохо.

        А вот что плохо, так это то, что 99% сторонников ООП на самом деле нихуя не понимают ООП.
        Они думают что если вместо

        get_petux

        написать

        new PetuxObtainer()->getPetux();

        то их код сразу станет ООПным
        Ответить
        • Ну об этом и видео. Я вообще постоянно не понмал, какой толк от инкапсуляции если пишут геттеры и сеттеры? Ну а так мужик угадал мои мысли почти.
          Ответить
          • А щас начал понимать?
            Ответить
            • Ну сейчас понял, если рассматривать объект как сущность имеющую свойства и полностью сокрытую от внешней среды, значит их нельзя использовать.
              Ответить
              • ссущность
                Ответить
              • > если рассматривать объект как сущность имеющую свойства и полностью сокрытую от внешней среды,
                > значит их нельзя использовать.
                Как из первого утверждения следует второе? Почему я, например, не могу прочитать рид-олни свойство apple.color?
                Ответить
              • Закрывая поля объекта, ты вынужден делать логику, использующую эти поля, внутри объекта. Переименование "private" в "public" или добавление нового публичного метода - говнокод по мнению автора.
                Ответить
          • дебагер ставить чтобы:) кроме того, геттеры и сеттеры могут быть частью интфрейса

            но на самом деле в нормальных языках типа котлина и C# они сами генерятся
            только жабоёбы хуячат вручную
            Ответить
            • В видео генерация гет\сеттеров тоже обсирается.
              ОНи вообще не нужны, так как нарушают инкапсуляцию, даже не ее, а сокрытие.
              Ответить
              • > ОНи вообще не нужны, так как нарушают инкапсуляцию, даже не ее, а сокрытие.
                Фанатики не нужны. Идеально-инкапсулированные классы, полностью изолированные от внешней среды, пусть пишут ООП-цари.
                Ответить
              • хуже всего инкапусляцию нарушают открытые класы и виртуальные методы

                джава подталкивает тебя нарушать инкапсуляцию как можно чаще
                Ответить
            • Ты из 1983 года пишешь?
              https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/processor-breakpoints---ba-breakpoints-
              Ответить
              • Хочешь сказать, в 83-м брейкпоинтов не было?
                Ответить
              • я пишу из джавы)

                нативный дебагер можно натравить на обращение к памяти, но есть одно но

                хардварных точек останова немного
                остальные реализуются патчнигом кода и вставкой туды 0xCC
                Ответить
      • Можно называть объект той же подпрограммой, с еще одной областью видимости и со своим набором функций.
        А в видео говорят о том, что объект - это не просто набор данных с функциями, а сущность обладающая свойствами.
        В ПП нету наследования, хоть и есть композиция.
        В ПП нету полиморфизма.

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

        Именно поэтому я за ООП.
        Ответить
        • >В ПП нету наследования
          >В ПП нету полиморфизма.

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

          >В ООП ты данные определяешь в отдельном месте и не мешаешь с алгоритмом.
          Как раз наоборот.

          В ПП у тебя отдельно структуры (тупые, если конечно там нет указателей на функции) а отдельно алгоритмы.

          В ООП же алгоритм "чирикнуть" находится внутри класса "Петух", и если ты хочешь чтобы чирикнул кто-то другой, то у тебя пробелмы
          Ответить
          • Так держи метод чирикнуть в базовом классе Птица, и у тебя и Петух зачирикает, если надо, и кто-то другой.

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

            Зато в си нету перегрузки функций, а это часть полиморфизма, а значит и нету виртуального наследования.

            Ну и конструкторы с деструкторами вызывающие сначала для объекта malloc не забываем писать сами.
            Ответить
            • >Так держи метод чирикнуть в базовом классе Птица,
              И потом у тебя будет 200500 классов в наследовании и все друг друга переписывают:) Особенно смешно, когда у тебя нету множественного наследования.

              >В си есть указатель на void, и его можно скастить в любой функции к любому типу.
              Да, но речь не об этом.



              >Зато в си нету перегрузки функций, а это часть полиморфизма, а значит и нету виртуального наследования.

              Ну храни в структуре указатель на функцию:)

              >Ну и конструкторы с деструкторами
              Это да, хотя это и не главное в ООП.


              Я не против ООП, просто оно не всегда нужно
              Ответить
              • Ну блин, засчет того наследования, что в C++ ты можешь разные сущности плодить, в чем то ведущие себя одинаково. В ПП ты такого никогда не достигнешь.
                То есть здесь ты уже не пишешь одну функцию на несколько случаев, а целый класс функций на несколько случаев, и каждый частный случай можешь переопределить.
                Ответить
                • И получишь комбинаторный взрыв очень быстро

                  >можешь разные сущности плодить
                  вот это правда


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

                    Полностью принцип звучит же так: "Не плоди сущности без острой нужды"

                    Ну и вспомним философию UNIX:
                    Вместо одной программы которая делает все сразу лучше много программ, мелких, которые делают свое дело хорошо.
                    Ответить
        • Поторопился я, думал он предлагает создавать классы имеющие один метод, не стал смотреть до конца. Там он предлагает создавать классы имеющие например 4 публичных метода.

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

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

          Мне не очень понятно, зачем файлу нужно уметь сплитить строки, и почему нельзя указать в конструкторе, что кодировка не известна. А все, что осталось не займет много кода и в одном классе.

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


          Про иммутабельность согласен, но вот про отсутствие геттеров не очень, если я не могу обратиться к уже открытому файлу за путем к нему, то мне придется хранить его путь где-то снаружи, и где тогда это ваше хваленое выделение данных в отдельное место?
          Ответить
      • Шутки шутками, а https://github.com/yegor256/takes/blob/master/src/main/java/org/takes/misc/TransformAction.java
        Ответить
        • Ну вот, на словах говорил все красиво, а посмотришь на код, и все сразу ясно. Как я и ожидал: "ООП"-головного мозга, классы хоть и маленькие и иммутабельные, но совершенно бессмысленные и с одним методом, по-сути те же процедуры.

          Классов для сортировок там нет случайно?
          Ответить
      • На самом деле file_get_contents умеет не только с файлом (именно поэтому я за "PHP"). Поэтому тебе придётся несколько классов создавать.
        Ответить
    • https://img.devrant.com/devrant/rant/r_63672_ynS7y.jpg
      Ответить
    • Хороший доклад. Пусть Конардяка посмотрит.
      Ответить
    • Я ебал 100500 классов 5-строчников только лишь с 1 методом.
      Ответить
      • +1

        кроме разве что кейсов когда там внятные стратегии
        да и там омжно лямбду
        Ответить
    • Наша речка обмелела:
      Ни подмыться, ни попить.
      А мне мама не велела.
      Неподмытую любить
      Ответить
    • показать все, что скрытоhttps://www.clipartmax.com/png/middle/17-172577_vladimir-putin-turkey-beak-bird-cartoon-clipart-chicken-nuggets-clipart.png
      Ответить

    Добавить комментарий