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


Наследуем шар


Пусть кроме обычных шаров по полю будет летать несколько «хищных» шаров, которые сами ловят ловца. Тогда, увеличивая число хищных шаров, мы легко можем превратить «догонялки» в «удиралки». Это прекрасное и познавательное упражнение по наследованию, которое мы сейчас и выполним.

Очевидно, нам нужен еще один класс – clsХищный_шар. Чем отличается поведение хищного шара от поведения обычного? Только действиями при столкновении с ловцом. Если обычный шар при столкновении исчезает, то при столкновении хищного шара с ловцом игра должна останавливаться и должно выдаваться сообщение «Ловца поймали, вы проиграли!»

Кроме поведения есть еще и внешний вид. Фигурка у хищного шара другая.

Исходя из вышесказанного, спросим себя: Чем будет отличаться код класса clsХищный_шар от кода класса clsШар? Процедурой Выход_шара_из_игры, отвечающей за действия при столкновении, и процедурой New, отвечающей за создание изображения шара. Все! Все остальное (за небольшим исключением, о котором позже) будет одинаковым.

Раз так, то имеется прямой смысл использовать наследование. Но какое? Сделать ли, чтобы хищный шар был наследником обычного или оба они должны быть наследниками абстрактного шара? Выбираю второе, и вот почему.

Для изображений хищных шаров нам нужен новый массив графических полей, назовем его pictХищный_шар. Если мы сделаем хищный шар наследником обычного, то при выполнении конструктора New хищного шара должен автоматически выполняться конструктор New обычного шара, который будет работать с массивом графических полей pictШар, что при создании хищного шара не только излишне, но и является ошибкой.

Вот как с учетом вышесказанного дополнится наш проект (многоточием обозначены фрагменты, оставшиеся без изменений):

Форма:

    Private Const Число_хищных_шаров As Integer = 2

    Private Хищный_шар(Число_хищных_шаров) As clsХищный_шар

    Public pictХищный_шар(Число_хищных_шаров) As PictureBox

    ………………

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load




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



Книжный магазин