Я не писал последние два дня с тех пор, как был в Хернинге на семейном дне рождения, но я думал о своей книге Объектно-ориентированное программирование в R. В частности, я думал об алгоритмическом программировании и объектной ориентации.
Большинство книг, которые я читал по объектно-ориентированному программированию, и курсы, которые я посещал по объектно-ориентированному программированию, были сосредоточены на объектно-ориентированном моделировании и разработке программного обеспечения. Здесь основное внимание уделяется тому, как можно использовать объектную ориентацию для структурирования ваших представлений о вашем программном обеспечении и того, как программное обеспечение может отражать физические или концептуальные аспекты мира, которые вы пытаетесь смоделировать в своем программном обеспечении. Если, например, вы внедряете программное обеспечение для работы с бухгалтерией, вы должны моделировать учетные записи как объекты с операциями ввода и вывода денег. Вы постараетесь как можно точнее сопоставить понятия из предметной области с программным обеспечением.
Это мощный подход к проектированию вашего программного обеспечения, но всегда есть аспекты программного обеспечения, которые не вписываются в такое моделирование. Особенно, когда речь идет об алгоритмическом программировании и проектировании структур данных. Деревья поиска и алгоритмы сортировки, например, обычно не отражают ничего конкретного в предметной области.
Однако объектно-ориентированное программирование также является очень мощным инструментом для разработки алгоритмов и структур данных. То, как меня учили программированию, алгоритмам и структурам данных, изучалось в отдельных классах, где меня учили объектной ориентации. Я должен был научиться сочетать объектно-ориентированное и алгоритмическое программирование, написав программное обеспечение. Я думаю, что это было жаль, так как эти двое действительно хорошо подходят друг другу.
Полиморфизм, краеугольный камень объектно-ориентированного программирования, легко поддается разработке гибких алгоритмов и комбинированию различных конкретных реализаций абстрактных типов данных для адаптации абстрактных алгоритмов к конкретным задачам.
В какой степени вы бы назвали это объектно-ориентированным программированием, я не знаю. Важен скорее полиморфизм — а полиморфный код встречается во многих других парадигмах программирования — но эта книга кажется таким же подходящим местом, как и любая другая, для включения таких тем, как полиморфный код, в разработку алгоритмов и структур данных.
Когда структуры данных и алгоритмы изучаются отдельно от, скажем, функционального программирования и объектно-ориентированного программирования, вы должны сами выяснить, как все это сочетается друг с другом. В реальном использовании вы должны совместить все это вместе.
Я не знаю, смогу ли я написать об этом так, чтобы кусочки головоломки сложились воедино, но я, по крайней мере, попытаюсь это сделать.