Возможно, вы захотите посмотреть этот быстрый видео-блог . В результате разница между структурным программированием и ОО-программированием заключается в том, что они отнимают от программирования, а не в том, что они добавляют. Программные дисциплины, такие как структурированное программирование и объектно-ориентированное программирование, ограничивают, а не включают. Вот несколько определений. Предупреждение: они вам не понравятся.
Структурированное программирование - это дисциплина, налагаемая на goto (прямая передача контроля)
ОО-программирование - это дисциплина, налагаемая на указатели на функции (косвенная передача контроля)
Функциональное программирование - это дисциплина, навязанная при назначении.
Первое не так сложно понять. Дейкстра обнаружил, что невозможно создать общие доказательства правильности, когда goto разрешено в алгоритмах. Однако если управляющие структуры были ограничены последовательностью, выбором и итерацией, тогда были возможны доказательства правильности . Конечно, в настоящее время мы даже не пытаемся доказать, что все правильно, но нам нравится простота и элегантность структурного программирования.
Это немного сложнее понять ОО. Мы часто определяем ОО как инкапсуляцию, наследование и полиморфизм. Что менее известно, так это то, что все три из этих атрибутов достижимы и часто были достигнуты в C. Действительно, C ++ начинался как просто препроцессор, компилируемый до C. На самом деле нетрудно инкапсулировать в C. И не сложно построить структуры данных, которые являются подмножествами друг друга, имитируя наследование. Полиморфизм, однако, немного сложнее. Требуются указатели на функции, которыми в Си трудно хорошо управлять. Языки, подобные C ++, дали нам дисциплину, навязанную этим указателям на функции. Компилятор C ++ создал для нас vtables и инициализировал указатели внутри них в соответствии со строгим формализмом. Так что в реальном смысле ОО это просто дисциплинакосвенная передача управления, т.е. указатели на функции.
Структурированное программирование о том, как не использовать goto. ОО о том, как не использовать указатели на функции. И функциональное программирование тоже все о том, чего не делать. В функциональном программировании мы не присваиваем переменные, кроме как в самых строго контролируемых случаях.
Таким образом, в конце концов, все эти «технологии» в программировании на самом деле ограничивают дисциплины, а не создают технологии. Они говорят нам , что не делать больше , чем они говорят нам , что для делать. А это значит, что разработка программного обеспечения не росла за последние 40 лет. Скорее это сократилось. Это становится еще более ограниченным, поскольку мы узнали все, что не должны делать.
Учиться тому, чего не следует делать - это хорошо; но вот мешая вопрос: Какие новые вещи мы узнали , чтобы сделать?