У меня есть некоторые настоящие голосующие против на моих руках здесь, и я пытаюсь привести им причину, почему ООП было разработано во-первых. Я понимаю, что ООП не идеально подходит для всех проблем и ситуаций, но оно было разработано по причине...
Мое предположение было бы, которым будут несколько из тех причин:
Но у меня действительно нет многого для резервного копирования этого, и я задавался вопросом, почему ООП было разработано во-первых, и это - история.
Кем были люди, которые разработали ООП, пытающееся выполнять? Что привело их разрабатывать ООП?
Алан Кей, который придумал термин "объектно-ориентированное программирование", объяснял свое мышление в нескольких случаях.
По сути, он почерпнул идею из биологии - то, как каждая клетка является самостоятельной сущностью и взаимодействует с другими клетками только посредством "сообщений", не зная ничего о том, как на самом деле работает другая клетка, и все эти автономные сущности складываются в живой организм. Он думал, что такой способ разделения ответственности, с большим количеством сущностей, которые заботятся о себе сами и общаются только путем отправки сообщений, облегчит организацию программ. Он также говорил, что рассматривает Всемирную паутину как продолжение этой модели.
Одна из причин, по которой вы можете внести свой вклад в дискуссию, заключается в том, что ООП помогает моделировать реальный мир с использованием классов, функций и свойств для абстрактного определения конкретных концепций и объектов. Можно утверждать, что ООП надеялось помочь разработчикам в моделировании кода после реальных процессов и объектов, составляющих конкретное проблемное пространство.
Теория в стороне, что действительно стимулировало принятие ООП, так это появление графических интерфейсов на базе Windows.
Если вы просто программируете терминальное приложение для DOS или Mainframe, то вам действительно не нужно ООП, конечно, оно может быть полезным, но нет убедительных причин для его внедрения. Однако как только вы начинаете кодить для любого GUI, основанного на "wimp", то эффективно работать с ним без ООП становится очень трудно, особенно как только вы выходите за рамки простой системы.
Я начинал кодить для Mac еще тогда, когда Pascal был языком по умолчанию, вам приходилось обрабатывать свой собственный главный цикл событий и делать такие вещи, как проход по прямоугольникам для перерисовки окна, когда оно было на заднем плане, закрытое окнами перед ним. Следовательно, огромные объемы даже самой простой программы были связаны с базовой инфраструктурой, и было нетривиальной задачей поддерживать чистоту интерфейсов, чтобы код не превратился в спутанную спагетти. То же самое было верно для Windows (прочитайте любую из ранних книг Чарльза Петцольда "Программирование windows") и различных других графических интерфейсов, существовавших в то время.
Принятие ООП значительно упростило это, поскольку ООП естественно подходит для графических интерфейсов. Сегодня мы считаем это очевидным и естественным, но так было не всегда, и, конечно, в то время принятие ООП считалось чем-то вроде серьезного вызова для программистов. Однако результатом стало то, что все новые программисты с конца 90-х годов выросли с ООП, потому что оно действительно необходимо для работы с графическими интерфейсами, в результате чего это практически стандартный способ написания кода, и, следовательно, его использование широко распространилось за пределы интерфейса.
Я думаю, что в первую очередь мотивом ООП являются эти факты (или я должен сказать предположения?):
Верно ли это на самом деле - другой вопрос. См. Мы думаем об объектах .
Суть ООП
Каковы точные функции, предоставляемые в языке ООП, также является другим вопросом. См. страницу википедии .
PS: Большая часть так называемого объектно-ориентированного кода на самом деле является процедурным кодом, замаскированным под объектно-ориентированный код. Основная проблема ООП в том виде, в котором мы его знаем, заключается в том, что для захвата взаимодействия между объектами требуется опыт, когда ответственность не может быть тривиально возложена на один объект.
Я всегда придерживался мнения, что объектно-ориентированное программирование было создано для того, чтобы мы могли думать о сложных проблемах так, чтобы люди могли их понять:
Все в мире является объектом, объекты имеют свойства, а некоторые объекты могут даже выполнять действия (или иметь действия, выполняемые над ними).
У Пола Грэма есть хороший список причин, почему людям нравится ООП:
Хорошая книга для этого - Объектно-ориентированное построение программного обеспечения Бертрана Мейера (широко считается основополагающим текстом объектно-ориентированного программирования). Со страницы Википедии:
Книга, известная среди своих поклонников как "OOSC", представляет объектную технологию как ответ на основные вопросы программной инженерии, с особым акцентом на решение таких факторов качества программного обеспечения, как корректность, надежность, расширяемость и возможность повторного использования. Книга начинается с рассмотрения вопросов качества программного обеспечения, затем представляет абстрактные типы данных как теоретическую основу объектной технологии и переходит к основным объектно-ориентированным техникам: классам, объектам, общности, наследованию, проектированию по контракту, параллелизму и персистентности. В книге широко обсуждаются методологические вопросы.