@startuml package com.iluwatar.halfsynchalfasync { class App { - LOGGER : Logger {static} + App() - ap(i : long) : long {static} + main(args : String[]) {static} } ~class ArithmeticSumTask { - numberOfElements : long + ArithmeticSumTask(numberOfElements : long) + call() : Long + onError(throwable : Throwable) + onPostCall(result : Long) + onPreCall() } interface AsyncTask { + call() : O {abstract} + onError(Throwable) {abstract} + onPostCall(O) {abstract} + onPreCall() {abstract} } class AsynchronousService { - LOGGER : Logger {static} - service : ExecutorService + AsynchronousService(workQueue : BlockingQueue) + close() + execute(task : AsyncTask) } } ArithmeticSumTask ..+ App ArithmeticSumTask ..|> AsyncTask @enduml