- •Объектно-ориентированное программирование.
- •Модель дороги с автомобилями
- •Объектно- ориентированное программирование. Язык Python
- •Зачем нужно что-то новое?
- •Как мы воспринимаем объекты?
- •Использование объектов
- •Объектно- ориентированное программирование. Язык Python
- •С чего начать?
- •Модель дороги с автомобилями
- •Модель дороги с автомобилями
- •Объектно- ориентированное программирование. Язык Python
- •Классы
- •Класс «Дорога»
- •Новый конструктор – добавлений полей
- •Конструктор с параметрами
- •Защита от неверных данных
- •Класс «Машина»
- •Класс «Машина» – метод move
- •Основная программа
- •Что в этом хорошего и плохого?
- •Объектно- ориентированное программирование. Язык Python
- •Зачем скрывать внутреннее устройство?
- •Пример: класс «перо»
- •Пример: класс «перо»
- •Пример: класс «перо»
- •Свойство color
- •Изменение внутреннего устройства
- •Преобразование int hex
- •Преобразование hex int
- •Свойство «только для чтения»
- •Скрытие внутреннего устройства
- •Объектно- ориентированное программирование. Язык Python
- •Классификации
- •Что такое наследование?
- •Иерархия логических элементов
- •Базовый класс
- •Базовый класс
- •Метод calc
- •Абстрактный класс
- •Абстрактный класс
- •Что такое полиморфизм?
- •Элемент «НЕ»
- •Элемент «НЕ»
- •Элементы с двумя входами
- •Элементы с двумя входами
- •Пример: элемент «И-НЕ»
- •Модульность
- •Модульность
- •Сообщения между объектами
- •Сообщения между объектами
- •Сообщения между объектами
- •Объектно- ориентированное программирование. Язык Python
- •Интерфейс: объекты и сообщения
- •Классические программы
- •Программы, управляемые событиями
- •Программы, управляемые событиями
- •Что такое RAD-среда?
- •RAD-среды: Delphi
- •RAD-среды: MS Visual Studio
- •RAD-среды: Lazarus
- •Объектно- ориентированное программирование. Язык Python
- •Графические библиотеки для Python
- •Общие принципы
- •Простейшая программа
- •Свойства формы
- •Обработчик события
- •Объектно- ориентированное программирование. Язык Python
- •Просмотр рисунков
- •Настройка формы
- •Верхняя панель
- •Кнопка и выключатель
- •Поле для рисунка
- •Выбор файла
- •Выбор файла
- •Центрирование
- •Новый класс – «всё в одном»
- •Класс TImageViewer: конструктор
- •Класс TImageViewer: обработчики
- •Ввод и вывод данных
- •Основная программа
- •Компоненты
- •Компоненты
- •Обработчик события «изменение поля»
- •Запуск программы
- •Обработка ошибок
- •Обработка ошибок
- •Обработка ошибок
- •Обработка ошибок
- •Объектно- ориентированное программирование. Язык Python
- •Новый класс для ввода целого числа
- •Модель: вычисления
- •Добавление свойства
- •Проверка символов
- •Поле для ввода целых чисел
- •Поле для ввода целых чисел
- •Объектно- ориентированное программирование. Язык Python
- •Еще одна декомпозиция
- •Модель и представление
- •Модель и представление
- •Модель
- •Вспомогательные функции
- •Представление
- •Компоненты
- •Логика работы
- •Обработчик нажатия на клавишу Enter
Объектно- ориентированное программирование. Язык Python
§ 48. Создание объектов в программе
Классы
•программа – множество взаимодействующих объектов
•любой объект – экземпляр какого-то класса
•класс – описание группы объектов с общей структурой и поведением
Класс |
|
|
|
|
отличие от |
|||
|
|
|
|
структур! |
||||
|
|
|
|
|
|
|
|
|
|
|
Данные |
|
|
Методы |
|
||
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
состояние |
|
|
поведение |
|||||
Поле – это переменная, принадлежащая объекту.
Класс «Дорога»
Описание класса: |
! |
Объекты-экземпляры |
|
class TRoad: |
|||
не создаются! |
|||
pass |
|
|
|
Создание объекта: |
|
вызов |
|
road = TRoad() |
|
||
|
конструктора |
||
Конструктор – это метод класса, который вызывается для создания объекта этого класса.
!Конструктор по умолчанию строится автоматически!
Новый конструктор – добавлений полей
initialization – начальные установки
class TRoad:
def __init__ ( self self.length = 0 self.width = 0
точечная запись
ссылка для обращения к самому объекту
оба поля обнуляются
!Конструктор задаёт начальные значения полей!
road = TRoad() |
изменение |
road.length = 60 |
значений |
road.width = 3 |
полей |
Конструктор с параметрами
class TRoad: |
автоматически |
|
def __init__ ( self length0, width0 ): self.length = length0
self.width = width0
Вызов:
road = TRoad( 60, 3 )
!Нет защиты от неверных входных данных!
Защита от неверных данных
class TRoad:
def __init__ ( self, length0, width0 ): if length0 > 0:
self.length = length0 else:
self.length = 0 if width0 > 0:
self.width = width0 else:
self.width = 0
self.length = length0 if length0 > 0 else 0 self.width = width0 if width0 > 0 else 0
Класс «Машина»
дорога, по |
полоса |
которой едет |
class TCar:
def __init__ ( self, road0, p0, v0 ):
self.road = road0 |
скорость |
self.P = p0 |
self.V = v0 |
координата |
|
self.X = 0 |
||
|
Класс «Машина» – метод move
class TCar:
def __init__ ( self, road0, p0, v0 ):
...
def move ( self ): |
перемещение за t = 1 |
||
self.X += self.V |
|
если за |
|
if self.X > self.road.length: |
|||
пределами |
|||
self.X = 0 |
|
дороги |
|
Равномерное движение: |
t 1 интервал |
|
|
X X0 V t |
дискретизаци |
||
перемещение за |
и |
|
|
|
|
||
одну единицу
времени
Основная программа
N = 3 cars = []
for i in range(N):
cars.append ( TCar(road, i+1, 2*(i+1)) )
for k in range(100): # 100 шагов
for i in range(N): # для каждой машины cars[i].move()
print ( "После 100 шагов:" ) for i in range(N):
print ( cars[i].X )
Что в этом хорошего и плохого?
ООП – это метод разработки больших программ!
основная программа – простая и понятная
классы могут разрабатывать разные программисты независимо друг от друга (+интерфейс!)
повторное использование классов
неэффективно для небольших задач
