Объе́ктно-ориенти́рованное программи́рование (ООП) — парадигма программирования, основанная на представлении предметной области (и/или проблемной области) в виде системы взаимосвязанных абстрактных объектов и их реализаций.

Основной проблемой процедурного программирования является то, что данные и функции их обработки не были связаны. Это вносило некоторую сложность в разработку программы. С появлением концепции ООП появилась новая структура данных — Класс. Это по сути дела тип данных, внешне похожий на структуру (в языке Си) или запись (в Pascal-е), в котором кроме данных (свойства) также содержались функции их обработки (методы). При этом появляются такие свойства как наследование, полиморфизм и инкапсуляция.

Надо отметить, что кроме концепции, основанной на классах (о которой и пойдёт речь ниже), существует также концепция ООП, основанная на прототипах — прототипное программирование.

Реализационный подход[править | править код]

Каждый объект в ООП имеет свой тип (класс). Класс представляет собой тип данных, имеющий в составе:

Свойства 
Параметры объекта (конечно, не все, а только необходимые в программе).
Методы 
Действия, которые можно выполнять над объектом такого типа, или которые сам объект может выполнять.

Концептуальный подход[править | править код]

Каждый объект является экземпляром некоторого класса объектов. Один класс отличается от других именем и, обычно, набором поддерживаемых интерфейсов. Интерфейсы, в свою очередь, представляют собою набор сообщений, которые можно посылать объекту.

Важнейшие принципы[править | править код]

Абстракция данных 
Объекты представляют собою неполную информацию о реальных сущностях предметной области. Их модели адекватны решаемой задаче, работать с ними намного удобнее, чем с низкоуровневым описанием всех возможных свойств и реакций объекта.
Наследование 
Наследованием называется возможность порождать один класс от другого с сохранением всех свойств и методов класса-предка (иногда его называют суперклассом) и добавляя, при необходимости, новые свойства и методы. Наследование призвано отобразить такое свойство реального мира, как иерархичность.
Полиморфизм 
Полиморфизмом называют явление, при котором классы-потомки могут изменять реализацию метода класса-предка, сохраняя его сигнатуру (таким образом, сохраняя неизменным интерфейс класса-предка). Это позволяет обрабатывать объекты классов-потомков как однотипные объекты, не смотря на то, что реализация методов у них может различаться.
Инкапсуляция 
Инкапсуляция — это принцип, согласно которому любой класс должен рассматриваться как чёрный ящик — пользователь класса должен видеть и использовать только интерфейс (от английского interface — внешнее лицо, т. е. список декларируемых свойств и методов) класса и не вникать в его внутреннюю реализацию. Этот принцип (теоретически) позволяет минимизировать число связей между классами и, соответственно, упростить независимую реализацию и модификацию классов.

Объектно-ориентированные языки[править | править код]

Многие современные языки специально созданы для облегчения объектно-ориентированного программирования. Однако следует отметить, что можно применять техники ООП и для не-объектно-ориентированного языка и наоборот, применение объектно-ориентированного языка вовсе не означает, что код автоматически становится объектно-ориентированным.

Неполный список объектно-ориентированных языков программирования:

См. также[править | править код]

Шаблон:Wikibooks

ar:برمجة شيئية bg:Обектно-ориентирано програмиране ca:Orientació a objectes cs:Objektově orientované programování da:Objektorientering de:Objektorientierte Programmierung en:Object-oriented programming eo:Objektema programado es:Programación orientada a objetos fi:Olio-ohjelmointi fr:Programmation orientée objet he:תכנות מונחה עצמים hu:Objektumorientált id:Pemrograman Berorientasi Objek io:Objektema programado ja:オブジェクト指向 lt:Objektinis programavimas ms:Pengaturcaraan Berorientasikan Objek nl:Object-oriëntatie no:Objektorientert programmering pl:Programowanie obiektowe pt:Orientação a objeto sv:Objektorienterad programmering th:การเขียนโปรแกรมเชิงวัตถุ uk:Об’єктно-орієнтоване програмування vi:Lập trình hướng đối tượng zh:面向对象的程序设计

Материалы сообщества доступны в соответствии с условиями лицензии CC-BY-SA, если не указано иное.