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

Лаб_10 Головков И.Е. 12002108 ООП

.docx
Скачиваний:
5
Добавлен:
26.06.2024
Размер:
444.1 Кб
Скачать

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ БЕЛОГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ (НИУ «БелГУ») ИНСТИТУТ ИНЖЕРЕНЕРНЫХ И ЦИФРОВЫХ ТЕХНОЛОГИЙ

КАФЕДРА ИНФОРМАЦИОННЫХ И РОБОТОТЕХНИЧЕСКИХ СИСТЕМ

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

Вариант №5 Тема работы «Разработка иерархии классов. Потоки данных» по дисциплине «Объектно-ориентированное программирование»

студента очного отделения

2 курса группы 12002108

Головкова Игоря Евгеньевича

Проверил:

Резников Н. Г.

Белгород 2022

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

Общая постановка задачи

1. Изучить предлагаемый теоретический материал

2. Разработать иерархию классов, описанную в Вашем варианте задания.

Классы должен содержать следующие элементы: скрытые поля,

конструкторы с параметрами и без параметров, методы.

Функциональные элементы класса должны обеспечивать

непротиворечивый, полный, минимальный и удобный интерфейс класса.

При возникновении ошибок должны выбрасываться исключения. В

программе должна выполняться проверка всех разработанных элементов

класса.

3. Оформить отчет по лабораторной работе, включающий:

  • титульный лист;

  • цель работы;

  • постановку задачи для Вашего варианта;

  • текст программы на языке Java;

  • скриншоты результатов выполнения тестовых примеров;

  • ответы на контрольные вопросы.

Вариант 5.

  • Создать абстрактный класс Number c методами, реализующими арифметические операции. На его основе реализовать классы

Integer и Real. Написать демонстрационную программу, в которой будут использоваться методы классов.

  • Создать класс Series (набор), содержащий массив и коллекцию

объектов (любого типа) этих классов.

  • Предусмотреть возможность вывода характеристик объектов списка.

  • Дополнительное задание: дополнить класс методами сортировки по некоторому критерию, вывода в файл и считывания из файла

Листинг программы.

Файл 1. Класс Main public class Main { public static void main(String[] args) { Real r1 = new Real(1.3); Real r2 = new Real(2.2); Real r3 = new Real(0.0); r3 = r1.Sum(r2); System.out.println("Сумма " + r1.r + " и " + r2.r + " равна " + r3.r); Integer i1 = new Integer(2); Integer i2 = new Integer(5); Integer i3 = new Integer(0); i3 = i1.Mult(i2); System.out.println("Произведение " + i1.i + " и " + i2.i + " равно " + i3.i); Series<Number> arr = new Series<>(); arr.dobavA(r3); arr.dobavA(r2); arr.dobavA(r1); arr.dobavA(i3); arr.dobavA(i2); arr.dobavA(i1); arr.vyvod(); arr.sortyPlus(); System.out.println("*Добавление в коллекцию объектов со значениями из файла*"); arr.readFile(); System.out.println("*Объекты добавлены в коллекцию*"); arr.writeFile(); } }

Файл 2. Класс Number

public abstract class Number{ public int i; public double r; public abstract Number Sum(Number a); public abstract Number Sub(Number a); public abstract Number Mult(Number a); public abstract Number Div(Number a); } class Integer extends Number { public Integer(){ this.i = 0; } public Integer(int i){ this.i = i; } @Override public Integer Sum(Number a){ Integer t = new Integer(a.i + i); return t; } @Override public Integer Sub(Number a){ Integer t = new Integer(i - a.i); return t; } @Override public Integer Mult(Number a){ Integer t = new Integer(a.i * i); return t; } @Override public Integer Div(Number a){ Integer t = new Integer((i / a.i)); return t; } } class Real extends Number{ public Real(){ this.r = 0.0; } public Real(double r){ this.r = r; } @Override public Real Sum(Number a){ Real t = new Real(a.r + r); return t; } @Override public Real Sub(Number a){ Real t = new Real(r - a.r); return t; } @Override public Real Mult(Number a){ Real t = new Real(a.r * r); return t; } @Override public Real Div(Number a){ Real t = new Real(r / a.r); return t; } }

Файл 3. Класс Series

import java.io.*; import java.util.*; public class Series<T> { T a; ArrayList<T> lst = new ArrayList<T>(); void dobavA(T a) { this.a = a; lst.add(a); } void vyvod() { System.out.println("Вывод коллекции значений объектов"); for (T b : lst) { if (b instanceof Integer c) { System.out.println(c.i); } else if (b instanceof Real c) { System.out.println(c.r); } } } public void sortyPlus(){ int sc = 0; double[] array = new double[lst.size()]; for (T b : lst) { if (b instanceof Integer c) { array[sc] = c.i * 1.0; sc++; } if (b instanceof Real c) { array[sc] = c.r; sc++; } } Arrays.sort(array); System.out.println("Отсортированные числа коллекции: "); for (int i = 0; i<array.length; i++){ if ((int) array[i] == array[i]){ System.out.print((int) array[i]+ " "); } else System.out.print(array[i]+ " "); } System.out.println(); } void readFile(){ String path = "d://lab/file2.txt"; try { try (Scanner in = new Scanner(new File(path))) { while (in.hasNext()){ double fromFile = in.nextDouble(); Real b = new Real(); b.r = fromFile; lst.add((T) b); } } } catch (FileNotFoundException e) { System.out.println("Ошибка " + e + "! файл " + path + " не найден!"); } catch (InputMismatchException e) { System.out.println("Ошибка " + e + "! Несоответствие типов данных!"); } } void writeFile(){ try { PrintStream print = new PrintStream(new FileOutputStream("d://lab/file3.txt")); System.setOut(print); for (T b : lst) { if (b instanceof Integer c) { System.out.println(c.i); } else if (b instanceof Real c) { System.out.println(c.r); } } } catch(FileNotFoundException e) { e.printStackTrace(); } } }

Результат выполнения задания:

Рисунок 1 – Запуск программы с демонстрацией вычисления суммы действительных чисел, произведения целых, создания коллекции объектов-чисел, её сортировки, ввода-вывода в файл

Рисунок 2 – Исходный код класса Number

Рисунок 3 – Исходный код класса Series