Python ооп
Скачать 196.74 Kb.
|
Московский автомобильно-дорожный государственный технический университет (МАДИ) Заочный факультет Кафедра «АСУ» Курсовая работа по дисциплине «Программирование» на тему: «Python ООП» Выполнил: cтудент группы № 3ЗбАСУп Котков Роман Андреевич Проверил: к.т.н. Макаренко Л.Ф. МОСКВА 2020г Содержание Задание Введение Исходный код первого задания Исходный код второго задания Исходный код третьего задания Исходный код четвертого задания Вывод Список использованной литературы Задание Напишите программу, где класс «геометрические фигуры» (Figure) содержит свойство color с изначальным значением white и метод для изменения цвета фигуры, а его подклассы «овал» (Oval) и «квадрат» (Square) содержат методы __init__ для задания начальных размеров объектов при их создании. Создайте следующую программу. Напишите код, описывающий класс Animal: Добавьте атрибут имени животного. Добавьте метод eat(), выводящий “Ням ням.” Добавьте метод makeNoise(), выводящий “[animal name] говорит Гррр.” Добавьте конструктор классу Animal, выводящий “Родилось животное.” Класс Cat: Пусть Animal будет его родительским классом. Метод makeNoise() класса Cat выводит “[animal name] говорит Мяу.” Конструктор для Cat выводит “Родился кот”, а также вызывает родительский конструктор. Класс Dog: Пусть Animal будет его родительским классом. Метод makeNoise() для Dog выводит “[animal name] говорит Гав.” Конструктор Dog выводит “Родилась собака.”, а также вызывает родительский конструктор. Основная программа: Код, создающий кота, двух собак и одно простое животное. Дайте имя каждому животному. Код, вызывающий eat() и makeNoise() для каждого животного. Напишите программу «Зооферма» (смотреть лекцию – презентацию), в которой будет создано несколько объектов класса Critter, а манипулировать ими всеми можно будет с помощью списка. Теперь пользователь должен заботиться не об одном животном, а обо всех обитателях зоофермы. Выбирая пункт в меню, пользователь выбирает действие, которое хотел бы выполнить со всеми животными: покормить их, поиграть с ними или узнать об их самочувствии. Чтобы программа была интереснее, при создании каждого животного следует назначать ему случайно выбранные уровни голода и уныния. Реализовать работу банка (сотрудник, клиент, вклад, кредит). В программе должны быть классы и объекты, принадлежащие разным классам; один объект с помощью метода своего класса должен так или иначе изменять данные другого объекта. Введение Python - это интерпретируемый алгоритмический объектно-ориентированный язык со строгой динамической типизацией, полиморфизм в нем реализован в виде Duck Typing (границы использования объекта определяются его текущим набором методов и свойств). Трансляция питона организована очень схожим с Java образом. Именно, исходник компилируется в байт-код, а затем этот байт-код исполняется. Это сходство настолько велико, что существует реализация Python (Jython), генерирующая Java байт-код для исполнения виртуальной машиной Java. Различие состоит в политике, когда записывать байт-код на диск. Для Java традиционный способ запустить только что написанную программу такой: запускаем компилятор, подсовывая ему исходник - он генерирует байт-код и записывает его в файл. Затем запускаем виртуальную машину, подсовывая ей байт-код - и она его исполняет. Питон же обычно не записывает байт-код на диск. В простейшем случае запуск программы происходит так: мы "скармливаем" исходник интерпретатору; он генерирует байт-код, но оставляет его в памяти, а затем передает виртуальной машине (являющейся частью интерпретатора). Это ускоряет запуск программы за счет отсутствия необходимости записывать байт-код на диск. Однако, при загрузке (импорте) модулей Python пытается сохранить байт-код, чтобы в следующий раз загрузка модуля происходила быстрее. Интерпретатору Python можно подсовывать не только исходники, но и байт-код - он загрузится быстрее. Еще одно сходство с Java - это автоматическое управление памятью. В Python нет new[] и delete[], память отводится и освобождается автоматически. Алгоритм сборки мусора как бы "двухслойный": во-первых, сам интерпретатор реализует reference counting (удаляя объекты, на которые никто не ссылается), во-вторых, есть время от времени запускаемый garbage collector, работающий по более замысловатым алгоритмам (например, reference counting не удалит два объекта, ссылающихся друг на друга, даже если на них больше никто не ссылается). Удобным свойством интерпретатора Python является наличие REPL (read-eval-print loop), то есть возможности вводить языковые конструкции с консоли и тут же получать результат. Это часто используется для проверки каких-нибудь идей или для отладки. Python поддерживает несколько парадигм программирования, в том числе структурное, объектно-ориентированное, функциональное, императивное и аспектно-ориентированное. Основные архитектурные черты — динамическая типизация, автоматическое управление памятью, полная интроспекция, механизм обработки исключений, поддержка многопоточных вычислений и удобные высокоуровневые структуры данных. Код в Python организовывается в функции и классы, которые могут объединяться в модули (они в свою очередь могут быть объединены в пакеты). Эталонной реализацией Python является интерпретатор CPython, поддерживающий большинство активно используемых платформ. Он распространяется под свободной лицензией Python Software Foundation License, позволяющей использовать его без ограничений в любых приложениях, включая проприетарные. Есть реализации интерпретаторов для JVM (с возможностью компиляции), MSIL (с возможностью компиляции), LLVM и других. Проект PyPy предлагает реализацию Python на самом Python, что уменьшает затраты на изменения языка и постановку экспериментов над новыми возможностями. Python — активно развивающийся язык программирования, новые версии (с добавлением/изменением языковых свойств) выходят примерно раз в два с половиной года. Вследствие этого и некоторых других причин на Python отсутствуют стандарт ANSI, ISO или другие официальные стандарты, их роль выполняет CPython. Исходный код первого задания class Figure: color = "White" def changecolor(self,newcolor): self.color = newcolor def __init__(self,f=0, l=0): self.form1 = f self.large = l if f == 0: self.form = "Oval" else: self.form = "Square" obj1 = Figure(int(input("Выберите фигуру 1 (0 = Овал, 1 = Квадрат): ")),int(input("Введите размер фигуры: "))) obj2 = Figure(int(input("Выберите фигуру 2 (0 = Овал, 1 = Квадрат): ")),int(input("Введите размер фигуры: "))) print (obj1.color,obj1.form,obj1.large) # вывод на экран "red circle" print (obj2.color,obj2.form,obj2.large) # вывод на экран "red circle" obj1.changecolor(input("Введите новый цвет для фигуры 1: ")) obj2.changecolor(input("Введите новый цвет для фигуры 2: ")) print (obj1.color,obj1.form,obj1.large) print (obj2.color,obj2.form,obj2.large) Исходный код второго задания class Animal(): name = "" def eat(self): print("Ням, ням.") def makeNoise(self): print(self.name, "говорит Гррр.") def __init__(self): print("Родилось животное.") class Cat(Animal): def makeNoise(self): print(self.name,"говорит Мяу.") def __init__(self): Animal() print("Родился кот.") class Dog(Animal): def makeNoise(self): print(self.name, "говорит Гав.") def __init__(self): Animal() print("Родилась собака.") obj1 = Cat() obj1.name = input("Назовите кота: ") obj1.eat() obj1.makeNoise() print() obj2 = Dog() obj2.name = input("Назовите первую собаку: ") obj2.eat() obj2.makeNoise() print() obj3 = Dog() obj3.name = input("Назовите второю собаку: ") obj3.eat() obj3.makeNoise() print() obj4 = Animal() obj4.name = input("Назовите животное: ") obj4.eat() obj4.makeNoise() print() Исходный код третьего задания import random class Critter(): def __init__(self,name,hunger,boredom): self.name=name self.hunger=hunger self.boredom=boredom print(name,"Голод:", hunger,"Настроение:", boredom) def __passtime(self): self.hunger+=1 self.boredom+=1 @property def mood(self): unhappines=self.hunger+self.boredom if unhappines<5: m="прекрасно" elif 5<=unhappines<10: m="нормально" elif 10<=unhappines<15: m="так себе" else: m="ужасно" return m def talk(self): print("Меня зовут",self.name,end=" ") print(", я чувствую себя",self.mood,"\n") self.__passtime() def eat(self,food=4): print("Мрр") self.hunger-=food if self.hunger<0: self.hunger=0 self.__passtime() def play(self,fun=4): print("Уиии") self.boredom-=fun if self.boredom<0: self.boredom=0 self.__passtime() def main(): n=int(input("Укажите количество зверей: ")) ferma=[Critter(input("Назовите животное: "), random.randint(1,20),random.randint(1,20)) for crit in range(n)] choice=None while choice!=0: print("Меню: 0-выход, 1-самочувствие, 2-кормить, 3-играть") choice=int(input("Ваш выбор: ")) print() if choice==0: print("Пока") elif choice==1: ex=0 while ex if ex==0: print(ex, "Все животные") print(ex+1, ferma[ex].name) ex+=1 ex=int(input("Выберете животное: ")) if ex!=0: ferma[ex-1].talk() else: k=0 while k ferma[k].talk() k+=1 elif choice==2: ex=0 while ex if ex==0: print(ex, "Все животные") print(ex+1, ferma[ex].name) ex+=1 ex=int(input("Выберете животное: ")) if ex!=0: ferma[ex-1].eat() else: k=0 while k ferma[k].eat() k+=1 elif choice==3: ex=0 while ex if ex==0: print(ex, "Все животные") print(ex+1, ferma[ex].name) ex+=1 ex=int(input("Выберете животное: ")) if ex!=0: ferma[ex-1].play() else: k=0 while k ferma[k].play() k+=1 else: print("Нет такого пункта ",choice) main() Исходный код четвертого задания class Person(): def __init__(self,fio): self.fio = fio def __str__(self): return self.fio class Sotrudnik(Person): ''' Класс сотрудник - он же наследник имеет должность - job_title ''' def __init__(self, fio, job_title,): Person.__init__(self, fio) self.job_title = job_title print(self.job_title, "-", self.fio, "\n") def kredit(self, client): self.dolg = client print(self.fio, "оформил кредит \n") def vklad(self, client): self.client = client print(self.fio, "оформил вклад \n") lass Client(Person): ''' Класс клиент, имеет сумму вклада(sum_vklada) сумму кредита (sum_kr) ''' def __init__(self,fio,sum_vklada,sum_kr): Person.__init__(self,fio) self.sum_vklada = sum_vklada self.sum_kr = sum_kr print("Клиент:", self.fio,"Сумма кредита:", self.sum_kr, "Сумма вклада:", self.sum_vklada,"\n") def dohod(self, persent=0.03): ''' Расчитываем сумму дохода где sum_vklada умножается на процент 0.03 ''' self.sum_vklada = float(self.sum_vklada * (1 + persent)) def dolg(self, persent=0.18, amount=0): ''' Расчитываем сумму долга где sum_kr умножается на 0.018 процентов где после sum_kr - вычитаеться из кол-во денег которые мы зададим ''' self.sum_kr = float(self.sum_kr * (1 + persent)) self.sum_kr -= amount def out(self): ''' Вывод таков, что есть определнные клиент self.fio у него сумма долга "self.sum_kr" ''' print("Клиент:", self.fio, "Сумма долга:", self.sum_kr, "Клиент:", self.fio, "Доход:", self.sum_vklada) name_s = input("Введите ФИО сотрудника: ") job_s = input("Введите должность: ") name_c = input("Введите ФИО клиента: ") svk = int(input("Введите сумму вклада: ")) skr = int(input("Введите cумму кредита: ")) obj1 = Sotrudnik(name_s,job_s) obj2 = Client(name_c,svk,skr) obj1.vklad(obj2) obj1.kredit(obj2) obj2.out() input("\n\nНажмите Enter чтобы выйти.") Вывод: Введите ФИО сотрудника: Фитисов А.С Введите должность: гл.Менеджер Введите ФИО клиента: Радионов П.В Введите сумму вклада: 1000 Введите cумму кредита: 10000 Гл.менеджер – Фитисов А.С Клиент: Радионов П.В Сумма кредита: 10000 Сумма вклада: 1000 Фитисов А.С оформил вклад Фитисов А.С оформил кредит Клиент: Радионов П.В Сумма долга: 11800.0 Клиент: Радионов П.В Доход: 1030.0 Выводы В ходе выполнения данной курсовой работы были изучены основные синтаксические конструкции языка Python. ООП позволяет сократить время на написание исходного кода, однако ООП всегда предполагает большую роль предварительного анализа предметной области, предварительного проектирования. От правильности решений на этом предварительном этапе зависит куда больше, чем от непосредственного написания исходного кода. По сравнению с другими распространенными языками программирования у Python можно выделить следующие особенности, связанные с объектно-ориентированным программированием: 1. Любое данное (значение) — это объект. Число, строка, список, массив и др. — все является объектом. Бывают объекты встроенных классов, а бывают объекты пользовательских классов (тех, что создает программист). 2. Класс — это тоже объект с собственным пространством имен 3. Инкапсуляции в Python не уделяется особого внимания. В других языках программирования обычно нельзя получить напрямую доступ к свойству, описанному в классе. Для его изменения может быть предусмотрен специальный метод. В Python же это легко сделать, просто обратившись к свойству класса из вне. Несмотря на это в Python все-таки предусмотрены специальные способы ограничения доступа к переменным в классе. Список использованной литературы Python 3.4.3 documentation // PYTHON.ORG: документация языка программирования Python 3.4.3 – URL: https://docs.python.org/3.4/ Пилигрим М. Dive Into Python. М.: Apress, 2004 г., 413 стр. ISBN 1590593561 Лутц М. Изучаем Python. М.: Символ-Плюс, 2009 г., 848 стр. ISBN 978-5-93286-138-7, 978-0-596-51398-6 |