lec_VBNET_3.pptx
- Количество слайдов: 23
Основы объектноориентированного программирования в среде Visual Basic. NET Группа 335
Краткое повторение пройденного • Класс – шаблон данных, задающий своим экземплярам (объектам) общность структуры и поведения. • Объект – конкретная реализация класса, обладающая своими характеристиками и поведением.
Краткое повторение пройденного • Объекты обладают: Ø Свойствами Ø Методами • Свойства – переменные внутри класса, видимые снаружи (т. е. объявленные при помощи Public) • Методы – функции и процедуры внутри класса, доступные снаружи (опять же, объявленные посредством Public).
Пример класса • Создадим класс «Прямоугольник» , который будет обладать следующими свойствами: длина, ширина, периметр. Public Class Прямоугольник Public Длина As Double Public Ширина As Double Public Read. Only Property Периметр() As Integer Get Return 2*(Длина+Ширина) End Get End Property End Class
• Каждый объект класса создается при помощи оператора New. Например, Dim V As New Вектор Или же можно написать: Dim V As Вектор V = New Вектор
Инкапсуляция • Инкапсуляция - принцип в программировании, заключающееся в скрытии кода реализации содержимого объекта от пользователя (прикладного программиста). При этом пользователю предоставляется только интерфейс объекта. • Влиять снаружи на работу объекта можно только тремя способами: § Методами § Изменяя значения свойств для чтения-записи § Изменяя свойства окружающего мира
Пример инкапсуляции
Конструкторы • Конструктор – особый метод класса, который выполняется сразу при создании объекта. • В некотором смысле, конструктор – локальный аналог Form_Load. • Конструктор в классе задается как метод под названием New: Public Sub New() … End Sub
Пример конструктора • Продолжим наш класс «Прямоугольник» . Введем в него метод, позволяющий считать количество объектов этого класса, созданных в процессе выполнения программы. Для этого надо поставить счетчик в конструкторе. Public Class Прямоугольник <… все что было написано раннее …> Private n As Integer Public Sub New() n = n + 1 End Sub Public Read. Only Property Количество() As Integer Get Return n End Get End Property End Class
Конструктор с параметрами • Конструктор, как и всякая процедура может иметь параметры. Обычно параметры используются для задания начальных значений переменным, полям и свойствам класса.
Пример конструктора с параметрами Public Class Вектор Dim X As Double Dim Y As Double Dim Z As Double Dim Название As String End Class • Public Sub New(By. Val XX As Double, By. Val YY As Double, By. Val ZZ As Double, By. Val Name As String) X = XX Y = YY Z = ZZ Название = Name End Sub Public Function Длина() As Double Return Math. Sqrt(X*X + Y*Y + Z*Z) End Function Теперь есть возможность задать параметры для вектора сразу при инициализации объекта. Dim V As New Вектор(12, 23, 15, “Вектор скорости”)
Наследование • Наследование - механизм ООП позволяющий описать новый класс на основе уже существующего (родительского), при этом свойства и функциональность родительского класса заимствуются новым классом. • В VB. NET наследование производится оператором Inherits.
Пример наследования класса • Допустим, мы хотим создать новый класс «Параллелепипед» . У нас уже есть класс «Прямоугольник» . Поскольку параллелепипед обладает всеми компонентами прямоугольника, класс «Параллелепипед» наследником «Прямоугольника» . Помимо этого, параллелепипед обладает высотой и объемом. Добавим это отдельно. Public Class Параллелепипед Inherits Прямоугольник Public Высота As Double Public Read. Only Property Объем() As Integer Get Return Длина*Ширина*Высота End Get End Property End Class
• В случае дальнейшего изменения оригинального класса (родителя), эти изменения касаются и наследованных классов (наследников). • Наследнику передаются все компоненты родителя, за исключением тех, которые заданы словом Private и конструктора. • Чтобы компоненты класса не были видны снаружи, но при этом передавались при наследовании, их нужно объявить Protected. • Сами классы-наследники также могут наследоваться.
Экспресс-задание • Загрузить старый класс «Человек» • Создать новый класс-наследник «Студент» • Дополнить наследник новым свойством. Например, «IQ» . • Создать новый метод, зависящий от одного старого свойства и нового. Например, метод объявляющий степень пригодности студента к обучению на геофаке в соответствии с IQ и возрастом.
Полиморфизм • Полиморфизм - возможность объектов с одинаковой спецификацией иметь различную реализацию. • Иными словами, полиморфизм – это выполнение процедурами или функциями с одинаковыми именами разных действий. • Полиморфизм довольно часто бывает актуален при наследовании, когда у наследника то или иное свойство, в отличие от родителя, высчитывается иначе. • В VB. NET полиморфные функции и процедуры обозначаются словом Overrides.
Пример полиморфизма • Вернемся к нашему классу «Прямоугольник» и его наследнику «Параллелепипед» . У класса «Прямоугольник» есть свойство «периметр» . Соответственно, классу «Параллелепипед» это свойство тоже передалось по наследству. Но периметр у параллелепипеда вычисляется несколько иначе, чем у прямоугольника. Поэтому в классе «Параллелепипед» есть смысл переопределить свойство «периметр» . Public Class Параллелепипед Inherits Прямоугольник Public Overrides Property Периметр() As Double Get Return 4*(Длина+Ширина+Высота) End Get End Property End Class
Абстракция (Абстрактные классы) • Абстрагирование — это способ выделить набор значимых характеристик объекта, исключая из рассмотрения незначимые. Соответственно, абстракция — это набор всех таких характеристик. • Абстрактный класс - класс, который не может быть использован для создания экземпляров, а служит исключительно для порождения других классов. • В VB. NET абстрактные классы помечаются словом Must. Inherit
Пример абстрактного класса • Предположим, нам нужно создать несколько классов «Прямоугольник» , «Параллелограмм» , «Трапеция» , «Многоугольник» . У всех этих фигур есть общие параметры, при этом некоторые из них в каждом классе считаются по-разному, например, периметр. В таких случаях есть смысл создать абстрактный класс, наследниками которого будут являться искомые классы. Public Must. Inherit Class Фигуры Public Название. Фигуры As String Public Сторона 1 As Double Public Сторона 2 As Double Public Must. Override Function Периметр() As Double End Class
Перегрузка • Перегрузка (Overloading) – ситуация, когда в коде класса присутствует несколько методов или свойств с одинаковыми именами, делающих одно и то же дело, и различающиеся только параметрами. • Чтобы создать перегрузку существующего метода, надо просто создать новый метод с таким же именем, но с другими параметрами.
Пример перегрузки • Вернемся к классу «Прямоугольник» . Создадим возможность считать его периметр не только по длине и ширине, но и его координатам. Public Class Прямоугольник Public Function Периметр(By. Val Длина As Integer, By. Val Ширина As Integer) Return 2*Ширина*Длина End Function Public Function Периметр(By. Val X 1 As Integer, By. Val Y 1 As Integer, By. Val X 2 As Integer, By. Val Y 2 As Integer) Return 2*(Math. Abs(X 1 -X 2)+Math. Abs(Y 1 -Y 2)) End Function End Class • Таким образом, теперь появилась возможность считать периметр двумя способами. В зависимости от набора заданных параметров, компьютер сам догадается какой из способов применять. Главное чтобы входные параметры различались между собой количеством и/или типами. Dim Rect As New Прямоугольник Dim perimetr As Double perimetr = Rect. Периметр(30, 10) Или: perimetr = Rect. Периметр(5, 5, 35, 15)
Подведем итоги • • • Суть ООП Классы, объекты Свойства и методы объекта Инкапсуляция Конструктор с параметрами Наследование Полиморфизм Абстракция Перегрузка
lec_VBNET_3.pptx