VB.NET навсегда
Главная | | Регистрация | Вход
Пятница
17.05.2024
06:10
Приветствую Вас Гость | RSS
Главная » 2009 » Сентябрь » 17 » Полиморфизм в VB.NET
16:09
Полиморфизм в VB.NET
Сущность полиморфизма (polymorphism) заключается в том, что разные объекты могут иметь различные реализации одной и той же характеристики. В качестве примера
рассмотрим два объекта, один из которых является автомобилем Porsche 911, а Другой — Toyota Corolla. Оба объекта — автомобили; т.е. оба происходят из класса Саг и
содержат метод d r i v e . Но реализации методов, как видите, могут разительно отличаться друг от друга.

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

В Visual Basic 4.0 была реализована достаточно ограниченная поддержка полиморфизма, осуществленная с помощью динамического связывания. Динамическое или позднее
связывание (late binding) представляет собой определенную технологию, позволяющую определять во время выполнения кода, какие свойства и методы обеспечивает данный объект. При этом код может создавать какой-либо объект и вызывать его методы или свойства независимо от того, поддерживается ли объектом вызываемый метод во время
компиляции. Если использовать два различных класса с одинаковыми свойствами и методами, то создавать отдельные экземпляры этого класса можно с помощью переменной типа object.

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

В Visual Basic 5.0 появилась дополнительная форма полиморфизма, позволяющая использовать интерфейсы. Интерфейс (interface) определяет набор свойств, методов и событий, реализуемых данным классом. Один и тот же интерфейс может быть реализован одновременно несколькими классами. Переменная, определяющая значение интерфейса,
может ссылаться на любой класс, реализующий данный интерфейс.

Интерфейсы обеспечивают раннее связывание с объектом, что позволяет значительно повысить эффективность, а также обеспечить защиту типов во время компиляции. Интерфейсы являются одной из наиболее важных особенностей Visual Basic 5.0, правда, все еще наименее изученной и мало используемой.

В VB.NET существенно улучшена поддержка интерфейсов. В настоящее время язык имеет прямую поддержку создания интерфейсов, что в более ранних версиях осуществлялось либо с помощью языка описания интерфейсов (IDL), либо путем создания пустых классов. Кроме того, какой-либо один метод может быть реализацией методов сразу нескольких интерфейсов.
Приведен пример полиморфизма, реализованного с помощью динамического (или позднего) связывания,  с помощью раннего связывания. В том и другом примере показаны классы, реализующие методы Ride. Как видите, в обоих случаях метод может вызывать метод любого класса независимо от того, каким из объектов он используется. Именно в этом и состоит сущность полиморфизма: создания кода, который использует различные объекты, реализующие один и тот же интерфейс.

Полиморфизм, реализованный с помощью позднего связывания

Public Class RollerCoaster
Public Sub Ride()
Console.WriteLine("Here we go")
Console.WriteLine("Click, Click ,Click")
Console .WriteLine ("Oh, *&@&#%")
Console.WriteLine ( "That was great")
End Sub
End Class
Public Class MerryGoRound
Public Sub RideO
Console.WriteLine("OK will go on it")
Console.Writeline("Nap Time")
Console.WriteLine("Yea its over")
End Sub
End Class


Приведенный ниже код расположен в программе.

Private Sub DayAtTheAmusementPark()
Dim oRollerCoaster as New RollerCoaster
Dim oMerryGoRound as New MerryGoRound
Call GoOnRide(oRollerCoaster)
Call GoOnRide(oMerryGoRound)
End Sub

Private Sub GoOnRide(oRide as Object)
oRide.RideO
End Sub

В данном случае предпочтительнее использовать раннее связывание, так как оно спо-
собствует повышению эффективности и позволяет находить ошибки, возникающие во
время компиляции. Раннее связывание может быть реализовано с помощью интерфей-
сов, как показано.

Полиморфизм, реализованный с помощью интерфейсов

Public Interface IAmusementParkRide
Sub Ride()
End Interface Public Class RollerCoaster
Implements IAmusementParkRide
Public Sub IAmusementParkRide_Ride()
Console.WriteLine("Here we go")
Console.WriteLine("Click, Click .Click")
Console.WriteLine("Oh, *&@&#%")
Console.WriteLine("That was great")
End Sub
End Class
Public Class MerryGoRound
Implements IAmusementParkRide
Public Sub IAmusementParkRide_Ride()
Console.WriteLine("OK will go on it")
Console.Writeline("Nap Time")
Console.WriteLine("Yea its over")
End Sub
End Class


Следующий код находится где-то в программе:

Private Sub DayAtTheAmusementPark()
Dim oRollerCoaster as New RollerCoaster
Dim oMerryGoRound as New MerryGoRound
Call GoOnRide(oRollerCoaster)
Call GoOnRide(OMerryGoRound)
End Sub
Private Sub GoOnRide(oRide as IAmusementParkRide)
oRide.Ride()
End Sub

Просмотров: 2152 | Добавил: admin | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа
Меню
Поиск
Наш опрос
Оцените мой сайт
Всего ответов: 8
Copyright MyCorp © 2024
Создать бесплатный сайт с uCoz