Ответы пользователя по тегу ООП
  • Можно ли Композицию и наследование назвать паттерном?

    hack504
    @hack504
    Это не паттерны. Вот паттерны: Хранитель, Посетитель, Приспособленец, Заместитель, Одиночка, Строитель, Планировщик, Наблюдатель и т.д.
    Но лучше, конечно, знать и применять композицию и наследование, чем тратить время на справочник кодов.
    Ответ написан
  • Зачем нужны абстрактные классы и интерфейсы в php?

    hack504
    @hack504
    Да, носят чисто декларативный характер. Но в проектировании и при разработке в команде разработчиков очень сильно нужОн. Например, у нас есть некая сущность Тариф, от которой порождены конкретные реализации (Акционный, лимитный, безлимитный, специальный - не суть ) - их может что-то объединять/разделять. Поэтому, когда я пишу некий класс который как-то взаимодействует с Тарифом с определенным признаком, то я явно могу указать это создав специальный Интерфейс и запросить именно экземпляр класса конкретно этого интерфейса, а не родительского класса:
    public function __construct(IDiscountByDay $Tariff){}

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

    hack504
    @hack504
    Грубо говоря ООП - это парадигма программирования, когда твой функциональный код (несмотря, на то, что он работает как одно целое) дробится на несколько участков кода(абстрагирование) независимых друг от друга(инкапсуляция) , но при этом с возможностью дополнения или изменения другими участками кода (наследование). По сути тоже, что и функциональное программирования но решает проблемы понимания кода, иерархии, повторного использования и прочее - например если пойдем дальше основ, то в ООП включают инструменты для использования в командной разработке - приватность и публичность, интерфейсы и абстракции. и т.д. и тп.
    Ответ написан
  • Можно ли вот так разделять класс?

    hack504
    @hack504
    Если нужно работать в рамках одного экземпляра класса то можно попробовать так
    class A{
      public $val = 10;
      public function method1(){
        $m2 = new B($this);
        return $m2->method2();
      }
    }
    
    class B {
      public function __construct($obj) {$this->obj = $obj;}
      public function method2(){
        return $this->obj->val + 1;
      }
    }
    
    $a = new A();
    echo $a->method1();

    Правда все методы и свойства класса должны быть только публичными, но судя по всему это не критично.
    Ответ написан
  • Можно ли писать PHP OOP и процедурный вместе без фреймоворка?

    hack504
    @hack504
    Чистый ООП тупо не будет работать без процедурного(функционального) стиля - инкапсуляция как бы намекает. Это просто абстракция функционального программирования для абстрагирования некой логики в некий объект с методами и свойствами - но их также как и функции нужно где-то вызывать и от этого функциональный стиль(процедурный) не становится ООП-шным. Когда говорят про разделение, то имеется ввиду не вставлять откровенные костыли. Например, в MVC модели я буду делать проверку сессии не в экшене, а до описания класса контроллера. А вот если я тоже самое делаю где-то в ядре, которое обслуживает всю мою MVC-систему, то это нормчик.
    Ответ написан
  • Как передать объект БД в класс?

    hack504
    @hack504
    2 вариант нужен, если экземпляр класса DB будет ещё где-то использоваться помимо App. А также, если классы немного подкорректировать, то можно сделать LazyLoad подключение к БД в классе App.
    Ответ написан
  • В каком классе писать логику столкновений двух объектов?

    hack504
    @hack504
    Нигде. В парадигме ООП и снежинка и варежка и сцена - описывают только свое поведение методами и свойствами. Введите ещё одну абстракцию - мир(или физика), которая содержит все эти объекты и описывает поведение их взаимодействия.
    Сцена детектит столкновение снежинкой и варяжкой - передает миру, а тот в свою очередь удаляет снежинку, запускает анимацию варяжке, запускает в сцене радостный звуковой щелчок.
    Таким образом, если в дальнейшем реализовывать дополнение "Грачи прилетели", то легко реализуется логика столкновения варяжки и помета => помёт остается, варяжка замирает, в сцене грустный звук "ооу"
    Ответ написан