Slide 1

Slide 1 text

ͳͥ୭΋͜͏ॻ͍ͯ͘Εͳ͍ %FQFOEFODZ*OKFDUJPOೖ໳ TBJLPV LPKJTBJLJ ਅ

Slide 2

Slide 2 text

͓·͑͸୭ ͓ͳ·͑ɿࠤഢߛೋʢ͍͖͜͞͏͡ʣ ͱ͜Ζɿ෱Ԭʗେࡕ ͭͿ΍͖ɿIUUQTUXJUUFSDPNTBJLPV ͗ͬ͸ͿɿIUUQTHJUIVCDPNLPKJTBJLJ ͿΖ͙ɿIUUQJSPOZIBUFOBCMPHDPN

Slide 3

Slide 3 text

%*ೖ໳ʹ͸؊͕ॻ͔Εͯ ແ͍ʢେ൒ʣ

Slide 4

Slide 4 text

ਅͷ%*ೖ໳Λ͓ݟͤ͠· ͠ΐ͏ ʆɾТɾ

Slide 5

Slide 5 text

͍ΘΏΔzೖ໳αΠτz Ұ୴๨Ε·͠ΐ͏

Slide 6

Slide 6 text

ΞδΣϯμ %*Λz֮͑Δz %*Λzղ͘z ·ͱΊ

Slide 7

Slide 7 text

ΞδΣϯμ %*Λz֮͑Δz %*Λzղ͘z ·ͱΊ

Slide 8

Slide 8 text

ૣ଎ίʔυΛݟ·͠ΐ͏

Slide 9

Slide 9 text

class GasolineCar { private GasolineEngine engine; constructor() { this.engine = new GasolineEngine(); } startEngine() { this.engine.start(); } accelEngine() { this.engine.accelerate(); } } ˞ٙࣅίʔυͰ͢

Slide 10

Slide 10 text

class DieselCar { private DieselEngine engine; constructor() { this.engine = new DieselEngine(); } startEngine() { this.engine.start(); } accelEngine() { this.engine.accelerate(); } }

Slide 11

Slide 11 text

ͳΜͱ͔͍ͨ͠ɾɾɾ &OHJOFҎ֎͸࠶ར༻Ͱ͖ͦ͏ &OHJOF΋࢖͍ํʢTUBSUͱ͔ʣ͸ಉͬ͡Ά͍ class GasolineCar { private GasolineEngine engine; constructor() { this.engine = new GasolineEngine(); } startEngine() { this.engine.start(); } accelEngine() { this.engine.accelerate(); } } class DieselCar { private DieselEngine engine; constructor() { this.engine = new DieselEngine(); } startEngine() { this.engine.start(); } accelEngine() { this.engine.accelerate(); } }

Slide 12

Slide 12 text

interface Engine { void start(); void accelerate(); } class Car { private Engine engine; public Car(Engine _engine) { this.engine = _engine; } void startEngine() { this.engine.start(); } void accelEngine() { this.engine.accelerate(); } }

Slide 13

Slide 13 text

interface Engine { void start(); void accelerate(); } class Car { private Engine engine; public Car(Engine _engine) { this.engine = _engine; } void startEngine() { this.engine.start(); } void accelEngine() { this.engine.accelerate(); } } *OUFSGBDFΛ Ҿ਺Ͱ౉ͤ͹εοΩϦʂ

Slide 14

Slide 14 text

Ҏ্ʂ %*͓ΘΓʂ

Slide 15

Slide 15 text

΍ͬͨͶʂ

Slide 16

Slide 16 text

͸ʁ z࢖͍ํ͸ಉ͚ͩ͡Ͳಈ͖͕ҧ͏Πϯελϯεz ͸ɺ࢖͏৔ॴΑΓ΋֎͔Β༩͑Ε͹ղܾʂ

Slide 17

Slide 17 text

͸ʁ z࢖͍ํ͸ಉ͚ͩ͡Ͳಈ͖͕ҧ͏Πϯελϯεz ͸ɺ࢖͏৔ॴΑΓ΋֎͔Β༩͑Ε͹ղܾʂ %*ͷߟ͑ํ͸ʮ͜Ε͚ͩʯʂϚδͰɻ

Slide 18

Slide 18 text

֮͋͑͞Α͏ʂ z࢖͍ํ͸ಉ͚ͩ͡Ͳಈ͖͕ҧ͏Πϯελϯεz

Slide 19

Slide 19 text

֮͋͑͞Α͏ʂ z࢖͍ํ͸ಉ͚ͩ͡Ͳಈ͖͕ҧ͏Πϯελϯεz z࢖͍ํ͸ಉ͚ͩ͡Ͳಈ͖͕ҧ͏Πϯελϯεz

Slide 20

Slide 20 text

֮͋͑͞Α͏ʂ z࢖͍ํ͸ಉ͚ͩ͡Ͳಈ͖͕ҧ͏Πϯελϯεz z࢖͍ํ͸ಉ͚ͩ͡Ͳಈ͖͕ҧ͏Πϯελϯεz z࢖͍ํ͸ಉ͚ͩ͡Ͳಈ͖͕ҧ͏Πϯελϯεz

Slide 21

Slide 21 text

֮͋͑͞Α͏ʂ z࢖͍ํ͸ಉ͚ͩ͡Ͳಈ͖͕ҧ͏Πϯελϯεz z࢖͍ํ͸ಉ͚ͩ͡Ͳಈ͖͕ҧ͏Πϯελϯεz z࢖͍ํ͸ಉ͚ͩ͡Ͳಈ͖͕ҧ͏Πϯελϯεz

Slide 22

Slide 22 text

ΞδΣϯμ %*Λz֮͑Δz %*Λzղ͘z ·ͱΊ

Slide 23

Slide 23 text

Α͋͘Δz%*ͷޮೳz ࢓༷มߋʹڧ͘ͳΔ ςετ͕͠΍͘͢ͳΔ

Slide 24

Slide 24 text

࢓༷มߋʹڧ͘ͳΔ

Slide 25

Slide 25 text

࢓༷มߋʹڧ͘ͳΔ ʹ҆શʹมߋͰ͖Δ

Slide 26

Slide 26 text

࢓༷มߋʹڧ͘ͳΔ ʹ҆શʹมߋͰ͖Δ ʹӨڹൣғ͕ݮΔ

Slide 27

Slide 27 text

%*લ class Owner { main() { GasolineCar gasolineCar = New GasolineCar(); DieselCar dieselCar = New DieselCar(); } } class GasolineCar {} class DieselCar {} )ZCSJE$BSΛ௥Ճ ͠Α͏

Slide 28

Slide 28 text

%*લ class Owner { main() { GasolineCar gasolineCar = New GasolineCar(); DieselCar dieselCar = New DieselCar(); // ௥Ճ HybridCar hybridCar = New HybridCar(); } } class GasolineCar {} class DieselCar {} class HybridCar { private HybridEngine engine; public HybridCar() { this.engine = new HybridEngine(); } startEngine() { this.engine.start(); } accelEngine() { this.engine.accelerate(); } } ͜ͷ͘Β͍௥Ճ

Slide 29

Slide 29 text

%*ޙ class Owner { main() { GasolineEngine gasolineEngine = new GasolineEngine(); Car gasolineCar = new Car(gasolineEngine); DieselEngine dieselEngine = new DieselEngine(); Car dieselCar = new Car(dieselEngine); } } interface Engine { void start(); void accelerate(); } class Car { private Engine engine; public Car(Engine _engine) { this.engine = _engine; } void startEngine() { this.engine.start(); } void accelEngine() { this.engine.accelerate(); } }

Slide 30

Slide 30 text

%*ޙ class Owner { main() { GasolineEngine gasolineEngine = new GasolineEngine(); Car gasolineCar = new Car(gasolineEngine); DieselEngine dieselEngine = new DieselEngine(); Car dieselCar = new Car(dieselEngine); // ௥Ճ HybridEngine hybridEngine = new HybridEngine(); Car hybridCar = new Car(hybridEngine); } } interface Engine { void start(); void accelerate(); } class Car { private Engine engine; public Car(Engine _engine) { this.engine = _engine; } void startEngine() { this.engine.start(); } void accelEngine() { this.engine.accelerate(); } } ͜Ε͚ͩͰ0,

Slide 31

Slide 31 text

࢓༷มߋʹڧ͘ͳͬͨʂ

Slide 32

Slide 32 text

ςετ͕͠΍͘͢ͳΔ

Slide 33

Slide 33 text

ςετ͕͠΍͘͢ͳΔ ʹग़ೖޱ͕҆ఆ͢Δ

Slide 34

Slide 34 text

ςετ͕͠΍͘͢ͳΔ ʹग़ೖޱ͕҆ఆ͢Δ ʹΠϯλϑΣʔεͷ ɹ௥Ճɾมߋ͕ݮΔ

Slide 35

Slide 35 text

%*લ class Owner { main() { GasolineCar gasolineCar = New GasolineCar(); DieselCar dieselCar = New DieselCar(); // ௥Ճ HybridCar hybridCar = New HybridCar(); } } class GasolineCar {} class DieselCar {} class HybridCar { private HybridEngine engine; public HybridCar() { this.engine = new HybridEngine(); } startEngine() { this.engine.start(); } accelEngine() { this.engine.accelerate(); } }

Slide 36

Slide 36 text

%*લ class Owner { main() { GasolineCar gasolineCar = New GasolineCar(); DieselCar dieselCar = New DieselCar(); // ௥Ճ HybridCar hybridCar = New HybridCar(); } } class GasolineCar {} class DieselCar {} class HybridCar { private HybridEngine engine; public HybridCar() { this.engine = new HybridEngine(); } startEngine() { this.engine.start(); } accelEngine() { this.engine.accelerate(); } } ૿͑ͨΠϯλϑΣʔε

Slide 37

Slide 37 text

%*લ class Owner { main() { GasolineCar gasolineCar = New GasolineCar(); DieselCar dieselCar = New DieselCar(); // ௥Ճ HybridCar hybridCar = New HybridCar(); } } class GasolineCar {} class DieselCar {} class HybridCar { private HybridEngine engine; public HybridCar() { this.engine = new HybridEngine(); } startEngine() { this.engine.start(); } accelEngine() { this.engine.accelerate(); } } ςετ͢Δൣғ

Slide 38

Slide 38 text

%*ޙ class Owner { main() { GasolineEngine gasolineEngine = new GasolineEngine(); Car gasolineCar = new Car(gasolineEngine); DieselEngine dieselEngine = new DieselEngine(); Car dieselCar = new Car(dieselEngine); // ௥Ճ HybridEngine hybridEngine = new HybridEngine(); Car hybridCar = new Car(hybridEngine); } } interface Engine { void start(); void accelerate(); } class Car { private Engine engine; public Car(Engine _engine) { this.engine = _engine; } void startEngine() { this.engine.start(); } void accelEngine() { this.engine.accelerate(); } }

Slide 39

Slide 39 text

%*ޙ class Owner { main() { GasolineEngine gasolineEngine = new GasolineEngine(); Car gasolineCar = new Car(gasolineEngine); DieselEngine dieselEngine = new DieselEngine(); Car dieselCar = new Car(dieselEngine); // ௥Ճ HybridEngine hybridEngine = new HybridEngine(); Car hybridCar = new Car(hybridEngine); } } interface Engine { void start(); void accelerate(); } class Car { private Engine engine; public Car(Engine _engine) { this.engine = _engine; } void startEngine() { this.engine.start(); } void accelEngine() { this.engine.accelerate(); } } ૿͑ɾɾɾͯͳ͍ʂ

Slide 40

Slide 40 text

%*ޙ class Owner { main() { GasolineEngine gasolineEngine = new GasolineEngine(); Car gasolineCar = new Car(gasolineEngine); DieselEngine dieselEngine = new DieselEngine(); Car dieselCar = new Car(dieselEngine); // ௥Ճ HybridEngine hybridEngine = new HybridEngine(); Car hybridCar = new Car(hybridEngine); } } interface Engine { void start(); void accelerate(); } class Car { private Engine engine; public Car(Engine _engine) { this.engine = _engine; } void startEngine() { this.engine.start(); } void accelEngine() { this.engine.accelerate(); } } ͜ͷྲྀΕ͚ͩ ςετ͢Ε͹0,

Slide 41

Slide 41 text

ςετ͠΍͘͢ͳͬͨʂ

Slide 42

Slide 42 text

Α͋͘Δz%*ͷޮೳz ࢓༷มߋʹڧ͘ͳΔ ςετ͕͠΍͘͢ͳΔ

Slide 43

Slide 43 text

Α͋͘Δz%*ͷޮೳz ࢓༷มߋʹڧ͘ͳΔ ςετ͕͠΍͘͢ͳΔ 2&% ʢূ໌ऴྃʣ

Slide 44

Slide 44 text

͜͜·ͰͰ͖ͨਓ͸ ࣍ʹԿΛߟ͑Δʁ

Slide 45

Slide 45 text

͜͜·ͰͰ͖ͨਓ͸ ࣍ʹԿΛߟ͑Δʁ ͦ΋ͦ΋ΠϯελϯεΛOFX͢Δॲཧ΋ॻ͖ͨ ͘ͳ͍ʂ

Slide 46

Slide 46 text

͜͜·ͰͰ͖ͨਓ͸ ࣍ʹԿΛߟ͑Δʁ ͦ΋ͦ΋ΠϯελϯεΛOFX͢Δॲཧ΋ॻ͖ͨ ͘ͳ͍ʂ ςετͷ࣌ͱຊ൪ͷ࣌ͰΠϯελϯεΛ੾Γସ ͍͚͑ͨͲɺίʔυ৮Γͨ͘ͳ͍ʂ

Slide 47

Slide 47 text

͜͜·ͰͰ͖ͨਓ͸ ࣍ʹԿΛߟ͑Δʁ ͦ΋ͦ΋ΠϯελϯεΛOFX͢Δॲཧ΋ॻ͖ͨ ͘ͳ͍ʂ ςετͷ࣌ͱຊ൪ͷ࣌ͰΠϯελϯεΛ੾Γସ ͍͚͑ͨͲɺίʔυ৮Γͨ͘ͳ͍ʂ ͦΜͳপͳྟػԠมͳػೳΛΘ͟Θࣗ͟෼Ͱ࡞ Γͨ͘ͳ͍ʂ

Slide 48

Slide 48 text

͜͜·ͰͰ͖ͨਓ͸ ࣍ʹԿΛߟ͑Δʁ ͦ΋ͦ΋ΠϯελϯεΛOFX͢Δॲཧ΋ॻ͖ͨ ͘ͳ͍ʂ ςετͷ࣌ͱຊ൪ͷ࣌ͰΠϯελϯεΛ੾Γସ ͍͚͑ͨͲɺίʔυ৮Γͨ͘ͳ͍ʂ ͦΜͳপͳྟػԠมͳػೳΛΘ͟Θࣗ͟෼Ͱ࡞ Γͨ͘ͳ͍ʂ ΋ͬͱָʹɾɾɾ

Slide 49

Slide 49 text

͜͜·ͰͰ͖ͨਓ͸ ࣍ʹԿΛߟ͑Δʁ ͦ΋ͦ΋ΠϯελϯεΛOFX͢Δॲཧ΋ॻ͖ͨ ͘ͳ͍ʂ ςετͷ࣌ͱຊ൪ͷ࣌ͰΠϯελϯεΛ੾Γସ ͍͚͑ͨͲɺίʔυ৮Γͨ͘ͳ͍ʂ ͦΜͳপͳྟػԠมͳػೳΛΘ͟Θࣗ͟෼Ͱ࡞ Γͨ͘ͳ͍ʂ ΋ͬͱָʹɾɾɾ

Slide 50

Slide 50 text

4QSJOH%*ͷ৔߹ @Component class GasolineEngine { ... } @ComponentScan class MyApp { public static void main(String[] args) { ... } } class Car { @Autowired private Engine engine; public Car() { } ... }

Slide 51

Slide 51 text

4QSJOH%*ͷ৔߹ @Component class GasolineEngine { ... } @ComponentScan class MyApp { public static void main(String[] args) { ... } } class Car { @Autowired private Engine engine; public Car() { } ... }

Slide 52

Slide 52 text

4QSJOH%*ͷ৔߹ @Component class GasolineEngine { ... } @ComponentScan class MyApp { public static void main(String[] args) { ... } } class Car { @Autowired private Engine engine; public Car() { } ... } Ξϊςʔγϣϯ͚ͭΔ ͚ͩͰOFXͯ͠ϑΟʔϧυʹηο τͯ͘͠ΕΔ ʹ͍͢͝

Slide 53

Slide 53 text

͜Μͳ;͏ʹ %*ͯ͘͠ΕΔࠇຐज़ ʹ͍ΘΏΔz%*ίϯςφz

Slide 54

Slide 54 text

৽͍͠%*ίϯςφʹ ग़ձͬͨΒ

Slide 55

Slide 55 text

৽͍͠%*ίϯςφʹ ग़ձͬͨΒ ͲΜͳهड़ͰউखʹOFXͯ͘͠ΕΔ͔Λ஌Ζ͏ʂ

Slide 56

Slide 56 text

৽͍͠%*ίϯςφʹ ग़ձͬͨΒ ͲΜͳهड़ͰউखʹOFXͯ͘͠ΕΔ͔Λ஌Ζ͏ʂ ͲΜͳهड़Ͱউखʹ஫ೖͯ͘͠ΕΔ͔Λ஌Ζ͏ʂ

Slide 57

Slide 57 text

৽͍͠%*ίϯςφʹ ग़ձͬͨΒ ͲΜͳهड़ͰউखʹOFXͯ͘͠ΕΔ͔Λ஌Ζ͏ʂ ͲΜͳهड़Ͱউखʹ஫ೖͯ͘͠ΕΔ͔Λ஌Ζ͏ʂ ͲΜͳϧʔϧͰɺΠϯελϯεͱ஫ೖઌ͕ඥ͚ͮ ΒΕΔ͔Λ஌Ζ͏ʂ

Slide 58

Slide 58 text

4QSJOH%*ͷ৔߹ @Component(“engine”) class GasolineEngine implements Engine { ... } class Car { @Autowired private Engine engine; public Car() { } ... } @Component(“old_engine”) class DieselEngine implements Engine { ... }

Slide 59

Slide 59 text

4QSJOH%*ͷ৔߹ @Component(“engine”) class GasolineEngine implements Engine { ... } class Car { @Autowired private Engine engine; public Car() { } ... } @Component(“old_engine”) class DieselEngine implements Engine { ... }

Slide 60

Slide 60 text

ΞδΣϯμ %*Λz֮͑Δz %*Λzղ͘z ·ͱΊ

Slide 61

Slide 61 text

·ͱΊ %*͸z࢖͍ํ͸ಉ͚ͩ͡Ͳಈ͖͕ҧ͏Πϯελϯ εzΛ֎͔Β஫ೖͯ͠εοΩϦͤ͞Δ͜ͱɻ͋ͱ ͸શ෦ͦͷԆ௕ઢ্ɻ %*ίϯςφ͸ɺͪΐͬͱ໋ྩ͢Ε͹%*ͯ͘͠Ε Δศརͳ΍ͭɻ

Slide 62

Slide 62 text

͓·͚ z%*ίϯςφzͱ͍͏ݴ༿Λ ಄ʹམͱ͢ίπ

Slide 63

Slide 63 text

͜͏͡Όͳͯ͘

Slide 64

Slide 64 text

͜͏

Slide 65

Slide 65 text

Ͱɺ͜͏ ΦϒδΣΫτ Πϯελϯε԰ γϯάϧτϯ औΓଗ͑ͯ·͢ʂ ΦʔμʔϝΠυ ঝΓ·͢ʂ

Slide 66

Slide 66 text

TBJLPV LPKJTBJLJ ͓ΘΓ