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