Другие языки программирования и технологии
Зачем нужны геттеры и сеттеры? Не нарушают ли они принцип инкапсуляции?
Я только учусь так что мои слова могут не являться истинной. Мое предположение что в таком виде как у вас не имеет смысла использовать. Но например вы знаете что значение property не может быть больше чем 31(число взято от болды) и как вы тогда будете это отслеживать? А посредством метода set() вы легко можете это отслеживать и в случае чего править значение либо бить в тревогу! Это один из вариантов использования.
Дильшод Сафаров
Немного дополню ответ: на свойства еще можно накрутить валидационные атрибуты, как встроенные ([Required], [StringLength], [Range] и т. д.), так и кастомные, в которые можно вынести всю логику проверки значения свойства, не захламляя при этом сложной логикой код модели.
>Зачем нужны геттеры и сеттеры?
Для контроля доступа, проверки правильности значений.
>Не нарушают ли они принцип инкапсуляции?
Сами по себе - не нарушают. А уж что ты там УНУТРЕ наворотишь - это всецело на твоей совести.
Я бы даже сказал, что принципиально они помогают инкапсуляции, не позволяя тебе путем прямого изменения значений привести объект в некоторое непредвиденное состояние.
Для контроля доступа, проверки правильности значений.
>Не нарушают ли они принцип инкапсуляции?
Сами по себе - не нарушают. А уж что ты там УНУТРЕ наворотишь - это всецело на твоей совести.
Я бы даже сказал, что принципиально они помогают инкапсуляции, не позволяя тебе путем прямого изменения значений привести объект в некоторое непредвиденное состояние.
Они нужны именно для того, чтобы НЕ нарушать инкапсуляцию. Ты работаешь только с интерфейсными функциями - ничего не зная о том, где и как хранятся значения.
Таким образом, класс может полностью контролировать, что тебе отдать и что ты можешь записать. Вместо совершенно бесконтрольного доступа к public-полю.
P.S. Разумеется, а разных языках семантика и возможности get/set различаются.
Таким образом, класс может полностью контролировать, что тебе отдать и что ты можешь записать. Вместо совершенно бесконтрольного доступа к public-полю.
P.S. Разумеется, а разных языках семантика и возможности get/set различаются.
Если тебе нужно не тупо вернуть значение или присвоить что попало, тогда геттеры и сеттеры придут на помощь.
К примеру, свойство не обязательно должно соответствовать какому-то физическому полю в объекте, оно может возвращать результат выполнения какой-то функции над полями в объекте, это поведение и описывается в геттере.
Точно также, сеттер может не обязательно тупо присваивать переданное ему значение полю, он может проверять его на валидность, может как-нибудь его модифицировать, может при присвоении выполнять какие-то ещё действия.
К примеру, свойство не обязательно должно соответствовать какому-то физическому полю в объекте, оно может возвращать результат выполнения какой-то функции над полями в объекте, это поведение и описывается в геттере.
Точно также, сеттер может не обязательно тупо присваивать переданное ему значение полю, он может проверять его на валидность, может как-нибудь его модифицировать, может при присвоении выполнять какие-то ещё действия.
Не нарушают, потому что они дают нужную функцию. Свойствами объектов иногда требуется управлять извне. Иногда они нужны для чтения, а иногда и для записи.
ну по сути нарушают. так как в инкапсуляции заложена идеология изолирования методов и полей от прямого воздействия.
А вот так вы не сможете object.property
Только если свойство вы перенесете в паблик секцию.
Смысл гетов и сетов не только в том чтобы можно было получить доступ к свойству... например при наследовании объект дочернего класса сможет получить доступ к закрытым полям родительского только если в родительском будут геты и сеты)))) таким образом если объектов для родительского не будет, то вся конструкция в целом будет придерживаться идеологии....
А вот так вы не сможете object.property
Только если свойство вы перенесете в паблик секцию.
Смысл гетов и сетов не только в том чтобы можно было получить доступ к свойству... например при наследовании объект дочернего класса сможет получить доступ к закрытым полям родительского только если в родительском будут геты и сеты)))) таким образом если объектов для родительского не будет, то вся конструкция в целом будет придерживаться идеологии....
Oleg Saltovskij
Просто сделаю property public'ом и буду обращаться через точку. Просто не понимаю в чем разница.
Похожие вопросы
- Основные принципы ООП: инкапсуляция, полиморфизм, наследование Объясните пожалуйста простыми словами?
- Инкапсуляция, полиморфизм Обясните по проще что такое инкапсуляция и полиморфизм?
- Зачем нужна инкапсуляция?
- ИНКАПСУЛЯЦИЯ своими словами? код програмы который зашифровали от всех? как она выглядит в коде программы?
- искала в инете но ничего похожего не нашла..какой ответ верный?Инкапсуляция-это
- ООП: что такое инкапсуляция, абстракция, полиморфизм и наследование?
- Обьясьните пожалуйста кто-нибудь, что такое "Полиморфизм"и "Инкапсуляция"
- Вопрос по ООП. Инкапсуляция, наследие, полиморфизм. Как понять все это чудо?
- Для чего нужен указатель this и каков его принцип работы? Объясните пожалуйста самым простым языком, как 2+2.
- Каков принцип рисования подобных шедевров?