Здравствуйте, меня зовут Максим, и сегодня я хотел бы рассказать вам о том, как я создал калькулятор комплексных чисел на языке Java, соблюдая принципы SOLID и применяя паттерны проектирования. Кроме того, я добавил логирование, чтобы отслеживать выполнение операций.
Для начала, давайте разберемся, что такое комплексные числа. Комплексные числа состоят из двух частей⁚ действительной и мнимой. Действительная часть представляет собой обычное вещественное число, а мнимая часть представлена символом ‘i’, которая равна квадратному корню из -1. Комплексные числа можно складывать, умножать и делить, и именно это мы реализуем в нашем калькуляторе.
Перед тем, как перейти к самой реализации калькулятора, я хочу отметить важность принципов SOLID. SOLID ‒ это аббревиатура, которая означает пять принципов объектно-ориентированного программирования⁚ Single Responsibility (Единственная Обязанность), Open-Closed (Открытость/Закрытость), Liskov Substitution (Свойство подстановки Лисков), Interface Segregation (Разделение Интерфейсов) и Dependency Inversion (Инверсия Зависимости). Соблюдение этих принципов позволяет создавать более гибкий и расширяемый код, а также упрощает его тестирование и поддержку.Теперь перейдем к паттернам проектирования. В моей реализации калькулятора комплексных чисел я использовал паттерн ″Фабричный метод″. Этот паттерн позволяет создавать объекты, не указывая конкретный класс объекта, а используя его общий интерфейс. В нашем случае, фабричный метод будет создавать экземпляры классов, которые реализуют операции сложения, умножения и деления комплексных чисел.Теперь перейдем к коду. Ниже приведен пример класса ″ComplexNumber″, который представляет комплексное число и реализует интерфейс ″Number″, содержащий методы для сложения, умножения и деления⁚
java
public class ComplexNumber implements Number {
private double real;
private double imaginary;
public ComplexNumber(double real, double imaginary) {
this.real real;
this.imaginary imaginary;
}
public double getReal {
return real;
}
public double getImaginary {
return imaginary;
}
public Number add(Number number) {
if (number instanceof ComplexNumber) {
ComplexNumber complexNumber (ComplexNumber) number;
double realSum this.real complexNumber.getReal;
double imaginarySum this.imaginary complexNumber.getImaginary;
return new ComplexNumber(realSum, imaginarySum);
}
return null;
}
public Number multiply(Number number) {
if (number instanceof ComplexNumber) {
ComplexNumber complexNumber (ComplexNumber) number;
double realProduct this.real * complexNumber.getReal ― this.imaginary * complexNumber.getImaginary;
double imaginaryProduct this.real * complexNumber.getImaginary this.imaginary * complexNumber.getReal;
return new ComplexNumber(realProduct, imaginaryProduct);
}
return null;
}
public Number divide(Number number) {
if (number instanceof ComplexNumber) {
ComplexNumber complexNumber (ComplexNumber) number;
double denominator Math.pow(complexNumber.getReal, 2) Math.pow(complexNumber.getImaginary٫ 2);
double realQuotient (this.real * complexNumber.getReal this.imaginary * complexNumber.getImaginary) / denominator;
double imaginaryQuotient (this.imaginary * complexNumber.getReal ‒ this.real * complexNumber.getImaginary) / denominator;
return new ComplexNumber(realQuotient, imaginaryQuotient);
}
return null;
}
}
Как вы можете видеть, в классе ComplexNumber реализованы методы add, multiply и divide, которые выполняют соответствующие операции над комплексными числами.Теперь реализуем интерфейс ″NumberFactory″, который будет создавать экземпляры класса ComplexNumber в зависимости от операции⁚
java
public interface NumberFactory {
Number createNumber(double real, double imaginary);
}
Реализация этого интерфейса будет выглядеть следующим образом⁚
java
public class ComplexNumberFactory implements NumberFactory {
public Number createNumber(double real, double imaginary) {
return new ComplexNumber(real, imaginary);
}
}
Теперь можем реализовать логирование, чтобы отслеживать выполнение операций. Воспользуемся стандартной библиотекой логирования Java ― java.util.logging. Для этого добавим следующий код в класс ComplexNumber⁚
java
import java.util.logging.Level;
import java.util.logging.Logger;
public class ComplexNumber implements Number {
private static final Logger LOGGER Logger.getLogger(ComplexNumber.class.getName);
// Код класса... public Number add(Number number) {
LOGGER.log(Level.INFO, ″Выполняется операция сложения комплексных чисел″);
// Остальной код метода... }
public Number multiply(Number number) {
LOGGER.log(Level.INFO, ″Выполняется операция умножения комплексных чисел″);
// Остальной код метода... }
public Number divide(Number number) {
LOGGER.log(Level.INFO, ″Выполняется операция деления комплексных чисел″);
// Остальной код метода... }
}
Теперь, при вызове методов add, multiply и divide будут выводиться соответствующие сообщения в лог.
В итоге, мы создали калькулятор комплексных чисел на языке Java, соблюдая принципы SOLID и применив паттерн ″Фабричный метод″. Кроме того, мы добавили логирование с использованием java.util.logging для отслеживания выполнения операций.
Я надеюсь, что этот пример будет полезным и поможет вам разобраться с созданием калькулятора комплексных чисел на языке Java. Удачи в ваших проектах!