Similar presentations:
Объектно-ориентированное программирование. Классы
1.
Объектно-ориентированноепрограммирование. Классы
2.
ООП. КлассыСоздание классов
3.
Как создать собственный объект?Для этого необходимо знать:
➔ Какой этот объект? Какие данные его описывают?
➔ Что умеет делать этот объект? Какие действия он выполняет?
Порассуждаем на примере всем знакомого объекта
4.
Чтобы создать собственный объект,нужно описать его данные и действия.
➢ есть колеса
➢ есть фары
➢ есть двери
➢ умеет ездить
➢ заводится
➢ в неё могут
сесть люди
— это
машина
➢ есть зеркала
5.
Класс— единое название для многих объектов;
— в программировании: общее описание того, как должны
быть устроены эти объекты.
ЭТО — машина
Объект
Класс объекта
Знания про все такие объекты
6.
Экземпляр класса— это объект, созданный по описанию,
запрограммированному в классе.
Экземпляр
Класс
класса
7.
Экземпляр класса— это объект, созданный по описанию,
запрограммированному в классе.
экземпляр = Класс()
Объект получает всё, что
знает и умеет класс.
Свойства
Методы
Описываем класс:
Создаём
объект
Свойства
Методы
8.
Конструктор— это метод, который автоматически вызывается при
создании объекта. Он создаёт экземпляр класса.
Часто в конструкторе задаются свойства создаваемого объекта.
9.
Создание классаclass (в англ. — «класс») — команда, создающая класс.
self (в англ. — «сам, себя») — текущий объект класса.
class
Имя класса
():
def __init__(self,
self.
Свойство
Данные
):
Данные
= name
def print_info(self):
print('Информация об объекте:', self. Свойство
Экземпляр
=
Имя класса
(
Свойство
)
)
10.
Создание классаclass (в англ. — «класс») — команда, создающая класс.
self (в англ. — «сам, себя») — текущий объект класса.
class
Имя класса
def __init__(self,
self.
Команда, с которой
начинается описание
класса.
():
Свойство
Данные
):
Данные
= name
def print_info(self):
print('Информация об объекте:', self. Свойство
Экземпляр
=
Имя класса
(
Свойство
)
)
11.
Создание классаclass (в англ. — «класс») — команда, создающая класс.
self (в англ. — «сам, себя») — текущий объект класса.
class
Имя класса
():
def __init__(self,
self.
Свойство
Данные
Конструктор с
процессом создания
экземпляра класса.
):
Данные
= name
def print_info(self):
print('Информация об объекте:', self. Свойство
Экземпляр
=
Имя класса
(
Свойство
)
)
12.
Создание классаclass (в англ. — «класс») — команда, создающая класс.
self (в англ. — «сам, себя») — текущий объект класса.
class
Имя класса
():
def __init__(self,
self.
Свойство
Данные
):
Данные
= name
def print_info(self):
print('Информация об объекте:', self. Свойство
Экземпляр
=
Имя класса
(
Свойство
)
)
Метод
класса
(может
быть
любой!)
13.
Создание классаclass (в англ. — «класс») — команда, создающая класс.
self (в англ. — «сам, себя») — текущий объект класса.
class
Имя класса
():
def __init__(self,
self.
Свойство
Данные
):
Данные
= name
def print_info(self):
print('Информация об объекте:', self. Свойство
Экземпляр
=
Имя класса
(
Свойство
)
)
Создание экземпляра
класса с указанным
свойством.
14.
Текстовый квест «Рыцарь и дракон»Суть квеста:
➔ Рыцарь направляется в логово дракона,
чтобы сразиться с ним и забрать его
сокровища.
➔ По пути в логово встречаются разбойники.
Рыцарь может проехать мимо или вступать
с ними в схватку.
➔ За победу над разбойником рыцарь
получает опыт. Его броня становится
крепче, а удар — сильнее. Но в схватке
можно и погибнуть и не добраться до
дракона.
15.
Текстовый квест «Рыцарь и дракон»Что будем делать?
➔ Создадим класс Hero («Персонаж»).
➔ Опишем в конструкторе поля класса.
➔ Зададим методы класса.
➔ Создадим экземпляры класса Hero:
рыцарь, разбойники, дракон.
➔ Запрограммируем «поединки» между
экземплярами класса.
16.
Класс HeroЗапрограммируем класс с полями и методами, изложенными в mind map.
Имя персонажа
Поля класса
(свойства)
Уровень здоровья
Класс брони
Сила удара
Оружие
Класс Hero
Печать информации о персонаже
Методы класса
Нанести удар по врагу
17.
Класс Hero: конструктор и печать данныхПри создании экземпляра класса должен создаваться персонаж с
указанными свойствами.
Здоровье: 50
Ричард
Броня: 25
Оружие: меч
Сила удара: 20
18.
class Hero():def __init__(self, name, health, armor, power, weapon):
self.name = name
self.health = health #число
self.armor = armor #число
self.power = power #число
self.weapon = weapon #строка
def print_info(self):
print('Поприветствуйте героя ->', self.name)
print('Уровень здоровья:', self.health)
#продолжите самостоятельно
knight = Hero('Ричард', 50, 25, 20, 'меч')
knight.print_info()
19.
Класс Hero: метод strike()Создадим два экземпляра класса и запрограммируем нанесение удара
одним героем по другому.
Ричард
Хелен
Здоровье: 50
Здоровье: 20
Оружие: меч
Оружие: лук
Броня: 25
Броня: 5
Сила удара: 20
Сила удара: 5
20.
Класс Hero: метод strike()Создадим два экземпляра класса и запрограммируем нанесение удара
одним героем по другому.
Ричард
Хелен
Здоровье: 50
Здоровье: 5
Оружие: меч
Оружие: лук
Броня: 25
Броня: 0
Сила удара: 20
Сила удара: 5
Удар!
21.
Добавим в класс метод, атакующий врага.Сперва урон наносится по броне, а когда её не остаётся, то по здоровью.
def strike(self, enemy):
print(
Укажем как параметр объект Hero,
по которому наносится удар.
'-> УДАР! ' + self.name + ' атакует ' + enemy.name +
' с силой ' + str(self.power) + ', используя ' + self.weapon + '\n')
enemy.armor -= self.power
if enemy.armor < 0:
enemy.health += enemy.armor
enemy.armor = 0
Урон наносится по броне.
Если брони не осталось,
то вычитаем остальное из
здоровья.
print(
enemy.name + ' покачнулся(-ась).\nКласс брони упал до '
+ str(enemy.armor) + ', а уровень здоровья до '
+ str(enemy.health) + '\n')
Символ переноса строки
22.
class Hero():def __init__(self, name, health, armor, power, weapon):
Тело метода
def print_info(self):
Тело метода
def strike(self, enemy):
Тело метода
knight = Hero('Ричард', 50, 25, 20, 'меч')
knight.print_info()
rascal = Hero('Хелен', 20, 5, 5, 'лук')
rascal.print_info()
knight.strike(rascal)
23.
Задачи:➔ Создайте класс Hero с перечисленными полями и методами.
➔ Создайте два экземпляра класса: рыцаря и разбойника.
➔ Потренируйтесь «наносить удары» методом strike():
◆
Правило поединка: удары наносятся по очереди.
24.
Игра-квест «Рыцарь и дракон»Рыцарь начинает путь
Пусть на пути у рыцаря
встретится коварный
разбойник Питер,
вооружённый ножом.
Рыцарь встречает
Разбойника и начинает бой
нет
да
Погиб Разбойник?
Рыцарь повышает класс
брони и силу удара
Рыцарь встречает Дракона и
начинает бой
ПРОИГРЫШ
нет
ПРОИГРЫШ
Погиб
Дракон?
да
ПОБЕДА
25.
Игра-квест «Рыцарь и дракон»Рыцарь начинает путь
Рыцарь встречает
Разбойника и начинает бой
нет
ПРОИГРЫШ
да
Погиб Разбойник?
Рыцарь повышает класс
брони и силу удара
Возможно, если
Рыцарь стал
сильнее в схватке
с разбойником.
Рыцарь встречает Дракона и
начинает бой
нет
ПРОИГРЫШ
Погиб
Дракон?
да
ПОБЕДА
26.
Шаг 1 — сохраним Hero как модуль➔ Оставьте в уровне только класс Hero.
Сохраните его как модуль Hero.
➔ В следующем уровне подключите
модуль Hero, создайте персонажей
Рыцарь, Разбойник и Дракон, и
напечатайте информацию о них.
27.
Шаг 1 — сохраним Hero как модуль➔ Оставьте в уровне только класс Hero.
Сохраните его как модуль Hero.
➔ В следующем уровне подключите
модуль Hero, создайте персонажей
Рыцарь, Разбойник и Дракон и
напечатайте информацию о них.
from hero import Hero
knight = Hero('Ричард', 50, 25, 20, 'меч')
rascal = Hero('Питер', 20, 5, 5, 'нож')
dragon = Hero('Дракон', 100, 25, 10, 'пламя')
#печать данных дополните самостоятельно
28.
Шаг 2 — создадим метод fight()Суть метода:
❖ Участники схватки наносят друг другу удары (метод strike()),
пока не останется жив только один из них.
Как запрограммировать такой метод?
Можно ли вызывать метод strike() в методе fight()?
29.
Дополним класс Hero методом fight()В его теле будем использовать метод strike().
Имя персонажа
Поля класса
(свойства)
Уровень здоровья
Класс брони
Сила удара
Оружие
Класс Hero
Печать информации о персонаже
Методы класса
Нанести удар по врагу
Сразиться с врагом
30.
Дополним класс Hero методом fight()В его теле будем использовать метод strike().
def fight(self, enemy):
while self.health > 0 and enemy.health > 0:
Пока уровень здоровья
противников выше 0.
self.strike(enemy)
Персонажи атакуют
друг друга по
print(enemy.name, 'пал в этом нелегком бою!\n') очереди.
if enemy.health <= 0:
break
Если уровень
здоровья одного из
них стал меньше 0,
битва окончена.
sleep(5)
enemy.strike(self)
if self.health <= 0:
print(self.name, 'пал в этом нелегком бою!\n')
break
sleep(5)
Расставим паузы,
чтобы была интрига.
31.
class Hero(): #модуль Herodef __init__(self, name, health, armor, power, weapon):
Тело метода
def print_info(self):
Тело метода
def strike(self, enemy):
Тело метода
def fight(self, enemy):
Тело метода
Запрограммируем в следующем
уровне битву Рыцаря и Разбойника.
32.
Основная часть программы:from hero import Hero
knight = Hero('Ричард', 50, 25, 20, 'меч')
knight.print_info()
rascal = Hero('Питер', 20, 5, 5, 'нож')
rascal.print_info()
sleep(5)
knight.fight(rascal)
33.
Шаг 3 — улучшение удара и брониСуть метода:
❖ если рыцарь выжил, то:
➢ здоровье восстанавливается до начального значения;
➢ класс брони увеличивается в два раза;
➢ сила удара увеличивается в два раза.
Как запрограммировать восстановление здоровья
и улучшение брони и удара?
34.
Дополним основную часть программыif knight.health > 0:
knight.health = 50
knight.power *= 2
knight.armor *= 2
print(
'\n' + knight.name +
' восстановил силы и стал опытнее. Теперь сила его
удара: ' +
str(knight.power) + ', а класс брони:' +
str(knight.armor) + '\n')
Если рыцарь выжил.
Восстанавливаем
здоровье,
увеличиваем силу и
удваиваем броню.
Уведомляем
пользователя об
изменениях.
35.
Дополняем код схваткой с Драконом,и оформляем повествование:
36.
Задачи:➔ Вынесите класс Hero в отдельный модуль.
➔ Дополните модуль Hero методом fight().
➔ Запрограммируйте квест!
◆
Запрограммируйте поединок Рыцаря и Разбойника.
Если победил Рыцарь, повысьте ему класс брони и силу.
◆
Запрограммируйте поединок Рыцаря и Дракона.
37.
Для завершения работыпройдите техническое интервью
1. Что такое класс, экземпляр класса, конструктор
класса?
1. Как связаны объекты и классы? Какой класс
стандартной библиотеки Python вы уже знаете?
2. Как создать свой класс? Где описываются
свойства (поля) класса?