мета-данные страницы
Загрузка не удалась. Возможно, проблемы с правами доступа?
Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версияСледующая версияСледующая версия справа и слева | ||
python:week22 [21/01/2019 00:40] – [Объектно-ориентированное программирование] ybezrukov | python:week22 [21/01/2019 02:02] – [Классы] ybezrukov | ||
---|---|---|---|
Строка 30: | Строка 30: | ||
Тоже самое можно сказать и о объектах в ООП. Вернемся к шахматам, | Тоже самое можно сказать и о объектах в ООП. Вернемся к шахматам, | ||
+ | |||
+ | ===== Инкапсуляция или сокрытие ===== | ||
+ | |||
+ | В ООП это метод с помощью которого в ООП реализуется абстракция. Каждый объект это набор данных, | ||
+ | |||
+ | Обычно переменные считаются скрытыми, | ||
+ | |||
+ | Шахматная фигура Слон может, например, | ||
+ | |||
+ | Когда программист делает переменную приватной а метод move() общественным (публичным) он защищает ее значение от изменения каким-нибудь внешним действием. Аналогично, | ||
+ | |||
+ | Все эти переменные и методы хранятся в пределах объекта Слон. Так как они сокрыты, | ||
+ | |||
+ | ===== Наследование ===== | ||
+ | |||
+ | В дополнение к классам, | ||
+ | |||
+ | Создание подклассов позволяет экономить время. Вместо создания новых классов для всего программист создает базовый класс и затем расширяет его новыми подклассами по мере необходимости. | ||
+ | |||
+ | ===== Полиморфизм ===== | ||
+ | |||
+ | Полиморфизм это следствие наследования. Чтобы полностью его понять потребуется некоторый опыт в программировании, | ||
+ | |||
+ | Например, | ||
+ | |||
+ | В этом случае, | ||
+ | |||
+ | ===== Резюме ===== | ||
+ | |||
+ | Прочитанное наверняка вызывает больше вопросов об ООП чем дает ответов. Перечислим кратко основное: | ||
+ | |||
+ | * ООП собирает информацию в единую сущность, | ||
+ | * Каждый объект это конкретный экземпляр класса. | ||
+ | * Абстракция скрывает внутренние механизмы объекта, | ||
+ | * Инкапсуляция хранит и защищает соответствующие переменные и методы внутри объекта. | ||
+ | * Наследование позволяет подклассам использовать атрибуты родительских классов. | ||
+ | * Полиморфизм позволяет объектам и методам работать с разными ситуациями с помощью одного интерфейса. | ||
+ | |||
+ | Если запомните эти пункты, | ||
+ | |||
+ | ====== ООП в Питоне ====== | ||
+ | |||
+ | ===== Классы ===== | ||
+ | |||
+ | Класс это базовый строительный блок в ООП. Можно считать класс шаблоном или чертежом объекта, | ||
+ | |||
+ | <code python> | ||
+ | class Vehicle: | ||
+ | """ | ||
+ | pass | ||
+ | </ | ||
+ | |||
+ | Комментарий в начале класса это специальный вид комментария, | ||
+ | |||
+ | Ключевое слово '' | ||
+ | |||
+ | Если мы этот код запустим, | ||
+ | |||
+ | <code python> | ||
+ | red_car = Vehicle() | ||
+ | green_car = Vehicle() | ||
+ | blue_car = Vehicle() | ||
+ | </ | ||
+ | |||
+ | И все равно, если мы запустим код ничего не произойдет. Он работает корректно, | ||
+ | |||
+ | Дополним наш код. Добавим в класс Vehicle метод '' | ||
+ | |||
+ | <code python> | ||
+ | class Vehicle: | ||
+ | """ | ||
+ | |||
+ | def __init__(self, | ||
+ | """ | ||
+ | print(' | ||
+ | self.color = color | ||
+ | |||
+ | red_car = Vehicle() | ||
+ | green_car = Vehicle() | ||
+ | blue_car = Vehicle() | ||
+ | </ | ||
+ | |||
+ | Обратите особое внимание на метод '' | ||
+ | |||
+ | Так же метод '' | ||
+ | |||
+ | <code python> | ||
+ | red_car = Vehicle(color=' | ||
+ | green_car = Vehicle(color=' | ||
+ | blue_car = Vehicle(color=' | ||
+ | </ | ||
+ | |||
+ | Если напечатать на экран значение переменной, | ||
+ | |||
+ | <code python> | ||
+ | print(red_car.color) | ||
+ | print(green_car.color) | ||
+ | print(blue_car.color) | ||
+ | </ | ||
+ | |||
+ | |||
+ | Так вышло потому, | ||
+ | |||
+ | Расширим метод '' | ||
+ | |||
+ | <code python> | ||
+ | self.noise = ' | ||
+ | </ | ||
+ | |||
+ | Можно, конечно, | ||
+ | |||
+ | <code python> | ||
+ | def drive(self): | ||
+ | print(self.noise) | ||
+ | </ | ||
+ | |||
+ | Вызвать этот метод можно написав: | ||
+ | |||
+ | <code python> | ||
+ | red_car.drive() | ||
+ | </ | ||
+ | |||
+ | Всякий раз когда мы будем вызывать метод Питон будет печатать на экран звук движения машины. Вся наша программа сейчас должна выглядеть вот так: | ||
+ | |||
+ | <code python> | ||
+ | class Vehicle: | ||
+ | """ | ||
+ | |||
+ | def __init__(self, | ||
+ | """ | ||
+ | print(' | ||
+ | self.color = color | ||
+ | self.noise = ' | ||
+ | | ||
+ | def drive(self): | ||
+ | print(self.noise) | ||
+ | | ||
+ | red_car = Vehicle(color=' | ||
+ | green_car = Vehicle(color=' | ||
+ | blue_car = Vehicle(color=' | ||
+ | |||
+ | print(red_car.color) | ||
+ | print(green_car.color) | ||
+ | print(blue_car.color) | ||
+ | |||
+ | red_car.drive() | ||
+ | </ | ||
+ | |||
+ | ===== Наследование ===== | ||