Я начал писать это как комментарий и понял, что я столкнулся с лимитом символов. Поэтому я должен превратить мой комментарий в какой-то квази-ответ :
Ваш замечательный вопрос, и для его написания написано много книг. Короткий ответ: если у вас небольшая проблема программирования, то, вероятно, не имеет большого значения, как вы подходите к решению. Но часто проблемы большие. Для программирования в целом лучше всего подходить, разбивая эти большие проблемы на более мелкие проблемы или части. Язык C, который пригоден для нисходящего структурного программирования, предлагает декомпозицию вдоль глаголов проблемной области, то есть того, что делается. Напротив, объектно-ориентированное программирование разлагает проблему, идентифицируя существительные или объекты в проблемной области. Эти объекты, конечно, также демонстрируют поведение. Есть надежда, что эти объекты станут многократно используемыми в других задачах, которые возникнут в одной и той же области.
Существует второй тип алгоритмического повторного использования, возникающий в результате объектно-ориентированного программирования. Давайте рассмотрим простой случай банка со многими видами банковских счетов, в котором проценты начисляются различными способами в зависимости от типа счета. Но независимо от типа учетной записи ясно, что каждый месяц остаток на счете увеличивается на проценты, полученные счетом за месяц. Таким образом, вы можете себе представить, что каждый месяц происходит следующее:
For each account:
balance = account.getCurrentBalance()
interest = account.computeMonthlyInterest()
newBalance = balance + interest
account.setBalance(newBalance)
Из-за полиморфизма вместе с инкапсуляцией метод computeMonthlyInterest
будет вычислять проценты таким образом, чтобы это соответствовалотип учетной записи, на которой вызывается метод. Дело в том, что описанный выше (очень простой) алгоритм становится применимым и многократно используемым для всех типов учетных записей и может быть помещен в объект controller , поскольку каждый тип учетной записи знает, как рассчитать свой собственный интерес, и, следовательно, алгоритм недолжны быть продублированы для каждого типа аккаунта.