| Термин | Описание |
| Getter | Метод для получения значения свойства |
| Setter | Метод для установки значения свойства |
| Backing field | Скрытое поле для хранения значения |
- Полные свойства с backing field
- Автосвойства (auto-implemented properties)
- Свойства только для чтения (read-only)
- Вычисляемые свойства
- Использование методов getX() и setX()
- Аннотации @Getter и @Setter в Lombok
- Record-классы с автоматическими свойствами
| Сценарий | Пример реализации |
| Валидация данных | Проверка в setter перед присвоением значения |
| Ленивая инициализация | Инициализация при первом обращении через getter |
| Уведомление об изменении | Вызов события при изменении значения |
- Используйте свойства для доступа к полям класса
- Избегайте сложной логики в getter-методах
- Минимизируйте побочные эффекты при обращении к свойствам
- Соблюдайте принцип инкапсуляции
- Свойства с тяжелыми вычислениями
- Сеттеры без проверки входных значений
- Избыточная вложенность свойств
- Нарушение принципа единой ответственности
| Критерий | Свойства | Методы |
| Синтаксис вызова | obj.Property | obj.Method() |
| Возможность параметров | Нет | Да |
| Идеологическое назначение | Доступ к состоянию | Выполнение действий |
- Индексированные свойства (C# indexers)
- Свойства с параметрами (VB.NET)
- Динамические свойства (Python, JavaScript)
- Асинхронные свойства (экспериментальные реализации)
Правильное использование свойств делает код более читаемым и поддерживаемым, обеспечивая контролируемый доступ к внутреннему состоянию объектов. Выбор между свойствами и методами должен основываться на семантике операции и соглашениях языка программирования.