Объектно-ориентированная концепция. Эта концепция основана на определенных идеях. Технические названия этих идей (на самом деле, скорее, принципы, которые развивались с течением времени и отсутствовали с первого часа), уже приведены выше, я не буду их повторять. Я скорее объясняю это как можно проще и нетехнически.
Идея ОО-программирования заключается в том, что существуют объекты. Объекты - это небольшие независимые объекты. Эти объекты могут иметь встроенную информацию или нет. Если у них есть такая информация, только сама сущность может получить к ней доступ или изменить ее. Объекты связываются друг с другом, отправляя сообщения друг другу. Сравните это с людьми. Человеческие существа - это независимые сущности, имеющие внутренние данные, хранящиеся в их мозге, и взаимодействующие друг с другом посредством общения (например, общение друг с другом). Если вам нужны знания из чужого мозга, вы не можете напрямую получить к ним доступ, вы должны задать ему вопрос, и он может ответить вам на это, рассказав вам то, что вы хотели знать.
И это в основном все. Это реальная идея, лежащая в основе ОО-программирования. Написание этих сущностей, определить связь между ними и заставить их взаимодействовать друг с другом, чтобы сформировать приложение. Эта концепция не связана с каким-либо языком. Это просто концепция, и если вы пишете свой код на C #, Java или Ruby, это не важно. С некоторой дополнительной работой эта концепция может быть реализована даже на чистом C, хотя это и функциональный язык, но он предлагает все, что вам нужно для концепции.
Различные языки в настоящее время приняли эту концепцию ОО-программирования, и, конечно, концепции не всегда равны. Например, некоторые языки допускают то, что запрещают другие языки. Теперь одним из понятий, которые вовлечены, является понятие классов. У некоторых языков есть классы, у некоторых нет. Класс - это образец того, как выглядит объект. Он определяет внутреннее хранилище данных объекта, он определяет сообщения, которые объект может понять, и, если есть наследование (которое не обязательно для ОО-программирования!), Классы также определяют, от какого другого класса (или классов если допускается множественное наследование), этот класс наследует (и какие свойства, если существует выборочное наследование). После того, как вы создали такой проект, вы можете создавать неограниченное количество объектов в соответствии с этим планом.
Однако в ОО-языках нет классов. Как строятся объекты? Ну, обычно динамически. Например. Вы можете создать новый пустой объект, а затем динамически добавить к нему внутреннюю структуру, например переменные экземпляра или методы (сообщения). Или вы можете продублировать уже существующий объект со всеми его свойствами, а затем изменить его. Или, возможно, объединить два объекта в новый. В отличие от языков, основанных на классах, эти языки очень динамичны, поскольку вы можете динамически генерировать объекты во время выполнения таким образом, о котором даже разработчик не задумывался, когда начинал писать код.
Обычно эта динамика имеет цену: чем динамичнее язык, тем больше объектов памяти (ОЗУ) будет потрачено впустую, и тем медленнее будет все, поскольку поток программы также чрезвычайно динамичен, и компилятору сложно генерировать эффективный код, если он не имеет шансов предсказать код или поток данных. JIT-компиляторы могут оптимизировать некоторые части этого во время выполнения, когда они знают поток программы, однако, поскольку эти языки настолько динамичны, поток программы может измениться в любое время, заставляя JIT отбрасывать все результаты компиляции и повторно компилировать тот же код снова и снова.
Но это крошечная деталь реализации - она не имеет ничего общего с основным принципом ОО. Нигде не сказано, что объекты должны быть динамическими или изменяемыми во время выполнения. Википедия говорит это довольно хорошо:
Методы программирования могут включать
такие функции, как сокрытие информации,
абстракция данных, инкапсуляция,
модульность, полиморфизм и
наследование.
http://en.wikipedia.org/wiki/Object-oriented_programming
Они могут или могут не . Это все не обязательно. Обязательным является только наличие объектов и то, что у них должны быть способы взаимодействия друг с другом (иначе объекты были бы довольно бесполезны, если бы они не могли взаимодействовать друг с другом).