Объектно-ориентированное программирование. Наследование презентация

Содержание

Слайд 2

Создание игровых объектов

Мы уже говорили, что создание объектов и классов — это фундамент

разработки игр.
В прошлый раз вы впервые создали класс и с его помощью запрограммировали текстовый квест.

Создание игровых объектов Мы уже говорили, что создание объектов и классов — это

Слайд 3

Класс Hero

Объект Рыцарь

Объект Разбойник

Объект Дракон

Создание игровых объектов

С помощью класса Hero вы смогли создать

несколько персонажей, например, Рыцаря, Разбойника и Дракона.

Класс Hero Объект Рыцарь Объект Разбойник Объект Дракон Создание игровых объектов С помощью

Слайд 4

Класс Hero

Объект Рыцарь

Объект Разбойник

Объект Дракон

Создание игровых объектов

Все персонажи были экземплярами одного класса, поэтому

они обладали одинаковыми наборами свойств.

Здоровье
Сила атаки
Броня

Здоровье
Сила атаки
Броня

Здоровье
Сила атаки
Броня

Геймдизайнер Пётр отметил, что более правдоподобным был бы другой набор свойств и методов...

Метод «Атака»

Метод «Атака»

Метод «Атака»

Класс Hero Объект Рыцарь Объект Разбойник Объект Дракон Создание игровых объектов Все персонажи

Слайд 5

Класс Hero

Объект Рыцарь

Объект Разбойник

Объект Дракон

Улучшение игровых объектов

В реальной игре персонажи отличались бы свойствами

и методами:

Здоровье
Сила атаки
Броня

Здоровье
Сила атаки
Ловкость

Здоровье
Сила атаки
Магия

+ Метод
«Атака мечом»

+ Метод
«Выстрел из лука»

+ Методы
«Наложить заклинание» и «Атака огнём»

Класс Hero Объект Рыцарь Объект Разбойник Объект Дракон Улучшение игровых объектов В реальной

Слайд 6

Класс Hero

Объект Рыцарь

Объект Разбойник

Объект Дракон

Улучшение игровых объектов

В то же время часть свойств у

персонажей общая.
Возможны и общие методы, например, «Исцелиться» или «Сдаться».

Здоровье
Сила атаки
Броня

Здоровье
Сила атаки
Ловкость

Здоровье
Сила атаки
Магия

+ Метод
«Атака мечом»

+ Метод
«Выстрел из лука»

+ Методы
«Наложить заклинание» и «Атака огнём»

Неужели для каждого типа объектов придётся создавать отдельный класс?

Класс Hero Объект Рыцарь Объект Разбойник Объект Дракон Улучшение игровых объектов В то

Слайд 7

Взаимосвязь между типами объектов

В реальной жизни мы тоже иногда говорим об объектах в

общем, а иногда — более конкретно.
Сравните:

Компьютеры

Компьютеры с операционной системой Linux

Игры

Компьютерные игры жанра RPG

Взаимосвязь между типами объектов В реальной жизни мы тоже иногда говорим об объектах

Слайд 8

Наследование классов

В программировании часто возникает необходимость переноса и дополнения свойств одного класса в

другом классе.
Такая концепция получила название наследование.

Компьютеры

Компьютеры с операционной системой Linux

Игры

Компьютерные игры жанра RPG

Родительский класс

Класс-наследник

Наследование классов В программировании часто возникает необходимость переноса и дополнения свойств одного класса

Слайд 9

Наследование классов

В программировании часто возникает необходимость переноса и дополнения свойств одного класса в

другом классе.
Такая концепция получила название наследование.

Компьютеры

Компьютеры с операционной системой Linux

Игры

Компьютерные игры жанра RPG

Родительский класс

Класс-наследник

Наследование применяется не только в создании игр, но и в разработке приложений и сайтов!

Наследование классов В программировании часто возникает необходимость переноса и дополнения свойств одного класса

Слайд 10

Цель рабочего дня —

Сегодня вы:

изучить и применить на практике наследование классов.
Сегодня второй день

тренинга по созданию собственных объектов, посвящённый концепции наследования.

узнаете, что такое суперкласс и класс-наследник;
создадите двумя способами свои классы-наследники;
используете наследование в создании интерактивной игры «Hit It!».

Цель рабочего дня — Сегодня вы: изучить и применить на практике наследование классов.

Слайд 11

Подтверждение
квалификации

ООП. Наследование

Подтверждение квалификации ООП. Наследование

Слайд 12

Что такое класс?
Что такое экземпляр класса?

Что такое класс? Что такое экземпляр класса?

Слайд 13

Класс

единое название для многих объектов;
в программировании: общее описание того, как должны быть

устроены эти объекты.

ЭТО — машина

Объект

Класс объекта

Знания про все такие объекты

Класс единое название для многих объектов; в программировании: общее описание того, как должны

Слайд 14

Экземпляр класса

— это объект, созданный по описанию, запрограммированному в классе.

экземпляр = Класс()

Свойства
Методы

Описываем

класс:

Создаём
объект

Объект получает всё, что знает и умеет класс.

Свойства
Методы

Экземпляр класса — это объект, созданный по описанию, запрограммированному в классе. экземпляр =

Слайд 15

Как создать экземпляр?

Как создать экземпляр?

Слайд 16

Рассмотрим создание экземпляра класса Cat:

cat1 = Cat()

Экземпляр класса

Конструктор класса

Имя класса со скобками является

командой, создающей новый объект этого класса.
Результат работы — ссылка, указывающая на объект (хранится в переменной).

Рассмотрим создание экземпляра класса Cat: cat1 = Cat() Экземпляр класса Конструктор класса Имя

Слайд 17

Что такое конструктор класса?
Обладает ли он универсальным названием?

Что такое конструктор класса? Обладает ли он универсальным названием?

Слайд 18

Конструктор

— это метод, который автоматически вызывается при создании объекта. Он создаёт экземпляр класса.


def __init__(self, ) — название конструктора.

параметры

Конструктор — это метод, который автоматически вызывается при создании объекта. Он создаёт экземпляр

Слайд 19

Как создать собственный класс?
Где описываются свойства класса?
Как описать метод класса?

Как создать собственный класс? Где описываются свойства класса? Как описать метод класса?

Слайд 20

Создание класса

class (в англ. — «класс») — команда, создающая класс.
self (в англ. —

«сам, себя») — текущий объект класса.

class

Имя класса

():

def __init__(self, ):

Данные

self. = name

Свойство

Данные

def print_info(self):

print('Информация об объекте:', self. )

Свойство

Экземпляр

=

Имя класса

( )

Свойство

Конструктор с
процессом создания экземпляра класса.

Создание класса class (в англ. — «класс») — команда, создающая класс. self (в

Слайд 21

Наследование

Наследование

Слайд 22

Компьютеры

Компьютеры с операционной системой Linux

Игры

Компьютерные игры жанра RPG

Родительский класс

Класс-наследник

Классы и подклассы

Приведите любые примеры

классов и подклассов из реальной жизни.

Компьютеры Компьютеры с операционной системой Linux Игры Компьютерные игры жанра RPG Родительский класс

Слайд 23

Классы и подклассы

Практически все классы являются родителями одних и наследниками других классов.

Все компьютерные

игры — это программы

Все кометы — это небесные тела

A

B

Все парты — это столы

Все кошки — это животные

Все автомобили — это транспорт

Классы и подклассы Практически все классы являются родителями одних и наследниками других классов.

Слайд 24

Классы и подклассы

На практике это очень удобно. Например:
Называя животное кошкой, можно не уточнять,

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

В программировании использование информации уже описанных классов не менее удобно!

Классы и подклассы На практике это очень удобно. Например: Называя животное кошкой, можно

Слайд 25

Наследование

Свойства
Методы

Класс A вложен в класс B

Класс-наследник

Суперкласс

Свойства
Методы

Свойства
Методы

A

B

+

A

B

Наследование классов помогает перенести все умения, написанные ранее

для более общего класса, в другой, более частный класс, класс-наследник.

Наследование Свойства Методы Класс A вложен в класс B Класс-наследник Суперкласс Свойства Методы

Слайд 26

Виды наследования

Виды наследования

Слайд 27

Создание класса-наследника

Пусть суперкласс уже написан, тогда,
чтобы создать класс-наследник нужно:
при создании наследника

указать имя суперкласса;
дополнить класс-наследник необходимыми методами.

class Application( ):
def print_info (self, ):
def print_info (self, ):

Имя наследника

Название метода

Действие с объектом и св-вами

Имя суперкласса

Название метода

Действие с объектом и св-вами

Значение

Вариант с введением только новых методов.
При создании экземпляра наследника будет вызван конструктор суперкласса!

Значение

Способ 1:

Создание класса-наследника Пусть суперкласс уже написан, тогда, чтобы создать класс-наследник нужно: при создании

Слайд 28

Создание класса-наследника

Пусть суперкласс уже написан, тогда,
чтобы создать класс-наследник нужно:
при создании наследника

указать имя суперкласса;
дополнить класс-наследник необходимыми методами.

class Application( ):
def __init__(self, ):
super().__init__( )
def print_info (self, ):

Имя наследника

Название метода

Действие с объектом и св-вами

Имя суперкласса

Значение

Значение

super() обращается к суперклассу для наследования всех свойств и методов.

Фактически, при создании экземпляра наследника происходит обращение к конструктору суперкласса.

Значение

Способ 2:

Создание класса-наследника Пусть суперкласс уже написан, тогда, чтобы создать класс-наследник нужно: при создании

Слайд 29

Создание класса-наследника

Чтобы создать класс-наследник нужно:
при создании наследника указать имя суперкласса;
создать конструктор, ввести

свойства суперкласса и добавить новые;
дополнить класс-наследник необходимыми методами.

class Application( ):
def __init__(self, , ):
super().__init__( )
self. =
def print_info (self, з ):

Имя наследника

Название метода

Действие с объектом и св-вами

Имя суперкласса

Значение

Значение

Значение

Новое св-во

Значение

Вариант с введением нового свойства.
Конструктор перенимает свойства суперкласса и добавляет новое.

Значение

Создание класса-наследника Чтобы создать класс-наследник нужно: при создании наследника указать имя суперкласса; создать

Слайд 30

Рассмотрим тренировочную задачу

Имеется фрагмент кода с классом Hero.
Задача: реализовать класс-наследник Warrior по

данной схеме.

Класс Воин

Имя
Здоровье
Броня

Метод
«Печать информ.»

Метод
«Приветствие»

Метод
«Атака мечом»

Класс Hero

Имя
Здоровье
Броня

Метод
«Печать информ.»

Требуется ли введение новых свойств? Методов?
Как реализовать наследование?

Рассмотрим тренировочную задачу Имеется фрагмент кода с классом Hero. Задача: реализовать класс-наследник Warrior

Слайд 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?

Рассмотрим тренировочную задачу Имеется фрагмент кода с классом Hero. Задача: реализовать класс-наследник Warrior

Слайд 32

Имеется фрагмент кода с классом 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')

class Warrior(Hero):
def hello(self):
def attack(self, enemy):

Приветствие воина
(«Верхом на коне появился воин...»).
Печатаем параметры методом print_info()

Текст про атаку мечом
(«Храбрый воин атакует мечом...»).
Большая сила удара (например, 15).

Указываем имя суперкласса, у которого заимствуем конструктор.

Суперкласс

Класс-наследник

Рассмотрим тренировочную задачу

Имеется фрагмент кода с классом Hero. Задача: реализовать класс-наследник Warrior по данной схеме.

Слайд 33

Имеется фрагмент кода с классом Hero.
Задача: реализовать класс-наследник Warrior по данной схеме.

class

Warrior(Hero):
def hello(self):
def attack(self, enemy):

Приветствие воина
(«Верхом на коне появился воин...»).
Печатаем параметры методом print_info().

Текст про атаку мечом
(«Храбрый воин атакует мечом...»).
Большая сила удара (например, 15).

Рассмотрим тренировочную задачу

warrior1 = Warrior('Henry', 100, 50)
warrior1.hello()
warrior1.attack(<Имя врага>)

Готово! Можно создать экземпляр класса warrior и сразиться с врагом!

Имеется фрагмент кода с классом Hero. Задача: реализовать класс-наследник Warrior по данной схеме.

Слайд 34

Полный код класса Warrior

class Warrior(Hero):
def hello(self):
print('-> НОВЫЙ ГЕРОЙ. Верхом на коне

появился бравый воин по имени', self.name)
self.print_info()
sleep(4)
def attack(self, enemy):
print('-> УДАР! Храбрый воин', self.name, 'атакует', enemy.name, 'мечом!')
enemy.armor -= 15 #сила удара для класса Воин
if enemy.armor < 0:
enemy.health += enemy.armor
enemy.armor = 0
print('Страшный удар обрушился на противника. \nТеперь его броня: ' +
str(enemy.armor) + ', а уровень здоровья: ' + str(enemy.health) + '\n')
sleep(5)

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

Полный код класса Warrior class Warrior(Hero): def hello(self): print('-> НОВЫЙ ГЕРОЙ. Верхом на

Слайд 35

Задачи:

Создайте классы-наследники Warrior и Magician суперкласса Hero (ориентировочные схемы классов есть на платформе).
Создайте

два экземпляра класса: воина и мага. Напечатайте информацию о них.
Запрограммируйте атаку мага рыцарем. Затем произведите ответную атаку.

Задачи: Создайте классы-наследники Warrior и Magician суперкласса Hero (ориентировочные схемы классов есть на

Слайд 36

Взаимосвязь классов Воин и Маг

Если необходимо, используйте схему:

Класс Hero

Имя
Здоровье
Сила атаки

Метод
«Печать информ.»

Класс

Воин

Класс Маг

Имя
Здоровье
Сила атаки

Метод
«Печать информ.»

Имя
Здоровье
Сила атаки

Метод
«Печать информ.»

Метод
«Приветствие»

Метод
«Атака мечом»

Метод
«Приветствие»

Метод «Наложить заклинание»

Взаимосвязь классов Воин и Маг Если необходимо, используйте схему: Класс Hero Имя Здоровье

Имя файла: Объектно-ориентированное-программирование.-Наследование.pptx
Количество просмотров: 9
Количество скачиваний: 0