Search Header Logo
Полморфизм

Полморфизм

Assessment

Presentation

Education

12th Grade

Practice Problem

Hard

Created by

Екатерина Екатерина

FREE Resource

23 Slides • 9 Questions

1

media

Полиморфизм

2

media
  • Ответы к домашнему заданию к занятию 24, чтобы поднять рейтинг

  • ​Новые знания по классам

В конце занятия вы получите:

3

Что такое полиморфизм?

Полиморфизм – механизм, позволяющий объектам разных типов использовать один и тот же интерфейс (оператор, функция, метод, класс).

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

4

Игра на музыкальных инструментах таких как гитара, фортепиано или скрипка, может быть представлена как функция «играть». Несмотря на разные инструменты, способы извлечения звука и тембры звучания, общее действие остается таким же «игра на музыкальном инструменте».

Музыка и полиморфизм

media

5

media

Ножи, кастрюли, миксеры, духовки

- все это используется для приготовления пищи, но каждый из описанных предметов выполняет данную функцию по-своему.

Готовка и полиморфизм

6

Полиморфизм, который мы встречали

Один из примеров, который сразу приходит в голову - это функция len() для нахождения длины последовательности.

Мы применяли ее к спискам, строкам, словарям и другим изученным встроенным структурам данных:

media

7

Полиморфизм, который мы встречали

То есть функция len() является общим интерфейсом для нахождения длины, а внутри классов, описывающих список, строку и другие структуры данных, находятся свои реализации данной функции.

Тоже самое работает и с функцией sum(), находящей сумму элементов последовательности, и другими функциями, которые могут работать с разными типами данных.

8

Задача

media

9

Multiple Choice

Как создать класс Rectangle?

1

class Rectangle:

2

class Rectangle():

3

def Rectangle:

10

Multiple Choice

Как задать классу Rectangle следующие свойства:

·_length – длина прямоугольника

·_width – ширина прямоугольника

(не обращайте внимания на отступы, тут весь текст выравнивается по центру)

1

def init(self, length, width):

self.length = length

self.width = width

2

def init(self, lenght, width):

self._lenght = lenght

self._width = width

3

class Rectangle:

def init():

self._length = length

self._width = width

11

Самостоятельно

Получился такой код, перепишите его себе в программу:

media

12

Poll

Переписали код на предыдущем слайде? Нужно обязательно тренироваться!

Да

Уже переписываю!

13

Еще раз: перепишите код!

Получился такой код, перепишите его себе в программу:

media

14

Open Ended

А теперь выполните вторую часть задания самостоятельно. В классе Rectangle должен быть описан метод get_rectangle_area(), возвращающий площадь прямоугольника.
Впишите код в ответ к этому вопросу!

15

Poll

16

У вас должен получиться такой код

Перепишите его себе в программу

media

17

Poll

Переписали код на предыдущем слайде? Нужно обязательно тренироваться!

Да

Уже переписываю!

18

Далее вторая часть программы

media

Напишите эту часть кода самостоятельно

19

Open Ended

Question image

Напишите код ко второй части задания:

20

Экземпляры классов

Теперь создайте несколько экземпляров классов и запустите методы классов

media

Запустите код

21

Poll

Получилось запустить код? Не было ли ошибок?

Получилось без ошибок

Возникла ошибка, но удалось разобраться

Возникла ошибка, не могу разобраться

22

Вот такой код должен был получиться:

Перепишите код полностью, если еще этого не сделали!

Если возникли ошибки, еще раз все внимательно просмотрите!

Читайте текст ошибки, если самостоятельно не удается разобраться, то пришлите скриншот мне в телеграм.

media

23

Запуск кода

После запуска вы получите следующие параметры фигур

media

24

Мы могли бы попытаться перебрать каждый из указанных элементов с помощью цикла for и найти площадь:

media

Но получили бы ошибку:

media

25

Именно тут нам и поможет полиморфизм. Мы сделаем так, чтобы метод, отвечающий за нахождение площади фигуры, назывался одинаково в каждом классе. Поменяем название методов на get_area().

media

26

Теперь при запуске мы получаем площади всех фигур:

media
media

Таким образом, мы смогли обеспечить единообразие для выполнения конкретной задачи – «поиска площади фигуры». Давайте немного дополним нашу задачу.

27

Полиморфизм и наследование

Мы научились создавать единый интерфейс для работы с разными экземплярами классов благодаря методам с одинаковыми названиями. Однако, в данном подходе есть определенная проблема.

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

28

Полиморфизм и наследование

Мы можем создать базовый класс для наших фигур, а все остальные сделать его наследниками. Класс будет называться Figure, напишем его заголовок:

media

29

Перенесите код себе в программу!

Переписать!

media

30

Poll

Переписали?

Да

Да, но были ошибки

31

Продолжение

Отлично, базовый класс готов. Теперь создадим еще один класс, описывающий круг. Назовем данный класс Circle и сделаем его наследником Figure.

Нам вполне достаточно иметь единственное свойство, чтобы работать с периметром и площадью круга – это радиус. Создадим метод init() и укажем внутри поле _radius:

media

32

Продолжение

Методы get_area() и get_perimeter() в классе Circle не определены, поэтому вызов произошел из родительского класса, и мы увидели на экране соответствующие сообщения:

media

Полиморфизм

Show answer

Auto Play

Slide 1 / 32

SLIDE