Slide 1

Slide 1 text

0 40 2 4 4 4 / 0 1 2 02

Slide 2

Slide 2 text

 $,2*/%-,.+3/#'"#  $  &  $ (13,!&

Slide 3

Slide 3 text

2 2 1 32

Slide 4

Slide 4 text

U 2 U 1 . 3 J

Slide 5

Slide 5 text

.

Slide 6

Slide 6 text

. public class Fight { private State state = new State(); private Player player1, player2; public Fight(Player player1, Player player2) { this.player1 = player1; this.player2 = player2; } ... public void attack(Player attacker, Weapon weapon) { Player opponent = getOpponentOf(attacker); int damage = calculateDamage(opponent, weapon); opponent.setHp(opponent.getHp() - damage); Utility.updatePlayer(opponent); updateState(); } public State getState() { return state; } ... }

Slide 7

Slide 7 text

. public class FightTest { @Test public void testAttack() { Player player1 = new Player(); Player player2 = new Player(); Weapon weapon = new Weapon(); Fight fight = new Fight(player1, player2); fight.attack(player1, weapon); fight.attack(player1, weapon); fight.attack(player1, weapon); State state = fight.getState(); assertThat(state.isFinished(), is(true)); } }

Slide 8

Slide 8 text



Slide 9

Slide 9 text

public class Fight { private State state = new State(); private Player player1, player2; public Fight(Player player1, Player player2) { this.player1 = player1; this.player2 = player2; } ... public void attack(Player attacker, Weapon weapon) { Player opponent = getOpponentOf(attacker); int damage = calculateDamage(opponent, weapon); opponent.setHp(opponent.getHp() - damage); Utility.updatePlayer(opponent); updateState(); } public State getState() { return state; } ... } .

Slide 10

Slide 10 text

B . D public class Fight { private State state = new State(); private Player player1, player2; public Fight(Player player1, Player player2) { this.player1 = player1; this.player2 = player2; } ... public void attack(Player attacker, Weapon weapon) { Player opponent = getOpponentOf(attacker); int damage = calculateDamage(opponent, weapon); opponent.setHp(opponent.getHp() - damage); Utility.updatePlayer(opponent); updateState(); } public State getState() { return state; } ... } .

Slide 11

Slide 11 text

public class Fight { private State state = new State(); private Player player1, player2; public Fight(Player player1, Player player2) { this.player1 = player1; this.player2 = player2; } ... public void attack(Player attacker, Weapon weapon) { Player opponent = getOpponentOf(attacker); int damage = calculateDamage(opponent, weapon); opponent.setHp(opponent.getHp() - damage); Utility.updatePlayer(opponent); updateState(); } public State getState() { return state; } ... } .

Slide 12

Slide 12 text

2 .

Slide 13

Slide 13 text

Slide 14

Slide 14 text

)  )) ) ( )    

Slide 15

Slide 15 text

()      <>    

Slide 16

Slide 16 text

F . interface PlayerUpdater { public void updatePlayer(Player player); } F

Slide 17

Slide 17 text

public class PlayerUpdaterImpl implements PlayerUpdater { @Override public void updatePlayer(Player player) { Utility.updatePlayer(player); } } .

Slide 18

Slide 18 text

B . public class Fight { private State state = new State(); private Player player1, player2; private final PlayerUpdater updater; public Fight(Player player1, Player player2) { this(player1, player2, new PlayerUpdaterImpl()); } protected Fight(Player player1, Player player2, PlayerUpdater updater) { this.player1 = player1; this.player2 = player2; this.updater = updater; } ... public void attack(Player attacker, Weapon weapon) { Player opponent = getOpponentOf(attacker); int damage = calculateDamage(opponent, weapon); opponent.setHealth(opponent.getHealth() - damage); updater.updatePlayer(opponent); updateState(); } } . P U . . .. . F

Slide 19

Slide 19 text

P . ( ( public class Fight { private State state = new State(); private Player player1, player2; private final PlayerUpdater updater; public Fight(Player player1, Player player2) { this(player1, player2, new PlayerUpdaterImpl()); } protected Fight(Player player1, Player player2, PlayerUpdater updater) { this.player1 = player1; this.player2 = player2; this.updater = updater; } ... public void attack(Player attacker, Weapon weapon) { Player opponent = getOpponentOf(attacker); int damage = calculateDamage(opponent, weapon); opponent.setHealth(opponent.getHealth() - damage); updater.updatePlayer(opponent); updateState(); } } ) ) . I U B D ( I ( ( I F

Slide 20

Slide 20 text

import static org.mockito.Mockito.*; public class FightTest { @Test public void testAttack() { Player player1 = new Player(); Player player2 = new Player(); Weapon weapon = new Weapon(); // PlayerUpdater    PlayerUpdater updater = mock(PlayerUpdater.class); // Fight   Fight fight = new Fight(player1, player2, updater); fight.registerHit(player1, weapon); fight.registerHit(player1, weapon); fight.registerHit(player1, weapon); State state = fight.getState(); assertThat(state.isFinished(), is(true)); // updatePlayer() 3   verify(updater, times(3)).updatePlayer(player2); } } M . F P U F

Slide 21

Slide 21 text

I • I • • I B • D J B D J • • B D J • • • A

Slide 22

Slide 22 text

I • • ( • g • JgW P • O D • g • • ( • e • ( Vc ) • / l g A • aj Aa g • j • u B t

Slide 23

Slide 23 text

yw • yw fo a • 2101 • yw fmea • p wcD m p D w • c • I m p w • . • 385 2/ • • t mD n p wc p w c cp • W myw c dmea • JP n wn Or p • :AA B8A 78 4 8 A # # # 9

Slide 24

Slide 24 text

• • )( ( • PJ • B H P • HAD • PB • • - ) • O • H • S H I

Slide 25

Slide 25 text

• O B • • B • P D AP • D • P • • • J • . e e • D B J • Wb

Slide 26

Slide 26 text

.

Slide 27

Slide 27 text

• ) • ) • ( ) • • • C I • • •

Slide 28

Slide 28 text

• ( ) - • ( ( (

Slide 29

Slide 29 text



Slide 30

Slide 30 text

c • n o tp c a J ejr E e e • n o tp e D e • n o tp I jr f • ) ) () 3 ) a t • ) ) ( ( d f

Slide 31

Slide 31 text

C B • c e E J • M a FJ • d J • 3 J

Slide 32

Slide 32 text

1. • H UaS u • f I gJ jP • L • 7 _ - - • vR WE c T WE T c D? •