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

Болтушкин Л.С., группа 712-2, лабораторная 6.docx

.pdf
Скачиваний:
8
Добавлен:
04.10.2024
Размер:
624.73 Кб
Скачать

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

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

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

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

ООП Отчет по лабораторной работе №6

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

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

___________ Л.С. Болтушкин

__________

Руководитель Младший научный

сотрудник кафедры КИБЭВС

_______ __________ А.В. Куртукова

__________

Томск 2024

Введение

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

Задание:

1.Ознакомиться с основными концепциями объектно-

ориентированного анализа и проектирования;

2.Изучить основные приемы объектно-ориентированного программирования, разобраться в технологии их реализации для выбранного языка и среды программирования;

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

UML-диаграмму;

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

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

2

1 Ход работы

Для данной работы, необходимо было реализовать программу по заданному варианту: Вариант 4 – Программа для работы с алгоритмами шифрования и дешифрования данных, который может быть использован в программе для защиты конфиденциальной информации.

Также для программы была реализована UML-диаграмму,

показывающую все связи классов (рисунок 1.1).

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

Было реализовано 5 классов, которые представлены на рисунках 1.2-1.7.

3

Рисунок 1.2 – Абстрактный класс CipherBase

Рисунок 1.3 – Первая часть класса CaesarCipher шифрование

4

Рисунок 1.4 – Вторая часть класса CaesarCipher дешифрование

Рисунок 1.5 – Класс DataHandler

Рисунок 1.6 – Класс Logger 5

Рисунок 1.7 – Класс EncryptionManager

Также представлен результат работы программы (рисунок 1.8).

Рисунок 1.8 – Результат работы программы

Листинг программы представлен в приложении А.

6

Заключение

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

7

Приложение А

(обязательное)

from abc import ABC, abstractmethod

class CipherBase(ABC):

def __init__(self, logger=None): self.logger = logger

@abstractmethod

def encrypt(self, data): pass

@abstractmethod

def decrypt(self, data): pass

class CaesarCipher(CipherBase):

def __init__(self, shift, logger=None): super().__init__(logger) self.shift = shift

def encrypt(self, text): result = ''.join(

chr((ord(char) - 65 + self.shift) % 26 + 65) if char.isupper() else chr((ord(char) - 97 + self.shift) % 26 + 97) if char.islower() else char for char in text

)

if self.logger:

self.logger.log(f"Шифр Цезаря: зашифрованный '{text}' на '{result}'") return result

def decrypt(self, text): result = ''.join(

chr((ord(char) - 65 - self.shift) % 26 + 65) if char.isupper() else chr((ord(char) - 97 - self.shift) % 26 + 97) if char.islower() else char for char in text

)

if self.logger:

self.logger.log(f"Шифр Цезаря: расшифрованный '{text}' на '{result}'") return result

class DataHandler:

def __init__(self, text, logger=None): self.text = text

self.logger = logger

def get_text(self): return self.text

def set_text(self, text): self.text = text

if self.logger:

self.logger.log(f"Обработчик данных: текст изменен на '{text}'")

class Logger:

def __init__(self): self.entries = []

def log(self, message): self.entries.append(message) print("Сообщение:", message)

class EncryptionManager:

def __init__(self, cipher): self.cipher = cipher

8

Продолжение приложения А

def encrypt_data(self, text): return self.cipher.encrypt(text)

def decrypt_data(self, text): return self.cipher.decrypt(text)

def main():

logger = Logger()

text = input("Введите текст для шифрования (только латинские буквы): ") shift = int(input("Введите сдвиг для шифра Цезаря: "))

cipher = CaesarCipher(shift, logger) manager = EncryptionManager(cipher) handler = DataHandler(text, logger)

encrypted_text = manager.encrypt_data(handler.get_text()) print("Зашифрованный текст:", encrypted_text)

handler.set_text(encrypted_text) # Обновляем текст в обработчике decrypted_text = manager.decrypt_data(handler.get_text()) print("Дешифрованный текст:", decrypted_text)

if __name__ == "__main__": main()

9