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

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

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

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

Кафедра ИС

ОТЧЕТ

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

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

Студенты гр.

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

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

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

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

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

Клиентская часть представляет собой GUI приложение, реализующее интерфейс аналогичный работе №3.

Серверная часть представляет собой консольное приложение, предназначенное для выполнения перечисленных в меню работы №1 функций над квадратной матрицей с рациональными элементами.

Диаграммы классов для клиентского и серверного приложений представлены на рисунке.

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

*) Класс "Коммуникатор" на основе сетевого протокола Udp с использованием конструкторских классов библиотеки классов Qt и пример его использования прилагаются к работе в виде исходных кодов. 

Выполнение работы

Спецификация классов

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

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

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

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

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

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

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

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

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

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

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

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

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

Класс 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 (серверная часть)

communicator:

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

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

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

communicator:

interface:

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

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

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

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

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

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

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

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

my_port:

client_port:

host:

Диаграмма классов

Серверная часть:

Клиентская часть:

Рисунок 2 - диаграмма классов

Описание контрольных примеров с исходными и ожидаемыми данными

Пример 1. Определитель и ранг матрицы.

Исходные данные:

Ожидаемые данные:

Определитель = ¾, ранг = 2.

Результат:

Пример 2. Транспонирование матрицы.

Исходные данные:

Ожидаемые данные:

Результат:

Вывод

В результате выполнения практической работы была разработана программа, состоящая из двух частей: клиентской и серверной частей. Эти компоненты успешно взаимодействуют друг с другом через обмен сообщениями по сети. Создание такого приложения демонстрирует понимание принципов работы сетевых технологий и навыки программирования для обеспечения эффективного обмена данными между различными узлами системы.

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