Загрузка данных


Привет! Подготовил для тебя все три варианта. Код написан по стандартам Java (ООП, инкапсуляция, полиморфизм), без лишних усложнений — ровно так, как ожидается от студента, успешно освоившего курс. Имена классов и переменных переведены на английский (это стандарт хорошего кода), но логика полностью соответствует заданию.
Ниже подробно расписано, какие файлы нужно создать, код для них и объяснение работы.
### Вариант 1: Экологический мониторинг
Список файлов для создания:
 1. Measurable.java (Интерфейс «Измеряемый»)
 2. Natural.java (Интерфейс «Природный»)
 3. Tree.java, Cloud.java, Mountain.java (Классы природы)
 4. SmokeSensor.java, Thermometer.java, River.java (Классы датчиков)
 5. MainVar1.java (Главный класс с методом main)
Код и функционал:
`java
// Файл: Measurable.java
// Функционал: Интерфейс, задающий контракт для всех объектов, с которых можно снять измерения.
public interface Measurable {
    void takeMeasurement();
}

// Файл: Natural.java
// Функционал: Гипотетический маркерный интерфейс для природных объектов.
public interface Natural {
}

// Файл: Tree.java
public class Tree implements Natural { }

// Файл: Cloud.java
public class Cloud implements Natural { }

// Файл: Mountain.java
public class Mountain implements Natural { }

// Файл: SmokeSensor.java
// Функционал: Имитирует датчик дыма. Хранит уровень CO2.
public class SmokeSensor implements Measurable {
    private double co2Level;

    public SmokeSensor(double co2Level) {
        setCo2Level(co2Level);
    }

    public double getCo2Level() { return co2Level; }

    // Обоснование сеттера: уровень CO2 не может быть отрицательным
    public void setCo2Level(double co2Level) {
        if (co2Level < 0) {
            System.out.println("Ошибка: уровень CO2 не может быть меньше 0. Установлено 0.");
            this.co2Level = 0;
        } else {
            this.co2Level = co2Level;
        }
    }

    @Override
    public void takeMeasurement() {
        System.out.println("Датчик дыма: Уровень CO2 составляет " + co2Level + " ppm.");
    }
}

// Файл: Thermometer.java
// Функционал: Имитирует термометр.
public class Thermometer implements Measurable {
    private double celsius;

    public Thermometer(double celsius) {
        setCelsius(celsius);
    }

    public double getCelsius() { return celsius; }

    // Обоснование сеттера: температура не может быть ниже абсолютного нуля
    public void setCelsius(double celsius) {
        if (celsius < -273.15) {
            System.out.println("Ошибка: температура ниже абсолютного нуля невозможна!");
            this.celsius = -273.15;
        } else {
            this.celsius = celsius;
        }
    }

    @Override
    public void takeMeasurement() {
        System.out.println("Термометр: Температура " + celsius + " °C.");
    }
}

// Файл: River.java
// Функционал: Имитирует реку. Хранит индекс загрязнения (от 0 до 100).
public class River implements Measurable {
    private int pollutionIndex;

    public River(int pollutionIndex) {
        setPollutionIndex(pollutionIndex);
    }

    public int getPollutionIndex() { return pollutionIndex; }

    // Обоснование сеттера: индекс загрязнения измеряется в процентах (0-100)
    public void setPollutionIndex(int pollutionIndex) {
        if (pollutionIndex < 0 || pollutionIndex > 100) {
            System.out.println("Ошибка: индекс загрязнения должен быть от 0 до 100.");
            this.pollutionIndex = 0;
        } else {
            this.pollutionIndex = pollutionIndex;
        }
    }

    @Override
    public void takeMeasurement() {
        System.out.println("Река: Индекс загрязнения воды составляет " + pollutionIndex + "%.");
    }
}

// Файл: MainVar1.java
// Функционал: Точка входа. Демонстрирует полиморфизм, собирая разные объекты под одним интерфейсом.
import java.util.ArrayList;
import java.util.List;