
МИНОБРНАУКИ РОССИИ
САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
«ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА)
Кафедра ис
ОТЧЕТ
По лабораторной работе №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-соединение на адрес хоста и порт клиента.