Каково реальное преимущество инкапсуляции и почему оно специфично для ООП? - PullRequest
1 голос
/ 03 октября 2019

Я читаю множество определений об инкапсуляции, таких как:

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

или

В ней описывается идея объединения данных и методов, которые работают с этими данными в одном блоке.

1, поэтому объединение данных и кода в одном блокеООП конкретно? Я полагаю, что мы можем достичь этого даже в языках программирования, отличных от ООП, таких как C, мы могли бы разделить наш код и данные на несколько файлов .c, и у нас есть наш код и данные, разделенные в соответствии с желаемой семантикой, есть ли разница между разделением (в соответствии с семантикой) программа на C в несколько файлов или программа в java в несколько классов?

2-Какова реальная выгода инкапсуляции, я ищу реальный пример, который сравнивает программунаписано не на ООП (C), а на другом языке ООП (Java).

Ответы [ 2 ]

0 голосов
/ 07 октября 2019

Я начал писать это как комментарий и понял, что я столкнулся с лимитом символов. Поэтому я должен превратить мой комментарий в какой-то квази-ответ :

Ваш замечательный вопрос, и для его написания написано много книг. Короткий ответ: если у вас небольшая проблема программирования, то, вероятно, не имеет большого значения, как вы подходите к решению. Но часто проблемы большие. Для программирования в целом лучше всего подходить, разбивая эти большие проблемы на более мелкие проблемы или части. Язык C, который пригоден для нисходящего структурного программирования, предлагает декомпозицию вдоль глаголов проблемной области, то есть того, что делается. Напротив, объектно-ориентированное программирование разлагает проблему, идентифицируя существительные или объекты в проблемной области. Эти объекты, конечно, также демонстрируют поведение. Есть надежда, что эти объекты станут многократно используемыми в других задачах, которые возникнут в одной и той же области.

Существует второй тип алгоритмического повторного использования, возникающий в результате объектно-ориентированного программирования. Давайте рассмотрим простой случай банка со многими видами банковских счетов, в котором проценты начисляются различными способами в зависимости от типа счета. Но независимо от типа учетной записи ясно, что каждый месяц остаток на счете увеличивается на проценты, полученные счетом за месяц. Таким образом, вы можете себе представить, что каждый месяц происходит следующее:

For each account:
   balance = account.getCurrentBalance()
   interest = account.computeMonthlyInterest()
   newBalance = balance + interest
   account.setBalance(newBalance)

Из-за полиморфизма вместе с инкапсуляцией метод computeMonthlyInterest будет вычислять проценты таким образом, чтобы это соответствовалотип учетной записи, на которой вызывается метод. Дело в том, что описанный выше (очень простой) алгоритм становится применимым и многократно используемым для всех типов учетных записей и может быть помещен в объект controller , поскольку каждый тип учетной записи знает, как рассчитать свой собственный интерес, и, следовательно, алгоритм недолжны быть продублированы для каждого типа аккаунта.

0 голосов
/ 04 октября 2019

Согласно моему пониманию, из четырех принципов ОО, а именно: Скрытие информации , абстракции , инкапсуляция и наследование , ятолько для чувства Наследование - это настоящая функция OO, которую нельзя легко смоделировать в процедурном программировании. Как вы упомянули, другие три могут быть реализованы с помощью соответствующего разделения кода.

Только я чувствую себя в объектно-ориентированных языках, таких как Java, программисту легче достичь этих принципов, просто реализуя класс и налагая необходимые ограничения надоступ. В процедурном программировании (например, C) программист должен прилагать усилия и следовать дисциплине в программировании. Овладение этой техникой написания такой программы на C остается особым навыком, в котором реализация Java-кода OO становится вопросом соблюдения определенных правил. Наконец, это повлияет на производительность с доступным набором навыков на рынке.

...