Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
sranaya_informatika.doc
Скачиваний:
24
Добавлен:
12.04.2015
Размер:
2.48 Mб
Скачать

46 Ооп. Давайте знакомиться

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

Объект - Черный ящик

    Чтобы вам лучше было представить себе объект, я попытаюсь использовать пример не связанный с программированием, с которым сопоставить термины из программирования.     Представьте себе черный ящик. Да-да, обычный такой черный ящик, совсем черный и совсем ящик. С точки зрения программирования это объект. Но, что же тогда является классом, если ящик-объект? Класс в данном случае - это чертеж, по которому строится этот ящик. Теперь подумаем, что может относится к этому черному ящику. Совершенно очевидно, что у этого черное ящика есть некоторые свойства. Во-первых его форма, а во вторых то, что в нем лежит и механизм с помощью которого он закрывается и открывается и с помощью которого содержимое из него извлекается. В программировании свойства так и называются - свойства, вот видите, какая-то логика все-таки есть. А способы извлечения содержимого, применимые к этому ящику - это методы В программировании с помощью свойств мы работаем с внутренними данными, читаем и устанавливаем значения, а методы - это те действия, которые может выполнять сам объект, то есть в нашем примере, мы нажимаем кнопку на ящике, которая "вызывает метод" - открыть ящик и ящик открывается самостоятельно.     Это очень важное понятие, которое, по неизвестным причинам, очень с большим трудом усваивается начинающими программистами, поэтому я позволю себе повториться - метод, это действие, принадлежащее объекту и выполняемое самим объектом.

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

Public Class BlackBox

End Class

    Вот и весь код. Ничего страшного в нем нет. Слово Public означает, что наш класс доступен из любого внешнего модуля. Пока нам не нужно знать, зачем это, поэтому прошу не обращать внимания. Когда придет время, я объясню и это.     Мы создали пустой класс черного ящика, не содержащий ни методов, ни свойств. Теперь заполним его содержимым.

Public Class BlackBox

Private mBoxName As String

Private mBoxContent As String

Public Property Content() As String

Get

Return mBoxContent

End Get

Set(ByVal Value As String)

mBoxContent = Value

End Set

End Property

Public Property Name() As String

Get

Return mBoxName

End Get

Set(ByVal Value As String)

mBoxName = Value

End Set

End Property

Public Function OpenBox(ByVal DropContent As Boolean)

' реализация

End Function

End Class

    Поясню - мы создали класс черного ящик, обладающий свойствами: Name - название ящика, Content - описание содержимого ящика. Значения этих свойств хранятся во внутренних переменных mBoxName и mBoxContent, недоступных извне нашего объекта. OpenBox - метод, открывающий ящик, которому передается параметр - нужно ли выбросить содержимое после открытия или нет.     Теперь у нас есть класс и из него можно начать создавать объекты.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]