package Ġnet . pure al . traits . math . operations Ċ Ċ import Ġnet . pure al . traits . math .* Ċ import Ġnet . pure al . traits . Constructor 2 Ċ Ċ public Ġtrait ĠMultip lication Value Ġ: ĠReal Binary Operation Ġ{ ĊĊĠĠĠ Ġpublic Ġcompanion Ġobject Ġ: ĠConstructor 2 < Multip lication Value , ĠReal , ĠReal > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinvoke ( a : ĠReal , Ġb : ĠReal ): ĠMultip lication Value Ġ= Ġobject Ġ: ĠMultip lication Value , ĠCalcul atable () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġsub Reals : ĠArray < Real > Ġ= Ġarray ( a , Ġb ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġconstructor : ĠConstructor 2 < Multip lication Value , ĠReal , ĠReal > Ġget () Ġ= ĠMultip lication Value ĊĊĠĠĠ Ġfinal Ġoverride Ġval Ġpriority : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ+ 5 ĊĊĠĠĠ Ġoverride Ġval Ġdescription : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ" Multip lication " ĊĊĠĠĠ Ġfinal Ġoverride Ġval Ġoperation Sign : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ"*" ĊĊĠĠĠ Ġfinal Ġoverride Ġval Ġis Order Dependent : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġapproximate (): ĠInternal Real Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue 1 . approx imate () Ġtry Times Ġvalue 2 . approx imate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcalculate (): ĠReal Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġs 1 : ĠReal Ġ= Ġvalue 1 . calculate () ĊĠĠĠĠĠĠĠ Ġval Ġs 2 : ĠReal Ġ= Ġvalue 2 . calculate () ĊĠĠĠĠĠĠĠ Ġif Ġ( s 1 Ġis ĠReal Primitive Ġ&& Ġs 2 Ġis ĠReal Primitive ) Ġreturn Ġreal ( s 1 . value Ġ* Ġs 2 . value ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġreturn Ġthis Ġif Ġno Ġsimpl ification Ġis Ġpossible ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// ĠCode Ġe aster - egg : ĠThe Ġfirst Ġfactor Ġgets Ġdis crimin ated Ġby Ġthis Ġfunction , Ġit Ġalways Ġfeels Ġnegative Ġafterwards ĊĠĠĠ Ġoverride Ġfun Ġminus (): ĠMultip lication Value Ġ= ĠMultip lication Value . invoke (- value 1 , Ġvalue 2 ) ĊĊĠĠĠ Ġoverride Ġval Ġis Zero : ĠBoolean Ġget () Ġ= Ġvalue 1 . is Zero Ġ|| Ġvalue 2 . is Zero ĊĊĠĠĠ Ġoverride Ġval Ġis Positive : ĠBoolean Ġget () Ġ= Ġ!( value 1 . is Positive Ġxor Ġvalue 2 . is Positive ) Ċ Ċ }