Программирование на C# (Си Шарп) - ООП в .NET - Инкапсуляция данных

Программирование на C# - ООП C#

ООП С Sharp - Инкапсуляция данных

Вас может удивить, зачем нужен весь этот предыдущий код? Не проще ли объявить поле minPasswordLength как public, чтобы обращаться к нему безо всяких свойств? Ответ заключается в том, что поля представляют внутренние данные объекта, поэтому они — неотъемлемая часть его функциональности. Теперь, в ОПП, ваша цель — сделать так, чтобы пользователи объекта нуждались лишь в знании того, что делает объект, а не того, как он это делает. Поэтому открытие прямого доступа к полям нарушает идеологию ООП.

Идеология — это очень хорошо, но она должна основываться на каких-то причинах. Одна из этих причин такова: если вы сделаете поля непосредственно видимыми внешним пользователям, то утратите контроль за тем, что они делают с этими полями. Они могут модифицировать таким образом, что нарушат всю функциональность объекта (например, присвоив им несоответствующие значения). Однако если доступ к полям контролируется свойствами, то это не проблема; вы можете добавить свойствам функциональность проверки допустимости значений. Полагаясь на это, можно создать свойства, доступные только для чтения, исключив полностью средство доступа set. Подобный принцип сокрытия полей от клиентского кода известен как инкапсуляция данных.

Свойства следует использовать только для того, что должно происходить при установке или извлечении значения; во всех прочих случаях следует использовать методы. Это значит, что средство доступа set должно принимать только один параметр и возвращать void, в то время как средство доступа get не может принимать никаких параметров. Например, нельзя переписать метод IsPasswordValid() в классе Authenticator в форме свойства. Параметры и возвращаемое значение этого метода имеют неправильные типы.


 

Добавить комментарий


Защитный код
Обновить