Похожие презентации:
Объектно-ориентированное программирование. Наследование
1.
Модуль 5. Урок 5.Объектно-ориентированное
программирование. Наследование
Ссылка на методичку
2.
Модуль 5. Урок 5. ООП. НаследованиеОбсуждение:
Создание
игровых объектов
3.
Создание игровых объектовМы уже говорили, что создание объектов и классов — это фундамент
разработки игр.
Геймдизайнер Пётр изучил ваши программы и оставил
несколько предложений по улучшению логики квеста.
Обсуждение
рабочих задач
В прошлый раз вы впервые создали класс и с его помощью
запрограммировали текстовый квест.
Алёна,
менеджер проектов
4.
Создание игровых объектовС помощью класса Hero вы смогли создать несколько персонажей, например,
Рыцаря, Разбойника и Дракона.
Класс Hero
Объект Разбойник
Объект Дракон
Обсуждение
рабочих задач
Объект Рыцарь
5.
Создание игровых объектовВсе персонажи были экземплярами одного класса, поэтому они обладали
одинаковыми наборами свойств.
Объект Рыцарь
Объект Разбойник
Объект Дракон
Здоровье
Здоровье
Здоровье
Сила атаки
Броня
Сила атаки
Броня
Сила атаки
Броня
Метод «Атака»
Метод «Атака»
Метод «Атака»
Геймдизайнер Пётр отметил, что более правдоподобным был бы другой набор
свойств и методов...
Обсуждение
рабочих задач
Класс Hero
6.
Улучшение игровых объектовВ реальной игре персонажи отличались бы свойствами и методами:
Объект Рыцарь
Объект Разбойник
Объект Дракон
Здоровье
Здоровье
Здоровье
Сила атаки
Броня
Сила атаки
Ловкость
Сила атаки
Магия
+ Метод
«Атака мечом»
+ Метод
«Выстрел из лука»
+ Методы
«Наложить заклинание»
и «Атака огнём»
Обсуждение
рабочих задач
Класс Hero
7.
Улучшение игровых объектовВ то же время часть свойств у персонажей общая.
Возможны и общие методы, например, «Исцелиться» или «Сдаться».
Объект Рыцарь
Объект Разбойник
Объект Дракон
Здоровье
Здоровье
Здоровье
Сила атаки
Броня
Сила атаки
Ловкость
Сила атаки
Магия
+ Метод
«Атака мечом»
+ Метод
«Выстрел из лука»
+ Методы
«Наложить заклинание»
и «Атака огнём»
Неужели для каждого типа объектов придётся создавать отдельный класс?
Обсуждение
рабочих задач
Класс Hero
8.
Взаимосвязь между типами объектовВ реальной жизни мы тоже иногда говорим об объектах в общем, а иногда
— более конкретно.
Сравните:
Игры
Компьютерные игры
жанра RPG
Обсуждение
рабочих задач
Компьютеры
Компьютеры с
операционной системой
Linux
9.
Наследование классовВ программировании часто возникает необходимость переноса и дополнения
свойств одного класса в другом классе.
Такая концепция получила название наследование.
Игры
Компьютерные игры
жанра RPG
Родительский класс
Класс-наследник
Обсуждение
рабочих задач
Компьютеры
Компьютеры с
операционной
системой Linux
10.
Наследование классовВ программировании часто возникает необходимость переноса и дополнения
свойств одного класса в другом классе.
Такая концепция получила название наследование.
Игры
Компьютерные игры
жанра RPG
Родительский класс
Класс-наследник
Наследование применяется не
только в создании игр, но и в
разработке приложений и
сайтов!
Обсуждение
рабочих задач
Компьютеры
Компьютеры с
операционной
системой Linux
11.
Цель рабочего дня —изучить и применить на практике наследование классов.
Сегодня второй день тренинга по созданию собственных объектов,
посвящённый концепции наследования.
● узнаете, что такое суперкласс и класс-наследник;
● создадите двумя способами свои классынаследники;
● используете наследование в создании
интерактивной игры «Hit It!».
Обсуждение
рабочих задач
Сегодня вы:
12.
Модуль 5. Урок 5. ООП. НаследованиеПодтверждение
квалификации
13.
Чтобы приступить к рабочим задачам,продемонстрируйте уровень своих
знаний.
Подтверждение
квалификации
Покажите, что вы готовы к «мозговому
штурму»!
14.
Что такое класс?Подтверждение
квалификации
Что такое экземпляр класса?
15.
КлассЭТО — машина
Объект
Класс объекта
Знания про все такие объекты
Подтверждение
квалификации
❖ единое название для многих объектов;
❖ в программировании: общее описание того, как должны быть
устроены эти объекты.
16.
Экземпляр класса— это объект, созданный по описанию, запрограммированному в
классе.
Описываем класс:
Объект получает всё, что
знает и умеет класс.
Свойства
Методы
Создаём
объект
Свойства
Методы
Подтверждение
квалификации
экземпляр = Класс()
17.
Какой класс стандартной библиотекиPython вам уже известен?
Подтверждение
квалификации
Как создать его экземпляр?
18.
«Черепашка» — это класс TurtleРассмотрим создание экземпляра класса Turtle:
Экземпляр
класса
Конструктор
класса
Имя класса со скобками является командой, создающей
новый объект этого класса.
Результат работы — ссылка, указывающая на объект
(хранится в переменной).
Подтверждение
квалификации
t1 = Turtle()
19.
Что такое конструктор класса?Подтверждение
квалификации
Обладает ли он универсальным
названием?
20.
Конструктор— это метод, который автоматически вызывается при создании
объекта. Он создаёт экземпляр класса.
параметры
) — название конструктора.
Подтверждение
квалификации
def __init__(self,
21.
Как создать собственный класс?Где описываются свойства класса?
Подтверждение
квалификации
Как описать метод класса?
22.
Создание классаclass (в англ. — «класс») — команда, создающая класс.
self (в англ. — «сам, себя») — текущий объект класса.
Имя класса
():
def __init__(self,
self.
Данные
Свойство
):
Конструктор с
процессом создания
экземпляра класса.
Данные
= name
def print_info(self):
print('Информация об объекте:', self. Свойство
Экземпляр
=
Имя класса
(
Свойство
)
)
Подтверждение
квалификации
class
23.
Квалификация подтверждена!Подтверждение
квалификации
Отлично, вы готовы к «мозговому штурму» и
реализации рабочей задачи!
24.
Модуль 5. Урок 5. ООП. Наследование«Мозговой штурм»:
Наследование
25.
Классы и подклассыПриведите любые примеры классов и подклассов из
реальной жизни.
Игры
Компьютерные игры
жанра RPG
Родительский класс
Класс-наследник
«Мозговой
штурм»
Компьютеры
Компьютеры с
операционной
системой Linux
26.
Классы и подклассыПрактически все классы являются родителями одних и наследниками
других классов.
Все автомобили — это транспорт
A
B
«Мозговой
штурм»
Все кометы — это небесные тела
27.
Классы и подклассыНа практике это очень удобно. Например:
1) Называя животное кошкой, можно не уточнять, что оно не летает
(большинство животных летать не умеет).
В программировании использование информации уже
описанных классов не менее удобно!
«Мозговой
штурм»
2) Называя напиток чаем, можно не уточнять, что он жидкий и им можно
утолить жажду.
28.
НаследованиеНаследование классов помогает перенести все умения, написанные ранее для
более общего класса, в другой, более частный класс, класс-наследник.
Свойства
Методы
+
Свойства
Методы
Класс-наследник
A
B
Свойства
Методы
B
Суперкласс
Класс A вложен в класс B
«Мозговой
штурм»
A
29.
ВидКомментарий
Класс-наследник дополняется новыми
методами, а новые свойства не вводятся.
Новый конструктор не нужен, можно
использовать конструктор
суперкласса!
Класс-наследник дополняется и новыми
свойствами, и новыми методами.
Требуется дополнение конструктора
суперкласса новыми свойствами.
«Мозговой
штурм»
Виды наследования
30.
Создание класса-наследникаПусть суперкласс уже написан, тогда,
чтобы создать класс-наследник нужно:
при создании наследника указать имя суперкласса;
дополнить класс-наследник необходимыми методами.
Способ 1:
Название метода
def print_info
Имя суперкласса
):
(self, Значение ):
Действие с объектом и св-вами
Название метода
def print_info
(self,
Значение
Действие с объектом и св-вами
):
Вариант с введением
только новых методов.
При создании экземпляра
наследника будет вызван
конструктор суперкласса!
«Мозговой
штурм»
Имя наследника
class Application(
31.
Создание класса-наследникаПусть суперкласс уже написан, тогда,
чтобы создать класс-наследник нужно:
при создании наследника указать имя суперкласса;
дополнить класс-наследник необходимыми методами.
Способ 2:
Имя суперкласса
def __init__(self,
):
Значение
super() обращается к
суперклассу для
наследования всех свойств
и методов.
):
Значение
super().__init__(
)
Название метода
Значение
Действие с объектом
и св-вами
def print_info
(self,
):
Фактически, при создании
экземпляра наследника
происходит обращение к
конструктору суперкласса.
«Мозговой
штурм»
Имя наследника
class Application(
32.
Создание класса-наследникаЧтобы создать класс-наследник нужно:
при создании наследника указать имя суперкласса;
создать конструктор, ввести свойства суперкласса и добавить новые;
дополнить класс-наследник необходимыми методами.
Имя суперкласса
def __init__(self,
):
Значение
,
Значение
Значение
super().__init__(
self.
Новое св-во
Название метода
def print_info
=
(self,
)Вариант с введением
нового свойства.
Значение
Значение
з
Действие с объектом и св-вами
):
):
Конструктор
перенимает свойства
суперкласса и добавляет
новое.
«Мозговой
штурм»
Имя наследника
class Application(
33.
Рассмотрим тренировочную задачуИмеется фрагмент кода с классом Hero.
Задача: реализовать класс-наследник Warrior по данной схеме.
Класс Воин
Имя
Здоровье
Броня
Имя
Здоровье
Броня
Метод
«Печать информ.»
Метод
«Печать информ.»
Метод
«Приветствие»
Метод
«Атака мечом»
Требуется ли введение новых
свойств? Методов?
Как реализовать
наследование?
«Мозговой
штурм»
Класс Hero
34.
Рассмотрим тренировочную задачуИмеется фрагмент кода с классом Hero.
Задача: реализовать класс-наследник Warrior по данной схеме.
class Hero():
class Warrior(Hero):
#конструктор класса
def __init__(self, name, health, armor):
self.name = name
self.health = health #число
Указываем имя суперкласса, у
которого заимствуем
конструктор.
def hello(self):
Приветствие воина
(«Верхом на коне появился воин...»).
Печатаем параметры методом print_info()
self.armor = armor #строка
#печать параметров персонажа:
def print_info(self):
def attack(self, enemy):
print('Уровень здоровья:', self.health)
Текст про атаку мечом
(«Храбрый воин атакует мечом...»).
print('Класс брони:', self.armor, '\n')
Большая сила удара (например, 15).
Суперкласс
Класс-наследник
35.
Рассмотрим тренировочную задачуИмеется фрагмент кода с классом Hero.
Задача: реализовать класс-наследник Warrior по данной схеме.
Warrior1 = Warrior('Henry', 100, 50)
Warrior1.hello()
Warrior1.attack(<Имя врага>)
class Warrior(Hero):
def hello(self):
Приветствие воина
(«Верхом на коне появился воин...»).
Печатаем параметры методом print_info().
def attack(self, enemy):
Текст про атаку мечом
(«Храбрый воин атакует мечом...»).
Готово! Можно создать экземпляр класса Warrior
и сразиться с врагом!
Большая сила удара (например, 15).
36.
Задачи:➔ Создайте классы-наследники Warrior и Magican суперкласса Hero
(ориентировочные схемы классов есть на платформе).
➔ Создайте два экземпляра класса: воина и мага. Напечатайте
информацию о них.
«Мозговой
штурм»
➔ Запрограммируйте атаку мага рыцарем. Затем произведите ответную
атаку.
37.
Модуль 5. Урок 5. ООП. НаследованиеПлатформа:
Наследование:
Классы Warrior и Magican
38.
Выполните задания на платформе«Наследование: классы
Warrior и Magican»
Работаем на
платформе
mars.algoritmika.org
39.
Перерыв40.
Модуль 5. Урок 5. ООП. Наследование«Мозговой штурм»:
Игра «Hit It!»
41.
Запрограммируем игру «Hit It!»В рамках тренинга по созданию собственных объектов запрограммируем
интерактивную игру «Hit It!».
Цель игры — обойти препятствия и поймать целевой объект.
«Мозговой
штурм»
Ожидаемый вид игры:
42.
Техническое заданиеЦель игры — обойти препятствия и поймать целевой объект.
Требования к игре:
1. Основной объект управляется пользователем с клавиатуры.
2. Не менее двух объектов перемещаются по экрану автоматически и мешают
достижению цели.
Условие поражения: игрок касается любого препятствия.
Тогда исчезает целевой объект.
«Мозговой
штурм»
3. Условие победы: игрок касается целевого объекта.
Тогда препятствия исчезают.
43.
Термины для создания игрПри создании игр разработчики часто пользуются терминами:
Сцена — это «фон» игры. То, по чему перемещаются все объекты.
Спрайт — это любой игровой объект, отличный от сцены.
Спрайты
«Мозговой
штурм»
Сцена
44.
Планируем работу над проектомИзобразим функционал проекта на mind map:
Объекты игры
Игрок
Управляется с
клавиатуры
Препятствие
Перемещается
автоматически
Целевой объект
Стоит на месте
Касание
игрока и цели
Препятствия
исчезают
Касание игрока
и препятствия
Целевой объект
исчезает
События игры
«Мозговой
штурм»
Игра «Hit It!»
45.
Планируем работу над проектомИзобразим функционал проекта на mind map:
Игрок
Объекты игры
Препятствие
Свойства и
методы для
отображения и
перемещения
есть в классе
Turtle!
Игра «Hit It!»
Касание
игрока и цели
События игры
Касание игрока
и препятствия
В классе Turtle
нет — это
специфика нашей
игры.
Как «научить»
объекты
распознавать
касание?
«Мозговой
штурм»
Целевой объект
46.
Планируем работу над проектомЕсли бы экземпляры класса Turtle умели распознавать касания друг с другом, то
все спрайты можно было бы создать черепашками.
Но для нашей игры также требуется также обработка касаний спрайтов.
+
Свойства
Методы
Свойства
Методы
?
Класс Turtle
Можно ли дополнить готовый инструментарий
класса Turtle недостающими методами? Как?
«Мозговой
штурм»
Свойства
Методы
47.
Планируем работу над проектомСоздадим класс-наследник Sprite готового класса Turtle и дополним его
необходимыми свойствами и методами.
Игрок
Объекты игры
Препятствие
Экземпляры
нового класса
Sprite (наследник
Turtle).
Целевой объект
Касание
игрока и цели
События игры
Касание игрока
и препятствия
«Мозговой
штурм»
Игра «Hit It!»
48.
Проектируем класс SpriteКаким должен быть класс Sprite?
Наследуются свойства и методы Turtle
Конструктор
класса
Команды, создающие спрайт нужной
формы и цвета в определённой точке
(аргументы передаются
в конструктор извне)
Методы для обработки нажатий на
клавиши со стрелками
Методы класса
Метод, распознающий, произошло ли
столкновение со спрайтом
Схема может дополняться по мере разработки игры
«Мозговой
штурм»
Класс Sprite
49.
Класс SpriteРеализуем часть класса для создания спрайта с нужными свойствами (цветом, формой,
положением).
class Sprite(Turtle):
Класс Sprite — наследник Turtle
def __init__(self, x, y, step=10, shape='circle', color='black'):
super().__init__()
self.penup()
self.speed(0)
self.color(color)
self.shape(shape)
self.step = step
player = Sprite(0, -100, 10, 'circle', 'orange')
«Мозговой
штурм»
self.goto(x, y)
50.
Класс SpriteРеализуем часть класса для создания спрайта с нужными свойствами (цветом, формой,
положением).
class Sprite(Turtle):
К параметрам можно приписать подсказки
def __init__(self, x, y, step=10, shape='circle', color='black'):
super().__init__()
self.speed(0)
self.goto(x, y)
self.color(color)
self.shape(shape)
self.step = step
player = Sprite(0, -100, 10, 'circle', 'orange')
Спрайты могут отличаться
формой, цветом, стартовым
положением и скоростью
перемещения.
«Мозговой
штурм»
self.penup()
51.
Класс SpriteРеализуем часть класса для создания спрайта с нужными свойствами (цветом, формой,
положением).
class Sprite(Turtle):
def __init__(self, x, y, step=10, shape='circle', color='black'):
super().__init__()
Наследуем от суперкласса
все свойства и методы.
self.penup()
self.speed(0)
self.color(color)
self.shape(shape)
self.step = step
player = Sprite(0, -100, 10, 'circle', 'orange')
«Мозговой
штурм»
self.goto(x, y)
52.
Класс SpriteРеализуем часть класса для создания спрайта с нужными свойствами (цветом, формой,
положением).
class Sprite(Turtle):
def __init__(self, x, y, step=10, shape='circle', color='black'):
super().__init__()
self.penup()
self.goto(x, y)
self.color(color)
Создаём спрайт с нужными
свойствами в определённой
точке.
self.shape(shape)
self.step = step
player = Sprite(0, -100, 10, 'circle', 'orange')
«Мозговой
штурм»
self.speed(0)
53.
Управление спрайтом-игрокомСпособ управления объектом-черепашкой с клавиатуры нам известен.
Управлять объектом Sprite можно так же, ведь он унаследовал все свойства и
методы Turtle!
Основной код программы:
scr.listen()
scr.onkey(player.move_up, 'Up')
scr.onkey(player.move_left, 'Left')
scr.onkey(player.move_right, 'Right')
scr.onkey(player.move_down, 'Down')
Создаём объект Экран
(тот, на котором находится спрайтигрок).
Обрабатываем нажатия на клавиши
соответствующими методами класса
Sprite
(добавим их в описание класса).
«Мозговой
штурм»
scr = player.getscreen()
54.
Управление спрайтом-игрокомСпособ управления объектом-черепашкой с клавиатуры нам известен.
Управлять объектом Sprite можно так же, ведь он унаследовал все свойства и
методы Turtle!
Основной код программы:
scr.listen()
scr.onkey(player.move_up, 'Up')
scr.onkey(player.move_left, 'Left')
scr.onkey(player.move_right, 'Right')
scr.onkey(player.move_down, 'Down')
Обратите внимание!
Чтобы объект scr стал
восприимчив к нажатию клавиш,
необходимо кликнуть на экран
мышкой.
После этого «заработают» и
нажатия на клавиши.
«Мозговой
штурм»
scr = player.getscreen()
55.
Управление спрайтом-игрокомКласс Sprite:
def move_up(self):
self.goto(self.xcor(), self.ycor() + self.step)
...спрайт должен сместиться на
один шаг (указывался при
создании) в нужном
направлении.
Основной код программы:
scr = player.getscreen()
scr.onkey(player.move_up, 'Up')
scr.onkey(player.move_left, 'Left')
scr.onkey(player.move_right, 'Right')
scr.onkey(player.move_down, 'Down')
При нажатии на клавишу «стрелка
вверх»...
«Мозговой
штурм»
scr.listen()
56.
Объединяем фрагменты кода:class Sprite(Turtle):
def __init__(self, x, y, step=10, shape='circle', color='black'):
super().__init__()
Конструктор класса
def move_up(self):
Создаём
спрайты:
игрок,10,
препятствия
цель
player
= Sprite(0,
-100,
'circle', и'orange')
Создаём объект Экран и «слушаем» события клавиатуры
Подписываемся на события клавиш со стрелками
«Мозговой
штурм»
Этот и другие методы,
обрабатывающие нажатия
на клавиши со стрелками
57.
Задачи:«Мозговой
штурм»
➔ Запрограммировать заготовку игры «Hit It!» с необходимыми спрайтами и
возможностью управлять игроком с клавиатуры.
58.
Модуль 5. Урок 5. ООП. НаследованиеПлатформа:
Игра «Hit It!»
59.
Выполните задания на платформе«Игра “Hit It!”»
Работаем на
платформе
mars.algoritmika.org
60.
Модуль 5. Урок 5. ООП. НаследованиеЗавершение
рабочего дня
61.
Для завершения работыпройдите техническое интервью
1. В чём смысл наследования? Что такое суперкласс? Класснаследник?
Подведение итогов
рабочего дня
1. Как создать класс-наследник? Как показать связь между
суперклассом и классом-наследником?
В чём смысл метода super()?
Костя,
Алёна,
старший разработчик
менеджер проектов
62.
Оценка эффективностипроделанной работы
Ответьте с коллегами на вопросы:
1. Что получилось лучше всего?
3. Что нужно сделать, чтобы в следующий раз
избежать неудачи?
В следующий раз мы завершим
работу над игрой «Hit It!»
Подведение итогов
рабочего дня
2. Что получилось не так, как хотелось?
Программирование