
МИНОБРНАУКИ РОССИИ
САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
«ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА)
Кафедра ис
ОТЧЕТ
По лабораторной работе №6
по дисциплине «Объектно-ориентированное программирование»
Студенты гр.
Преподаватель Егоров С. С.
Санкт-Петербург 2024
Задание на практическую работу
Рисунок 1- Диаграмма классов работы №6
Создать распределенное приложение, включающее клиентскую и серверную части, взаимодействующие посредством сетевого обмена сообщениями.
Клиентские и серверные части представляют собой приложения, реализованные в работе №5.
Клиентская часть модифицируется таким образом, что реализованные функции матриц могут исполняться по желанию пользователя на областях определения: вещественная, комплексная и рациональная.
Отличие серверной части заключается в том, что классы «Матрица» и «Квадратная матрица» параметризуются. Параметром класса делается абстрактный тип number, при этом файл number.h исключается из серверного приложения
Реализовать и отладить программу, удовлетворяющую сформулированным требованиям и заявленным целям. Разработать контрольные примеры и оттестировать на них программу. Оформить отчет, сделать выводы по работе.
Выполнение работы Спецификация классов
Класс 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.
Класс TComplex – класс, предназначенный для работы с комплексными
числами.
str: является «магическим» методом в python, перегружающим приведение
типа к строке, возвращает строковое представление комплексного числа, на вход
ничего не принимает, возвращает str.
abs: является «магическим» методом в python, перегружающим ф-ию abs(),
возвращает возвращает объект класса TComplex, на вход ничего не принимает.
eq: является «магическим» методом в python, перегружающим оператор ==,
проверяет равенство двух комплексных чисел, на вход ничего не принимает,
возвращает bool.
ne: является «магическим» методом в python, перегружающим оператор !=,
проверяет неравенство двух комплексных чисел, на вход ничего не принимает,
возвращает bool.
add: является «магическим» методом в python, перегружающим оператор +,
выполняет сложение двух комплексных чисел, на вход принимает второе
слагаемое, принадлежащее классу TComplex, возвращает объект класса TComplex.
mul: является «магическим» методом в python, перегружающим оператор *,
выполняет умножение двух комплексных чисел, на вход принимает второй
множитель, принадлежащий классу TComplex, возвращает объект класса
TComplex.
sub: является «магическим» методом в python, перегружающим оператор -,
выполняет вычитание двух комплексных чисел, на вход принимает второй
множитель, принадлежащий классу TComplex, возвращает объект класса
TComplex.
truediv: является «магическим» методом в python, перегружающим
оператор /, выполняет деление двух комплексных чисел, на вход принимает
делитель, принадлежащий классу TComplex, возвращает объект класса TComplex.
Класс TInterface - класс, отвечающий за работу пользователя с графическим интерфейсом и отображением матрицы в нём. Является классом-наследником класса QWidget.
Атрибуты класса:
matrix: тип Matrix, приватный, содержит объект матрицы;
centralwidget: тип Qwidget, приватный, содержит виджет интерфейса;
size_label, result_label: тип QLabel, приватные, содержат ярлыки с надписью «Размер:» и «Результат»;
hor_size, vert_size: тип int, приватные, хранят горизонтальные и вертикальные размеры матрицы;
hor_size_label, vert_size_label: тип QLabel, приватные, содержат ярлыки с надписями «Гор. размер» и «Верт. размер»;
hor_size_le, vert_size_le: тип QLineEdit, приватные, содержат поля для ввода размера;
result_le: тип QLineEdit, приватный, содержит поле для вывода результата операции;
type: тип str, приватный, устанавливает тип данных объекта;
rat_rq, real_rq, compl_rq: тип QRadioButton, представляет кнопку с текстовой меткой, пользователь может выбрать один из представленных типов данных;
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;
real_rq_clicked, rat_rq_clicked, compl_rq_clicked: приватные методы, вызываются при щелчке по соответствующей кнопке и обновляют выбор типа данных, устанавливает флаг для выбранного типа данных и сбрасывает для других, обновляет значение атрибута type;
Класс 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-соединение на адрес хоста и порт клиента.