Содержание
- 2. Зачем нужно что-то новое? программы из миллионов строк тысячи переменных и массивов Э. Дейкстра: «Человечество еще
- 3. Как мы воспринимаем объекты? существенные свойства Абстракция – это выделение существенных свойств объекта, отличающих его от
- 4. Использование объектов Программа – множество объектов (моделей), каждый из которых обладает своими свойствами и поведением, но
- 5. С чего начать? Объектно-ориентированный анализ (ООА): выделить объекты определить их существенные свойства описать поведение (команды, которые
- 6. Модель дороги с автомобилями Объект «Дорога»: методы (поведение) свойства (состояние) название класса
- 7. Модель дороги с автомобилями Объект «Машина»: свойства: координаты и скорость все машины одинаковы скорость постоянна на
- 8. Модель дороги с автомобилями Взаимодействие объектов: узнать длину свойства объектов методы: операции, которые они могут выполнять
- 9. Классы программа – множество взаимодействующих объектов любой объект – экземпляр какого-то класса класс – описание группы
- 10. Класс «Дорога» class TRoad: pass Описание класса: Создание объекта: road = TRoad() Конструктор – это метод
- 11. Новый конструктор – добавлений полей class TRoad: def __init__ ( self ): self.length = 0 self.width
- 12. Конструктор с параметрами class TRoad: def __init__ ( self, length0, width0 ): self.length = length0 self.width
- 13. Защита от неверных данных class TRoad: def __init__ ( self, length0, width0 ): if length0 >
- 14. Класс «Машина» class TCar: def __init__ ( self, road0, p0, v0 ): self.road = road0 self.P
- 15. Класс «Машина» – метод move class TCar: def __init__ ( self, road0, p0, v0 ): ...
- 16. Основная программа road = TRoad( 65, 3 ) car = TCar( road, 1, 10 ) car.move()
- 17. Массив машин N = 3 cars = [] for i in range(N): cars.append ( TCar(road, i+1,
- 18. Что в этом хорошего и плохого? основная программа – простая и понятная классы могут разрабатывать разные
- 19. Задание «A»: Построить класс Попугай (Parrot), который умеет говорить какую-то фразу, заранее определённую при описании класса.
- 20. Задание «С»: Изменить класс из задания B так, чтобы фразу можно было изменять во время работы
- 21. Задание «E»: Изменить класс из задания D так, чтобы можно было добавлять фразы в набор фраз,
- 22. Зачем скрывать внутреннее устройство? Объектная модель задачи: интерфейсы защита внутренних данных проверка входных данных на корректность
- 23. Защита внутренних данных метод есть + энергия + настроение - голод метод спать + энергия +
- 24. class TPen: def __init__ ( self ): self.__color = "000000" Пример: класс «перо» class TPen: def
- 25. Пример: класс «перо» class TPen: def __init__ ( self ): self.__color = "000000" def getColor (
- 26. Пример: класс «перо» Использование: pen = TPen() pen.setColor ( "FFFF00" ) print ( "цвет пера:", pen.getColor()
- 27. Свойство color class TPen: def __init__ ( self ): ... def __getColor ( self ): ...
- 28. Изменение внутреннего устройства class TPen: def __init__ ( self ): self.__color = 0 def __getColor (
- 29. Преобразование int → hex Целое – в шестнадцатеричную запись: "0000FF" правильно так! 16711935 → "FF00FF" x
- 30. Преобразование hex → int "FF00FF" → 16711935 sHex = "FF00FF" x = int ( sHex, 16
- 31. Свойство «только для чтения» class TCar: def __init__ ( self ): self.__v = 0 v =
- 32. Скрытие внутреннего устройства Инкапсуляция («помещение в капсулу») интерфейс (public) внутреннее устройство (private)
- 33. Задание «A»: Построить класс РядЛампочек (LampRow), который хранит состояние ряда из 8 лампочек в виде символьной
- 34. Задание «B»: Дополните класс LampRow из задания A так, чтобы количество лампочек в цепочке можно было
- 35. Задание «С»: Дополните класс LampRow из задания B так, чтобы лампочки могли гореть одним из двух
- 36. Задание «D»: Дополните класс LampRow из задания C так, чтобы код состояния хранился как целое число.
- 37. Классификации Классификация – разделение изучаемых объектов на группы (классы), объединенные общими признаками. Яблоко Груша Банан Апельсин
- 38. Что такое наследование? класс Двудольные семейство Бобовые род Клевер горный клевер наследует свойства (имеет все свойства)
- 39. Иерархия логических элементов Логический элемент с одним входом с двумя входами НЕ Объектно-ориентированное программирование – это
- 40. Базовый класс class TLogElement: def __init__ ( self ): self.__in1 = False self.__in2 = False self._res
- 41. Базовый класс class TLogElement: def __init__( self ): self.__in1 = False self.__in2 = False self._res =
- 42. Метод calc class TLogElement: ... def calc ( self ): pass заглушка
- 43. Абстрактный класс Абстрактный метод – это метод класса, который объявляется, но не реализуется в классе. Абстрактный
- 44. Абстрактный класс class TLogElement: def __init__ ( self ): self.__in1 = False self.__in2 = False self._res
- 45. Что такое полиморфизм? греч.: πολυ — много, μορφη — форма Полиморфизм – это возможность классов-наследников по-разному
- 46. Элемент «НЕ» class TNot ( TLogElement ): def __init__ ( self ): TLogElement.__init__ ( self )
- 47. Элемент «НЕ» n = TNot() n.In1 = False print ( n.Res ) Использование: создание объекта установка
- 48. Элементы с двумя входами class TLog2In ( TLogElement ): pass наследник от TLogElement нельзя, он абстрактный
- 49. Элементы с двумя входами class TAnd ( TLog2In ): def __init__ ( self ): TLog2In.__init__ (
- 50. Пример: элемент «И-НЕ» elNot = TNot() elAnd = TAnd() print ( " A | B |
- 51. Модульность class TLogElement: ... class TNot ( TlogElement ): ... class TLog2In ( TLogElement ): pass
- 52. Модульность В основную программу: import logelement elNot = logelement.TNot() elAnd = logelement.TAnd() ...
- 53. Сообщения между объектами class TLogElement: def __init__ ( self ): ... self.__nextEl = None self.__nextIn =
- 54. Сообщения между объектами class TLogElement: ... def __setIn1 ( self, newIn1 ): self.__in1 = newIn1 self.calc()
- 55. Сообщения между объектами elNot = TNot() elAnd = TAnd() elAnd.link ( elNot, 1 ) print (
- 56. Задание «A»: Постройте класс Pet (домашнее животное) с двумя скрытыми полями: __name (имя) и __age (возраст).
- 57. Задание «A»: Пример: from animals import * p = Dog("Шарик", 5) p.gettingOlder() print( p.name + ":",
- 58. Задание «B»: Добавьте класс Mammal (млекопитающее) – наследник класса Pet и предок для классов Cat и
- 59. Задание «C»: Добавьте класс Reptilia (рептилии) – наследник класса Pet и предок для новых классов Turtle
- 60. Задание «A»: Собрать полную программу и построить таблицу истинности последовательного соединения элементов «ИЛИ» и «НЕ». Пример:
- 61. Задание «B»: Добавить в иерархию классов элементы «И-НЕ» (TNAnd) и «ИЛИ-НЕ» (TNOr), которые представляют собой последовательные
- 62. Задание «C»: Добавить в иерархию классов элемент «исключающее ИЛИ» (TXor) и «импликация» (TImp). Построить их таблицы
- 64. Скачать презентацию