@startuml

package com.iluwatar.strangler {
    class App {
        + main(args : String[]) {static}
    }

    class OldArithmetic {
        - LOGGER : Logger {static}
        - VERSION : String {static}
        - source : OldSource
        + sum(nums : int...)
        + mul(nums : int...)
    }

    class HalfArithmetic {
        - LOGGER : Logger {static}
        - VERSION : String {static}
        - oldSource : OldSource
        - newSource : HalfSource
        + sum(nums : int...)
        + mul(nums : int...)
        + ifHasZero(nums : int...)
    }

    class NewArithmetic {
        - LOGGER : Logger {static}
        - VERSION : String {static}
        - source : NewSource
        + sum(nums : int...)
        + mul(nums : int...)
        + ifHasZero(nums : int...)
    }

    class OldSource {
        - LOGGER : Logger {static}
        - VERSION : String {static}
        + accumulateSum(nums : int...)
        + accumulateMul(nums : int...)
    }

    class HalfSource {
        - LOGGER : Logger {static}
        - VERSION : String {static}
        + accumulateSum(nums : int...)
        + ifNonZero(nums : int...)
    }

    class NewSource {
        - LOGGER : Logger {static}
        - VERSION : String {static}
        + accumulateSum(nums : int...)
        + accumulateMul(nums : int...)
        + ifNonZero(nums : int...)
    }
}
OldArithmetic o--> OldSource
HalfArithmetic o--> OldSource
HalfArithmetic o--> HalfSource
NewArithmetic o--> NewSource
@enduml