Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛекцииЯзыки прогрИб.doc
Скачиваний:
27
Добавлен:
12.11.2019
Размер:
922.11 Кб
Скачать

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

В начале 80-ых годов Б. Страуструпом был разработан язык C++, обеспечивший возможность объектно - ориентированного подхода к программированию. Язык C++ был построен на базе двух языков – C и Simula 67, языке программного моделирования, разработанного в Европе . Имелись и другие объектно-ориентированные языки, и наиболее известный язык Smalltalk, который является чистым объектно-ориентированным языком. В 90-ых годах XX в. появилась новая технология программирования – технология объектно-ориентированного программирования. Технология основывается на модели построения программы как иерархии классов с наследованием, представлении программы как совокупности объектов – экземпляров определенных классов.

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

В связи с бурным развитием рынка интеллектуальных бытовых электронных устройств (сотовые телефоны и т.д.) и огромной популярностью Internet фирмой Sun Microsystems в 1995 году был разработан на основе языков С и С++ новый язык Java, используемый для создания интерактивных Web-страниц и в разработке приложений на базе Internet и Intranet, а также для реализации программного обеспечения устройств, взаимодействующих по сети. Объектный подход к программированию использован в новых версиях языков программирования Pascal, C++, Modula, Java.

Язык С++ является гибридным языком, так как использует как традиционную технологию процедурного программирования, так и технологию объектно - ориентированного программирования. С++ нашел наибольшее распространение как локальное средство для создания программ. Как показали статистические исследования, проведенные в США по выявлению потребности в программных специалистах под девизом «Кто нужен Америке», на первом месте требуются специалисты по языку С++.

Основными методами (понятиями) объектно - ориентированного программирования являются средства инкапсуляции, наследования, полиморфизма, изучаемые на базе языка C++. В языке C++ термин «функция» эквивалентен таким терминам других языков программирования, как «подпрограмма», «процедура».

Инкапсуляция (encapsulation) - это объединение данных и функций для работы с этими данными в абстрактные типы данных - классы. Инкапсуляция даёт сокрытие элементов-данных (data members) и элементов-функций (members functions) в классе с управлением доступа к ним. Переменные типа класс называются объектами (object). Состояние объекта определяется элементами-данными соответствующего класса. Поведение объекта определяется элементами- функциями соответствующего класса.

Преимущества инкапсуляции проявляются в следующем:

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

  • Управление доступом к элементам класса. Атрибуты доступа private, protected, public объявляют элементы класса соответственно закрытыми, защищенными и открытыми для доступа.

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

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

Преимущества наследования проявляются в следующем:

  • исключение дублирования элементов-данных и элементов-функций за счет повторного использования элементов класса в производных классах;

  • упрощение программирования, т.к. наследуемые и собственные элементы класса находятся в одной иерархии классов и не разбросаны по всей программе;

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

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

Полиморфизм имеет следующие методы программирования:

  • общий полиморфизм (перегрузка операций, преобразование типов, перегрузка функций);

  • чистый полиморфизм (виртуальные функции, абстрактные классы);

  • параметрический полиморфизм.

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

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

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

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

Преимущества полиморфизма проявляются в следующем:

  • облегчение программирования сложных систем за счет возможности называть похожие (различающиеся только типами своих параметров) действия одним именем;

  • обеспечение виртуальными функциями чистого полиморфизма, т.е. свойства использовать один и тот же оператор для вызова множества функций, но конкретная функция определяется по типу вызываемого объекта;

  • механизм виртуальных функций – это возможность написания простых функций общего назначения для иерархии классов;

  • обеспечение компактности программ и расширяемости иерархии классов за счет использования виртуальных функций;

  • автоматическая генерация по обобщенному шаблону новых функций или классов для различных типов данных, реализуемая механизмом параметрического полиморфизма.

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

Объектно- ориентированное программирование особенно эффективно в нереализованных, с точки зрения программирования, прикладных областях, например, в таких, как интерактивная графика.

На основе объектно-ориентированного подхода были созданы среды программирования, например Delphi, C++ Builder, Visual C++ и др., реализующие визуальное программирование.

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

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

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

Потребность в разработке технологий, устраняющих указанные недостатки и убыстряющих написание программ, привела к появлению в конце 90-х годов XX в. до настоящего времени компонентных технологий программирования и CASE-технологий.