• Зачем нужна инкапсуляция в ООП?

    delphinpro
    @delphinpro
    frontend developer
    Инкапсуляция - это грубо говоря объединение связанного функционала. В ООП в виде класса.
    Плюс скрытие деталей реализации функциональности.

    Если говорить о ваших классах Database и URL, то в первом объединяются функции работы с базой, а во втором с адресами. Это первое.
    Второе: Классы имеют публичный интерфейс. Работая с классом через этот интерфейс, вам не нужно знать что происходит внутри. Достаточно знать, что дать на вход, и что вы получите на выходе.
    Ответ написан
    2 комментария
  • Зачем нужна инкапсуляция в ООП?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Зайдите в гараж. В одном углу сварочник и электроды , в другом верстак, там сверлилка и коробки со свёрлами, дальше коробка с метизами. Все упорядочено и не нужно далеко ходить. Это будет инкапсуляция. В другом все свалено вместе и метизы и свёрла и отвертки и ножовки. Прежде чем начать работу вы ищете инструменты и детали
    Ответ написан
    2 комментария
  • Зачем нужна инкапсуляция в ООП?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    Да начнется холивар
    Видел кучу разных, зачастую противоположных, мнений, но на мой взгляд - инкапсуляция не равно сокрытие (про которое вы и пишите, судя по типам полей).
    Сокрытие является частным случаем инкапсуляции. В общем же случае инкапсуляция подразумевает объединение связанных элементов в один объект. Например есть юзер. У него есть разные свойства (логин-пароль/аватарка/id-шка). И если данные можно хранить в структурах (словари/массивы/списки и т.д,), то функции, описывающие взаимодействие с этим юзером просто так не сгруппируешь. Для этого и придумали инкапсуляцию и ООП.
    Сокрытие же в этом случае может применяться например для создания "точки входа" при работе с паролем для защиты от "дураков"/предварительной обработки/проверки данных.
    Делаем поле private и все, "тупо изменить" его извне уже нельзя. Для его изменения мы предоставляем метод, который перед тем как изменить его (условно):
    • Валидирует значения по заданным критериям
    • Проверяет наличие прав на изменение пароля

    UPD.
    но кто сможет потом их поменять, если я не добавлю функцию для изменения?

    Ну, видимо никто. Если не добавите советующую функцию.
    Какая разница, private я установил или public, функции для изменения не будет у программы и никто и никак не сможет поменять этот URL.

    Ну, в этом смысла нет, но можно упомянуть какие-то внутренние вещи. Например сессии юзера. Извне методы работы с ними в таком классе не доступны в принципе, для безопасности. Но внутри класса к ним есть доступ у других медодов.
    Ответ написан
    5 комментариев