ПОНЯТНО О Visual Basic NET (том 3)


Наследуем шар - часть 3


    Protected

Overrides Sub Ставим_изображение_шара_на_место()

        Форма.pictШар(Номер_шара).Left = x

        Форма.pictШар(Номер_шара).Top = y

    End Sub

 

    Protected

Overrides Sub Выход_шара_из_игры()

        x = -10000 : y = -10000

        dx = 0 : dy = 0

        Форма.Число_непойманных_шаров = Форма.Число_непойманных_шаров - 1

        Форма.Счетчик_непойманных_шаров.Text = Форма.Число_непойманных_шаров

    End Sub

End Class

Хищный шар:

Public Class clsХищный_шар

    Inherits clsШар_абстрактный

    Private Shared Число_созданных_шаров As Integer = 0

    Private Номер_шара As Integer

 

    Public Sub New()

        Число_созданных_шаров = Число_созданных_шаров + 1

        Номер_шара = Число_созданных_шаров

        Форма.pictХищный_шар(Номер_шара) = New PictureBox

        Форма.pictХищный_шар(Номер_шара).Width = Размер_шара

        Форма.pictХищный_шар(Номер_шара).Height = Размер_шара

        Форма.pictХищный_шар(Номер_шара).SizeMode = PictureBoxSizeMode.StretchImage

        Форма.pictХищный_шар(Номер_шара).BackColor = Color.White

        Форма.pictХищный_шар(Номер_шара).Image = Image.FromFile("MOON02.ICO")

        Форма.Controls.Add(Форма.pictХищный_шар(Номер_шара))

        Форма.pictХищный_шар(Номер_шара).BringToFront()

    End Sub

 

    Protected

Overrides Sub Ставим_изображение_шара_на_место()

        Форма.pictХищный_шар(Номер_шара).Left = x

        Форма.pictХищный_шар(Номер_шара).Top = y

    End Sub

 

    Protected Overrides Sub Выход_шара_из_игры()

        Форма.Timer1.Enabled = False                                  'Конец игры

        MsgBox("Ловца поймали, вы проиграли!")

    End Sub

End Class

Пояснения: Хищные и обычные шары равноправны, поэтому в коде формы мы для хищных шаров дописываем все те строки, что писали и для обычных. Переменные Число_созданных_шаров и Номер_шара я перенес из абстрактного шара в каждый из наследников, так как у каждого массива своя нумерация. Поскольку Номер_шара ушел из абстрактного шара, пришлось перенести из него в наследников и процедуру Ставим_изображение_шара_на_место, которая обращается к этой переменной. У обоих шаров процедуры Ставим_изображение_шара_на_место и Выход_шара_из_игры пришлось объявить, как Protected, так как именно таким образом объявлены эти процедуры у родителя. А у родителя они так объявлены потому, что иначе к ним не было бы доступа от наследников.

Недостатки нашего способа наследования:

Смысл процедуры Выход_шара_из_игры класса clsХищный_шар не соответствует ее названию.

Процедуры New и Ставим_изображение_шара_на_место обоих шаров практически одинаковы, а значит можно было постараться избежать излишней писанины. Для этого можно было вернуть их в абстрактный шар и снабдить параметрами – именем массива графических полей и именем файла картинки. В этом случае параметрами пришлось бы снабжать и те процедуры, которые к ним обращаются. В общем, «шило на мыло». Зато код обоих шаров получился бы маленький и аккуратный.




Начало  Назад  Вперед