Поясните что такое Implements ...

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
N.Y.B.
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 05.03.2003 (Ср) 12:51
Откуда: Russia

Поясните что такое Implements ...

Сообщение N.Y.B. » 07.08.2003 (Чт) 9:44

В MSDN пишут, что Implements позволяет реолизовать интерфейс

А вот хочу я к примеру реализовать интерфейс PictureBox'а в своем классе, и как мне этим Implements пользоваться?

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 07.08.2003 (Чт) 10:35

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

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 07.08.2003 (Чт) 13:20

По просьбам трудящихся.

Наследование один из основных принципов объекто ориентированного программирования. Кроме того, к ним относят инкапсуляцию, что в VB реализовано в виде классов, и полиморфизм. Последнее является следствием наследования, а т.к. оно в VB реализовано безобразно, то можно считать, что его тоже нет.

Что даёт наследование? В нормальной реализации очень многое. Объект-детёныш наследует все св-ва, методы и события родительского объекта. Т.о. для расширения интерфейса класса, например TextBox, достаточно объявить его наследником уже существующего и дописать свои необходимые новые св-ва, методы и/или события.

Как это реализовано в VB? В VB не достаточно просто объявить класс-родитель. Необходимо ещё, кроме того, декларировать и переобъявить все его св-ва, методы и события. Т.е. если объект имеет 33 св-ва (n), то их все необходимо переобъявить. И если в интерфейсе объекта-детёныша они же должны присутствовать, то их нужно задекларировать. Т.о. вместо дописывания одной-двух (m) необходимых функций, вынуждены написать их 2*n+m (в данном примере 33*2+2=68 ) штук, что уже само по себе не доставляет удовольствия от использования такого механизма. А учитывая, что практически каждое св-во представлено парами Get/Let(Set), то кол-во работы удваивается. Но ещё хуже то, что приходится угадывать как работает то или иное св-во объекта-родителя, чтобы полностью имитировать те св-ва, которые изменять нежелательно.

Малюсенький пример:

Class1
Код: Выделить всё
Option Explicit

Private miIndex As Long

Public Property Get Index() As Long
    Index = miIndex
End Property

Public Property Let Index(ByVal newValue As Long)
    miIndex = Index
End Property


Class2
Код: Выделить всё
Option Explicit

Implements Class1

Private moClass1 As New Class1
Private msValue As String

'переопределяем св-ва объекта-родителя
Private Property Let Class1_Index(ByVal RHS As Long)
    moClass1.Index = RHS
End Property

Private Property Get Class1_Index() As Long
    Class1_Index = moClass1.Index
End Property

'декларируем идентичные св-ва в нашем объекте
Public Property Let Index(ByVal newValue As Long)
    moClass1.Index = newValue
End Property

Public Property Get Index() As Long
    Index = moClass1.Index
End Property

'и, наконец, дописываем собственное св-во
Public Property Let Value(ByVal newValue As String)
    msValue = newValue
End Property

Public Property Get Value() As String
    Value = msValue
End Property

И это только для объекта с одним св-ом с заранее известным поведением. Исходя из вышеизложенного, делаем выводы и пользуемся заветной комбинацией ^C ^V, что экономит время и нервы.

Ниже расширенный пример недавно стянутый с какого-то сайта
Вложения
vb_polymorphism.zip
Пример, демонстрирующий реализацию наследования и полиморфизма в VB.
(11.23 Кб) Скачиваний: 79


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: YaCy [Bot] и гости: 29

    TopList