Добавил:
https://vk.com/club199197084 Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторные Егоров / 0361_ЦукановаПА_№4

.pdf
Скачиваний:
10
Добавлен:
03.02.2024
Размер:
311.49 Кб
Скачать

МИНОБРНАУКИ РОССИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА) Кафедра информационной безопасности

ПРАКТИЧЕСКАЯ РАБОТА №4

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

 

 

 

Семенова Е.А.

Студенты гр. 0361

 

Цуканова П.А.

Преподаватель

 

 

Егоров С.С.

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

2023

ЗАДАНИЕ НА ПРАКТИЧЕСКУЮ РАБОТУ

Студенты Цуканова П.А., Семенова Е.А. Группа 0361

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

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

СПЕЦИФИКАЦИИ КЛАССОВ

Общая часть:

1. Класс TCommunicator.

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

1. ready, тип атрибута TCommunicator*. Область видимости

private. Поле для хранения адресов и портов сервера и

клиента.

2.params, тип атрибута TCommParams. Область видимости private. Используется для взаимодействия с UDP сокетами.

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

1.

TCommunicator(TCommParams&,

QObject*).

Область

 

видимости

public.

Конструктор

класса,

выделяет

 

динамическую память под атрибуты класса и задает их.

2.

send(QByteArray). Область видимости public

slots.

 

Отправляет сообщение серверу или клиенту.

 

3.

recieve().

Область видимости

public

slots. Принимает

сообщение от сервера или от клиента и вырабатывает сигнал

readed().

4. recieved(QByteArray). Область видимости public signals.

Используется для чтения сообщения от сервера или клиента.

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

1. Класс TApplication.

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

1. TApplication(int, char**). Область видимости public.

Конструктор класса.

2. fromCommunicator(QByteArray). Область видимости public

slots. Вызывается в ответ на сигнал «readed()» от коммуникатора и передает результат работы программы в интерфейс

3. toCommunicator(QString). Область видимости public slots.

Вызывается в ответ на сигнал «request()» от интерфейса и

передает запрос в коммуникатор.

2. Класс TInterface.

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

1.matrix_size, тип атрибута QLabel. Область видимости public. Заголовок поля ввода размера матрицы.

2.matrix_elements, тип атрибута QLabel. Область видимости public. Заголовок поля ввода элементов матрицы.

3.size, тип атрибута QSpinBox. Область видимости public.

Поле ввода размера матрицы.

4.matrix, тип атрибута QTableWidget. Область видимости public. Поле ввода элементов матрицы.

5.matrix_btn, тип атрибута QPushButton. Область видимости public. Кнопка для отправки команды «вывести текущую

матрицу».

6. rank_btn, тип атрибута QPushButton. Область видимости public. Кнопка для отправки команды «вывести ранг текущей матрицы».

7. determinant_btn, тип атрибута QPushButton. Область

видимости public. Кнопка для отправки команды «вывести определитель текущей матрицы».

8. transposed_btn, тип атрибута QPushButton. Область

видимости public. Кнопка для отправки команды «вывести транспонированную текущую матрицу».

9. output, тип атрибута QLabel. Область видимости public.

Неизменяемое текстовое поле для вывода результатов программы.

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

1.TInterface(QWidget*parent=nullptr). Область видимости

public. Конструктор класса.

2.~TInterface(). Область видимости public. Деструктор

класса, реализовывает удаление объекта типа TInterface и

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

3. answer(QString). Область видимости public slots.

Реализует вывод результата работы сервера в GUI приложение.

4. formRequest(). Область видимости private slots.

Формирует сообщение серверу и вырабатывает сигнал request() с сообщением.

5. handleSizeChange(int i). Область видимости public slots.

При вводе нового размера матрицы обновляет текущую матрицу.

6. request(QString). Область видимости public slots.

Используется для передачи сообщения серверу.

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

1. Класс TApplication.

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

1.comm, тип атрибута TCommunicator*. Область видимости

public.

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

1. TApplication(int,char**). Область видимости public.

Конструктор класса, реализует создание объекта типа

TApplication, выделяет динамическую память под атрибуты

класса и задает их.

2.recieve(QByteArray). Область видимости public slots..

2.Класс Matrix.

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

public. Производит

1. size, тип атрибута int. Область видимости private. Поле,

которая хранит значение размера массива.

2.elements, тип атрибута number**. Область видимости private. Поле, хранит в себе элементы матрицы.

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

1. Matrix(). Область видимости public. Конструктор класса,

инициирует создание матрицы по умолчанию.

2. Matrix(int n). Область видимости public. Конструктор класса, инициализирует матрицу заданного размера n.

3. ~Matrix(). Область видимости public. Деструктор класса,

освобождает выделенную динамическую память.

4.inputElement(int i, int j, number el). Атрибуты int i,

int j, number el принимают координаты матрицы и новое

значение элемента. Область видимости ввод нового значения матрицы.

5. print(). Область видимости public. Производит вывод элементов матрицы.

6. determinant(). Область видимости public. Производит расчет определителя матрицы.

7. rank(). Область видимости public. Производит расчет ранга матрицы.

8. transpose(). Область видимости public. Производит транспонирование матрицы.

9.operator=(const Matrix &other). Область видимости

public. Перегрузка оператора присваивания.

3.Класс TRational.

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

1. num, тип атрибута int. Область видимости public. Поле,

которое хранит значение делимого.

2. den, тип атрибута int. Область видимости public. Поле,

которое хранит значение делителя.

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

1. TRational(). Область видимости public. Конструктор класса,

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

2. TRational(int n, int d). int n, int d – значения делимого

и делителя соответственно. Область видимости public.

Конструктор класса, производит создание комплексного числа

с переданными значениями делимого и делителя.

3.TRational(int i). Область видимости public. Конструктор

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

рационального с делителем 1.

4. operator-(const TRational& c). Область видимости public.

Перегрузка оператора вычитания.

5. operator*(const TRational& c). Область видимости public.

Перегрузка оператора умножения.

6. operator/(const TRational& c). Область видимости public.

Перегрузка оператора деления.

7. operator=(const TRational& c). Область видимости public.

Перегрузка оператора присваивания.

8.operator==(const TRational& c). Область видимости

public. Перегрузка оператора сравнения (равенства).

9.operator!=(const TRational& c). Область видимости

public. Перегрузка оператора сравнения (неравенства).

ДИАГРАММА КЛАССОВ

На рисунке 1 представлена диаграмма классов, дополненная атрибутами и методами.

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

Рисунок 1 – Диаграмма классов клиента.

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

Рисунок 2 – Диаграмма классов сервера.

ОПИСАНИЕ КОНТРОЛЬНОГО ПРИМЕРА С ИСХОДНЫМИ И

ОЖИДАЕМЫМИ (РАСЧЕТНЫМИ) ДАННЫМИ

Контрольный пример:

 

1/2

2/3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

= (3/4

4/5) – исходная матрица.

 

 

 

 

 

 

1/2

2/3

 

1

4

2

3

 

 

 

 

1

 

 

 

 

det = |3/4

4/5|

=

 

 

 

 

 

 

 

= −

 

 

 

 

 

2

5

3

4

 

10

 

 

 

 

1/2

 

3/4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

=

(2/3

 

4/5)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ранг матрицы:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(1/2 2/3) ~ ( 1

 

 

 

1

 

 

 

 

1

4

 

 

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

3

) ~ (

 

 

3

 

) ~ (1

 

 

 

 

1

 

3

)

3/4

4/5

 

3/4

 

4/5

 

 

 

0

0

1

 

 

 

 

 

 

 

5

( ) = 2.

СКРИНШОТЫ РАБОТЫ ПРОГРАММЫ НА КОНТРОЛЬНЫХ

ПРИМЕРАХ

После запуска программы на экране появляется программное окно, с

полями ввода и кнопками, что показано на рисунке 2.

Рисунок 3 – Запуск программы и начальное меню Необходимо ввести значения элементов матрицы. Для этого нужно

ввести размер матрицы в соответствующее поле. Поле ввода элементов обновится и отобразит таблицу нужного размера. Для ввода элемента матрицы, достаточно кликнуть на ячейку и ввести число. На рисунке 3 показан ввод элементов матрицы из контрольного примера.

Рисунок 4 – Ввод матрицы из контрольного примера

Соседние файлы в папке Лабораторные Егоров