Ответы пользователя по тегу ООП
  • Является ли чтение Readonly свойств объекта нарушением инкапсуляции?

    NikFaraday
    @NikFaraday
    Student full-stack Developer
    Если объект возвращает DTO как представление самого себя

    Как? DTO это объект, который просто описывает некую модель данных и не имею поведения (Wikipedia). Ладно, с этим всё равно, едем дальше

    нельзя менять свойства объекта из вне, это могут делать только методы объекта

    Ну это уже смотря на логику... К примеру, наведу пример из .Net, возьмите стандартный класс от Microsoft по типу Console (Класс для работы с консолью). Там же есть свойства, по типу BackgroundColor, Height, Width и т.д. Изменение размеров окна является нарушением инкапсуляции?

    То представление инкапсуляции, что вы имеете, оно опирается только на наличие модификаторов доступа public и private. Является ли инкапсуляцией наличие модификаторов доступа? Нет, потому что не было бы описано 100500 книг и статей по поводу двух модификаторов доступа. Инкапсуляция - это, в первую очередь, целостность объекта, т.е., что объект может взаимодействовать сам с собой через внутренние методы (По типу того, как вы описали).

    Но неужели объект не может меняться снаружи, или он не может меняться через публичные свойства? Если бы это было запрещено, то в конвенциях к ООП писалось бы такое ещё и жирным шрифтом, что: "НЕЛЬЗЯ ДЕЛАТЬ СВОЙСТВА ПУБЛИЧНЫМИ".

    Для примера, есть такой языка как C++ (Думаю, что вы слышали). Там, в отличии от более продвинутых языков программирования, нет большей части упрощающего функционала (Синтаксического сахара, называйте как хотите). Весь объект строится из полей и методов (С различными комбинациями модификаторов доступа). Есть ли там инкапсуляция? Да. Запрещены ли там публичные поля? Нет.

    машина машина должен решать задачи по перевозке водителя,

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

    Класс который содержит поля - является структурой данных (без поведения). класс который содержит и структуры данных (т.е. свойства) и поведение является объектом.

    Любой класс является классом. Конкретная реализация описания класс является объектом. Структура данных (Вообще модель данных) является самым простым типом класса. Если у класса есть методы для описания поведения, то он всё равно остаётся объектом некого класса. Как выше написал уже Владимир Коротенко :
    dto являются легчайшими объектами взаимодействия с бд, они просто по своей сути не могут содержать в себе логики


    мы хотим при оплате добавить еще какое-нибудь поведение, поверх стандартного

    Наследование, ещё один принцип ООП. Если полностью закрытый класс даже для наследования (sealed) значит тут уже как не крутись, у вас ничего не получится, как бы вы не ХОТЕЛИ УСОВЕРШЕНСТВОВАТЬ функционал. Значит так задумано вышестоящим разработчиком/ами

    но как без знания объекта это сделать

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

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

    Будете. Будете делать всё что вам скажут, абсолютно.
    Ответ написан
    2 комментария
  • В чём отличие делегата от события?

    NikFaraday
    @NikFaraday
    Student full-stack Developer
    Событие - это когда что-то произошло и вы уведомляете систему об этом
    Делегат - это ССЫЛКА на метод с уже заданным набором параметров. Далее вы можете присвоить делегату любой метод, который удовлетворяет описанный делегат.

    Да, события, это тоже, частично, делегаты
    Ответ написан
    1 комментарий
  • Как понять/выучить ООП Python?

    NikFaraday
    @NikFaraday
    Student full-stack Developer
    Без знания ООП в фреймы лучше не лезть, а то вы вообще разочаруетесь в ИТ )
    ООП имеет ряд стандартных "комплектующих":
    • Модификаторы доступа
    • Поля для хранения информации
    • Конструкторы
    • Методы/функции классов


    Изучайте это всё и делайте задачи на ООП. Имею ввиду, берите АБСОЛЮТНО любой язык и берите оттуда задачу и пробуйте делать её своими методами, которые вы знаете
    Ответ написан