Объектно-ориентированное программирование
Материал из Википедии — свободной энциклопедии
Объе́ктно-ориенти́рованное программи́рование — парадигма программирования, в которой предметная область область представляется системой структур данных, каждая из которых представляет некий отдельный предмет (объект) с его внутренними свойствами и действиями над ним.
Первым объектно-ориентированным языком программирования была Симула, воплотившая главные черты того, что впоследствии было названо объектно-ориентированным программированием одним из авторов Смоллтока — Аланом Кэем.
Содержание |
[править] Главные понятия и разновидности
Структура данных «класс» внешне похожа на структуру в языке Си или запись в Паскале, в котором кроме данных (свойства) также содержались функции их обработки (методы). Вдобавок класс поддерживает такие свойства как наследование, полиморфизм и отчасти - инкапсуляцию. Объектное программирование противопоставляется процедурному программированию, где данные и подпрограммы (процедуры, функции) их обработки формально не связаны.
Язык Self, соблюдая многие исходные положения объектного программирования, ввёл альтернативное классам понятие прототипа, положив начало прототипному программированию, считающемуся подвидом объектного.
[править] Характерные признаки
- Абстракция данных
- Объекты представляют собою неполную информацию о реальных сущностях предметной области. Их модели адекватны решаемой задаче, работать с ними намного удобнее, чем с низкоуровневым описанием всех возможных свойств и реакций объекта.
- Наследование
- Наследованием называется возможность порождать один класс от другого с сохранением всех свойств и методов класса-предка (иногда его называют суперклассом) и добавляя, при необходимости, новые свойства и методы. Наследование призвано отобразить такое свойство реального мира, как иерархичность.
- Полиморфизм
- Полиморфизмом называют явление, при котором классы-потомки могут изменять реализацию метода класса-предка, сохраняя его сигнатуру (таким образом, сохраняя неизменным интерфейс класса-предка). Это позволяет обрабатывать объекты классов-потомков как однотипные объекты, не смотря на то, что реализация методов у них может различаться.
- Инкапсуляция
- Инкапсуляция — это принцип, согласно которому любой класс должен рассматриваться как чёрный ящик — пользователь класса должен видеть и использовать только интерфейс (от английского interface — внешнее лицо, т. е. список декларируемых свойств и методов) класса и не вникать в его внутреннюю реализацию. Этот принцип (теоретически) позволяет минимизировать число связей между классами и, соответственно, упростить независимую реализацию и модификацию классов.
[править] Реализационный подход
Каждый объект в ООП имеет свой тип (класс). Класс представляет собой тип данных, имеющий в составе:
- Свойства
- Параметры объекта (конечно, не все, а только необходимые в программе).
- Методы
- Действия, которые можно выполнять над объектом такого типа, или которые сам объект может выполнять.
[править] Концептуальный подход
Каждый объект является экземпляром некоторого класса объектов. Один класс отличается от других именем и, обычно, набором поддерживаемых интерфейсов. Интерфейсы, в свою очередь, представляют собою набор сообщений, которые можно посылать объекту.
[править] Критика ООП
- Исследование Thomas E. Potok, Mladen Vouk и Andy Rindos [1] показало отсутствие значимой разницы в продуктивности разработки програмного обеспечения между ООП и процедурным подходом.
- Кристофер Дэйт указывает на невозможность сравнения ООП и других технологий во многом из за отсутсвия строгого и общепризнанного определения ООП (C. J. Date, Introduction to Database Systems, 6th-ed., Page 650)
- Александр Степанов, в одном из своих интервью, указывал на то, что ООП «методологически неправильно» и что «... ООП практически такая же мистификация как и искусственный интеллект...» ( [2]).
- Фредерик Брукс (Frederick P. Brooks, Jr.) в своей статье «No Silver Bullet. Essence and Accidents of Software Engineering» (Computer Magazine; April 1987) Указывает на то, что наиболее сложной частью создания програмного обеспечения является " ... спецификация, дизайн и тестирование концептуальных конструкций, а отнюдь не работа по выражению этих концептуальных конструкций...". ООП (наряду с такими технологиями как искусственный интеллект, верификация программ, автоматическое программирование, графическое програмирование, экспертные системы и др), по его мнению, не является «серебрянной пулей», которая может снизить сложность разработки програмных систем. По его мнению "...ООП позволяет сократить только привнесённую сложность в выражение дизайна. Дизайн остаётся сложным по своей природе...". ([3] )
[править] Объектно-ориентированные языки
Многие современные языки специально созданы для облегчения объектно-ориентированного программирования. Однако следует отметить, что можно применять техники ООП и для не-объектно-ориентированного языка и наоборот, применение объектно-ориентированного языка вовсе не означает, что код автоматически становится объектно-ориентированным.
[править] См. также
- Прототипное программирование — стиль ООП, при котором вместо классов используются прототипы.
- ORM — технология связывания c базами данных
[править] Ссылки