- •Объектно-ориентированное программирование.
- •Объектно- ориентированное программирование. Язык 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
Вспомогательные функции
Приоритет операции: |
Модуль: |
def priority ( op ): |
model.py: |
if op in "+-": return 1 |
Calc |
if op in "*/": return 2 |
priority |
return 100 |
lastOp |
Номер последней операции: |
|
def lastOp ( s ): |
|
|
minPrt = 50 |
# любое между 2 и |
|
k = -1 |
|
|
for i in range(len(s)): |
|
|
if priority(s[i]) <= minPrt: |
||
minPrt = priority(s[i]) |
? |
|
k = i |
|
|
return k |
|
|
100
Почему <=?
Представление
выпадающий
список
TComboBox список
TListBox
Объект-приложение:
app = TApplication ( "Калькулятор" ) app.size = (200, 150)
...
app.Run()
Компоненты
Выпадающий список: |
список |
|
значений |
Input = TComboBox ( app, values = [], |
|
height = 1 |
высота |
Input.align = "top"
Input.text = "2+2" прижать к текст верху
Список для запоминания результатов:
Answers = TListBox ( app ) Answers.align = "client"
заполнить все свободное место
Логика работы
if нажата клавиша Enter: вычислить выражение
добавить результат в начало списка if выражения нет в выпадающем списке:
добавить его в выпадающий список
Обработчик нажатия Enter:
def doCalc ( event ):
...
Установка обработчика:
Input.bind ( "<Key-Return>", doCalc )
«связать» |
клавиша |
|
Enter |
Обработчик нажатия на клавишу Enter
from model import Calc def doCalc ( event ):
expr = Input.text |
# |
прочитать |
выражение |
x = Calc ( expr ) |
# |
вычислить |
|
Answers.insert ( 0, expr + "=" + str(x) ) if not Input.findItem ( expr
Input.addItem ( expr )
