
- •Тема 5.3. Средства объектно-ориентированного программирования в vb
- •5.3.1. Две роли классов в ооп и типы данных в vb
- •5.3.2. Средства создания классов в vb
- •5.3.2.1. Средства создания пользовательских классов
- •5.3.2.2. Пошаговое руководство для создания приложения с классами
- •Определение класса
- •Создание кнопки для тестирования класса
- •Запуск приложения
- •5.3.3. Взаимодействие, взаимное различие и сходство форм, модулей и классов
- •5.3.4. Создание объектной модели и приложений с использованием классов
- •5.3.5. Иерархия классов и наследование
- •Наследование и тождественность
- •Базовые классы и повторное использование кода
- •Взаимозаменяемые производные классы
- •Неполные иерархии классов
- •Глобальные изменения производных классов через базовый класс
- •Изменение структуры базовых классов после развертывания
- •Проблема уязвимости базовых классов
- •Сведение к минимуму проблем уязвимости базовых классов
- •5.3.6. Задачи для самостоятельного решения по теме «Средства объектно-ориентированного программирования в Visual Basic»
- •Практикум
- •5.3.7. Тестовые задания по теме «Средства объектно-ориентированного программирования в vb»
- •Тема 5.3. Средства объектно-ориентированного программирования в Visual Basic Страница 85
5.3.5. Иерархия классов и наследование
Наследование – возможность создавать класс со свойствами и методами, которые могут быть использованы в других классах. В терминологии ООП базовый класс называется наследуемым (родительским), а производный от него – наследующим (дочерним). Цель наследования заключается в создании базового класса, где инкапсулируются свойства и методы, необходимые множеству производных классов того же типа. Так, можно создать базовый класс Account и определить в нем метод Get-Balance. Затем на основе этого класса создаются два отдельных класса: SavingAccount и Checkin-gAccount. Поскольку они используют ту же логику для получения информации, что и класс Account, то могут унаследовать от него метод GetBalance. Это позволяет программисту один раз написать общий код, который затем будет проще поддерживать. Как правило, производные классы не ограничены свойствами и методами базового класса, а имеют более широкие возможности. В них можно определить присущие только им свойства и методы. Например, правила выполнения банковских операций требуют, чтобы при снятии денег с текущего счета на нем оставалась некоторая минимально допустимая сумма, при снятии же денег со срочного вклада сохранения на счету какой-то минимальной суммы не требуется. Поэтому каждый из производных классов может содержать собственное определение метода для обработки операции снятия денег со счета Withdraw.
Чтобы с помощью VB создать производный класс, следует в его определении рядом с именем наследуемого класса указать ключевое слово Inherits.
-
‘Создание класса CheckingAccount с помощью наследования
Public Class Account
Private m_lngAccountNumber As Long
Public Property AccountNumber( ) As Long
Get
Return m_lngAccountNumber
End Get
Set(ByVal Value As Long)
m_lngAccountNumber = Value
End Set
End Property
Public Function GetBalance() As Double
'Код вычисления остатка на счету в базе данных
End Function
End Class
Public Class CheckingAccount Inherits Account
Private m_dblMinBalance Аs Double
Public Sub Withdraw(ByVal Amount As Double)
'Код обработки операции снятия денег со счета.
End Sub
End Class
Для создания экземпляра класса CheckingAccount необходимо поместить в вызывающей программе приведенный ниже код. В этом коде вызовы методов GetBalance и Withdraw выполняются одинаково. В обоих случаях нигде не указывается имя класса Account, поэтому создается впечатление, оба метода принадлежат одному и тому же классу CheckingAccount.
-
Dim oCheckAccount As CheckingAccount = New CheckingAccount() oCheckAccount.AccountNumber = 1000 oCheckAccount. GetBalance() oCheckAccount.Withdraw(500)…
Наследование является полезной концепцией программирования, однако его рекомендуется применять не во всех случаях. Зачастую с подобными задачами лучше справляются интерфейсы (Тема 5.4).
Наследование лучше использовать в следующих случаях.
Иерархия наследования представляет собой отношения тождественности (is-a), а не отношения включения (has-a).
Допускается повторное использование кода базовых классов.
Требуется применение одинаковых классов и методов к различным типам данных.
Иерархия класса включает небольшое число уровней, и другие разработчики вряд ли будут добавлять в нее другие уровни.
Требуется внесение глобальных изменений в производные классы путем изменения базового класса.
Рассмотрим данные пункты далее подробнее.