Ответы пользователя по тегу ООП
  • Что такое событие в ООП?

    Stalker_RED
    @Stalker_RED
    Возьмем к примеру сущность "пользователь". Придумаем ему несколько свойств, методов и событий.
    Свойства: имя, возраст, адрес, баланс.
    Методы: установить имя, прочитать имя, установить адрес, прочитать адрес...
    События: имя изменилось, баланс изменился, аватарка изменилась, пользователь заказал пиццу, или что там у вас за бизнес-логика.

    Вы можете придумать свои события, которые подходят под ваши процессы.
    Ответ написан
    Комментировать
  • Вызов несуществующего метода?

    Stalker_RED
    @Stalker_RED
    Вам не нужно ничего передавать "в виде массива", движок пхп сделает это сам, если не найдет существующий метод.
    https://ideone.com/EsnAEZ

    EtT1rUn.png
    Ответ написан
    1 комментарий
  • Допустимо ли использовать наследование в этой ситуации?

    Stalker_RED
    @Stalker_RED
    То есть теперь у корзины будут методы определения email, идентификатора пользователя, проверки пароля, и всякого такого?

    Корзина может иметь свой метод getUserId, а наследовать корзину от юзера как-то странновато.
    Ответ написан
  • Как лушче спроектировать максимально точную модель промышленного предприятия?

    Stalker_RED
    @Stalker_RED
    Какой паттерн проектирования ... возможно, абстрактная фабрика будет уместна
    да, конечно. Абстрактная фабрика более уместна, чем какая-то конкретная фабрика, типа парфюмерной фабрики, или птицефабрики.
    Ответ написан
    2 комментария
  • Когда учить паттерны проектирования?

    Stalker_RED
    @Stalker_RED
    Пользуюсь фрэймворкам (laravel), понимаю что там многие паттерны используются, но их незнание писать мне на нем пока не мешает.
    Фокус в том, что вы уже пользуетесь паттернами, хоть и не знаете их названий.

    Прочтите для начала обзорную статью, типа такой, это не много времени займет. Если большая часть уже понятна, то возможно стоит прочесть еще и книжку, и закрепить материал. А если все сложно-сложно-непонятно, то отложите пока эту тему.
    Ответ написан
    Комментировать
  • Что такое основы ООП?

    Stalker_RED
    @Stalker_RED
    Гм... Как-то размыто, есть вот например само программирование, и есть ООП это его часть, очень важная часть, это всё, что я знаю о том, что такое ООП, если так можно сказать.

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

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

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

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

    Stalker_RED
    @Stalker_RED
    https://m.habr.com/ru/post/437122/
    Статей вроде этой - десятки.
    homepage_product_name

    Не совсем понятен смысл. на других страницах у этого-же товара другое имя?
    Ответ написан
    Комментировать
  • Что означает $this-> -> в PHP?

    Stalker_RED
    @Stalker_RED
    Вообще крутой ход - изучать фреймворки ни слова не почитав о ООП.

    $this как правило указывает на экземпляр класса, а после "стрелочки" метод или свойство.

    Такой прием с цепочками вызовов называется "method chaining".

    Почитать можно документацию php.net/manual/ru/language.oop5.php
    Или какой-нибудь учебник, где более "живым" языком расскажут.
    Ответ написан
    1 комментарий
  • Объект или экземпляр?

    Stalker_RED
    @Stalker_RED
    Класс - это те буковки, которые вы видите на экране.
    Представьте его как чертеж, например. А готовые объекты существуют в памяти компа во время работы программы. Представьте их как кучу какие-то штуковин, сделанных по общему чертежу.
    Объекты - экземпляры класса.
    Ответ написан
    8 комментариев
  • Допустимо ли присваивать экземпляр в свойство класса?

    Stalker_RED
    @Stalker_RED
    Да, допустимо.
    Только это свойство объекта а не класса. Когда вы сделали
    foo = new A() // создался новый объект, экземпляр класса A.
    bar = new A() // создался еще один новый объект, экземпляр класса A.
    // Когда вы делаете
    foo.init() // создался B, записался в свойство объекта foo, но при этом у bar в этом свойстве ничего нет, потому что ему еще не делали init
    Ответ написан
    5 комментариев
  • Клиентский код в итоге пишется в процедурном стиле?

    Stalker_RED
    @Stalker_RED
    Смешались в кучу кони, люди...

    ООП нужен для управления сложностью.
    В простых проектах он только вносит лишний головняк в плане проектирования, но в сложных - позволяет разделять огромную ужасную бизнес-логику на какие-то отдельные блоки/модули/классы с которыми можно работать не пытаясь затолкать в голову весь проект.
    Вот я юзаю метод Billng.getUserBalance() и не задумываюсь что там внутри этого getUserBalance()
    может там чтение из файла, или запрос к базе данных, или может лазером посылают сигнал на луну - меня не волнует, мне только циферка нужна.

    Паттерны (шаблоны проектирования же) нужны для того, чтобы объяснить ДРУГИМ ПРОГРАММИСТАМ что за хрень мы тут написали.
    Можно писать код, который вообще ни на что не похож и не соответствует никаким шаблонам. И тем людям, которые захотят разобраться в коде вынуждены будут его прочесть целиком и осмыслить. Или мы пишем: здесь у нас шаблон "наблюдатель" а вот нам у нас singleton и всем сразу понятен общий смысл.

    С MVC пример не особо удачный. Дело в том, что сейчас существует довольно много разных штук на которые почему-то прилепили буковки MVC, хотя на самом деле... В целом понятно, что вы пишете о случае с "толстыми контроллерами" но ведь может быть несколько разных контроллеров которые работают с одной моделью.
    И могут быть разные модели, отдающие данные в одно и то-же представление. Но об этом ниже.

    И с полиморфизмом вы что-то напутали. Посмотрите хоть в википедии что это и зачем. Клиентов ведь может быть больше одного. Сегодня наш код работает на телефоне с ios, завтра на andoid'е, а послезавтра на голографическом телевизоре с пси-управлением. И данные он вчера брал из MSSQL а сегодня берет из mongodb. Но при этом у нас все круто спроектировано, и мы не меняем ядро приложения. Только подсовываем новые реализации интерфейсов по необходимости. Вот про что полиморфизм.
    Ответ написан
    1 комментарий
  • Где брать примеры хорошего ООП?

    Stalker_RED
    @Stalker_RED
    Посмотрите исходники nodejs, vue, или еще чего-нибудь, у чего тыщщи звезд.
    Даже если окажется, что ООП там не идеальный - вы будете не в одиночестве. Найдутся тысячи единомышленников, готовых вести святую войну за единственно правильный ООП. (По крайней мере на этой неделе.)
    Ответ написан
    Комментировать
  • Для чего нужно ООП?

    Stalker_RED
    @Stalker_RED
    Для управления сложностью.
    https://habrahabr.ru/post/169487/

    Все что сделано при помощи ООП можно написать и в процедурном стиле, например, но чем сложнее проект тем сложнее будет во всей этой каше разобраться. Весь смысл ООП - разбить большущую сложную систему на кучу отдельных ПРОСТЫХ объектов, методов, сущностей.
    А еще с ООП неразлучна абстракция. Чтобы можно было одну часть программы выбросить и подменить на другую.

    Сегодня у нас выводится на веб-страничку, по которой кликают мышкой, а завтра не мышкой - а тач пальцами. А послезавтра вообще в VR шлем, и управление голосом. И если система правильно спроектирована - ее не придется переделывать ПОЛНОСТЬЮ, а только ту часть, которая ответственна за ввод/вывод.
    Ответ написан
    Комментировать
  • Как вернуть переменную из события xhr.onload?

    Stalker_RED
    @Stalker_RED
    Это асинхронное событие. В тот момент, когда вы делаете console.log() результат запроса еще не пришел.

    И не делайте больше код картинкой.
    Ответ написан
    2 комментария
  • Нужен ли отдельный именованый метод, если он используется в одном месте?

    Stalker_RED
    @Stalker_RED
    Подключать голову, и разбивать. Так, чтобы получались логически завершенные методы, которые можно при необходимости использовать в других местах. Даже если это не понадобится, это должно облегчать чтение кода и поддержку.
    Ответ написан
    Комментировать
  • Как правильно выделять уровни абстракций?

    Stalker_RED
    @Stalker_RED
    Просто выделяй где хочешь. Получатся лишние слои - убирай. Не хватает слоя - добавляй. По мере набора опыта это будет происходить легче и интуитивнее.

    А семиуровневая модель OSI - это миф. Они там сидели долго, что-то разрабатывали, обсуждали, а потом внезапно оказалось, что TCP/IP уже применяется на каждом углу, и в нем не семь уровней.
    Ответ написан
    Комментировать
  • Как вернуть значение из одного метода и получить в другом?

    Stalker_RED
    @Stalker_RED
    class foo {
      method1() {
         return 'hello' // return вы и сами написали
      }
      method2() {
         let x = this.method1() // а вот результат никуда не присвоили
         console.log(x)
      }
    }
    Ответ написан
    7 комментариев
  • В какой момент при создании объекта класс его возвращает?

    Stalker_RED
    @Stalker_RED
    Когда он будет полностью готов, с методами. Хотя лучше бы вы уточнили, о каком языке речь, а то мало-ли, может есть какая-то экзотика.
    Ответ написан
  • ООП + jQuery, как правильно делать?

    Stalker_RED
    @Stalker_RED
    Ключевое слово this в javascript работает своеобразно, не так, как в других языках.

    В отличие от PHP, Java, C++ и т.п, значение this в javascript не привязывается статически ни к какому объекту, а зависит от контекста вызова.
    javascript.ru/tutorial/object/thiskeyword
    https://learn.javascript.ru/object-methods
    https://developer.mozilla.org/en-US/docs/Web/JavaS...

    И да, вместо
    var self = affiliate
    id: self.customerId
    Можно было просто написать
    id: affiliate.customerId
    Ответ написан
    Комментировать
  • Почему не останавливается таймер?

    Stalker_RED
    @Stalker_RED
    Потому что self.stop();, и при этом переменная self не объявлена.

    Так вот работает: https://jsfiddle.net/o940649p/2/

    P.S: Когда-то делал похожую штуку, можете посмотреть https://jsfiddle.net/Stalk/mLu8v4k6/
    Ответ написан
    Комментировать