Инкапсуляция и безопасность данных - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь понять объектно-ориентированное программирование. Что касается инкапсуляции, я понял это так.

"Инкапсуляция, относится к способности объекта скрывать данные и поведение, которые не нужны другим классам и сборкам.

С помощью инкапсуляции класс может изменять внутреннюю реализацию, не нарушая общую функциональность системы.

Предотвращает код (данные) от случайного повреждения из-за ошибок программирования

Инкапсуляция позволяет рассматривать группу свойств, методов и других элементов как единое целое или объект. "

Итак, когда дело доходит до сокрытия / защиты данных с помощью инкапсуляции, я понимаю, что это защита данных от других программистов в команде, поскольку есть вероятность, что данные могут быть повреждены из-за ошибок программирования

Мой вопрос здесь звучит так: «Правильно ли мое понимание безопасности данных / сокрытия данных в отношении инкапсуляции? Или не ограничивается ли оно защитой данных только от программистов и позволяет также защищать данные от хакеров?» ? "

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Инкапсуляция не имеет ничего общего с внешними хакерами, это не концепция безопасности данных, а скорее модель программирования. Вот пример:

    class Engine
    {
        public bool Running { get; private set; }

        public void Start()
        {
            this.Running = true;
        }

        public void Stop()
        {
            this.Running = false;
        }
    }

Это простая модель, Engine может Start / Stop с помощью методов экземпляра, что существенно меняет свойство Running. Если вы хотите запустить / остановить Engine, просто вызовите соответствующий метод. Мы можем сказать, что поведение Engine хорошо инкапсулировано.

Давайте изменим код

    class Engine
    {
        public bool Running { get; set; }    //set is changed to public
    }

Теперь код короче и проще, если мы хотим запустить двигатель, просто установите Running на true (или false, когда вы хотите остановиться). По мере роста проекта у вас будет несколько методов, которые изменят свойство Running для запуска двигателя.

Вот новый случай1: иногда двигатель выходит из-под контроля, тогда его нельзя запустить / остановить. Если вы используете старую версию, легко изменить код на:

    class Engine
    {
        public bool Running { get; private set; }

        public bool OutOfControl { get; private set; }

        public void Start()
        {
            if (this.OutOfControl) return;
            this.Running = true;
        }

        public void Stop()
        {
            if (this.OutOfControl) return;
            this.Running = false;
        }

        public void SomeOperation()
        {
            //inside the method sometimes OutOfControl is set to true
        }
    }

На абонентов Engine.Start и Engine.Stop это не повлияет. А как насчет «более простой» версии? Вам нужно изменить 10+ (или 100+) абонентов, проверяя свойство OutOfControl перед изменением свойства Running.

А потом приходит новый case2, case3 ... «более простая» версия становится все сложнее и сложнее поддерживать. Потому что это раскрывает детали реализации для вызывающих. Каждый раз, когда изменяется реализация start / stop, первой версии (хорошо инкапсулированной версии) нужно только изменить метод start / stop, потому что это единственное место, которое выполняет поведение.

0 голосов
/ 23 января 2019

Инкапсуляция - это скорее логическая точка зрения при написании кода, нежели люди. Инкапсуляция - это сокрытие не относящихся к делу деталей.

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

В объектно-ориентированном программировании обычно есть такой код:

CLASS {
  METHOD { 
    // some code
  }
}

Примером "инкапсуляции" может быть МЕТОД, который обычный пользователь не может видеть (пример: приватный).

Инкапсуляция: - Скрытие информации.

Реальные примеры инкапсуляции:

  1. Capsule
  2. кошелек
  3. Box
...