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

 

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

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

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

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

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

В объектно-ориентированном программировании (ООП) используются следующие базовые понятия:

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

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

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

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

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

Формат записи для работы с объектами следующий: Имя_Объекта.Имя_Метода; или Имя_Объекта.Имя_Свойства. При этом вызов метода по сути аналогичен вызову процедуры, а работа со свойствами объектов практически не отличается от работы с переменными, однако отдельные свойства (например, имя объекта) могут быть доступны только для чтения.

Отметим, что мы уже познакомились с некоторыми возможностями ООП в среде VBA. Так, в рассмотренных ранее Примерах 2 и 3 с помощью свойства .Value текстового поля осуществлялся и ввод, и вывод данных. А в Примерах 4 и 5 использовался метод .AddItem для вывода текстовых строк в поле списка.

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

Форма.Цвет = "белый"

Форма.Кнопка.Цвет = "чёрный"

 

Существуют различные объектно-ориентированные технологии и методики проектирования программных продуктов, которые основываются на следующих принципах ООП – «китах»:

· инкапсуляция (встраивание, сокрытие);

· наследование (иерархия, агрегация);

· полиморфизм (изменчивость).

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

Наследование позволяет создавать на основе существующих классов новые – подклассы. При построении подклассов осуществляется наследование данных и методов обработки объектов исходного родительского класса. Механизм наследования позволяет переопределить или добавить новые данные и методы их обработки, создать иерархию классов.

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

Суть объектной декомпозиции* состоит в выделении в предметной области классов и объектов, а также связей между ними, и лишь потом – данных и алгоритмов, которыми характеризуется каждый класс. Таким образом, именно классы становятся основными «кирпичиками» в ООП, тогда как ранее таковыми блоками являлись алгоритмы.

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

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

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

 

 

Вопросы и тестовые задания для самоконтроля

 

1. Что такое методология программирования?

2. Что такое технологии программирования?

3. Понятие «иерархия классов» присуще методологии ____________ программирования.

1) объектно-ориентированного

2) структурного

3) динамического

4) эвристического

 

4. Ошибка «пропущено двоеточие» при трансляции может быть выявлена на этапе...

1) лексического анализа

2) филологического анализа

3) семантического анализа

4) синтаксического анализа

 

5. Программа – это

1) протокол взаимодействия компонентов компьютерной сети

2) набор команд операционной системы компьютера

3) алгоритм, записанный на языке программирования

4) законченное минимальное смысловое выражение на языке программирования ¤

 

6. Какой подход в программировании называется структурным?

1) подход, ориентированный на непосредственно выполняемые компьютером операции

2) подход, неориентированный на непосредственно выполняемые компьютером операции

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

4) подход, ориентированный на то, что логическая структура программы может быть выражена комбинацией 3-х базовых структур — следования, ветвления, цикла ¤

 

7. Модульная структура программы отражает одну из особенностей ________ программирования

1) эвристического

2) структурного ¤

3) логического

4) динамического

 

8. При разработке модульных программ применяются два метода проектирования:

1) Нисходящее и восходящее

2) Модульное и структурное

3) Параллельное и последовательное

4) Модульное и объектно-ориентированное

5) Структурное и объектно-ориентированное

 

9. .В чем заключается «нисходящее проектирование» программ?

1) вначале разрабатывается головной модуль, затем остальные модули

2) вначале разрабатываются модули самого низкого уровня

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

4) вначале решается подзадачи, затем глобальная задача

5) вначале разрабатывается интерфейс программы, затем модули

 

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

а) инструкции, б)данные, в) модель, г) объект, д) свойство, е) метод обработки, ж) событие, з) класс объектов

1) а, д,

2) д, е, ж, з

3) а, д

4) г, е, ж, з, д ¤

 

11. Какая технология программирования появилась позже?

1) Объектно-ориентированная

2) Структурная

3) Модульная

4) Процедурная

5) Иерархическая

 

12. Основные технологии программирования – это:

1) модульное программирование, структурное программирование, объектно-ориентированное программирование.

2) модульное программирование, циклическое программирование, объектно-ориентированное программирование.

3) модульное программирование, структурное программирование, сетевое программирование.

4) модульное программирование, структурное программирование, параллельное программирование.

 

13. Подпрограммы бывают следующих типов?

1) процедуры и функции

2) рекурсивные и динамические

3) функции и модули

4) процедуры и циклы

5) структурированные и неструктурированные

 

вернуться к содержанию

 

 



?>