logo search
Информатика_ЗФ / 2013_Информатика УМО_легпром

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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