Могут ли атрибуты и методы PUBLIC (которые работают с открытыми атрибутами) рассматриваться как инкапсуляция? - PullRequest
2 голосов
/ 11 мая 2019

Рассмотрим простой пример:

class encap:

    def __init__(self):
        self.attr=100

    def get_attr(self):
        print(self.attr)

obj=encap()
obj.get_attr()

Обратите внимание, что здесь мы не делаем атрибут приватным, но все же он связан с классом, и у нас есть метод для доступа к нему.

Мой вопрос:

  1. учитывая тот факт, что инкапсуляция относится к связыванию данных с методами, которые работают с этими данными, может ли приведенный выше пример по-прежнему представлять концепцию инкапсуляции ООП, даже если мы не сделали атрибут закрытым?

  2. Инкапсуляция используется для сокрытия значений или состояния структурированного объекта данных внутри класса, предотвращая прямой доступ неавторизованных сторон к ним. Следовательно, делает ли атрибут private обязательным для обоснования инкапсуляции?

1 Ответ

2 голосов
/ 11 мая 2019

Инкапсуляция означает, что определенные атрибуты и определенные операции концептуально связаны друг с другом. Итак, вы инкапсулировали encap объект. И Вы хотите сказать о сокрытии информации. Хороший дизайн SW обеспечивает высокую ремонтопригодность и модифицируемость. Сокрытие информации помогает ему, скрывая детали и предоставляя только важные интерфейсы.

По вашим вопросам,

  1. Да. это все еще представляет инкапсуляцию.

  2. Нет. Но вы делаете его лучше, спрятав информацию, если делаете ее конфиденциальной.

Глядя в свой код, вы определяете атрибут как открытый и также определяете интерфейс установки. Этот атрибут будет доступен для двух путей. Поэтому решите, хотите ли вы изменить атрибут на частный или удалить интерфейс установки.

...