питон. ООП_на_Python_Учебное пособие_var5a. Методическое пособие по дисциплине Введение в компьютерные технологии Москва Физический факультет мгу имени м в ломоносова 2022
Скачать 0.51 Mb.
|
Задорожный С С ., Фадеев Е П Объектно - ориентированное программирование на языке Python Учебно - методическое пособие по дисциплине « Введение в компьютерные технологии » Москва Физический факультет МГУ имени М В Ломоносова 2022 2 ЗадорожныйСергейСергеевич, ФадеевЕгорПавлович Объектно-ориентированноепрограммированиенаязыке Python М. : Физический факультет МГУ им. М. В. Ломоносова, 2022. – 49 с. В последнее время языки сценариев, такие как Python, набирают популярность. На них написано больше программного обеспечения, чем на традиционных системных языках. Язык Python доступен для всех основных платформ и активно применяется в научных вычислениях, машинном обучении, веб-разработке, создании игр и визуальных эффектов, и ряде других направлений. Язык Python позволяет писать программы в традиционном процедурном стиле, однако крупные проекты имеет смысл разрабатывать, используя парадигму объектно-ориентированного программирования (ООП). В языке Python ООП играет ключевую роль, т.к. практически все сущности языка представляют собой объекты. По сравнению со многими другими языками в Python объектно-ориентированное программирование обладает рядом особых черт, которые следует внимательно рассмотреть при освоении языка. Целью пособия является помощь студентам по освоению этих особенностей. Рассмотрен ряд программ иллюстрирующих создание собственных классов. Приведен обширный список литературы (в том числе и интернет ресурсов), который поможет выбрать наиболее подходящее издание в соответствии с пожеланиями и уровнем подготовки. Пособие поможет студентам более самостоятельно и оперативно решать задачи практикума по программированию. Рассчитано на студентов первого и второго курсов физического факультета, но может быть полезно студентам старших курсов, аспирантам и сотрудникам, занимающимися разработкой программного обеспечения на языке Python. Авторы – сотрудники кафедры математического моделирования и информатики физического факультета МГУ. Рецензенты: доцент кафедры ОФиВП Коновко А.А., ведущий электроник каф. ОФиВП Лукашев А.А. Подписано в печать . Объем 3,5 п.л. Тираж 30 экз. Заказ № . Физический факультет им. М. В. Ломоносова, 119991 Москва, ГСП-1, Ленинские горы, д. 1, стр. 2. Отпечатано в отделе оперативной печати физического факультета МГУ. ©Физический факультет МГУ им. М. В. Ломоносова, 2022 ©Фадеев Е.П., 2022 ©Задорожный С.С., 2022 3 Оглавление 1. Введение ................................................................................................................... 4 2. Типы данных. Переменные. ................................................................................... 5 3. Вывод данных. Функция print().............................................................................. 6 4. Ввод данных. Функция input() ................................................................................ 7 5. Логические выражения и условные операторы .................................................... 7 6. Списки ...................................................................................................................... 9 7. Циклы...................................................................................................................... 10 8. Функции ................................................................................................................. 13 9. Модули ................................................................................................................... 15 10. Объектно-ориентированное программирование ............................................ 17 11. Создание классов и объектов ............................................................................ 18 12. Наследование...................................................................................................... 21 13. Множественное наследование .......................................................................... 23 14. Перегрузка операторов ...................................................................................... 23 15. Абстрактные методы ......................................................................................... 26 Ограничение доступа к атрибутам класса .............................................................. 28 16. ..................................................................................................................................... 28 17. Полиморфизм ..................................................................................................... 28 18. Композиция ........................................................................................................ 29 19. Статические методы .......................................................................................... 30 20. Примеры объектно-ориентированных программ на Python .......................... 31 • Класс рациональных дробей ............................................................................. 32 • Класс «Студент» ................................................................................................ 33 • Виртуальная модель процесса обучения ......................................................... 34 • Игра-стратегиия «Солдаты и герои» ................................................................ 34 • Класс «Битва» ..................................................................................................... 36 • Класс «Колода карт» .......................................................................................... 37 • Класс «Паспорт» ................................................................................................ 38 • Класс «Склад оргтехники» ................................................................................ 39 • Задача трёх тел ................................................................................................... 40 21. Задания для самостоятельного решения .......................................................... 42 22. Литература .......................................................................................................... 49 • Сайты: ................................................................................................................. 49 • Онлайн IDE/VM ................................................................................................. 49 • Ресурсы о популярных дополнениях ............................................................... 49 4 1. Введение Python (в русском программистском сообществе прижилось название «Питон», но правильнее будет «Пайтон») – это язык с динамической типизацией данных, который поддерживает многие парадигмы программирования: процедурное, ООП, функциональное. Достоинства языка: • Удобный синтаксис. • Скорость разработки. • Большое количество "сахара" от разработчиков языка. • Кроссплатформенность (достаточно наличия необходимых библиотек и интерпретатора, чтобы запустить вашу программу на другой ОС). • Большое количество библиотек позволяет не изобретать велосипеды. • Широко используется (компания Google использует Python в своей поисковой системе, компании Intel, Cisco, Hewlett-Packard, Seagate, Qualcomm, IBM используют Python для тестирования аппаратного обеспечения, компании JPMorgan Chase, UBS, Getco и Citadel применяют Python для прогнозирования финансового рынка, , служба коллективного использования видеоматериалов YouTube и популярная программа BitTorrent для обмена файлами в пиринговых сетях тоже написаны на языке Python, NASA, Los Alamos, JPL и Fermilab используют Python для научных вычислений). Циклы, ветвления и функции – все это элементы структурного программирования. Его возможностей вполне хватает для написания небольших, простых программ и сценариев. Однако крупные проекты часто реализуют, используя парадигму объектно- ориентированного программирования (ООП). В языке Python ООП играет ключевую роль. Даже программируя в рамках структурной модели, вы все равно пользуетесь объектами и классами, пусть даже встроенными в язык, а не созданными лично вами. В Python все объекты являются производными классов и наследуют от них атрибуты. При этом каждый объект формирует собственное пространство имен. Python поддерживает такие ключевые особенности объектно-ориентированного программирования как наследование, инкапсуляцию и полиморфизм. Полиморфизм позволяет объектам разных классов иметь схожие интерфейсы. Он реализуется путем объявления в них методов с одинаковыми именами. К проявлению полиморфизма как особенности ООП также можно отнести методы перегрузки операторов. Кроме наследования, инкапсуляции и полиморфизма существуют другие особенности ООП. Таковой является композиция, или агрегирование, когда класс включает в себя вызовы других классов. В результате при создании объекта от класса-агрегата, создаются объекты других классов, являющиеся составными частями первого. Преимущества ООП Особенности объектно-ориентированного программирования наделяют его рядом преимуществ. Так ООП позволяет использовать один и тот же программный код с разными данными. На основе классов создается множество объектов, у каждого из которых могут быть собственные значения полей. Нет необходимости вводить множество переменных, т.к. объекты получают в свое распоряжение индивидуальные пространства имен. В этом смысле объекты похожи на структуры данных. Объект можно представить в виде некой упаковки данных, к которой присоединены инструменты для их обработки – методы. Наследование позволяет не писать новый код, а использовать и настраивать уже существующий за счет добавления и переопределения атрибутов. 5 Недостатки ООП ООП позволяет оптимизировать дальнейшую поддержку разрабатываемого приложения, однако предполагает большую роль предварительного анализа предметной области и проектирования. От правильности решений на этом этапе зависит куда больше, чем от непосредственного написания исходного кода. Следует понимать, что одна и та же задача может быть решена разными объектными моделями, каждая из которых будет иметь свои преимущества и недостатки. Только опытный разработчик может сказать, какую из них будет проще расширять и обслуживать в дальнейшем. Особенности ООП в Python По сравнению со многими другими языками в Python объектно-ориентированное программирования обладает рядом особых черт. Всё является объектом – число, строка, список, функция, экземпляр класса, сам класс, модуль. Так класс – объект, способный порождать другие объекты – экземпляры. В Python нет просто типов данных. Все типы – это классы. Инкапсуляции в Python не уделяется особого внимания. В других языках программирования обычно нельзя получить напрямую доступ к свойству, описанному в классе. Для его изменения может быть предусмотрен специальный метод. В Python же не считается предосудительным непосредственное обращение к свойствам. 2. Типыданных. Переменные. В реальной жизни мы совершаем различные действия над окружающими нас предметами, или объектами. Мы меняем их свойства, наделяем новыми функциями. По аналогии с этим компьютерные программы также управляют объектами, только виртуальными, цифровыми. Будем называть такие объекты данными. Очевидно, данные бывают разными. Часто компьютерной программе приходится работать с числами и строками. Числа в свою очередь также бывают разными: целыми, вещественными, могут иметь огромное значение или очень длинную дробную часть. При знакомстве с языком программирования Python мы столкнемся с тремя типами данных: • целые числа (тип int) – положительные и отрицательные целые числа, а также 0 (например, 4, 687, -45, 0). • числа с плавающей точкой (тип float ) – дробные, они же вещественные, числа (например, 1.45, -3.789654, 0.00453). • строки (тип str) — набор символов, заключенных в кавычки (например, "ball", "What is your name?", 'dkfjUUv', '6589'). Кавычки в Python могут быть одинарными или двойными. Одиночный символ в кавычках также является строкой, отдельного символьного типа в Python нет. Данные хранятся в памяти компьютера. Когда мы вводим число, оно помещается в какую-то ячейку памяти. Но как потом узнать, куда именно? Механизм связи между переменными и данными может различаться в зависимости от языка программирования и типов данных. Для этого данные связываются с каким-либо именем и в дальнейшем обращение к ним возможно по этому имени – переменной. Слово "переменная" обозначает, что сущность может меняться, она непостоянна. Одна и та же переменная может быть связана сначала с одними данными, а потом – с другими. То есть ее значение может меняться, она переменчива. В программе на языке Python, как и на большинстве других языков, связь между данными и переменными устанавливается с помощью знака =. Такая операция называется 6 присваивание. Например, выражение sq = 4 означает, что на объект, представляющий собой число 4, находящееся в определенной области памяти, теперь ссылается переменная sq, и обращаться к этому объекту следует по имени sq. Обратите внимание на эту особенность переменных в Python. Если теперь написать sq=1, то sq будет ссылаться на другойобъект, представляющий собой число 1. Т.е. все переменные в Python являются ссылками, переменных закрепленных за фиксированным адресом памяти (как в языке С) нет, соответственно нет и указателей. 3. Выводданных. Функция print() Для вывода данных на экран используется функция print(). Можно передавать в функцию print() как непосредственно литералы, так и переменные, вместо которых будут выведены их значения. Аргументы функции разделяются между собой запятыми. В выводе вместо запятых значения разделены пробелом. Если в скобках стоит выражение, то сначала оно выполняется, после чего print() уже выводит результат данного выражения: print( "hello" + " " + "world" ) # вывод: hello world print(10 - 2.5/2) # вывод: 8.75 В функции предусмотрены дополнительные параметры. Например, через параметр sep можно указать отличный от пробела разделитель строк: print( "Mon" , "Tue" , "Wed" , "Thu" , "Fri" , "Sat" , "Sun" , sep= "-" ) #вывод: Mon-Tue-Wed-Thu-Fri-Sat-Sun print(1, 2, 3, sep= "//" ) #вывод: 1//2//3 Параметр end позволяет указывать, что делать, после вывода строки. По умолчанию происходит переход на новую строку. Однако это действие можно отменить, указав любой другой символ или строку: print(10, end= ":" ) # вывод: 10: В функцию print() нередко передаются так называемые форматированные строки, хотя по смыслу их правильнее называть строки-шаблоны. Никакого отношения к самой print()они не имеют. Когда такая строка находится в скобках print(), интерпретатор сначала согласно заданному в ней формату преобразует ее к обычной строке, после чего передает результат в print(). Форматирование может выполняться в так называемом старом стиле или с помощью строкового метода format. Старый стиль также называют Си-стилем, так как он схож с тем, как происходит вывод на экран в языке C: pupil = "Ben" old = 16 grade = 9.2 print( "It's %s, %d. Level: %.2f" % (pupil, old, grade)) # вывод: It's Ben, 16. Level: 9.20 Здесь вместо трех комбинаций символов %s, %d, %f подставляются значения переменных pupil, old, grade. Буквы s, d, f обозначают типы данных – строку, целое число, вещественное число. Теперь посмотрим на метод format(): print( "This is a {0}. It's {1}." .format( "ball" , "red" )) # вывод: This is a ball. It's red. print( "This is a {0}. It's {1}." .format( "cat" , "white" )) # вывод: This is a cat. It's white. print( "This is a {0}. It's {1} {2}." .format(1, "a" , "number" )) # вывод: This is a 1. It's a number. В строке в фигурных скобках указаны номера данных, которые будут сюда подставлены. Далее к строке применяется метод format(). В его скобках указываются сами данные (можно использовать переменные). На нулевое место подставится первый аргумент метода format(), на место с номером 1 – второй и т. д. 7 В новых релизах Питона появился третий способ создания форматированных строк – f-строки. Перед их открывающей кавычкой прописывается буква f. В самой строке внутри фигурных скобок записываются выражения на Python, которые исполняются, когда интерпретатор преобразует строку-шаблон в обычную. a = 10 b = 1.33 c = 'Box' print( f'qty - {a:5}, goods - {c}' ) # вывод: qty - 10, goods - Box print( f'price - {b + 0.2:.1f}' ) # вывод: price - 1.5 В примере число 5 после переменной a обозначает количество знакомест, отводимых под вывод значения переменной. В выражении b + 0.2:.1f сначала выполняется сложение, после этого значение округляется до одного знака после запятой. 4. Вводданных. Функция input() За ввод в программу данных с клавиатуры в Python отвечает функция input() . Когда вызывается эта функция, программа останавливает свое выполнение и ждет, когда пользователь введет текст. После того, как он нажмет клавишу Enter, функция input() заберет введенный текст и передаст его программе. Их можно присвоить переменной. town=input() user=input() print( f'Вас зовут {user}. Ваш город {town}' ) Чтобы не вводить человека в замешательство, для функции input() предусмотрен специальный параметр-приглашение. Это приглашение выводится на экран при вызове input(): town=input( "Ваш город:" ) user=input( "Ваше имя:" ) print( f'Вас зовут {user}. Ваш город {town}' ) Обратите внимание, что в программу поступает строка. Даже если ввести число, функция input() все равно вернет его строковое представление. Чтобы получить число, надо использовать функции преобразования типов. qty= int (input( "Количество:" )) price= float (input( "Цена:" )) print( f'Заплатите {qty*price} рублей' ) В данном случае с помощью функций int() и float() строковые значения переменных qty и price преобразуются соответственно в целое число и вещественное число. |