Ответы пользователя по тегу ООП
  • Зачем паттерн одиночка?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Этот паттерн нужен для тех языков где нет специальных возможностей для сингл-тонизации. Например в Java это всегда реализуется через статичное поле или метод в любом классе.

    В Scala есть object - это уже готовый синглтон из коробки поэтому необходимости в следовании паттерну уже вроде как нет.
    Ответ написан
  • Как использовать классы через интерфейсы?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Смотрю ролики по программированию. Заинтересовали ролики Немчинского (хотя некоторые вещи он объясняет крайне непонятно для новичка).

    Немчинский - популист и популяризатор своей собственной it-школы. Обычно в каждом видосе - реклама.

    У него есть контр-образовательная позиция. Он например считает что после 1 курса универа надо сразу идти работать и наплевать на диплом вообще.

    Во многих роликах Немчинский говорит, что надо использовать классы через интерфейсы.
    ....
    У меня есть класс 1, в нем есть методы. Класс 1 используется в классе 2. Зачем интерфейс?

    Не смотрел видео. Но в этом вобщем-то есть смысл для создания слабой зацепленности и InversionOfConrol.
    Новичку такое объяснить нельзя. Нужны месяцы и годы чтобы понять. Желательно не на синтетических
    уроках а на реальных боевых проектах где МНОГО кода. Именно обилие кода и требование проводить
    сложны рефакторинги, замены движков одни на другие и цикл постоянной доработки - мотивируют к
    внедрению базовых интерфейсов вместо классов.

    То что ты не понял с 1 раза - это нормально. Я тоже когда изучал ооп и полиморфизм на примере Borland Pascal
    тоже подумал что это туфта и я это использовать никогда не буду ибо незачем.

    Можно привести пример на php и показать выгоду такого подхода?

    Тут я не уверен. Вроде в PHP OOP есть с 5 версии. А есть ли там механики полиморфизма - ХЗ.
    Пускай знающие прокоментируют. Но если есть - то хороший пример переключения
    функционала например с Db MySQL на Postgresql без переписывания бизнес-логики.
    В идеале у вас переключение должно произойти в 1 строчке кода. Если удалось - значит
    метод работает.
    Ответ написан
    4 комментария
  • Где можно найти задачи для практики ООП?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Самое лучшее - это влиться в какой-то проект. Добровольцем.

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

    В протвном случае Питонщики выглядят круче ибо они код педалят быстро и эффет на выходе - тот-же.
    Ответ написан
    Комментировать
  • Что должно в себя включать приложение по аренде авто?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Всем привет, я часто спрашивал "какую программу можно написать что бы отточить навыки ООП и немного JAVA FX?" И мне часто отвечали написать приложение по аренде/прокату автомобилей.

    Непонятно какое отношение имеет JavaFX к аренде автомобилей.

    Вообще чем короче постановка - тем меньше стоит на нее смотреть. Вот кто может написать аксептанс критерии на аренду. Где она вообще заканчивается? Какой объем фичей надо реализовать чтобы покрыть основные кейсы аренды? Это все - очень важные вопросы. И люди которые кидают вам в лицо такие задания - сами ничего в этом не понимают. А тоже могу миллиард таких заданий придумать. Техническая фантазия - богатая. Но я не смогу грамотно описать кейсы. Для этого нужно хотя-бы в этой аренде поработать. Бизнес - это ни хрен собачий.

    А так ... хочешь ООП - пиши любую безсмыслицу с классами.
    Ответ написан
    6 комментариев
  • Что может дать изменение иерархии классов во время выполнения?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Упоминалось об изменении иерархии классов во время выполнения.

    Постарайтесь найти пример. Что имелось в виду. Создание новой пары класс+объект? Или изменение
    интерфейса объекта? Информатика и вычислительная техника за 20й век насоздавала столько экзотических
    языков и парадигм что на любой каприз можно что-нибудь да найти. Создавались даже такие языки
    цель которых - максимально усложнить (Malbolge) разработку. Поэтому если "просто так менять иерархию" - то
    можно уподобляться комсомольцам которые сначала создают проблемы а потом их героически решают.
    Ответ написан
  • В чем разница между шаблонами делегирование, фасад, интерфейс?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Могу рассказать насчет фасада. Это - самый простой шаблон. Если у тебя есть некая сложная задача и ее надо сводить к вызову 1 метода - то это фасад. Например для С++ языка - main функция является "фасадом". А консольные параметры - это как-бы аргументы к функциям фасада. PHP скрипт тоже является фасадом а параметризируется через параметры URL.
    Ответ написан
    Комментировать
  • Когда стоит начинать изучать ООП в PHP?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Я-бы смотрел на вопрос через потребности фреймворка. Что щас популярно под ПХП. Ларавел. Вот надо глянуть какой там уровень ООП. Как он его использует. Какой сет фичей. И вот только по ним и работать.

    Изучать ООП - как таковое - это большая ловушка для любого разработчика. Там и теоретики не могут сойтись на мнении что оно есть и как оно есть. Короче можно 5 лет просидеть и только обрести новые вопросы и парадоксы.
    Ответ написан
    Комментировать
  • Как реализовать рекурсию в UML (диаграммы классов)?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Напомню что UML - это набор различных способов описывать сущности мира информатики. И типов диаграмм бывает много. Под данную задачу подходит и реляционная диаграмма и диаграмма классов.

    В обоих из них можно изобразить стрелочкой или агрегацию (для классов) или связь child-parent как ссылочный
    ключ в таблицах.

    В случае с классами достаточно просто описать что поле имеет тот-же тип что и сам класс. Это будет всем понятно.
    Ответ написан
    Комментировать
  • Как переделать код под ООП?

    mayton2019
    @mayton2019
    Bigdata Engineer
    ООП предполагает что в задаче есть некая сущность. Объект. И у него должны быть методы. Что происходит в данной задаче? Пользователь вводит x, потом размер массива. Потом сам массив. После этого делаются какие-то манипуляции с массивом. И после этого массив распечатывается на экран. Где тут ООП? Я не знаю! Я чорт возьми не пойму где здесь ООП.

    Вобщем скажи своему преподавателю что здесь нет смысла вводить ООП. Код достаточно хорош и концептуален в том виде как он записан. И надо не забывать про принципы KISS/YAGNI которые никто не отменял.
    Ответ написан
    Комментировать
  • Стоит ли использовать Object как тип возвращаемого значение метода в java?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Что с этим Object будет делать вызывающий? Непонятно.

    Я-бы обсудил контракт этого метода. Если он должен вернуть заглушку которая просто символизирует пустой результат вызова - то можно использовать Optional и указать опциональный тип. Если пустой список - то Collection.emptyList().

    Я не вижу никакого смысла в бизнес-приложении использовать тип Object. Он - технический. А не прикладной.
    Ответ написан
    5 комментариев
  • Какие есть Книги про ООП где максимально подробно рассказано о теории?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Поскольку ты тегнул вопрос "JAVA" то имеет смысл просто начать изучение сразу по книгам Брюса Эккеля и Хостмана.
    Вот в разрезе того как они описывают ООП - тебе будет достаточно. Еще посмотри на книгу Шаблонов проектирования (от Банды четырех) и Рефакторинг с шаблонами от Джоша Кериевски.

    Читать чистую ООП - теорию я тебе не советую. Там нет того что тебе понадобиться.
    Ответ написан
    1 комментарий
  • Как практиковать ООП?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Мне кажется что JavaScript/TypeScript - это плохой старт для изучения ООП. Дело в том что JavaScript исполняющая среда изначально была разработана с слишком вольной интерпретацией объекта. Грубо говоря она настолько flexible что те строгие законы и правила которые навязывает ООП в JavaScript могут быть слишком легко нарушены.

    Поэтому чтобы почувстоввать нужность ООП, как дисциплины. Я-бы предложил Java или C#. Это как в музыке. Нельзя начать сразу ипровизировать джаз на музыкальном инструменте в 5 лет. Надо пойти в музыкальную школу где преподаватели тебе поставят руку правильно. А потом уже после семилетки - муз-училища - консерватории - иди в импровизации. Или даже иди раньше. Но какая-то дисциплина должна быть. ООП - это дисциплина. Не волюнтаризм.
    Ответ написан
    3 комментария
  • Как правильнее создавать инстанс класса, все инициализирующие методы которого будут выполнены только внутри самого класса?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Непонятно целеполагание. Автор хочет что-то сделать зачем?

    Непонятно зачем тегать ООП ? В наше время сферического ООП не существует. Есть ООП в реализации конкретных языков. И оно очень сильно отличается. Например в некоторых языках все объекты - суть прототипы. В других не так.

    Добавил версию с тегами js, ruby. И давайте обсуждать вот в разрезе языков. А то запутаемся совсем.
    Ответ написан
    Комментировать
  • Как правильно разделить большой модуль с единственным классом?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Есть такое старое правило что сначала нужно писать тесты. Без тестов ты конечно можешь начать рефакторинг но если что-то сломалось то сложно будет детектировать поломку именно в тот момент. Это всплывёт позднее.

    Далее без исходников сложно что-либо советовать. Тут - сколько людей столько и мнений.
    Ответ написан
    7 комментариев
  • Как действительно поможет ООП в реальной программе?

    mayton2019
    @mayton2019
    Bigdata Engineer
    ООП - это более аккуратная разработка с использованием приципов SOLID, KILL, YAGNI (это аббревиатуры) и если вы - 1 разработчик то вам будет очень сложно дисциплинировать себя чтобы следовать ООП. По смыслу это выглядит - как очень сильная формализация логики чтобы не было 1 длинной простыни кода а были небольшие сущности по 5-7 строк и каждая из них обладала бы 1 единственной зоной ответственности.

    По большему счету польза от ООП проявляется на очень крупных проектах (больше десятков тыщ строк кода) и где много разрабов одновременно кодят и вносят изменениея.

    Если у автора - мелкий pet-проект то возможно ООП ему и не нужно.
    Ответ написан
    6 комментариев
  • Есть ли полиморфизм в языках с динамической типизацией?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Полиморфизм - относится к базовым возможностям ООП. Тоесть к способности рассматривать объекты сквозь призму базового интерфейса.

    Типизация - это обычно свойство компиллятора (или рантайма) по определению выводу типа каждой переменной.

    Это две разных оси измерений вобщем-то. Квадрат по сути ч 4 ячейками. Есть полиморфизм или нет. И статический тип или динамический.
    Ответ написан