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

17.07.2012

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

Парадигмы программирования.

Если верить википедии, то парадигма программирования – это:

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

Т.е. парадигма программирования определяет то, какими понятиями вы оперируете и каких правил придерживаетесь при написании кода. Выделяют три основные парадигмы программирования:

  • процедурное программирование
  • объектно ориентированное программирование
  • обобщенное программирование

Время возникновения понятий примерно соответствует списку, Т.е. от процедурного к обобщенному программированию. Есть еще целый ряд парадигм, однако они выходят за рамки данной статьи. Важно не забывать, что парадигма программирования не определяется используемым языком. Язык и его синтаксические возможности могут лучше поддерживать одну парадигму и хуже – другую, однако, с большой вероятностью мы сможем симулировать использование парадигмы программирования на языке, для этого не предназначенном. В качестве примера можно рассмотреть использование C++, как языка процедурного программирования и наоборот – С – как языка объектно-ориентированного программирования. Скорее всего язык поддержит парадигму не полностью, но все же частично поддержит. Разберем основные парадигмы программирования.

Процедурное программирование

Процедурное программирование является отражением архитектуры традиционных ЭВМ, предложенной Фон Нейманом в сороковых годах. Теоретической основой этой парадигмы является конечный автомат Тьюринга. Машина тьюринга – это аппарат, способный за конечное время выполнять алгоритмы пошагово с помощью элементарных действий. Суть процедурного программирования сводится к последовательному выполнению операторов с целью преобразования состояния оперативной памяти. Т.е. программа в рамках своего жизненного цикла последовательно обновляет память результатами своей работы. Языки, поддерживающие процедурную парадигму программирования предоставляют возможность программисту определять каждый шаг выполнения программы. Программист определяет языковые конструкции для выполнения последовательности алгоритмических шагов.

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

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

Обобщенное программирование.

Обобщенное программирование – относительно ”свежая” концепция, появившаяся в 70х годах. Основная суть данной парадигмы сводится к написанию типонезависимых алгоритмов. Например, для того, чтобы сортировать по размеру корзину яблок и стакан грецких орехов, необходим один и тот же алгоритм, только субъекты этого алгоритма будут разные – в одном случае яблоки, а в другом – орехи. В языке С++ обобщенное программирование поддерживается с помощью шаблонов (templates). Обычно эта парадигма находит свое применение при работе с типами. В С++ на этой концепции работает STL – стандартная библиотека шаблонов с основными контейнерами.

Признаки объектно-ориентированного программирования.

Давайте попробуем рассмотреть нашу рабочую лошадку ООП более внимательно. Какие черты наиболее характеризуют эту парадигму? Всего выделяют три основных признака объектно-ориентированного подхода – это:

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

Паттерны программирования.

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

Вообще, понятие ”паттерн” было заимствовано программистами из архитектуры. Например, размеры входной двери – это паттерн. Т.е. при прорезании дверного проема нет необходимости задумываться о его размерах каждый раз – есть паттерн. Это позволяет не думать о замке, ручке, облицовке и т.п. — при их производстве так же учитывают эти размеры.

Тремя основными классами паттернов являются:

  • Порождающие паттерны- абстрагируют процесс создания объектов
  • структурные паттерны – упорядочивают внутреннюю структуру сложных объектов и соединений
  • паттерны поведения – регулируют алгоритмы взаимодействия объектов

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

Заполнен: ООП
Присвоен тэг:

avatar

Об Авторе ()

sex, drugs & computer science!

Комментирование закрыто.

Наверх