ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ Идея и цель объектно-ориентированного программирования В длинных и сложных программах переменные и функции могут исчисляться сотнями. Это заметно усложняет создание и сопровождение таких программ, поскольку вам приходится помнить обо всем этом. Наличие переменных с одинаковыми именами в различных функциях может привести к нежелательным конфликтам. Объектно-ориентированное программирование как раз и было изобретено для того, чтобы большие программы можно было разделять на отдельные части. Идея объектно-ориентированного программирования – разработка программы из классов объектов, которыми она манипулирует, а не из функций, которые над ними (объектами) выполняются. Объектно-ориентированный подход лег в основу создания ОС Windows (1991 г.) фирмой Microsoft. В OC MS Dos преобладал процедурный подход (чтобы произвести какое-либо действие необходимо было вызвать соответствующую процедуру с определенными параметрами). Уже в Windows 3. конкретному документу было поставлено в соответствие приложение его обрабатывающее, появился метод объектного связывания и встраивания (OLE), позволяющий щелчком на изображении объекта запустить приложение, которое его обрабатывает). На идеях объектно-ориентированного программирования базируется технология визуального программирования. Визуальные среды программирования поддерживают возможность визуального дизайна, но код программы записывается с помощью текстового языка программирования. Цель объектно-ориентированного программирования – повышение эффективности разработки программ. Преимущество программ сконструированных по технологии объектно-ориентированного программирования – повторное их использование для разработки других программ, расширяемость, надежность, мобильность. Примеры объектно-ориентированных языков программирования: Delphi, Си++, Java, Visual Basic For Applications (VBA). Основные понятия объектно-ориентированного программирования Большинство программного обеспечения в настоящее время написано в объектно-ориентированном стиле программирования. Например, такие известные пакеты программ WORD, EXCEL, 1C, MATHCAD, MATLAB и др. пакеты написаны в объектно-ориентированном стиле. Объектно-ориентированная технология привлекает пользователя повышенной производительностью в течение всего жизненного цикла программного обеспечения. Повышенная производительность достигается при 2 наличии четырех основных свойств объектно-ориентированных систем и вытекающих из них преимуществ: 1) Использование объектов в качестве основных моделей позволяет пользователю моделировать сложные системы реального мира. 2) Гибкость объектно-ориентированных текстов выливается в быстрое реагирование на изменения требования пользователя. 3) Повторное использование стандартных компонентов снижает как время разработок новых прикладных задач, так и объем сгенерированного кода. 4) Простота программного обеспечения делает его более гибким и снижает затраты на эксплуатацию. При объектно-ориентированном подходе формируются некоторые программные блоки – объекты, которые обладают свойствами реально существующего объекта (обладают состоянием и поведением и обмениваются сообщениями). Это позволяет сократить повторное использование кода, увеличить наглядность программы и др. Первое важное преимущество объектно-ориентированных систем вытекает из природы их связи с реальным миром. Разработчик может спроектировать физическую систему в программную, первоначально задав все важные физические объекты и соответствующие им программные объекты. Группы взаимосвязанных физических объектов отображаются в классы, которые можно организовать в иерархию, начиная с общих классов и добавляя к ним специализированные подклассы. Процедуры, общие для нескольких классов, находятся в их общем суперклассе и наследуются ими. Объектно-ориентированный подход уменьшает концептуальный разрыв между реальным миром и компьютерной моделью. Он позволяет инженерам, экономистам, аналитикам и проектировщикам ясно понимать структуру системы. Поэтому сегодня объектно-ориентированные системы используются как для моделирования сложных физических систем на производстве, в телекоммуникациях, в военном и оборонном комплексах, так и в экономике. Принципы объектно-ориентированного программирования Объектно-ориентированный код во всех языках программирования имеет некоторые общие особенности, имеется семь общих стандартных характеристик истинных объектно-ориентированных программ: − Модульность на базе объектов. − Абстрактные типы данных. − Автоматическое управление памятью. − Классы. − Наследование. − Полиморфизм. Объектно-ориентированные программы функционируют иначе, чем при процедурно-ориентированном программировании. Программа состоит из набора объектов, зачастую связанных друг с другом. В языке С++ объекты создаются при помощи нового типа данных class. Класс состоит из набора 3 данных и функций-членов класса, работающих с этими данными. Манипулировать полученными классами можно посредством этих функцийчленов, называемых методами. Основными понятиями, на которых основано ООП, являются инкапсуляция, наследование и полиморфизм. Инкапсуляция – это объединение данных объекта и функций-членов в единую самостоятельную структуру. Инкапсуляция — это такой механизм программирования, который связывает воедино код и данные, им обрабатываемые, чтобы обезопасить их как от внешнего вмешательства, так и от неправильного использования. В объектно-ориентированном языке код и данные могут быть связаны способом, при котором создается черный ящик. В этом "ящике" содержатся все необходимые (для обеспечения самостоятельности) данные и код. При таком связывании кода и данных создается объект, т.е. объект — это конструкция, которая поддерживает инкапсуляцию. Под наследованием понимается способность класса наследовать свойства других классов. Родительский (базовый) класс служит для производного класса образцом, который можно изменять различными способами. Наследование позволяет повторно использовать определение класса без изменений в основном коде. Наследование – это способ повторного использования программного обеспечения, при котором новые классы создаются из уже существующих классов путем заимствования их атрибутов и функций и обогащения этими возможностями новых классов. Наследование — это процесс, благодаря которому один объект может приобретать свойства другого. Благодаря наследованию поддерживается концепция иерархической классификации. В виде управляемой иерархической (нисходящей) классификации организуется большинство областей знаний. Если не использовать иерархическое представление признаков, для каждого объекта пришлось бы в явной форме определить все присущие ему характеристики. Но благодаря наследованию объекту нужно доопределить только те качества, которые делают его уникальным внутри его класса, поскольку он (объект) наследует общие атрибуты своего родителя. Следовательно, именно механизм наследования позволяет одному объекту представлять конкретный экземпляр более общего класса. Полиморфизм — это концепция, смысл которой в следующем: одинаково определенные методы могут использоваться как в базовом классе, так и в производном классе. Полиморфизм позволяет каждому объекту производных классов реагировать по своему на одинаковые методы. Благодаря полиморфизму объекты могут правильно функционировать, даже если их точный тип неизвестен. В С++ эта возможность реализуется с помощью механизма виртуальных функций. При использовании виртуальных функций сообщения передаются не непосредственно объекту, а через указатель, 4 ссылающийся на объект. Для адресации виртуальные функции используют таблицу, которая инициализируется на этапе выполнения. Полиморфизм (от греческою слова polymoiphism, означающего "много форм") — это свойство, позволяющее использовать один интерфейс для целого класса действии. В качестве простого примера полиморфизма можно привести руль автомобиля. Для руля (т.е. интерфейса) безразлично, какой тип рулевого механизма используется в автомобиле. Другим словами, руль работает одинаково, независимо от того, оснащен ли автомобиль рулевым управлением прямого действия (без усилителя), рулевым управлением с усилителем или механизмом реечной передачи. Если вы знаете, как обращаться с рулем, вы сможете вести автомобиль любого типа. Полиморфизм (с греч. многообразие форм, poly – много, morphos – форма) можно определить как свойство, позволяющее использовать одно имя для обозначения действий, общих для родственных классов. При этом конкретизация выполняемых действий осуществляется в зависимости от типа обрабатываемых данных. C++ – это попытка решения разработчиками языка С задач объектноориентированного программирования (Object Oriented Programming, OOP). С++ уже стал универсальным языком для программистов всего мира, языком на котором будет написано следующее поколение высокоэффективного программного обеспеченья. Это единственный серьёзный язык, который обязан знать любой уважающий себя профессиональный программист. Объектно-ориентированное программирование (ООП) – это метод программирования, позволяющий рассматривать модель решаемой задачи как набор объектов, манипулировать с которыми можно при помощи методов, которые напоминают вызовы функций в процедурно-ориентированной программе. Когда объект получает сообщение, на него реагируют методы, содержащиеся в этом объекте. Методы аналогичны функциям, однако они являются частью объекта. Как следует из названия «объектно-ориентированный», ключевую роль для понимания технологии играют объекты. Программные объекты, как и объекты реального мира имеют состояние и поведение. Автомобили могут иметь состояние (четыре колеса, количество скоростей и т.д.) и могут иметь поведение (торможение, ускорение, переключение скоростей). Состояние объектов заложено в переменных, а поведение реализуют с помощью методов. Объект – программный набор переменных и связанных с ними методов. Существует много объектов, имеющих сходные характеристики и отличаются только значениями свойств. В этом случае для схожих объектов создается заготовка (шаблон, клише, прототип), которая называется классом. Класс объектов – это некое множество объектов, имеющих общую структуру и общее поведение. С точки зрения программирования это 5 программные «заготовки» для объектов некоторого вида. Каждый конкретный объект в этом случае называется экземпляром класса. Любой конкретный объект является просто экземпляром некоторого класса. Объекты предоставляют преимущество модульности и скрытия информации. Классы предоставляют преимущество повторного использования (reusability). Фабрика повторно использует один и тот же проект велосипеда при изготовлении все новых и новых велосипедов. Программисты повторно используют один и тот же класс (значит, один и тот же код) для создания множества объектов. Объекты доступны через функции, составляющие официальный интерфейс данного класса. В общем говоря, объекты определяются в терминах классов. Мы знаем много об объекте, если знаем его класс. Например, невидя конкретного автомобиля, Вы знаете, что он имеет руль, четыре колеса и т.д. Т.о., под классом подразумевается реализованный абстрактный тип данных, а под объектом – конкретные данные, т.е. экземпляр данного класса. Мы знаем много об объекте, если знаем его класс. Можно определять классы в терминах других классов: суперкласссубкласс (автомобилигоночные автомобили и т.д.). Каждый суб-класс наследует (inherits) состояние или структуру (в форме объявления переменных) из своего суперкласса. Кроме того, каждый суб-класс наследует методы из своего суперкласса. Программисты могут реализовать суперклассы, называемые абстрактными классами (abstract classes), которые определяют "изначальное" поведение.