ЛАБОРАТОРНАЯ РАБОТА № 26




Отчёт

по лабораторной работе №26

по дисциплине «Языки программирования»

 

тема: «Python и ООП. Проектирование и реализация классов. Создание и манипулирование объектами»

 

 

Исполнитель:   студент группы 10701120 Ковальчук Владислав Олегович  
  Преподаватель:     Иванченко Виктор Викторович

 

 

2020-2021 учебный год

ЛАБОРАТОРНАЯ РАБОТА № 26

ОСНОВЫОБЪЕКТ-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ PYTHON. КЛАССЫИ ОБЪЕКТЫ

Цель работы:

Изучить основы методологии объектно-ориентированного программирования на языке Python; приобрести объектное мышление и научиться проектировать и описывать классы соответствующей предметной области; на базе описанных классов создавать и инициализировать объекты; практически закрепить полученные знания при решении соответствующих задач.

Основное задание:

Необходимо решить задачу с использованием методологии ООП. Для чего необходимо подобрать самостоятельно соответствующую проблемную (предметную/доменную) область, которая базируется на объектах и событиях реального мира (примеры соответствующих предметных областей приведены ниже). Спроектировать классы (пользовательские типы данных) в языке Python для программного представления данных объектов и основной логики будущей программной системы. Программа должна решать, как минимум, два полезных действия и иметь дополнительно следующие вещи:

- не менее 3 разнообразных классов предметной области;

- не менее 5 атрибутов (состояния) в каждом соответствующем классе-сущности;

- не менее 3 методов (поведения) в соответствующих функциональных классах для реализации полезной бизнес-логики.

Требования к выполнению:

1) Необходимо спроектировать UML-диаграмму взаимодействия классов и объектов создаваемой программной системы. На базе данной UML-диаграммы реализовать рабочее приложение с использованием архитектурного шаблона проектирования MVC.

2) Каждый класс разрабатываемого приложения должен иметь адекватное осмысленное имя (обычно это имя существительное). Имена полей и методов должны нести также логический смысл (имя метода, который что-то вычисляет, обычно называют глаголом, а поле – именем существительным). Имя класса пишется с большой (заглавной) буквы, а имена методов и переменных – с маленькой (строчной).

3) Соответствующие классы должны группироваться по модулям, которые затем подключаются там, где происходит создание объектов классов и их использование.

4) При проектировании классов необходимо придерживаться принципа единственной ответственности (Single Responsibility Principle), т.е. классы должны проектироваться и реализовываться таким образом, чтобы они были слабо завязаны с другими классами при своей работе – они должны быть самодостаточными.

5) При выполнении заданий необходимо по максимуму пытаться разрабатывать универсальный, масштабируемый, легко поддерживаемый и читаемый код.

6) В соответствующих компонентах (классах, функциях) бизнес-логики необходимо предусмотреть «защиту от дурака».

7) Рекомендуется избегать использования глобальных переменных.

8) Там, где это необходимо, необходимо обеспечить грамотную обработку исключительных ситуаций, которые могут произойти при выполнении разработанной программы.

9) Все действия, связанные с демонстрацией работы приложения, должны быть размещены в главном модуле программы в функции main. При проверки работоспособности приложения необходимо проверить все тестовые случаи.

10) Программы должны обязательно быть снабжены комментариями на английском языке, в которых необходимо указать краткое предназначение программы, номер лабораторной работы и её название, версию программы, ФИО разработчика, номер группы и дату разработки. Исходный текст программного кода и демонстрационной программы рекомендуется также снабжать поясняющими краткими комментариями.

11) Программа должна быть снабжены дружелюбным и интуитивно понятным интерфейсом для взаимодействия с пользователем. Интерфейс программы должен быть на английском языке.

12) При разработке программы придерживайтесь соглашений по написанию кода на Python (Python Code Convention ).


Описание предметной области:

Предметной (проблемной) областью является выставление оценок преподавателем в университете и подсчёт средней оценки успеваемости всех студентов.

В результате анализа предметной области были выделены следующие классы:

· студент (Student) – класс-сущность, описывающий существенные характеристики студента;

· преподаватель (Teacher) – общий класс, в котором описываются и существенные характеристики преподавателя, и некоторая логика выставления оценок студентам, которая зависит от соответствующего состояния (параметров) преподавателя;

· управляющий (University Manager) – функциональный класс, в котором описывается основная бизнес логика приложения – вычисление успеваемости студентов;

· Всевышний (God) – утилитный класс для создания списка студентов, а также представления данного списка в строковом варианте для вывода на консоль.

Ниже на рисунке 1 приведена UML-диаграмма классов заданной предметной (проблемной) области.

Рисунок 1 – UML-диаграмма предметной области


Результаты выполнения основного задания:

Рисунок 2 – Результат тестирования и работы простейшей ООП-программы на Python


Ответы на контрольные вопросы:

1. Что такое ООП? Опишите базовые концепции, которые лежат в основе данной методологии программирования.

2. Для чего было создано ООП? На каких принципах базируется ООП? Опишите их основные идеи?

3. Приведите преимущества и недостатки объектно-ориентированного подхода.

4. Что такое объект и чем характеризуются объекты в ООП?

5. Что такое класс и зачем он нужен? Приведите общее определение класса в ООП. Какая разница между классом и объектом в ООП? Какие разновидности классов существуют в ООП?

6. Как описывается класс в Python?

7. Каким способом можно создать объект (экземпляр класса) в Python?

8. Как можно обратиться к полям и методам объекта? В чём состоит особенность первого аргумента в методах класса?

9. Какой стандартный метод при описании класса необходимо переопределить, чтобы гарантировать, что в тех ситуациях, где требуется строковое представление объекта данного класса, система автоматических вызывала данный метод у ссылочной переменной?

10. Что такое UML? Как с помощью UML можно описать классы и их взаимосвязь друг с другом (т.е. описать UML-диаграмму классов)?


Что я освоил в процессе выполнения лабораторной работы (выводы):

1) Методологию и фундаментальные основы, на которых базируется мир объектно-ориентированного программирования (ООП).

2) Основные столпы (парадигмы) ООП.

3) Преимуществами и недостатками ООП методологии.

4) Характеристики, которые есть у всех объекта в ООП-мире.

5) Процесс описания классов в Python и создание на базе них экземпляров (объектов), а также организация их взаимодействия друг с другом.

6) Правила описания классов, полей и методов.

7) Разницу между непосредственно самим объектом, который создаётся в динамической памяти (heap) и ссылочной переменной, через которую осуществляется манипулирование созданным объектом.

8) Разницу между ссылочными объектами изменяемых и неизменяемых типов.

ПРИЛОЖЕНИЕ A

Листинг исходных кодов классов и программы в целом

Файл student.py

class Student:

def __init__(s, name, age, mark = 0):

s.name = name

s.mark = mark

s.age = age

def __str__(s):

return (s.name + "(age = "

+ str(s.age) + ", mark = "

+ str(s.mark) + ")")

Файл teacher.py

from student import Student

import random

class Teacher:

def grade(s, list_of_student):

for st in list_of_student:

if isinstance(st, Student):

st.mark = random.randint(4, 10)

Файл manager.py

from student import Student

class Manager:

def calculate(s, list_of_student):

avg = 0

count = 0

for st in list_of_student:

if isinstance(st, Student):

avg += st.mark

count += 1

return float(avg / count)

 

Файл god.py

import random

from student import Student

class God:

""" functional class for working with list of students"""

START_ALPHABET_WITH_UPPER_LETTER = 65

END_ALPHABET_WITH_UPPER_LETTER = 91

def create(self, count):

names = ["Alexander", "Pavel", "Artyom", "Michael",

"Olya", "Nastya", "Kirill", "Stas", "Nikita",

"Oleg", "Max", "Ilya", "Sergey", "Alexey"]

list_of_student = []

for i in range(count + 1):

name = random.choice(names)

name += " " + chr(random.randint(

God.START_ALPHABET_WITH_UPPER_LETTER,

God.END_ALPHABET_WITH_UPPER_LETTER)) + "."

age = random.randint(17, 19)

student = Student(name, age)

list_of_student.append(student)

return list_of_student

def convert_to_string(self, list_of_student):

string = "List of student:\n"

for student in list_of_student:

if isinstance(student, Student):

string += str(student) + "\n"

return string

Файл main.py

 

from god import God

from teacher import Teacher

from manager import Manager

def main():

god = God()

list = god.create(10)

print(god.convert_to_string(list))

teacher = Teacher()

teacher.grade(list)

print(god.convert_to_string(list))

manager = Manager()

avg = manager.calculate(list)

print("Avg: %.1f" % avg)

if __name__ == "__main__":

main()



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2021-05-25 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: