Задать вопрос
DollyPapper
@DollyPapper

Нарушают ли конструкторы инкапсуляцию?

Добрый день. Вопрос собственно такой. При передаче первоначальных параметров классу, мы обычно сохраняем эти значения в его свойствах. То есть по сути конструктор является таким своеобразным сеттером для полей класса. По моему это явное нарушение инкапсуляции. Или нет? Ведь сеттеры ругают именно за то, что мы можем на прямую изменить поля обьекта, вмешиваясь в его структуру из вне. Но в конструкторе мы же делаем тоже самое. Да, после создания обьекта при отсутствии сеттеров мы уже на прямую не можем изменить поля, но единожды при создании это происходит, и мы раскрываем внутреннее устройство нашего обьекта. Где проходит эта самая черта, где инкапсуляция нарушается, а где нет. Вопрос скорее из разряда философии, но интересно кто что думает.
  • Вопрос задан
  • 304 просмотра
Подписаться 1 Средний Комментировать
Решения вопроса 1
greabock
@greabock
Могу
1. Сеттеры не нарушают инкапсуляцию.
Если вы устанавливаете свойство через сеттер, вы вообще уверены, что оно хранится в свойстве с тем же именем того же класса?
object.setProperty(value)

Вот я, глядя снаружи вообще хз, где и как хранится это свойство, если вообще хранится. А вы?

2. Конструктор не нарушает инкапсуляцию. Ровно по тем же причинам.

По понятным причинам, у вас не на всё должны быть сеттеры, а только те, что вы хотите менять снаружи. Если же у вас сеттеры, на все подряд свойства, то это вы нарушаете инкапсуляцию. Сеттеры тут не при чем.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы