Содержание
- 4. Объектно-ориентированное программирование. Язык Python § 46. Что такое ООП? § 47. Объекты и классы § 48.
- 5. § 46. Что такое ООП? Объектно-ориентированное программирование. Язык Python
- 6. Зачем нужно что-то новое? программы из миллионов строк тысячи переменных и массивов Э. Дейкстра: «Человечество еще
- 7. Как мы воспринимаем объекты? существенные свойства Абстракция – это выделение существенных свойств объекта, отличающих его от
- 8. Использование объектов Программа – множество объектов (моделей), каждый из которых обладает своими свойствами и поведением, но
- 9. § 47. Объекты и классы Объектно-ориентированное программирование. Язык Python
- 10. С чего начать? Объектно-ориентированный анализ (ООА): выделить объекты определить их существенные свойства описать поведение (команды, которые
- 11. Модель дороги с автомобилями Объект «Дорога»: методы (поведение) свойства (состояние) название класса
- 12. Модель дороги с автомобилями Объект «Машина»: свойства: координаты и скорость все машины одинаковы скорость постоянна на
- 13. Модель дороги с автомобилями Взаимодействие объектов: узнать длину свойства объектов методы: операции, которые они могут выполнять
- 14. § 48. Создание объектов в программе Объектно-ориентированное программирование. Язык Python
- 15. Классы программа – множество взаимодействующих объектов любой объект – экземпляр какого-то класса класс – описание группы
- 16. Класс «Дорога» class TRoad: pass Описание класса: Создание объекта: road = TRoad() Конструктор – это метод
- 17. Новый конструктор – добавлений полей class TRoad: def __init__ ( self ): self.length = 0 self.width
- 18. Конструктор с параметрами class TRoad: def __init__ ( self, length0, width0 ): self.length = length0 self.width
- 19. Защита от неверных данных class TRoad: def __init__ ( self, length0, width0 ): if length0 >
- 20. Класс «Машина» class TCar: def __init__ ( self, road0, p0, v0 ): self.road = road0 self.P
- 21. Класс «Машина» – метод move class TCar: def __init__ ( self, road0, p0, v0 ): ...
- 22. Основная программа N = 3 cars = [] for i in range(N): cars.append ( TCar(road, i+1,
- 23. Что в этом хорошего и плохого? основная программа – простая и понятная классы могут разрабатывать разные
- 24. § 49. Скрытие внутреннего устройства Объектно-ориентированное программирование. Язык Python
- 25. Зачем скрывать внутреннее устройство? Объектная модель задачи: интерфейсы защита внутренних данных проверка входных данных на корректность
- 26. class TPen: def __init__ ( self ): self.__color = "000000" Пример: класс «перо» class TPen: def
- 27. Пример: класс «перо» class TPen: def __init__ ( self ): self.__color = "000000" def getColor (
- 28. Пример: класс «перо» Использование: pen = TPen() pen.setColor ( "FFFF00" ) print ( "цвет пера:", pen.getColor()
- 29. Свойство color class TPen: def __init__ ( self ): ... def __getColor ( self ): ...
- 30. Изменение внутреннего устройства class TPen: def __init__ ( self ): self.__color = 0 def __getColor (
- 31. Преобразование int → hex Целое – в шестнадцатеричную запись: "0000FF" правильно так! 16711935 → "FF00FF" x
- 32. Преобразование hex → int "FF00FF" → 16711935 sHex = "FF00FF" x = int ( sHex, 16
- 33. Свойство «только для чтения» class TCar: def __init__ ( self ): self.__v = 0 v =
- 34. Скрытие внутреннего устройства Инкапсуляция («помещение в капсулу») интерфейс (public) внутреннее устройство (private)
- 35. § 50. Иерархия классов Объектно-ориентированное программирование. Язык Python
- 36. Классификации Классификация – разделение изучаемых объектов на группы (классы), объединенные общими признаками. Яблоко Груша Банан Апельсин
- 37. Что такое наследование? класс Двудольные семейство Бобовые род Клевер горный клевер наследует свойства (имеет все свойства)
- 38. Иерархия логических элементов Логический элемент с одним входом с двумя входами НЕ Объектно-ориентированное программирование – это
- 39. Базовый класс class TLogElement: def __init__ ( self ): self.__in1 = False self.__in2 = False self._res
- 40. Базовый класс class TLogElement: def __init__( self ): self.__in1 = False self.__in2 = False self._res =
- 41. Метод calc class TLogElement: ... def calc ( self ): pass заглушка
- 42. Абстрактный класс Абстрактный метод – это метод класса, который объявляется, но не реализуется в классе. Абстрактный
- 43. Абстрактный класс class TLogElement: def __init__ ( self ): self.__in1 = False self.__in2 = False self._res
- 44. Что такое полиморфизм? греч.: πολυ — много, μορφη — форма Полиморфизм – это возможность классов-наследников по-разному
- 45. Элемент «НЕ» class TNot ( TLogElement ): def __init__ ( self ): TLogElement.__init__ ( self )
- 46. Элемент «НЕ» n = TNot() n.In1 = False print ( n.Res ) Использование: создание объекта установка
- 47. Элементы с двумя входами class TLog2In ( TLogElement ): pass наследник от TLogElement нельзя, он абстрактный
- 48. Элементы с двумя входами class TAnd ( TLog2In ): def __init__ ( self ): TLog2In.__init__ (
- 49. Пример: элемент «И-НЕ» elNot = TNot() elAnd = TAnd() print ( " A | B |
- 50. Модульность class TLogElement: ... class TNot ( TlogElement ): ... class TLog2In ( TLogElement ): pass
- 51. Модульность В основную программу: import logelement elNot = logelement.TNot() elAnd = logelement.TAnd() ...
- 52. Сообщения между объектами class TLogElement: def __init__ ( self ): ... self.__nextEl = None self.__nextIn =
- 53. Сообщения между объектами class TLogElement: ... def __setIn1 ( self, newIn1 ): self.__in1 = newIn1 self.calc()
- 54. Сообщения между объектами elNot = TNot() elAnd = TAnd() elAnd.link ( elNot, 1 ) print (
- 55. § 51. Программы с графическим интерфейсом Объектно-ориентированное программирование. Язык Python
- 56. Интерфейс: объекты и сообщения поле ввода кнопка флажок переключатель Все элементы окон – объекты, которые обмениваются
- 57. Классические программы основная программа
- 58. Программы, управляемые событиями Событие – это переход какого-либо объекта из одного состояния в другое. нажатие на
- 59. Программы, управляемые событиями основная программа
- 60. Что такое RAD-среда? RAD = Rapid Application Development — быстрая разработка приложений создание формы минимальный код
- 61. RAD-среды: Delphi Язык: Object Pascal, позднее Delphi: 1995: Borland, сейчас: Embarcadero Technologies
- 62. RAD-среды: MS Visual Studio Языки: Visual Basic, Visual C++, Visual C#, Visual F# c 1995 по
- 63. RAD-среды: Lazarus Языки: FreePascal, Delphi свободное ПО: lazarus.freepascal.org
- 64. § 52. Графический интерфейс: основы Объектно-ориентированное программирование. Язык Python
- 65. Графические библиотеки для Python tkinter (стандартная библиотека Python ) wxPython (http://wxpython.org) PyGTK (http://pygtk.org) PyQt (http://www.riverbankcomputing.com/software/pyqt/intro) simpletk
- 66. Общие принципы форма (окно верхнего уровня) компонент (виджет, элемент) щелчок по кнопке щелчок по выключателю изменение
- 67. Простейшая программа from simpletk import * app = TApplication("Первая форма") app.Run() импорт всех функций из simpletk
- 68. Свойства формы app = TApplication("Первая форма") app.position = (100, 300) x y начальные координаты app.size =
- 69. Обработчик события Задача. Запросить подтверждение при закрытии окна. событие from tkinter.messagebox import askokcancel def AskOnExit(): if
- 70. § 53. Использование компонентов Объектно-ориентированное программирование. Язык Python
- 71. Просмотр рисунков панель TPanel выключатель TCheckBox рисунок TImage кнопка TButton
- 72. Настройка формы from simpletk import * app = TApplication ( "Просмотр рисунков" ) app.position = (200,
- 73. Верхняя панель panel = TPanel ( app, relief = "raised", height = 35, bd = 1
- 74. Кнопка и выключатель кнопка TButton выключатель TCheckBox openBtn = TButton ( panel, width = 15, text
- 75. Поле для рисунка рисунок TImage image = TImage ( app, bg = "white" ) image.align =
- 76. Выбор файла выбрать файл с рисунком if файл выбран: загрузить рисунок в компонент image После щелчка
- 77. Выбор файла from tkinter import filedialog def selectFile ( sender ): fname = filedialog.askopenfilename( filetypes =
- 78. Центрирование Обработчик: def cbChanged ( sender ): image.center = sender.checked image.redrawImage() объект-источник события включен (True/False)? перерисовать
- 79. Новый класс – «всё в одном» class TImageViewer ( TApplication ): ... app = TImageViewer() app.Run()
- 80. Класс TImageViewer: конструктор class TImageViewer ( TApplication ): def __init__(self): TApplication.__init__ ( self, "Просмотр рисунков" )
- 81. Класс TImageViewer: обработчики class TImageViewer ( TApplication ): def __init__(self): ... def selectFile ( self, sender
- 82. Ввод и вывод данных для веб-страниц метка rgbLabel TLabel метка rgbRect TLabel поле ввода rEdit TEdit
- 83. Основная программа app = TApplication ( "RGB-кодирование" ) app.size = (210, 90) app.position = (200, 200)
- 84. Компоненты Метки для вывода результата: fc = ( "Courier New", 16, "bold" ) rgbLabel = TLabel
- 85. Компоненты Поля ввода: rEdit = TEdit ( app, font = f, width = 5 ) rEdit.position
- 86. Обработчик события «изменение поля» def onChange ( sender ): r = int ( rEdit.text ) g
- 87. Запуск программы rEdit.onChange = onChange gEdit.onChange = onChange bEdit.onChange = onChange app.Run() Запуск программы: Подключение обработчиков:
- 88. Обработка ошибок Exception in Tkinter callback Traceback (most recent call last): … line 48, in onChange
- 89. Обработка ошибок try: # «опасные» команды except: # обработка ошибки попытаться выполнить если исключение (аварийная ситуация)
- 90. Обработка ошибок def onChange ( sender ): s = "?" # текст метки bkColor = "SystemButtonFace"
- 91. Обработка ошибок def onChange ( sender ): s = "?" bkColor = "SystemButtonFace" try: r =
- 92. § 54. Совершенствование компонентов Объектно-ориентированное программирование. Язык Python
- 93. Новый класс для ввода целого числа Задача: построить поле для ввода целых чисел, в котором есть
- 94. Добавление свойства class TIntEdit ( TEdit ): def __init__ ( self, parent, **kw ): TEdit.__init__ (
- 95. Проверка символов class TIntEdit ( TEdit ): def __init__ ( self, parent, **kw ): ... self.onValidate
- 96. Поле для ввода целых чисел app = TApplication ( "Шестнадцатеричная система" ) app.size = (250, 36)
- 97. Поле для ввода целых чисел Поле ввода: from int_edit import TIntEdit decEdit = TIntEdit ( app,
- 98. § 55. Модель и представление Объектно-ориентированное программирование. Язык Python
- 99. решение Еще одна декомпозиция Задача: повторное использование написанного ранее готового кода. решение
- 100. решение Модель и представление Задача: хранить и использовать данные об изменении курса доллара.
- 101. Модель и представление Задача: вычисление арифметического выражения: целые числа знаки арифметических действий + - * /
- 102. Модель k = номер последней операции if k результат = строка в число else: n1 =
- 103. Модель: вычисления def Calc ( s ): k = lastOp ( s ) if k return
- 104. Вспомогательные функции def priority ( op ): if op in "+-": return 1 if op in
- 105. Представление список TListBox выпадающий список TComboBox app = TApplication ( "Калькулятор" ) app.size = (200, 150)
- 106. Компоненты Input = TComboBox ( app, values = [], height = 1 ) Input.align = "top"
- 107. Логика работы if нажата клавиша Enter: вычислить выражение добавить результат в начало списка if выражения нет
- 108. Обработчик нажатия на клавишу Enter from model import Calc def doCalc ( event ): expr =
- 109. Калькулятор
- 110. Конец фильма ПОЛЯКОВ Константин Юрьевич д.т.н., учитель информатики ГБОУ СОШ № 163, г. Санкт-Петербург kpolyakov@mail.ru ЕРЕМИН
- 112. Скачать презентацию