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

ЯП Лабораторная работа 6

.pdf
Скачиваний:
0
Добавлен:
17.06.2025
Размер:
893.51 Кб
Скачать

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

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

Кафедра комплексной информационной безопасности электронновычислительных систем (КИБЭВС)

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ Отчет по лабораторной работе №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