Студопедия

Главная страница Случайная лекция


Мы поможем в написании ваших работ!

Порталы:

БиологияВойнаГеографияИнформатикаИскусствоИсторияКультураЛингвистикаМатематикаМедицинаОхрана трудаПолитикаПравоПсихологияРелигияТехникаФизикаФилософияЭкономика



Мы поможем в написании ваших работ!




Глава 4. Объектно-ориентированное программирование (ООП)

Читайте также:
  1. Аналитическое программирование оборудования с ЧПУ: методы, примеры.
  2. ВТОРАЯ ГЛАВА
  3. Глава 1
  4. ГЛАВА 1
  5. Глава 1 ДИДАКТИКА И МЕТОДИКА В СИСТЕМЕ ПЕДАГОГИЧЕСКИХ НАУК
  6. ГЛАВА 1 ФИЗИЧЕСКИЕ ОСНОВЫ МЕХАНИКИ
  7. Глава 1.
  8. Глава 1. Введение в педагогическую психологию
  9. ГЛАВА 1. ДВИГАТЕЛЬНАЯ АКТИВНОСТЬ И ПСИХОМОТОРИКА УЧАЩИХСЯ
  10. Глава 1. История юридической риторики

4.1. Структурное программирование и ООП

 

Одной из первых и наиболее широко применяемых технологий программирования стало структурное программирование. Структурный подход к программированию был впервые предложен в начале 70-х годов XX века фирмой IBM. Его появление было связано с распространением ЭВМ III-го поколения и развитием алгоритмических языков высокого уровня (III-го поколения).

До этого (при программировании на ЭВМ I-го и II-го поколений, размер оперативной памяти которых был значительно ограничен, а машинное время очень дорого) использовался операциональный подход, которому был присущ целый ряд недостатков: запутанность логики программы, ее непонятность другим пользователям (кроме авторов программы) и недостаточная надежность. Эти недостатки, а также машинная зависимость ЯП I-го и II-го поколений, не позволяли перейти к массовому промышленному созданию программного обеспечения. Это и подтолкнуло ведущие фирмы к разработке новых методологий программирования, наиболее удачной из которых на тот момент стала идея структурного программирования.

Метод структурного программирования до сих пор не потерял своего значения для определенного класса задач. Он базируется на двух основополагающих принципах: 1) использование процедурного стиля программирования, 2) последовательная декомпозиция алгоритма задачи сверху вниз (нисходящее проектирование).

Согласно структурному подходу задача изначально формулируется в терминах ввода данных – вывода результата: на вход программы подаются исходные данные, программа работает (обрабатывает данные) и выдает результат (рис. 14). После этого начинается последовательное разложение (декомпозиция) всей задачи на отдельные более простые действия. При этом на любом этапе декомпозиции программу можно проверить с помощью специальных «заглушек» – процедур, имитирующих вход и/или выход процедур нижнего уровня. «Заглушки» позволяют проверить логику верхнего уровня алгоритма до реализации следующего уровня. Таким образом, на каждом шаге разработки можно иметь работающий «каркас» программы, который постепенно обрастает деталями.

Рис.14. Схема верхнего уровня структурного подхода

Для структурного программирования также характерны следующие черты:

1) алгоритм любой программы выражается комбинацией трех базовых структур – линейной, разветвляющейся и циклической (см. пункт 2.6 в Главе 2),

2) любой блок кроме условного имеет только один вход и один выход, а блок проверки условия – один вход и два выхода;

3) избегается использование безусловного перехода из одной точки программы в другую (т.е. оператора GOTO);

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

Модульная структура имеет ряд явных преимуществ по сравнению с монолитной структурой программы при разработке больших проектов:

1) позволяет создавать программу одновременно нескольким программистам (каждый будет разрабатывать свой (свои) модуль (модули));

2) облегчает проектирование и последующие модификации программы;

3) упрощает отладку программы, т.е. поиск и устранение программных ошибок;

4) позволяет использовать готовые библиотеки модулей.

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

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

1. Развитие языков и методов программирования не успевало за все более растущими потребностями в прикладных программах. Единственным способом снижения времени разработки при структурном подходе был метод многократного использования уже разработанного ПО, т.е. проектирование новой программы на базе ранее разработанных программных модулей (что не всегда было удобно).

2. Ускорение разработки нового ПО требовало упрощения их сопровождения и модификации.

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

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

 

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

 

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

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

Пусть звезда – точка на экране с координатами (Х, У), которая имеет цвет, может быть видимой или невидимой и может перемещаться по «звездному небу». Планета – цветной круг с координатами центра (Х, У), который тоже может быть видимым или невидимым и должен перемещаться.

Все звезды (и планеты) в нашем примере однотипны и могут представляться одинаковыми свойствами и процедурами обработки. Поэтому для решения этой задачи необходимо создать объекты типа «Звезда» и «Планета».

 

4.3. Наследование, инкапсуляция и полиморфизм

 

Характерными особенностями, присущими ООП, являются: наследование, инкапсуляция и полиморфизм объектов.

Наследование. В рассмотренном ранее примере о звездном небе, очевидно, что для изображения любого объекта должно определяться его положение на экране (например, координатами Х и У относительно верхнего левого угла экрана). Поэтому можно описать объект «Позиция» с координатами Х и У и методом «Назначить координаты»:

Позиция (Х, У, Назначить ХУ)

В то же время объект «Звезда» может быть описан следующим образом:

Звезда (Х, У, Видимость, Цвет, НазначитьХУ, Назначить цвет, Зажечь, Погасить, Переместить)

Обратим внимание, что возможности объекта Позиция полностью входят в объект Звезда. Такое свойство называется наследованием и позволяет описать объект Звезда через объект Позиция:

Звезда (Позиция, Видимость, Цвет, Назначить цвет, Зажечь, Погасить, Переместить)

Таким образом, наследование позволяет повторно использовать уже созданную часть программного кода, в том числе и в других проектах, тем самым, исключая избыточность программного кода (ненужных повторов). Посредством наследования формируются связи между объектами через понятия «родители» и «потомки». В нашем примере о звездном небе объект Позиция можно считать «родителем» относительно объекта Звезда, а объект Звезда – «потомком» для объекта Позиция.

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

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

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

Планета (Звезда, Радиус, Назначить цвет, Зажечь, Погасить, Переместить)

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

 

4.4. Понятие класса объектов

 

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

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

Использование готовых библиотек классов повышает скорость разработки программ, но требует хорошего знания этих библиотек и понимания того, как они устроены. Кроме того, библиотека классов должна быть написана на том же ЯП, что и разрабатываемая программа. Существует способы сопряжения разных языков, но если библиотека написана на другом ЯП, то это потребует дополнительных усилий. Например, чтобы использовать для программы, написанной на языке Pascal,библиотеку классов на языке С++, необходимо написать программу с вызовами нужных функций или порождением необходимых классов.

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

 

4.5. Типы программных компонентов

 

Компонент — это объект, объединяющий состояние и интерфейс (способ взаимодействия с этим объектом). Состояние компонента может быть изменено только с помощью изменения его свойств и вызова методов.

Каждый компонент имеет интерфейсы двух типов: интерфейс стадии проектирования и интерфейс стадии выполнения. Интерфейс проекти­рования позволяет включать компоненты в современные среды разра­ботки приложений, а интерфейс выполнения управляет работой компо­нента во время выполнения программы. При этом неважно, на каком языке программирования реализован компонент. Он должен просто удовлетворять определенным внешним параметрам и быть нейтрален по отношению к языку программирования, чтобы его можно было исполь­зовать в программе на любом языке, поддерживающем компонентную технологию. Например, компоненты стандарта ActiveX могут быть одинаково успешно включены как в программу, реализованную на Visual Basic, так и в приложение, разработанное в среде Delphi.

Компоненты графического интерфейса, управляемые событиями, являются основным «строительным» материалом при разработке при­ложений средствами графических редакторов. Разработка любого при­ложения состоит из двух взаимосвязанных этапов:

1) проектирование и создание интерфейса при­ложения как набора визуальных компонентов, которые будут обеспечивать взаимодействие пользователя и вычислительной среды;

2) программирование процедур обработки событий, возникаю­щих при работе пользователя с приложением.

На этапе проектирования интерфейса происходит формирование общего вида главного окна программы, а также способов управления ее работой. Для каждого компонента должен быть определен его внешний вид, размеры, способ и место раз­мещения в области окна приложения.


Компоненты, доступные проектировщику на этапе разработки при­ложения, можно разбить на функциональные подгруппы. С точки зрения внутренней структуры компоненты разбиваются на три группы: визуальные оконные, визуальные неоконные, невизуальные. На рисунке 15 представлена графическая интерпретация этого разбиения.

Рис. 15. Иерархия групп компонентов схожей внутренней структуры

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

Оконные визуальные компоненты (самая многочисленная группа компонентов) — это компоненты, которые могут получать фокус ввода (т.е. становиться активными для взаимодействия с пользова­телем) и содержать другие визуальные компоненты.

Неоконные (графические) визуальные компоненты не могут по­лучать фокус и содержать другие визуальные компоненты (напри­мер, надписи и графические кнопки).

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

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

1) свойства времени проектирования (установленные для них значения будут использоваться в момент первого отображения ком­понента и в дальнейшем могут быть изменены во время выполнения приложения);

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

3) свойства только-для-чтения, которые могут быть прочитаны и использованы при выполнении программы, но не могут быть изменены.

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

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

Рис.16. Схема работы приложения с графическим интерфейсом

Контрольные вопросы

1. В чем суть операционального подхода к программированию?

2. На каких принципах базируется метод структурного программирования?

3. Какие характерные черты у данного метода?

4. В чем преимущества модульной структуры программы?

5. Какими достоинствами обладает ООП?

6. Что называют программным объектом, его свойствами и методами?

7. Что такое наследование как свойство ООП?

8. Что называют инкапсуляцией?

9. Что такое полиморфизм?

10. Что называют программным компонентом?

11. Из каких этапов состоит разработка приложения?

12. На какие функциональные подгруппы и типы могут быть разбиты программные компоненты?

13. Какой общий принцип (алгоритм) работы приложения с графическим интерфейсом?

 


<== предыдущая страница | следующая страница ==>
Глава 3. Язык и система программирования | Глава 5. Лабораторные работы и практические задания

Дата добавления: 2014-10-17; просмотров: 702; Нарушение авторских прав




Мы поможем в написании ваших работ!
lektsiopedia.org - Лекциопедия - 2013 год. | Страница сгенерирована за: 0.005 сек.