Рубрики
Uncategorized

Ненависть к любви: Черты характера?

Что такое черты характера? Мой руководитель группы СОЛК однажды описал это как Горизонтальное наследование w… С тегами php, ооп, черты характера, обсуждение.

Мой руководитель группы СОЛК однажды описал это как Горизонтальное наследование с помощью этой простой аналогии,

У всех птиц есть перья, но не все птицы умеют летать.

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

Согласно Горизонтальное повторное использование для PHP RFC

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

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

Черты похожи на миксины в других языках, таких как Ruby и JS.

Пример использования Черт

Точно так же, как аналогия наверху. У нас есть классы Parrot и Ostrich, которые оба наследуются от класса Bird. И класс Попугай, и Страус имеют перья, унаследованные от класса Птица, но только попугай может летать, потому что у него есть черта Полета.

class Bird
{
    private $type;

    public function __construct(string $type)
    {
        $this->type = $type;
    }

    public function feathers(): string
    {
        return "I am a " . $this->type . " and i have feathers";
    }
}

trait Flight
{
    public function fly(): string
    {
        return " - I can fly too";
    }
}
class Parrot extends Bird
{
    use Flight;

    public function __construct()
    {
        parent::__construct('Parrot');
    }
}
class Ostrich extends Bird
{
    public function __construct()
    {
        parent::__construct('Ostrich');
    }
}
$skiTheOstrich = new Ostrich();
echo $skiTheOstrich->feathers(); //returns: I am a Ostrich and i have feathers

$johnTheParrot = new Parrot();
echo $johnTheParrot->feathers();
echo $johnTheParrot->fly(); //returns: I am a Parrot and i have feathers - I can fly too

Преимущества черт характера

  1. Позволяет повторно использовать код
  2. Неограниченный иерархиями наследования
  3. Класс может иметь несколько признаков

Недостатки черт характера

  1. Поощряет раздутые классы
  2. Просто “скопируйте и вставьте” код между классами.
  3. Костыль для ленивого программирования
  4. Способности целого класса визуально НЕ находятся в одном месте.

ВЕРДИКТ???

Лично мне черты характера не нравятся, почему? ты спрашиваешь. Я сторонник традиционных принципов разработки программного обеспечения, и эта черта допускает множественное наследование, и я лично поддерживаю Композиция над наследованием . Для меня многие черты в коде являются признаком запаха кода.

Используя черты, трудно следовать коду, потому что в нем есть такая функциональность, где вы не знаете, как класс ее реализует а потом вы замечаете “использовать XYZ” где-то наверху а ты такой, ха-ха!

Я также считаю, что это немного странно проверять. Поэтому по этим причинам, хотя я считаю, что у них есть свои собственные варианты использования!!!

я ненавижу

Когда я подписываю, я говорю:

Мое мнение является моим собственным на сегодняшний день ( может измениться завтра ), а не мнением моего работодателя ( или моим к завтрашнему дню ).

У тебя противоположное мнение или ты хочешь дать мне пять, ты можешь @Trussdamola

Оригинал: “https://dev.to/trussdamola/hateitorloveit-traits-dpd”