Скачиваний:
0
Добавлен:
28.12.2024
Размер:
611.12 Кб
Скачать

МИНОБРНАУКИ РОССИИ

САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

«ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА)

Кафедра ис

ОТЧЕТ

По лабораторной работе №5

по дисциплине «Объектно-ориентированное программирование»

Студенты гр.

Преподаватель Егоров С. С.

Санкт-Петербург 2024

Задание на практическую работу

Рисунок 1- Диаграмма классов работы №5

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

Клиентские и серверные части представляют собой приложения, реализованные в работе №4.

Отличие заключается в том, что класс «Квадратная матрица» делается наследником класса «Матрица» с произвольным числом строк и столбцов (отношение обобщения). Это влечет за собой перенос некоторых атрибутов и методов класса «Квадратная матрица» в родительский класс «Матрица», что и предстоит сделать в этой работе.

Реализовать и отладить программу, удовлетворяющую сформулированным требованиям и заявленным целям. Разработать контрольные примеры и оттестировать на них программу. Оформить отчет, сделать выводы по работе.

Выполнение работы Спецификация классов

Класс Matrix – класс, задающий по умолчанию единичную матрицу 3х3. Атрибуты класса:

data: тип array[array[number]], приватный, содержит числовые данные матрицы.

Методы класса:

getitem: публичный метод для доступа к элементам матрицы через оператор []. Возвращает строку матрицы по индексу. Является «магическим» методом python, перегружающим оператор [].

get_number_of_rows: публичный метод, возвращающий число строк в матрице.

get_number_of_columns: публичный метод, возвращающий число столбцов в матрице.

det_count: приватный рекурсивный метод для вычисления определителя матрицы, на вход получает array[array[number]], возвращает number.

det: публичный метод для нахождения определителя матрицы, возвращает number.

print: публичный метод для вывода матрицы на печать, ничего не принимает и не возвращает.

rank: метод для расчета ранга матрицы, возвращает ранг матрицы (integer).

transpose: метод для транспонирования матрицы, ничего не принимает и не возвращает, изменяет атрибут data .

set_data: метод для ввода новых данных в матрицу, на вход принимает array[array[number]], ничего не возвращает, изменяет атрибут data.

Класс SquaredMatrix

Является наследником класса Matrix.

Атрибуты класса:

get_minor: приватный вспомогательный метод для получения k- ого минора матрицы, принимает на вход число k, возвращает array[array[number]].

det_count: приватный рекурсивный метод для вычисления определителя матрицы, на вход получает array[array[number]], возвращает number.

Класс TRational – класс, предназначенный для работы с рациональными числами.

Атрибуты класса:

num: int, числитель дроби, приватный;

denom: int, знаменатель дроби, приватный.

Методы класса:

eq: является «магическим» методом в python, перегружающим оператор ==,

проверяет равенство двух рациональных чисел, на вход ничего не принимает,

возвращает bool.

ne: является «магическим» методом в python, перегружающим оператор !=,

проверяет неравенство двух рациональных чисел, на вход ничего не принимает,

возвращает bool.

abs: является «магическим» методом в python, перегружающим функцию abs(),

возвращает модуль рационального числа, на вход ничего не принимает.

str: является «магическим» методом в python, перегружающим приведение

типа к строке, возвращает строковое представление рационального числа, на вход

ничего не принимает, возвращает str.

mul: является «магическим» методом в python, перегружающим оператор *,

выполняет умножение двух рациональных чисел, на вход принимает второй

множитель, принадлежащий классу TRational, возвращает объект класса

TRational.

add: является «магическим» методом в python, перегружающим оператор +,

выполняет сложение двух рациональных чисел, на вход принимает второе

слагаемое, принадлежащее классу TRational, возвращает объект класса TRational.

sub: является «магическим» методом в python, перегружающим оператор -,

выполняет вычитание двух рациональных чисел, на вход принимает второй

множитель, принадлежащий классу TRational, возвращает объект класса

TRational.

truediv: является «магическим» методом в python, перегружающим

оператор /, выполняет деление двух рациональных чисел, на вход принимает

делитель, принадлежащий классу TRational, возвращает объект класса TRational.

nod: вспомогательный метод, использующийся для поиска НОД, на вход ничего не принимает, возвращает целочисленное значение – НОД числителя и знаменателя.

reduce: вспомогательный метод для сокращения дроби. На вход ничего не принимает, возвращает сокращенную дробь.

gt: принимает на вход второе рациональное число, сравнивает их и возвращает bool.

Класс TInterface - класс, отвечающий за работу пользователя с графическим интерфейсом и отображением матрицы в нём. Является классом-наследником класса QWidget.

Атрибуты класса:

matrix: тип Matrix, приватный, содержит объект матрицы;

centralwidget: тип Qwidget, приватный, содержит виджет интерфейса;

size_label, result_label: тип QLabel, приватные, содержат ярлыки с надписью «Размер:» и «Результат»;

size_le, result_le: тип QLineEdit, приватные, содержат поля для ввода размера и вывода результата операции соответственно;

save_size_pb, save_matrix_pb, transpose_pb, det_pb, rank_pb: тип QPushButton, приватные, содержат кнопки для сохранения размера матрицы, сохранения самой матрицы, её транспонирования, вывода определителя и ранга;

tableWidget: приватный, тип QTableWidget, используется для отображения элементов матрицы и записи новых элементов.

Методы класса:

setupUI: приватный метод, используемый для создания и отображения всех элементов, принимает void, возвращает void;

saveMatrix: публичный метод, сохраняющий новую матрицу, принимает void, возвращает void;

save_new_size: публичный метод, изменяющий размер матрицы, принимает void, возвращает void;

show_det: публичный метод, отображающий определитель матрицы в поле result_le, принимает void, возвращает void;

show_rank: публичный метод, отображающий ранг матрицы в поле result_le, принимает void, возвращает void;

transpose: публичный метод, транспонирующий матрицу, принимает void, возвращает void.

Класс TApplication (серверная часть) Является наследником класса QCoreApplication.

Атрибуты:

communicator: объект класса TCommunicator, приватный, служит для приёма и передачи сообщений.

Методы:

receive_message: обрабатывает полученное сообщение от TCommunicator.

send_message: отправляет сообщение на сервер.

Класс TApplication (клиентская часть)

Является наследником класса QApplication.

Атрибуты:

communicator: объект класса TCommunicator, приватный, служит для приёма и передачи сообщений.

interface: объект класса TInterface, приватный, отвечает за отображение интерфейса.

Методы:

read_matrix: возвращает строковое представление матрицы, считанной из интерфейса приложения, приватный.

transpose: транспонирует матрицу и отправляет результат через объект класса Tcommunicator, приватный.

show_det: вычисляет определитель матрицы и отправляет результат через объект класса Tcommunicator, приватный

show_rank: вычисляет ранг матрицы и отправляет результат через объект класса Tcommunicator, приватный.

receive_message: слот, обрабатывает полученный сигнал (recieve_signal) от TCommunicator, разбирает операцию и данные, и вызывает соответствующие методы интерфейса для отображения результата.

Класс Tcommunicator (клиентская часть)

Часть клиентской стороны приложения, ответственную за взаимодействие с сервером посредством сетевого соединения, является наследником класса QUdpSocket.

Атрибуты:

recieve_signal: pyqtSygnal, является qt-сигналом.

my_port: int, приватный, служит для хранения собственного порта.

server_port: int, приватный, служит для хранения порта сервера

host: QHostAddress, приватный, служит для хранения адреса хоста.

Методы:

receive_message: обрабатывает входящие сообщения от сервера. При наличии ожидающих датаграмм считывает их, декодирует и отправляет сигнал с полученным сообщением.

send_message: отправляет сообщение на сервер. Кодирует сообщение, чтобы передать его через UDP-соединение на адрес хоста и порт сервера.

Класс Tcommunicator (серверная часть)

Часть серверной стороны приложения, ответственную за взаимодействие с клиентами посредством сетевого соединения, является наследником класса QUdpSocket.

Атрибуты:

recieve_signal: pyqtSygnal, является qt-сигналом.

my_port: int, приватный, служит для хранения собственного порта.

client_port: int, приватный, служит для хранения порта клиента.

host: QHostAddress, приватный, служит для хранения адреса хоста.

Методы:

receive_message: обрабатывает входящие сообщения от сервера. При наличии ожидающих датаграмм считывает их, декодирует и отправляет сигнал с полученным сообщением.

send_message: отправляет сообщение клиенту. Кодирует сообщение, чтобы передать его через UDP-соединение на адрес хоста и порт клиента.

Соседние файлы в предмете Объектно ориентированное программирование