Содержание- SOLID
- SRP: Принцип единственной ответственности
- OCP: Принцип открытости/закрытости
- LSP: Принцип подстановки Лисков
- ISP: Принцип разделения интерфейса
- DIP: Принцип инверсии зависимостей
- Квадрат и прямоугольник
- Постановка задачи
- Источник проблем
- Возможные решения
- Отказ от изменений
- Возврат нового значения
- Возврат флага
- Исключения
- Отказ от наследования
- Полный
- Выделение общего базового класса
- Дополнительные действия
- Выделение модифицируемых сущностей
- Отказ от квадратов
- Равенство
- Свойства равенства
- Метод equals
- Метод hashCode
- Взаимодействие с наследованием
- Наиваная реализация
- Использование сравнения предка
- Сегрегация сравнения
Домашнее задание 11. ВыраженияВыражения-
Разработайте классы
Const , Variable ,
Add , Subtract , Multiply ,
Divide для вычисления выражений с одной переменной
в типе int (интерфейс Expression ).
-
Классы должны позволять составлять выражения вида
new Subtract(
new Multiply(
new Const(2),
new Variable("x")
),
new Const(3)
).evaluate(5)
При вычислении такого выражения вместо каждой переменной подставляется значение,
переданное в качестве параметра методу evaluate .
Таким образом, результатом вычисления
приведенного примера должно стать число 7.
-
Метод
toString должен выдавать запись выражения
в полноскобочной форме. Например
new Subtract(
new Multiply(
new Const(2),
new Variable("x")
),
new Const(3)
).toString()
должен выдавать ((2 * x) - 3) .
- Сложный вариант.
Метод
toMiniString (интерфейс ToMiniString )
должен выдавать выражение с минимальным числом скобок.
Например
new Subtract(
new Multiply(
new Const(2),
new Variable("x")
),
new Const(3)
).toMiniString()
должен выдавать 2 * x - 3 .
-
Реализуйте метод
equals , проверяющий,
что два выражения совпадают. Например,
new Multiply(new Const(2), new Variable("x"))
.equals(new Multiply(new Const(2), new Variable("x")))
должно выдавать true , а
new Multiply(new Const(2), new Variable("x"))
.equals(new Multiply(new Variable("x"), new Const(2)))
должно выдавать false .
-
Для тестирования программы должен быть создан класс
Main , который
вычисляет значение выражения x2−2x+1 , для
x , заданного в командной строке.
-
При выполнении задания следует обратить внимание на:
-
Выделение общего интерфейса создаваемых классов.
-
Выделение абстрактного базового класса для бинарных операций.
Экзаменационные вопросы- Принципы SOLID
- Проблема квадрата и прямоугольника
- Равенство объектов
Практические навыки- Умение определять необходимость наследования
- Умение реализовывать корректное сравнение объектов на равенство
|