Определение ООП и его основные концепции

Автор работы: Пользователь скрыл имя, 31 Октября 2013 в 11:02, доклад

Краткое описание

В настоящее время количество прикладных языков программирования (список языков), реализующих объектно-ориентированную парадигму, является наибольшим по отношению к другим парадигмам. В области системного программирования до сих пор применяется парадигма процедурного программирования, и общепринятым языком программирования является язык C. Хотя при взаимодействии системного и прикладного уровней операционных систем заметное влияние стали оказывать языки объектно-ориентированного программирования. Например, одной из наиболее распространенных библиотек мультиплатформенного программирования является объектно-ориентированная библиотека Qt, написанная на языке C++.

Содержание

1 История
2 Основные понятия
3 Определение ООП и его основные концепции
3.1 Сложности определения
3.2 Концепции
4 Особенности реализации
5 Подходы к проектированию программ в целом
6 Родственные методологии
6.1 Компонентное программирование
6.2 Прототипное программирование
6.3 Класс-ориентированное программирование
7 Производительность объектных программ
8 Критика ООП
9 Объектно-ориентированные языки
10 Примечания
12 Литература

Прикрепленные файлы: 1 файл

Доклад.docx

— 43.93 Кб (Скачать документ)

Эдсгер Дейкстра указывал: «… то о чём общество в большинстве случаев просит — это змеиное масло. Естественно, „змеиное масло“ имеет очень впечатляющие имена, иначе будет очень трудно что-то продать: „Структурный анализ и Дизайн“, „Программная инженерия“, „Модели зрелости“, „Управляющие информационные системы“ (Management Information Systems), „Интегрированные среды поддержки проектов“, „Объектная ориентированность“, „Реинжиниринг бизнес-процессов“…» — EWD 1175: The strengths of the academic enterprise

Никлаус Вирт считает, что ООП — не более чем тривиальная надстройка над структурным программированием, и преувеличение её значимости, выражающееся, в том числе, во включении в языки программирования всё новых модных «объектно-ориентированных» средств, вредит качеству разрабатываемого программного обеспечения.

Патрик Киллелиа в своей книге «Тюнинг веб-сервера» писал: «… ООП предоставляет вам множество способов замедлить работу ваших программ …»

Известная обзорная статья проблем современного ООП-программирования перечисляет некоторые типичные проблемы ООП — Почему объектно-ориентированное программирование провалилось.

Если попытаться классифицировать критические высказывания в адрес  ООП, можно выделить несколько аспектов критики данного подхода к  программированию.

 

Критика рекламы  ООП.

 

Критикуется явно высказываемое  или подразумеваемое в работах  некоторых пропагандистов ООП, а  также в рекламных материалах «объектно-ориентированных» средств  разработки представление об объектном  программировании как о некоем всемогущем подходе, который магическим образом  устраняет сложность программирования. Как замечали многие, в том числе  упомянутые выше Брукс и Дейкстра, «серебряной пули не существует» — независимо от того, какой парадигмы программирования придерживается разработчик, создание нетривиальной сложной программной системы всегда сопряжено со значительными затратами интеллектуальных ресурсов и времени. Из наиболее квалифицированных специалистов в области ООП никто, как правило, не отрицает справедливость критики этого типа.

 

Оспаривание эффективности  разработки методами ООП.

 

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

Производительность объектно-ориентированных  программ.

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

Критика отдельных технологических  решений в ООП-языках и библиотеках.

Эта критика многочисленна, но затрагивает она не ООП как  таковое, а приемлемость и применимость в конкретных случаях тех или  иных реализаций её механизмов. Одним  из излюбленных объектов критики  является язык C++, входящий в число  наиболее распространённых промышленных ООП-языков.

 

Объектно-ориентированные  языки

 

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

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

Современный объектно-ориентированный  язык предлагает, как правило, следующий  обязательный набор синтаксических средств:

Объявление классов с  полями (данными — членами класса) и методами (функциями — членами  класса).

Механизм расширения класса (наследования) — порождение нового класса от существующего с автоматическим включением всех особенностей реализации класса-предка в состав класса-потомка. Большинство ООП-языков поддерживают только единичное наследование.

Полиморфные переменные и  параметры функций (методов), позволяющие  присваивать одной и той же переменной экземпляры различных классов.

Полиморфное поведение экземпляров  классов за счёт использования виртуальных  методов. В некоторых ООП-языках все методы классов являются виртуальными.

Видимо, минимальным традиционным объектно-ориентированным языком можно  считать язык Оберон, который не содержит никаких других объектных средств, кроме вышеперечисленных (в исходном Обероне даже нет отдельного ключевого слова для объявления класса, а также отсутствуют явно описываемые методы, их заменяют поля процедурного типа). Но большинство языков добавляют к указанному минимальному набору те или иные дополнительные средства. В их числе:

  • Конструкторы, деструкторы, финализаторы.
  • Свойства (аксессоры).
  • Индексаторы.

Интерфейсы (например, в Java используются также как альтернатива множественному наследованию — любой класс может реализовать сколько угодно интерфейсов).

Переопределение операторов для классов.

Средства защиты внутренней структуры классов от несанкционированного использования извне. Обычно это  модификаторы доступа к полям  и методам, типа public, private, обычно также protected, иногда некоторые другие.

Часть языков (иногда называемых «чисто объектными») целиком построена  вокруг объектных средств — в  них любые данные (возможно, за небольшим  числом исключений в виде встроенных скалярных типов данных) являются объектами, любой код — методом  какого-либо класса, и невозможно написать программу, в которой не использовались бы объекты. Примеры подобных языков — Smalltalk, Python, Java, C#, Ruby, AS3. Другие языки (иногда используется термин «гибридные») включают ООП-подсистему в исходно процедурный язык. В них существует возможность программировать, не обращаясь к объектным средствам. Классические примеры — C++, Delphi и Perl.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Литература

 

  1. Имеется викиучебник по теме «Объектно-ориентированное программирование»
  2. Design Patterns Иан Грэхем. Объектно-ориентированные методы. Принципы и практика = Object-Oriented Methods: Principles & Practice. — 3-е изд. — М.: «Вильямс», 2004. — С. 880. — ISBN 0-201-61913-X
  3. Антони Синтес. Освой самостоятельно объектно-ориентированное программирование за 21 день = Sams Teach Yourself Object-Oriented Programming in 21 Days. — М.: «Вильямс», 2002. — С. 672. — ISBN 0-672-32109-2

Информация о работе Определение ООП и его основные концепции