Базовые понятия

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

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

Type Myclass
    As String surname_="White"
    As String name_="Rose"
    Declare Sub data_()
End Type

Sub Myclass.data_()
Print name_,surname_
End Sub

Мы создали класс с именем Myclass, у которого в характеристиках два свойства и один метод. Очень похоже на структуру правда? Как и у структуры поля. Двум из них мы присвоили сразу значения(можно было и не присваивать или присвоить позднее) . А в третьем поле мы указали декларацию метода, который так же как и свойства будут доступны только через объект. Ниже метод(процедура) класса, но заметьте как она объявляется: сначала идет имя класса, которому принадлежит процедура а дальше ее имя. Если мы попробуем теперь ниже вызвать эту процедуру так :

Myclass.data_

или так:

data_

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

Dim Object As Myclass

А дальше все как со структурой. Доступ через точку к ее полям.

Object.data_()

Имя при создании объекту я дал Object, но оно может быть любое. Чем же хороша такая методика? Тем что создавая несколько объектов, они будут иметь каждый свои собственные места памяти для свойств и один общий метод, но доступный только им(объектам). Давайте на примере создания двух объектов посмотрим:

Type Myclass
    As String surname_="White"
    As String name_="Rose"
    Declare Sub data_()
End Type

Sub Myclass.data_()
Print name_,surname_
End Sub

Dim Object1 As Myclass
Dim Object2 As Myclass

Object1.data_()
Object1.name_="Nemo"
Object2.data_()
Object1.data_()
Sleep

После создания класса, мы создали по этому классу два объекта. Обратите внимание на то, что при создании оба объекта наследуют одинаковые данные свойств. Далее у одного из свойств, мы меняем значение. Как видите, то что мы вытворяем с первым объектом никак не влияет на второй. У второго свое место для свойств и получить доступ к ним можно только через сам второй объект. Другое дело обстоит с методом. Метод для всех объектов, созданных по этому классу общий. Так если мы в процедуру вставим статическую переменную (Static), то она будет доступна всем объектам. Далее обратите внимание на то, что свойства внутри метода мы написали обычным образом (только имя), они видны в методе, поскольку метод как и свойства принадлежат одному классу. Но если нам вздумается вставить в процедуру переменную с таким же именем как у свойства класса, то тогда для допуска к свойству класса нужно использовать ключевое слово this

Пример:

Type Myclass
    As String surname_="White"
    As String name_="Rose"
    Declare Sub data_()
End Type

Sub Myclass.data_()
Dim As String name_="Richard"
 Print this.name_,surname_
Print name_
End Sub

Dim Object1 As Myclass
Object1.data_()
Sleep

Пример мало отличается от прошлого. Мы создали только один объект. А в методе data_ дополнительно ввели переменную с таким же именем как у свойства класса. Теперь чтобы получить доступ к ней внутри метода надо использовать ключевое слово this

Внимание!
При создании класса в блоке TYPE - END TYPE необходимо создать хотя бы одно свойство. Если будут одни декларации методов, компилятор выдаст ошибку!


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

Dim Object1 As Myclass Ptr

Не забываем выделять и освобождать память. Если забыли или пропустили, читаем статью про указатели. Доступ к его свойствам и методам будет осуществляться через указатель ->

Object1->data_()


Думаю что для начала понимая ООП хватит. В следующей статье мы рассмотрим активные свойства (Property).

Всего доброго!

содержание | назад | вперед