
ЯП Лабораторная работа 6
.pdfМинистерство науки и высшего образования Российской Федерации Федеральное государственное автономное образовательное учреждение высшего образования
ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)
Кафедра комплексной информационной безопасности электронновычислительных систем (КИБЭВС)
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ Отчет по лабораторной работе №6
по дисциплине «Языки программирования» Вариант №21
Студент гр. 7х3-х
_______ ххххххххх
_______
Приняла: Преподаватель каф. КИБЭВС
_______ ххххххх
_______
Томск 2025
Введение
Целью работы является знакомство с основными концепциями и приемами объектно-ориентированного анализа и проектирования, выработка практических навыков в построении модели предметной области и элементов модели проектирования.
Постановка задачи:
1.Ознакомиться с основными концепциями объектно-ориентированного анализа и проектирования;
2.Изучить основные приемы объектно-ориентированного программирования, разобраться в технологии их реализации для выбранного языка и среды программирования.;
3.Выбрать предметную область в соответствии с вариантом, составить для неё модель проектирования и модель предметной области, используя
UML;
4.Реализовать в программе операции бизнес-логики, соответствующие предметной области варианта задания, с применением наследования и полиморфизма:
4.1.Разработать структуру абстрактного класса, который объявляет собой минимально необходимый интерфейс;
4.2.Разработать производный класс, осуществив его наследование от разработанного абстрактного класса, с реализацией всех чисто виртуальных функций;
4.3.В каждом варианте помимо представленных методов, необходимо определить один дополнительный метод для класса самостоятельно;
5.Написать отчет и защитить у преподавателя.
Текст абстрактной программы:
Программа для анализа и оптимизации процессов управления персоналом на предприятии с использованием модулей для работы с данными о сотрудниках.
2

1 UML МОДЕЛЬ ПРОЕКТИРОВАНИЯ И ПРЕДМЕТНОЙ ОБЛАСТИ
Была реализована модель проектирования для программы по варианту в виде UML-диаграммы (рисунок 1.1).
Рисунок 1.1 – UML-диаграмма программы
3

2 ПРОГРАММНАЯ РЕАЛИЗАЦИЯ
Для выполнения работы был выбран язык программирования Java, исходный код программы представлен в приложении А.
Был реализован абстрактный класс MonitoringSystem, содержащий виртуальные функции getEmployeesInfo(), getEmployeeInfo(), employeesEfficiency(), addEmployeeViolation() и deleteEmployeeViolation() (рисунок 2.1).
Рисунок 2.1 – Абстрактный класс MonitoringSystem
Был реализован производный класс MonitoringRealization, который наследует от абстрактного класса MonitoringSystem и реализует все вышеперечисленные виртуальные методы, а также реализует методы addNewEmployee(), deleteEmployee(), addNewPosition() и deletePosition() (рисунок 2.2).
Рисунок 2.2 – Производный класс MonitoringRealization
4

Был реализован класс Position, содержащий поля PositionName, WorkingHours и Salary, а также конструктор и геттеры (рисунок 2.3).
Рисунок 2.3 – Класс Position
Класс Violation содержит поля ViolationName, Date и PenaltyCost, а также конструктор и геттеры (рисунок 2.4).
Рисунок 2.4 – Класс Violation
5

Класс Employee содержит поля Name, Surname, Position, Efficiency и Violations и реализует методы addViolation(), applyPenalty(), calculateSalary() и displayViolations(), а также конструктор и геттеры (рисунок 2.5).
Рисунок 2.5 – Класс Employee
6
Заключение
В ходе выполнения данной работы были изучены основные концепции и приемы объектно-ориентированного анализа и проектирования, выработаны практические навыки в построении модели предметной области и элементов модели проектирования.
7
Приложение А Код программы
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;
import java.text.SimpleDateFormat; import java.util.ArrayList;
import java.util.Date; import java.util.List;
abstract class MonitoringSystem {
public abstract void getEmployeesInfo(ArrayList<Employee> employees); public abstract void getEmployeeInfo(ArrayList<Employee> employees); public abstract void employeesEfficiency(ArrayList<Employee> employees); public abstract void addEmployeeViolation(ArrayList<Employee> employees);
public abstract void deleteEmployeeViolation(ArrayList<Employee> employees);
}
class Position{
private String PositionName; private int WorkingHours; private double Salary;
public Position(String positionName, int workingHours, double salary){ this.PositionName = positionName;
this.WorkingHours = workingHours; this.Salary = salary;
}
public String getPositionName(){ return PositionName;
}
public int getWorkingHours(){ return WorkingHours;
}
public double getSalary(){ return Salary;
}
}
8
class Violation{
private String ViolationName; private Date Date;
private double PenaltyCost;
public Violation(String violationName, Date date, double penaltyCost){ this.ViolationName = violationName;
this.Date = date; this.PenaltyCost = penaltyCost;
}
public String getViolationName(){ return ViolationName;
}
public Date getDate(){ return Date;
}
public double getPenaltyCost(){ return PenaltyCost;
}
}
class Employee { private String Name;
private String Surname; private Position Position; private int Efficiency;
private ArrayList<Violation> Violations;
public Employee(String name, String surname, Position position, int efficiency) { this.Name = name;
this.Surname = surname; this.Position = position; this.Efficiency = efficiency; this.Violations = new ArrayList<>();
}
public String getName() { return Name;
}
9
public String getSurname() { return Surname;
}
public Position getPosition() { return Position;
}
public int getEfficiency() { return Efficiency;
}
public ArrayList<Violation> getViolations() { return Violations;
}
public void addViolation(Violation violation) { if (Violations == null) {
Violations = new ArrayList<>();
}
Violations.add(violation);
applyPenalty(violation.getPenaltyCost());
}
private void applyPenalty(double penalty) { Efficiency -= (int) (penalty / 100);
if (Efficiency < 0) { Efficiency = 0;
}
}
public double calculateSalary() { double totalPenalties = 0; if (Violations != null) {
for (Violation violation : Violations) { totalPenalties += violation.getPenaltyCost();
}
}
return Position.getSalary() - totalPenalties;
}
public void displayViolations() {
SimpleDateFormat dateTimeFormat = new SimpleDateFormat("dd.MM.yyyy");
10