Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Объектно-ориентированное программирование

"Стремитесь к простоте настолько, насколько это возможно, но не более того".

А.Эйнштейн

Объектно-ориентированное программирование (ООП) - основная методология программирования 90-х годов 20 века. Она является результатом тридцатилетнего опыта и практики, которые берут начало в языке Simula 67 и продолжаются в языках Smalltalk, LISP, Clu и в более поздних - Actor, Eiffel, Objective C, Java и C++. ООП - это стиль программирования, который фиксирует поведение реального мира так, что детали разработки скрыты, а это позволяет тому, кто решает задачу, мыслить в терминах, присущих этой задаче, а не программированию.

Вы уже знаете, что С++ был создан в начале 80-х годов прошлого века Бьярном Страуструпом. При разработке С++ Страуструп имел перед собой две цели: во-первых, оставить С++ совместимым с обычным С и, во-вторых, расширить С конструкциями ООП, основанными на понятии класса в Simula 67. Конечной целью создания С++ было предоставить профессиональному программисту язык, который можно использовать при создании объектно-ориентированного программного обеспечения, не жертвуя эффективностью или переносимостью С.

Итак, в чем же основные преимущества ООП, почему оно стало таким популярным?

Как ни странно, но трудно ответить на этот вопрос не объяснив базовых понятий. Усвоив базовые понятия ООП, Вы сами без труда ответите на этот вопрос.

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

  1. Наследование (Inheritance)
  2. Инкапсуляция (Encapsulation)
  3. Полиморфизм (Polymorphism)

Эти понятия, как три кита, лежат в основе мира ООП. Более подробно каждое из понятий будет расмотрено немного позже.

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

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

Для иллюстрации записаного выше рассмотрим следующий "классический" пример.

Вы с друзьями сидите за обеденным столом и Вам понадобилась соль, которая находится на противоположном конце стола. Чтобы не оставаться без соли, Вы просите своего друга передать Вам соль. Здесь Вы должны выбрать один из вариантов:

  1. Просто сказать: "Передай мне, пожалуйста, соль".
  2. Или так: "Пожалуйста, убери твою правую руку со стакана воды. Затем протяни ее влево на такое-то расстояние (или пока она не коснется солонки). Возьми баночку на которой написано "Соль". Подними ее. Сделай плавное движение правой рукой по дуге в направлении меня. Остановись когда твоя рука коснется моей. Затем подожди пока пока мои пальцы возьмут ее и только затем отпусти солонку и верни руку в исходной положение."

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

Так в чем же принципиальная разница?

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

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

Этот простой пример иллюстрирует только один из принципов ООП, суть которого: "Объект отвечает за все действия, которые он производит в ответ на запрос клиента".

Название "Объектно-ориентированное программирование" говорит само за себя. Центром внимания ООП является объект. Давайте оглянёмся вокруг, что мы увидим? Дерево, дом, автомобиль, кошка, собака... Мы можем объединить все эти понятия применив слово объект. Если проводить дальнейшую аналогию, то можно сказать, что все что нас окружает - это объекты (в том числе и человек), а реальная жизнь состоит из взаимодействия этих объектов. Понятие объекта в ООП во многом приближено к привычному определению понятия объекта в реальном мире.

Рассмотрим физические объекты, которые нас окружают. Про любой из физических объектов можно сказать, что он:

  1. имеет какое-то состояние (или находится в каком-то состоянии). К примеру, про собаку можно сказать, что она имеет имя, окраску, возраст, голодна она или нет и т.д.
  2. имеет определенное поведение. Т.е., та же собака может вилять хвостом, есть, лаять, прыгать и т.д.

А теперь рассмотрим формальное определение объекта в ООП:

Объект - это совокупность отдельных информационных элементов и функций, которые им оперируют.

Объект состоит из следующих трех частей:

  • имя объекта;
  • состояние (переменные состояния);
  • методы (операции).

Не правда ли, очень похоже в сравнении с формальным определением? Мы только не указали, что объект должен иметь имя. Но, как Вы сами понимаете, нам это необходимо для идентификации конкретного объекта. Иначе, как мы разберемся где есть какой объект?

Обобщенное определение:

Объект ООП - это совокупность переменных состояния и связанных с ними методов (операций). Эти методы определяют как объект взаимодействует с окружающим миром.

Возможность управлять состояниями объекта посредством вызова методов в итоге и определяет поведение объекта. Эту совокупность методов часто называют интерфейсом объекта.

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

Класс (class) - это группа данных и методов (функций) для работы с этими данными.

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

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

Методы (methods) - это функции, принадлежащие классу.

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

<== предыдущая лекция | следующая лекция ==>
Лекция 17 | Наследование (Inheritance)
Поделиться с друзьями:


Дата добавления: 2014-01-14; Просмотров: 658; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.015 сек.