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