@startuml
package com.iluwatar.interpreter {
  class App {
    - LOGGER : Logger {static}
    + App()
    + getOperatorInstance(s : String, left : Expression, right : Expression) : Expression {static}
    + isOperator(s : String) : boolean {static}
    + main(args : String[]) {static}
  }
  abstract class Expression {
    + Expression()
    + interpret() : int {abstract}
    + toString() : String {abstract}
  }
  class MinusExpression {
    - leftExpression : Expression
    - rightExpression : Expression
    + MinusExpression(leftExpression : Expression, rightExpression : Expression)
    + interpret() : int
    + toString() : String
  }
  class MultiplyExpression {
    - leftExpression : Expression
    - rightExpression : Expression
    + MultiplyExpression(leftExpression : Expression, rightExpression : Expression)
    + interpret() : int
    + toString() : String
  }
  class NumberExpression {
    - number : int
    + NumberExpression(number : int)
    + NumberExpression(s : String)
    + interpret() : int
    + toString() : String
  }
  class PlusExpression {
    - leftExpression : Expression
    - rightExpression : Expression
    + PlusExpression(leftExpression : Expression, rightExpression : Expression)
    + interpret() : int
    + toString() : String
  }
}
MultiplyExpression -->  "-leftExpression" Expression
MinusExpression -->  "-leftExpression" Expression
PlusExpression -->  "-leftExpression" Expression
MinusExpression --|> Expression 
MultiplyExpression --|> Expression 
NumberExpression --|> Expression 
PlusExpression --|> Expression 
@enduml