Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

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




 

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

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

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

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

Современные ЯП реализуют объектно-ориентированную концепцию программирования основная идея, которой состоит в то, что данные (переменные, структуры) должны быть неразрывно связаны с методами обработки этих данных (подпрограммами). Ключевым элементом данной концепции программирования является особый программный элемент, который получил название объекта (object). Объект также называется абстрактной структурой данных, основным назначением которой является обеспечения единой «обертки» для некоторого набора данных, представленных в простейшем случае в виде переменных, и набора подпрограмм. Предоставление такой оболочки для кода и данных и создание единого целого с точки зрения синтаксиса и семантики языка программирования называется объектной инкапсуляцией. С точки зрения классического объектно-ориентированного программирования каждый объект является реализацией или воплощением некоторого абстрактного типа данных подобно тому, как скалярная переменная является воплощением обычного скалярного типа. Абстрактный тип данных называют также классом объектов. Класс представляет собой программную единицу, которая реализует структуры данных и подпрограммы для их обработки. Данные, описанные в классе объектов, принято называть полями, а подпрограммы – методами. В ООП также определено понятие свойства как специального метода, основным назначением которого является корректный доступ к полю класса объекта. Поля, методы и свойства называются компонентами класса или его членами (class members). Под термином поля класса по существу понимают переменную класса, предназначенную для хранения данных, которые раздельно существуют для каждого экземпляра класса. Метод в свою очередь является процедурой или функцией, которая ассоциирована с классом в целом и разделяется всеми его объектами. Все методы, за исключением особых, которые называются методами класса, создаются вместе с экземпляром класса.

 

Реализация основных идей объектно-ориентированного программирования в языке VB. Поля и методы. Конструирование объекта класса. Адресная природа объекта класса

 

Рассмотрим подходы к реализации механизмов объектно-ориентированного программирования (ООП) в языке программирования Visual Basic. В этом языке идеи ООП реализованы наиболее примитивно, но в тоже время интуитивно ясно.

Краеугольным камнем ООП здесь являются особые программные модули – модули классов (class module) – основным предназначением, которых является размещением внутри себя единственного класса объектов, со всеми его полями, методами и свойствами. Имя такого модуля совпадает с именем самого класса. Структура модуля класса полностью аналогична модулю подпрограмм, однако, непосредственное обращение к подпрограммам и переменным такого модуля запрещено. Это возможно только от имени экземпляра объекта класса. Другим важным для понимания класса отличием является способ хранения данных по сравнению со стандартным модулем. Так задание нового значения для открытой глобальной перемененной в стандартном модуле становится видимым в других частях программы. Данные же в модуле класса существуют раздельно для каждой реализации (экземпляра объекта) этого класса. На том же основании можно заключить, что данные в стандартном модуле имеют область видимости всю программу, а время их жизни ограничено временем ее исполнения, тогда как данные для модуля класса существуют только во время жизни отдельного объекта. Переменные модуля класса создаются при создании объекта, а уничтожаются при его разрушении. Наконец, переменная объявленная открытой в стандартном модуле видима во всем проекте, тогда как открытая переменная в модуле класса видима только клиентам (consumer) объекта данного класса.

Рассмотрим простой пример класса объектов:

 

' Модуль класса CMessage

Public Msg As String        ' Поле

Public Sub ShowMessage () ' Метод

MsgBox Msg ' показываем содержимое переменной-поля Msg

End Sub

 

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

Для использования функциональности класса необходимо создать хотя бы один экземпляр класса, то есть объект класса. Для этого необходимо объявить объектную переменную, которая используется для хранения начального адреса объекта в памяти программы. Фактически объектная переменная представляет собой указатель, подобный указателям в языках программирования С/С++ и OP. Однако в VB в отличие от других языков программирования настоящего значение указателя не раскрывается, а также отсутствует возможность создавать указатели скалярных и структурных типов, соответственно невозможны адресные операции.

Объектные переменные могут быть описаны с помощью ключевых слов DIM, PUBLIC и PRIVATE. Например:

 

Dim objMessage As CMessage

 

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

Созданный с помощью оператора NEW объект, должен быть присоединен к соответствующей объектной переменной с помощью особого оператора присваивания SET, который позволяет присвоить объектной переменной адрес, возвращаемый оператором NEW.

 

Set objMessage = New CMessage

 

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

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

Для доступа к членам класса используется специальный оператор, подобный оператору доступа к полю записи (пользовательского, структурного типа). Этот оператор получил название селектора члена класса (member selector) и синтаксически представлен символом «.».

Например, для использования объекта в рассматриваемом примере необходим следующий код:

 

Public Sub UseObject ()

       Dim objMessage As CMessage

       Set objMessage = New CMessage

       objMessage.Msg = "Hello world"

       objMessage.ShowMessage

End Sub

 

VB имеет возможность создавать несколько указателей на один и тот же объект, в виде нескольких объектных переменных:

 

Dim objMsgFirst As CMessage // первая объектная переменная 

Dim objMsgSecond As CMessage // вторая объектная переменная    

Set objMsgFirst = New CMessage // создаем первый объект

// второй объектной переменной присваиваем ссылку

// на первый объект

Set objMsgSecond = objMsgFirst                    

 

Для сравнения двух указателей в VB имеется специальный оператор IS, который позволяет определить указывают ли две объектных переменных на один и тот же объект:

 

If objMsgFirst Is objMsgSecond then

       MsgBox "Объектные переменные указывают на один объект"

End if

 

 

Рис. 15. Ссылочная природа объектов

 

В VB объект существует до тех пор пока на него имеется хотя бы одна ссылка, то есть хотя бы одна используемая объектная переменная, которая находится в области видимости и время «жизни», которой не истекло. Сама ссылка, т.е. объектная переменная, разрушается когда она выходит из области видимости. Кроме того, можно явно разорвать связь между указателем и объектом, на который он указывает, присвоив объектной переменной значение специальной константы NOTHING:

 

       Set objCommentSecond = Nothing

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

 










Последнее изменение этой страницы: 2018-04-12; просмотров: 387.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...