
Болтушкин Л.С., группа 712-2, лабораторная 6.docx
.pdfМинистерство науки и высшего образования Российской Федерации Федеральное государственное автономное образовательное учреждение высшего образования
ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОННИКИ (ТУСУР)
Кафедра комплексной информационной безопасности электронно-
вычислительных систем (КИБЭВС)
ООП Отчет по лабораторной работе №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