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

Отчеты / ЯП6

.pdf
Скачиваний:
9
Добавлен:
05.06.2022
Размер:
272.64 Кб
Скачать

Министерство образования и науки Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

«ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ» (ТУСУР)

Кафедра комплексной информационной безопасности электронно-

вычислительных систем (КИБЭВС)

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ Отчет по лабораторной работе №6

по дисциплине «Языки программирования»

Выполнил:

Студент гр. 710-2

_______ _____Кузьмина А.А.

__.04.2022

Принял:

Младший научный сотрудник

Кафедры КИБЭВС

_______ ________Полюга В.А.

___.04.2022

Томск - 2022

2

1 Введение

Цель работы: знакомство с основными концепциями и приемами объектно-ориентированного анализа и проектирования, выработка практических навыков в построении модели предметной области и элементов модели проектирования.

Для работы был взят 5 вариант задания «шифр Хилла».

Для написания программы использовался язык программирования С#.

Среда разработки Microsoft Visual Studio 2019.

3

2 Ход работы

Для реализации шифра Хилла был написан абстрактный класс

HillCypherAbs. Был разработан интерфейс, в котором были заданы виртуальные методы getKeyMatrix и encrypt, отвечающие за перевод кодового слова в матрицу и за шифрование, и функции Algorythm и Show, для инкапсуляции текста и вывода текста на консоль. Код представлен ниже:

abstract class HillCypherAbs

{

public virtual void getKeyMatrix(string key, int[,] keyMatrix)

{

}

public virtual void encrypt(int[,] cipherMatrix, int[,] keyMatrix, int[,] messageVector)

{

}

public abstract string Algorythm();

public void Show()

{

Console.WriteLine($"Зашифрованный текст+ {Algorythm()} ");

}

}

Далее был создан наследуемый класс HillCypher. После этого используется свойство полиморфизма для encrypt, getKeyMatrix и Algorythm в

наследуемом классе HillCypher. Ниже представлен код:

4

public override void getKeyMatrix(string key, int[,] keyMatrix)

{

int k = 0;

for (int i = 0; i < 4; i++)

{

for (int j = 0; j < 4; j++)

{

keyMatrix[i, j] = (key[k]) % 65; k++;

}

}

}

public override void encrypt(int[,] cipherMatrix, int[,] keyMatrix,

int[,] messageVector)

{

int x, i, j;

for (i = 0; i < 4; i++)

{

for (j = 0; j < 1; j++)

{

cipherMatrix[i, j] = 0;

for (x = 0; x < 4; x++)

{

cipherMatrix[i,

j]

+=

keyMatrix[i,

x]

*

messageVector[x, j];

}

cipherMatrix[i, j] = cipherMatrix[i, j] % 26;

}

}

}

5

Для класса был прописана функция Algorythm и метод Main. Код с методом Algorythm и Main представлен ниже:

private string ad, bc;

public HillCypher(string message, string key)

{

ad = message; bc = key;

}

public string get_text()

{

return this.ad;

}

public override string Algorythm()

{

int[,] keyMatrix = new int[4, 4]; getKeyMatrix(bc, keyMatrix);

int[,] messageVector = new int[4, 1];

for (int i = 0; i < 4; i++) messageVector[i, 0] = (ad[i]) % 65;

int[,] cipherMatrix = new int[4, 1]; encrypt(cipherMatrix, keyMatrix, messageVector);

String CipherText

=

"";

for (int i = 0; i

<

4; i++)

CipherText +=

(char)(cipherMatrix[i, 0] + 65);

return CipherText;

 

 

}

}

static void Main(string[] args)

6

{

Console.WriteLine("Введите слово из 4 букв: ");

String message = Console.ReadLine();

Console.WriteLine("Введите ключ из 16 букв: ");

String key = Console.ReadLine();

HillCypherAbs Object = new HillCypher(message , key);

Object.Show();

}}

Рассмотрим основные принципы ООП такие, как наследование, полиморфизм и инкапсуляция:

1. Наследование.

Создаем абстрактный класс HillCypherAbs и у нас появляется возможность создать наследованные классы. После того, как мы укажем методы в абстрактном классе getKeyMatrix, encrypt и функции Show, Algorythm мы можем их использовать в наследуемом классе HillCypherAbs.

Ниже представлен код с использованием наследования:

class HillCypher : HillCypherAbs

{

public override void getKeyMatrix(string key, int[,] keyMatrix)

{

int k = 0;

for (int i = 0; i < 4; i++)

{

for (int j = 0; j < 4; j++)

{

keyMatrix[i, j] = (key[k]) % 65; k++;

}

}

}

public override void encrypt(int[,] cipherMatrix, int[,] keyMatrix, int[,] messageVector)

{

int x, i, j;

for (i = 0; i < 4; i++)

{

for (j = 0; j < 1; j++)

{

cipherMatrix[i, j] = 0;

for (x = 0; x < 4; x++)

{

cipherMatrix[i, j] += keyMatrix[i, x] *

messageVector[x, j];

7

}

cipherMatrix[i, j] = cipherMatrix[i, j] % 26;

}

}

}

private string ad, bc;

public HillCypher(string message, string key)

{

ad = message; bc = key;

}

public string get_text()

{

return this.ad;

}

public override string Algorythm()

{

int[,] keyMatrix = new int[4, 4]; getKeyMatrix(bc, keyMatrix);

int[,] messageVector = new int[4, 1];

for (int i = 0; i < 4; i++) messageVector[i, 0] = (ad[i]) % 65;

int[,] cipherMatrix = new int[4, 1]; encrypt(cipherMatrix, keyMatrix, messageVector);

String CipherText

=

"";

for (int i = 0; i

<

4; i++)

CipherText +=

(char)(cipherMatrix[i, 0] + 65);

return CipherText;

 

 

}

}

2. Полиморфизм.

В абстрактном классе мы указали виртуальные методы encrypt, getKeyMatrix и функции Show, Algorythm. С помощью полиморфизма мы можем переопределить их. Переопределение происходит с помощью модификатора override. Код с использованием полиморфизма представлен ниже:

public override void getKeyMatrix(string key, int[,] keyMatrix)

{

int k = 0;

for (int i = 0; i < 4; i++)

{

for (int j = 0; j < 4; j++)

{

keyMatrix[i, j] = (key[k]) % 65; k++;

}

}

}

public override void encrypt(int[,] cipherMatrix, int[,] keyMatrix, int[,] messageVector)

{

int x, i, j;

8

for (i = 0; i < 4; i++)

{

for (j = 0; j < 1; j++)

{

cipherMatrix[i, j] = 0;

for (x = 0; x < 4; x++)

{

cipherMatrix[i, j] += keyMatrix[i, x] *

messageVector[x, j];

}

cipherMatrix[i, j] = cipherMatrix[i, j] % 26;

}

}

}

public override string Algorythm()

{

int[,] keyMatrix = new int[4, 4]; getKeyMatrix(bc, keyMatrix);

int[,] messageVector = new int[4, 1];

for (int i = 0; i < 4; i++) messageVector[i, 0] = (ad[i]) % 65;

int[,] cipherMatrix = new int[4, 1]; encrypt(cipherMatrix, keyMatrix, messageVector);

String CipherText

=

"";

for (int i = 0; i

<

4; i++)

CipherText +=

(char)(cipherMatrix[i, 0] + 65);

return CipherText;

 

 

}

3. Инкапсуляция.

Инкапсуляция позволяет при необходимости скрыть код и ограничить доступ к коду и данным из других участков кода. Для инкапсуляции используются public свойства и методы объекта, а переменные остаются закрытыми. Код с использованием инкапсуляции представлен ниже:

private string ad, bc;

public HillCypher(string message, string key)

{

ad = message; bc = key;

}

public string get_text()

{

return this.ad;

}

9

Была создана UML-диаграмма классов программы с дополнительными возможными классами. Диаграмма представлена на рисунке 1.

Рисунок 1 – UML-диаграмма.

10

3Заключение

Впроцессе выполнения лабораторной работы были изучены основные концепции и приёмы объектно-ориентированного анализа и проектирования,

выработаны практические навыки в построении модели предметной области и элементов модели проектирования.

Был реализован шифр Хилла с помощью абстрактного класса и его производных классов.

Отчёт был написан согласно ОС ТУСУР 2013.

Соседние файлы в папке Отчеты