Similar presentations:
Объектно-ориентированное программирование. Наследование
1.
Объектно-ориентированноепрограммирование. Наследование
2.
Создание игровых объектовМы уже говорили, что создание объектов и классов — это
фундамент разработки игр.
В прошлый раз вы впервые создали класс и с его помощью
запрограммировали текстовый квест.
3.
Создание игровых объектовС помощью класса Hero вы смогли создать несколько персонажей,
например, Рыцаря, Разбойника и Дракона.
Класс Hero
Объект Рыцарь
Объект Разбойник
Объект Дракон
4.
Создание игровых объектовВсе персонажи были экземплярами одного класса, поэтому они
обладали одинаковыми наборами свойств.
Класс Hero
Объект Рыцарь
Объект Разбойник
Объект Дракон
Здоровье
Здоровье
Здоровье
Сила атаки
Броня
Сила атаки
Броня
Сила атаки
Броня
Метод «Атака»
Метод «Атака»
Метод «Атака»
Геймдизайнер Пётр отметил, что более правдоподобным был бы другой
набор свойств и методов...
5.
Улучшение игровых объектовВ реальной игре персонажи отличались бы свойствами и методами:
Класс Hero
Объект Рыцарь
Объект Разбойник
Объект Дракон
Здоровье
Здоровье
Здоровье
Сила атаки
Броня
Сила атаки
Ловкость
Сила атаки
Магия
+ Метод
«Атака мечом»
+ Метод
«Выстрел из лука»
+ Методы
«Наложить заклинание»
и «Атака огнём»
6.
Улучшение игровых объектовВ то же время часть свойств у персонажей общая.
Возможны и общие методы, например, «Исцелиться» или «Сдаться».
Класс Hero
Объект Рыцарь
Объект Разбойник
Объект Дракон
Здоровье
Здоровье
Здоровье
Сила атаки
Броня
Сила атаки
Ловкость
Сила атаки
Магия
+ Метод
«Атака мечом»
+ Метод
«Выстрел из лука»
+ Методы
«Наложить заклинание»
и «Атака огнём»
Неужели для каждого типа объектов придётся создавать отдельный класс?
7.
Взаимосвязь между типами объектовВ реальной жизни мы тоже иногда говорим об объектах в общем,
а иногда — более конкретно.
Сравните:
Компьютеры
Игры
Компьютеры с
операционной
системой Linux
Компьютерные
игры жанра RPG
8.
Наследование классовВ программировании часто возникает необходимость переноса и
дополнения свойств одного класса в другом классе.
Такая концепция получила название наследование.
Компьютеры
Компьютеры с
операционной
системой Linux
Игры
Компьютерные
игры жанра RPG
Родительский класс
Класс-наследник
9.
Наследование классовВ программировании часто возникает необходимость переноса и
дополнения свойств одного класса в другом классе.
Такая концепция получила название наследование.
Компьютеры
Компьютеры с
операционной
системой Linux
Игры
Компьютерные
игры жанра RPG
Родительский класс
Класс-наследник
Наследование применяется
не только в создании игр,
но и в разработке
приложений и сайтов!
10.
Цель рабочего дня —изучить и применить на практике наследование классов.
Сегодня второй день тренинга по созданию собственных объектов,
посвящённый концепции наследования.
Сегодня вы:
● узнаете, что такое суперкласс и класснаследник;
● создадите двумя способами свои классынаследники;
● используете наследование в создании
интерактивной игры «Hit It!».
11.
ООП. НаследованиеПодтверждение
квалификации
12.
Что такое класс?Что такое экземпляр класса?
13.
Класс❖ единое название для многих объектов;
❖ в программировании: общее описание того, как
должны быть устроены эти объекты.
ЭТО — машина
Объект
Класс объекта
Знания про все такие объекты
14.
Экземпляр класса— это объект, созданный по описанию,
запрограммированному в классе.
экземпляр = Класс()
Объект получает всё, что
знает и умеет класс.
Свойства
Методы
Описываем класс:
Создаём
объект
Свойства
Методы
15.
Как создать экземпляр?16.
Рассмотрим создание экземпляра класса Cat:cat1 = Cat()
Экземпляр
класса
Конструктор
класса
Имя класса со скобками является командой,
создающей новый объект этого класса.
Результат работы — ссылка, указывающая на объект
(хранится в переменной).
17.
Что такое конструктор класса?Обладает ли он универсальным
названием?
18.
Конструктор— это метод, который автоматически вызывается при
создании объекта. Он создаёт экземпляр класса.
def __init__(self,
параметры
) — название конструктора.
19.
Как создать собственный класс?Где описываются свойства класса?
Как описать метод класса?
20.
Создание классаclass (в англ. — «класс») — команда, создающая класс.
self (в англ. — «сам, себя») — текущий объект класса.
class
Имя класса
():
def __init__(self,
self.
Свойство
Данные
Конструктор с
процессом создания
экземпляра класса.
):
Данные
= name
def print_info(self):
print('Информация об объекте:', self. Свойство
Экземпляр
=
Имя класса
(
Свойство
)
)
21.
Наследование22.
Классы и подклассыПриведите любые примеры классов и подклассов
из реальной жизни.
Компьютеры
Компьютеры с
операционной
системой Linux
Игры
Компьютерные
игры жанра RPG
Родительский класс
Класс-наследник
23.
Классы и подклассыПрактически все классы являются родителями одних и
наследниками других классов.
Все кометы — это небесные тела
Все автомобили — это транспорт
A
B
24.
Классы и подклассыНа практике это очень удобно. Например:
1) Называя животное кошкой, можно не уточнять, что оно не летает
(большинство животных летать не умеет).
2) Называя напиток чаем, можно не уточнять, что он жидкий и им
можно утолить жажду.
В программировании использование информации
уже описанных классов не менее удобно!
25.
НаследованиеНаследование классов помогает перенести все умения, написанные
ранее для более общего класса, в другой, более частный класс, класснаследник.
A
Свойства
Методы
+
Свойства
Методы
Свойства
Методы
Класс-наследник
A
B
B
Суперкласс
Класс A вложен в класс B
26.
Виды наследованияВид
Комментарий
Класс-наследник дополняется
новыми методами, а новые свойства
не вводятся.
Новый конструктор не нужен,
можно использовать
конструктор суперкласса!
Класс-наследник дополняется и
новыми свойствами, и новыми
методами.
Требуется дополнение
конструктора суперкласса
новыми свойствами.
27.
Создание класса-наследникаПусть суперкласс уже написан, тогда,
чтобы создать класс-наследник нужно:
при создании наследника указать имя суперкласса;
дополнить класс-наследник необходимыми методами.
Способ 1:
Имя суперкласса ):
Имя наследника
class Application(
Название метода (self, Значение ):
def print_info
Действие с объектом и св-вами
Название метода (self, Значение ):
def print_info
Действие с объектом и св-вами
Вариант с введением
только новых методов.
При создании
экземпляра наследника
будет вызван
конструктор
суперкласса!
28.
Создание класса-наследникаПусть суперкласс уже написан, тогда,
чтобы создать класс-наследник нужно:
при создании наследника указать имя суперкласса;
дополнить класс-наследник необходимыми методами.
Способ 2:
Имя суперкласса ):
Имя наследника
class Application(
def __init__(self,
Значение
):
super().__init__( Значение
)
Название метода
def print_info
(self,
Значение
Действие с объектом и св-вами
):
super() обращается к
суперклассу для
наследования всех
свойств и методов.
Фактически, при создании
экземпляра наследника
происходит обращение к
конструктору суперкласса.
29.
Создание класса-наследникаЧтобы создать класс-наследник нужно:
при создании наследника указать имя суперкласса;
создать конструктор, ввести свойства суперкласса и добавить
новые;
дополнить класс-наследник необходимыми методами.
Имя наследника
Имя суперкласса ):
class Application(
def __init__(self,
Значение
super().__init__(
self.
Новое св-во
=
Название метода (self,
def print_info
Значение
,
Значение
Действие с объектом и св-вами
)Вариант с введением
нового свойства.
Значение
Значение
з
):
):
Конструктор
перенимает свойства
суперкласса и
добавляет новое.
30.
Рассмотрим тренировочную задачуИмеется фрагмент кода с классом Hero.
Задача: реализовать класс-наследник Warrior по данной схеме.
Класс Hero
Класс Воин
Имя
Здоровье
Броня
Имя
Здоровье
Броня
Метод
«Печать информ.»
Метод
«Печать информ.»
Метод
«Приветствие»
Метод
«Атака мечом»
Требуется ли введение
новых свойств? Методов?
Как реализовать
наследование?
31.
Рассмотрим тренировочную задачуИмеется фрагмент кода с классом Hero.
Задача: реализовать класс-наследник Warrior по данной схеме.
class Hero():
#конструктор класса
def __init__(self, name, health, armor):
self.name = name #строка
self.health = health #число
self.armor = armor #число
#печать параметров персонажа:
def print_info(self):
print('Уровень здоровья:', self.health)
print('Класс брони:', self.armor, '\n')
Как создать класснаследник Warrior,
унаследовав свойства
класса Hero?
32.
Рассмотрим тренировочную задачуИмеется фрагмент кода с классом 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).
Суперкласс
Класс-наследник
33.
Рассмотрим тренировочную задачуИмеется фрагмент кода с классом 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).
34.
Задачи:➔ Создайте классы-наследники Warrior и Magician суперкласса
Hero (ориентировочные схемы классов есть на платформе).
➔ Создайте два экземпляра класса: воина и мага. Напечатайте
информацию о них.
➔ Запрограммируйте атаку мага рыцарем. Затем произведите
ответную атаку.
35.
Для завершения работыпройдите техническое интервью
1. В чём смысл наследования? Что такое суперкласс?
Класс-наследник?
1. Как создать класс-наследник? Как показать связь
между суперклассом и классом-наследником?
В чём смысл метода super()?