package Ġ_ 0 5 _ O OP Ċ Ċ import Ġutil . execute Ċ import Ġkotlin . properties . Deleg ates Ċ import Ġkotlin . reflect . K Property ĊĊ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġexecute (:: ex 1 , :: ex 2 , :: ex 3 , :: ex 4 , :: ex 5 , :: ex 6 , :: ex 7 ) Ċ } Ċ Ċ /** Ċ Ġ* ĠImplement aÃ§Ã£o Ġpor Ġdeleg aÃ§Ã£o Ċ Ġ*/ Ċ interface ĠBase 1 Ġ{ ĊĠĠĠ Ġfun Ġprintln () Ċ } Ċ Ċ private Ġfun Ġex 1 () Ġ{ ĊĠĠĠ Ġclass ĠBase Impl ( val Ġx : ĠInt ) Ġ: ĠBase 1 Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġprintln () Ġ= Ġprintln ( x ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠDerived ( b : ĠBase 1 ) Ġ: ĠBase 1 Ġby Ġb ĊĊĠĠĠ Ġval Ġb Ġ= ĠBase Impl ( 1 0 ) ĊĠĠĠ ĠDerived ( b ). println () Ċ } ĊĊ Ċ /** Ċ Ġ* ĠS ob re sc rev endo Ġum ĠmÃ©todo Ġimplement ado Ġpor Ġdeleg aÃ§Ã£o Ċ Ġ*/ Ċ interface ĠBase 2 Ġ{ ĊĠĠĠ Ġfun Ġprint () ĊĠĠĠ Ġfun Ġprintln () Ċ } Ċ Ċ private Ġfun Ġex 2 () Ġ{ ĊĠĠĠ Ġclass ĠBase Impl ( val Ġx : ĠInt ) Ġ: ĠBase 2 Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġprint () Ġ= Ġprint ( x ) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġprintln () Ġ= Ġprintln ( x ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠDerived ( b : ĠBase 2 ) Ġ: ĠBase 2 Ġby Ġb Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġprint () Ġ= Ġprint (" Derived ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġb Ġ= ĠBase Impl ( 1 0 ) ĊĠĠĠ ĠDerived ( b ). print () ĊĠĠĠ ĠDerived ( b ). println () Ċ } ĊĊ Ċ /** Ċ Ġ* ĠA Ġclasse Ġcon cre ta Ġus ada Ġna Ġimplement aÃ§Ã£o Ġpor Ġdeleg aÃ§Ã£o ĠnÃ£o Ġcon seg ue Ġa cess ar Ġatribut os Ġsobre sc rit os . Ċ Ġ*/ Ċ private Ġfun Ġex 3 () Ġ{ ĊĠĠĠ Ġclass ĠBase Impl ( val Ġx : ĠInt ) Ġ: ĠBase 3 Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġmessage Ġ= Ġ" Base Impl : Ġx Ġ= Ġ$ x " ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġprint () Ġ= Ġprint ( message ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠDerived ( b : ĠBase 3 ) Ġ: ĠBase 3 Ġby Ġb Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġmessage Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Message Ġof ĠDerived " ĠĠĠĠ Ġ// ĠThis Ġproperty Ġis Ġnot Ġaccessed Ġfrom Ġb 's Ġimplementation Ġof Ġ` print ` ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġb Ġ= ĠBase Impl ( 1 0 ) ĊĠĠĠ Ġval Ġderived Ġ= ĠDerived ( b ) ĊĠĠĠ Ġderived . print () ĊĠĠĠ Ġprintln ( derived . message ) Ċ } Ċ interface ĠBase 3 Ġ{ ĊĠĠĠ Ġval Ġmessage : ĠString ĊĠĠĠ Ġfun Ġprint () Ċ } ĊĊĊĊĊĊ Ċ /** Ċ Ġ* ĠDeleg aÃ§Ã£o Ġde Ġpropried ades Ċ Ġ*/ Ċ private Ġfun Ġex 4 () Ġ{ ĊĠĠĠ Ġclass ĠDelegate Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġvalue : ĠString Ġ= Ġ" initial Ġvalue " ĊĠĠĠĠĠĠĠ Ġoperator Ġfun ĠgetValue ( this ref : ĠAny ?, Ġproperty : ĠK Property < *> ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("$ this ref , Ġthank Ġyou Ġfor Ġdeleg ating Ġthe Ġ${ property . visibility } Ġproperty Ġ'${ property . name }' Ġto Ġ$ this !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis . value ; ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoperator Ġfun ĠsetValue ( this ref : ĠAny ?, Ġproperty : ĠK Property <* >, Ġvalue : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("' $ value ' Ġhas Ġbeen Ġassigned Ġto Ġ'${ property . name }' Ġin Ġ$ this ref .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . value Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass Ġexample Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġp : ĠString Ġby ĠDelegate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġe Ġ= Ġexample () ĊĠĠĠ Ġprintln ( e . p ) ĊĠĠĠ Ġe . p Ġ= Ġ" New Ġvalue " Ċ } ĊĊĊĊĊ Ċ /** Ċ Ġ* ĠLazy Ġdelegate Ċ Ġ*/ Ċ private Ġfun Ġex 5 () Ġ{ ĊĠĠĠ Ġval Ġlazy Value : ĠString Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" computed !") ĊĠĠĠĠĠĠĠ Ġ" Hello " ĊĠĠĠ Ġ} ĊĠĠĠ Ġprintln ( lazy Value ) ĊĠĠĠ Ġprintln ( lazy Value ) Ċ } ĊĊĊĊĊ Ċ /** Ċ Ġ* ĠObservable Ġdelegate Ċ Ġ*/ Ċ private Ġfun Ġex 6 () Ġ{ ĊĠĠĠ Ġvar Ġname : ĠString Ġby ĠDeleg ates . observable ("< no Ġname >") Ġ{ Ġprop , Ġold , Ġnew Ġ-> Ġprintln ("$ old Ġ-> Ġ$ new ") Ġ} ĊĠĠĠ Ġprintln ( name ) ĊĠĠĠ Ġname Ġ= Ġ" no vo Ġnome " ĊĠĠĠ Ġprintln ( name ) Ċ } ĊĊĊĊĊ Ċ /** Ċ Ġ* ĠMap Ġdelegate Ċ Ġ*/ Ċ private Ġfun Ġex 7 () Ġ{ ĊĠĠĠ Ġ// Read Ġonly Ġproperties ĊĠĠĠ Ġval Ġmap Ġ= Ġmap Of < String , ĠAny ?> (" nome " Ġto Ġ" jo Ã£o ", Ġ" idade " Ġto Ġ 3 2 ) ĊĠĠĠ Ġval Ġnome : ĠString Ġby Ġmap ĊĠĠĠ Ġval Ġid ade : ĠInt Ġby Ġmap ĊĠĠĠ Ġprintln (" nome =$ nome ") ĊĠĠĠ Ġprintln (" idade =$ idade ") ĊĊĠĠĠ Ġ// Ġread Ġand Ġwrite Ġproperties ĊĠĠĠ Ġval Ġmutable Map Ġ= Ġmutable Map Of < String , ĠAny ?> () ĊĠĠĠ Ġvar Ġout ro Nome : ĠString Ġby Ġmutable Map ĊĠĠĠ Ġvar Ġout ra Id ade Ġ: ĠInt Ġby Ġmutable Map ĊĠĠĠ Ġout ra Id ade Ġ= Ġ 2 0 ĊĠĠĠ Ġout ro Nome Ġ Ġ= Ġ" out ro Ġjo Ã£o " ĊĠĠĠ Ġprintln (" out ra Id ade =$ out ra Id ade ") ĊĠĠĠ Ġprintln (" out ro Nome =$ out ro Nome ") ĊĠĠĠ Ġprintln ( mutable Map ) Ċ } ĊĊĊ