Slide 1

Slide 1 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE %&-J()5803,4*OD ͳٕͥज़͕ͳ͍ͱ
 ໘ന͍ήʔϜ͕૑Εͳ͍ͷ͔ʁ 1SFTFOUFECZ(.0ΞϓϦΫϥ΢υ

Slide 2

Slide 2 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ࣗݾ঺հɿాଜ༞थ ΤετϙϦε఻ه ͱ͍͏ήʔϜʹಌΕͯ ήʔϜۀքʹೖΓ·ͨ͠

Slide 3

Slide 3 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ஫ɿ͓࿩͢Δͷ͸ ໘ന͍ήʔϜͷ ૑ΓํͰ͸͋Γ·ͤΜ

Slide 4

Slide 4 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ήʔϜ։ൃ ָ͠ΜͰ·͔͢ʁ

Slide 5

Slide 5 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ήʔϜ։ൃ͸ ະિ༗ͷةػʹ௚໘͍ͯ͠·͢

Slide 6

Slide 6 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ։ൃظؒɿ̍೥ʙ̏೥ ։ൃ༧ࢉɿ਺ԯʙ਺ेԯ ։ൃن໛ɿ਺ेਓʙඦਓ

Slide 7

Slide 7 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ήʔϜ։ൃʹσεϚʔν ͦΜͳ࿩΋Α͘ฉ͖·͢

Slide 8

Slide 8 text

ήʔϜۀք ࢒ࠅ෺ޠ

Slide 9

Slide 9 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ྫ͑͹

Slide 10

Slide 10 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ̎೥͔͚ͨ ׬੒ؒۙͷλΠτϧ ϓϩδΣΫτதࢭ

Slide 11

Slide 11 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ൃച͚ͨ͠ΕͲ όά͕ଟ͗ͯ͢ ϨϏϡʔ͕ࢄʑ

Slide 12

Slide 12 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE Α͏΍͘׬੒ ൃചޙϨϏϡʔΛΈΔͱ Ͳ͏΍ΒϢʔβʔ͞Μ͕ ๬Μͩ΋ͷͰ͸ͳ͔ͬͨʜʜ

Slide 13

Slide 13 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ࢮࢡྦྷʑ ͱ͍͏͜ͱ͸ ௝͍͠࿩Ͱ͸͋Γ·ͤΜ

Slide 14

Slide 14 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE Կނ͔ʁ

Slide 15

Slide 15 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE Ϣʔβʔࢹ఺ͷܽ೗ ࢼߦࡨޡͷෆ଍

Slide 16

Slide 16 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE Ϣʔβʔࢹ఺ͷܽ೗ ࣦഊͷଟ͘͸ɺ Ϣʔβʔ͕๬ΜͰ͍ͳ͍΋ͷΛ ఏڙ͍ͯ͠Δ ʮ։ൃऀ͕૑Γ͍ͨήʔϜΛ૑Δʯ ʮଘࡏ͠ͳ͍૝ఆϢʔβʔʯ

Slide 17

Slide 17 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ࢼߦࡨޡͷෆ଍ ࢓༷ॻʹ͸໘ന͘͢Δ࢓༷͸ॻ͍ͯͳ͍ ʮ͍ͭ͜͸࠷ߴʹ໘ന͍ͧʂʯ ͱ͍͏࢓༷ॻΛॻ͍ͯ͘ΕΔ ήʔϜσβΠφʔ͸ଘࡏ͠ͳ͍ Αͬͯɺࢼߦࡨޡ͕ඞਢͱͳΔ

Slide 18

Slide 18 text

ٕज़Ͱ ͦ͜ʹͲ͏ ཱͪ޲͔͏ͷ͔

Slide 19

Slide 19 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ٕज़͕ͳ͚Ε͹ ໘ന͍ήʔϜ͕૑Εͳ͍ʁ

Slide 20

Slide 20 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE Ͱ͸ɺٕज़͕͋Ε͹ ໘ന͍ήʔϜ͕ ૑ΕΔͷͰ͠ΐ͏͔ʁ

Slide 21

Slide 21 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ൱

Slide 22

Slide 22 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ෳࡶͳٕज़ ߴ౓ͳٕज़ ৽͍ٕ͠ज़ ͦΕ͸໘ന͞ͱ௚݁͠·ͤΜ

Slide 23

Slide 23 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ͳΒɺ ٕज़͸ඞཁͳ͍ͷͰ͠ΐ͏͔ʁ

Slide 24

Slide 24 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ൱

Slide 25

Slide 25 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ˓˓ͱ͍͏ ΞΠσΟΞ͕ ͋ΔΜ͚ͩͲʜʜ

Slide 26

Slide 26 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE 無理 いままでやったことないし…… 重すぎるし…… 時間ないし…… 前例ないし…… ざわざわ…… ざわざわ…… ざわざわ……

Slide 27

Slide 27 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ͜͏ͳΔͱ ΞΠσΟΞ͸ ࣺͯΒΕͯ͠·͍·͢

Slide 28

Slide 28 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ʮࣦഊΛڪΕɺϦεΫΛͱΒͳ͍ʯ ͜ΕΛଓ͚Δͱ ήʔϜ͕ࢮʹ·͢

Slide 29

Slide 29 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ͱ͸͍͑ɺ ແܭըʹ ૿ங͍ͯ͘͠ͱʜʜ

Slide 30

Slide 30 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE جຊγεςϜ ότϧ̖ ότϧ̗ ότϧ̘ ·ΔͰ่Ε͔͚ͷδΣϯΨʜʜ ότϧ% ότϧ& ௥ՃγεςϜ ότϧ

Slide 31

Slide 31 text

ඞཁͳٕज़ͱ͸ʁ

Slide 32

Slide 32 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE มԽʹରԠ͍ͯ͘͠ྗ

Slide 33

Slide 33 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ήʔϜ͸
 ΍Γ͍ͨ͜ͱʹ ݶք͕ͳ͍

Slide 34

Slide 34 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ͋Ε΋΍Γ͍ͨ ͜Ε΋΍Γ͍ͨ ͜Μͳ͜ͱ͕Ͱ͖ͨΒʜʜ

Slide 35

Slide 35 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE มԽʹڧ͍ઃܭΛ͢Δ

Slide 36

Slide 36 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ։ൃத΋ ͦͯ͠ ϦϦʔεޙ΋

Slide 37

Slide 37 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ࢼߦࡨޡΛॏͶΔͨΊͷ ٕज़ྗ

Slide 38

Slide 38 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ࣦഊΛڪΕͣɺ ϦεΫΛͱΓɺ ͦΕΛΧόʔͰ͖Δྗ

Slide 39

Slide 39 text

มԽʹߋ৽ͱ͸ʁ

Slide 40

Slide 40 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ੲͷίϯιʔϧήʔϜͰ͸ ʮ׬੒ͤ͞Ε͹ऴΘΓʯ ͱ͍͏ߟ͕͑͋Γ·ͨ͠

Slide 41

Slide 41 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ͔͠͠ɺ ࠓຆͲͷήʔϜ͸ Ξοϓσʔτͱ͍͏ ֓೦͕͋Γ·͢

Slide 42

Slide 42 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ̍೥ޙɺ̎೥ޙɺ̏೥ޙ ήʔϜ͕ Ͳ͏ͳ͍ͬͯΔ͔͸ ୭ʹ΋Θ͔Βͳ͍ͷͰ͢

Slide 43

Slide 43 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ͳͷͰɺ ʮมԽΛલఏͱͨ͠ઃܭʯ ͕ඞਢʹͳΓ·͢

Slide 44

Slide 44 text

ྑ͍ઃܭͱ͸ʁ

Slide 45

Slide 45 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ήʔϜΛ໘ന͍ͨ͘͠ͱ͖ʹ अຐʹͳΒͣ ΑΓ໘ന͘Ͱ͖Δ ॊೈͳߏ଄ʹ͓ͯ͘͜͠ͱ

Slide 46

Slide 46 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ήʔϜ։ൃͰඞͣى͜Δ ϑΟʔνϟʔɾΫϦʔϓ ͱ ࢓༷มߋ

Slide 47

Slide 47 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ϑΟʔνϟʔɾΫϦʔϓͱ͸ ػೳͷ௥Ճ͕Կ౓΋ߦΘΕ ͦͷ݁ՌɺෳࡶͰ ࢖͍ͮΒ͍΋ͷʹͳΔ͜ͱ

Slide 48

Slide 48 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ήʔϜ͸৮ͬͯΈͳ͚Ε͹ ༡ΜͰΈͳ͚Ε͹ ໘ന͍͔Ͳ͏͔Θ͔Βͳ͍

Slide 49

Slide 49 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ଈͪ มߋ͸ආ͚Δ͜ͱ͕Ͱ͖ͳ͍ ʮ࠷ॳʹશ෦ܾΊͯԼ͍͞ʯ͸ ήʔϜͰ͸Ͱ͖ͳ͍

Slide 50

Slide 50 text

Ͳ͏ର߅͢Δ͔

Slide 51

Slide 51 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ̑ͭͷॏཁͳࢦ਑ͱͳΔݪଇ

Slide 52

Slide 52 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ͨͩ͠ ݪଇओٛऀʹ ͳͬͯ͸͍͚ͳ͍͜ͱʹ ஫ҙ

Slide 53

Slide 53 text

୯Ұ੹೚ͷݪଇ ̍

Slide 54

Slide 54 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ΫϥεΛมߋ͢Δཧ༝͸ ̍ͭҎ্ଘࡏͯ͠͸ͳΒͳ͍ɻ ୯Ұ੹೚ͷݪଇ 5IF4JOHMF3FTQPOTJCJMJUZ1SJODJQMF431

Slide 55

Slide 55 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ໾ׂʢ੹೚ʣʹมߋཧ༝ ଈͪ ΫϥεΛมߋ͢Δཧ༝͸ ҰͭͰͳ͚Ε͹ͳΒͳ͍

Slide 56

Slide 56 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ҰͭͷΫϥεʗϞδϡʔϧ͸ Ұͭͷ੹೚͔͠ ࣋ͬͯ͸ͳΒͳ͍

Slide 57

Slide 57 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE class Programmer { // ԿͰ΋΍ΔϓϩάϥϚʔΫϥε public String Programming(); // ϓϩάϥϜΛ͢Δ public Document writeSpecification(); // ࢓༷ॻΛॻ͘ public GanttChart getNewestProgressAll(); // શମਐḿ } ͜ͷྫͰ͸ɺϓϩάϥϚʹ͋·Γʹ΋ଟ͘ͷ੹೚Λ ෛΘ͍ͤͯ·͢ɻ ਐḿͷ΍Γํ͕มΘΕ͹͜ͷΫϥεΛมߋɺ ࢓༷ॻͷܗ͕ࣜมΘΕ͹͜ͷΫϥεΛมߋɺ Կ͔͋Δ౓ʹ͜ͷΫϥεΛ৮ΔӋ໨ʹͳΓ·͢ɻ

Slide 58

Slide 58 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE class Programmer { public String Programming(); // ϓϩάϥϜΛ͢Δ } class GameDesigner { public Document writeSpecification(); // ࢓༷ॻΛॻ͘ } class ProjectManager { public GanttChart getNewestProgressAll(); // શମਐḿ } ໾ׂΛม͑ͯ͋͛Δ͜ͱͰɺγϯϓϧʹͳΓ·͢ɻ ͨͩ͠ɺצҧ͍͠΍͍͢ͷͰ͕͢ɺ ҰͭͷΫϥε͸Ұͭͷػೳɺͱ͍͏ҙຯͰ͸͋Γ·ͤΜɻ

Slide 59

Slide 59 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ྫ

Slide 60

Slide 60 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE Rectangle +Draw() +Area() Computational Geometry Application ジオメトリアプリ 計算させようとする Graphical Application 描画させようとする グラフィックアプリ GUI 責任が二つ!!! ࢀߟɿϩόʔτɾ$ɾϚʔνϯʢʣʮΞδϟΠϧιϑτ΢ΣΞ։ൃͷԞٛʯ4#ΫϦΤΠςΟϒ

Slide 61

Slide 61 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE Rectangle +Draw() Computational Geometry Application ジオメトリアプリ Graphical Application グラフィックアプリ GUI Geometric Rectangle +Area() 責任を分解 ࢀߟɿϩόʔτɾ$ɾϚʔνϯʢʣʮΞδϟΠϧιϑτ΢ΣΞ։ൃͷԞٛʯ4#ΫϦΤΠςΟϒ 責任は一つ!

Slide 62

Slide 62 text

ΦʔϓϯɾΫϩʔζυͷݪଇ ̎

Slide 63

Slide 63 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ιϑτ΢ΣΞͷߏ੒ཁૉ ʢΫϥεɺϞδϡʔϧɺؔ਺ͳͲʣ͸ ֦ுʹରͯ͠։͍͍ͯͯɺ मਖ਼ʹରͯ͠ ด͍ͯ͡ͳ͚Ε͹ͳΒͳ͍ɻ ΦʔϓϯɾΫϩʔζυͷݪଇ
 5IF0QFO$MPTFE1SJODJQMF0$1

Slide 64

Slide 64 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ֦ுʹରͯ͠։͔Ε͍ͯΔ ʹ࢓༷มߋʹڧ͍ ༷ʑͳΞΠσΟΞʹରԠͰ͖Δ

Slide 65

Slide 65 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE मਖ਼ʹରͯ͠ด͍ͯ͡Δ ʹΤϯόά͠ʹ͍͘ Ұ෦௚ͨ͠ΒશମʹӨڹ͢Δ ͱ͍͏ͷ͸ઈରʹආ͚Δ

Slide 66

Slide 66 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE 10:00ग़ࣾ 12:00MTG 13:00ϥϯν 19:00ؼ୐ ྫͱͯ͠ͷ͋Δ̍೔ɿ
 ͜͏ͨ͠ߏ଄ʢྲྀΕʣͰ͋Ε͹ɺ ॱংΛ͍Ε͔͑ͨΓɺ ׂΓࠐΈΛ͢Δ͜ͱ͕Ͱ͖Δɻ ݸʑ͕ૄ݁߹ͱݴ͑Δɻ 15:00MTG 17:00ษڧձ

Slide 67

Slide 67 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE 10:00 ग़ࣾ 10:30 A͞ΜͱMTG 11:00 A͞ΜMTG౿·͑ͯB͞ΜͱMTG 12:00 B͞ΜMTG౿·͑ͯεέδϡʔϧMTG 13:00 εέδϡʔϧMTG౿·͑ͯλεΫMTG 14:00 λεΫMTG౿·͑ͯΞαΠϯMTG 15:00 ΞαΠϯMTG౿·͑ͯ࠾༻MTG ྫͱͯ͠ͷ͋Δ̍೔ɿ
 ͜͏ͨ͠ྲྀΕʢߏ଄ʣ͸ɺ Կ͔Λલఏʹಈ͍͍ͯΔͨΊɺ ඇৗʹ༥௨͕ར͖ͮΒ͍ɻ Ұ͕ͭϦεέ͞ΕΔ͚ͩͰɺ ଞͷ.5(͕։࠵Ͱ͖ͳ͔ͬͨΓɺ ҙຯ͕ͳ͘ͳͬͯ͠·͏ɻ ݸʑ͕ີ݁߹ʹͳ͍ͬͯΔɻ

Slide 68

Slide 68 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ྫ

Slide 69

Slide 69 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE Client 具体的に実装されたClientがServerを利用している =オープン・クローズドの原則に反している Server Clientが別のServerを使いたいとき、
 Clientクラスを変更しなければならない ࢀߟɿϩόʔτɾ$ɾϚʔνϯʢʣʮΞδϟΠϧιϑτ΢ΣΞ։ൃͷԞٛʯ4#ΫϦΤΠςΟϒ

Slide 70

Slide 70 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE Client Client Interfaceという抽象クラスをつくる これはServerが実装するClientが使う口である ClientはServerとではなくInterfaceと会話する <> Client Interface Server Clientは Serverが別物になっても 気がつくことはない ࢀߟɿϩόʔτɾ$ɾϚʔνϯʢʣʮΞδϟΠϧιϑτ΢ΣΞ։ൃͷԞٛʯ4#ΫϦΤΠςΟϒ

Slide 71

Slide 71 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ଈͪ ʮ։͍͍ͯΔʯͱ͸ɺ ৼΔ෣͍Λ֦ுͰ͖Δ͜ͱ ʮด͍ͯ͡Δʯͱ͸ɺ ଞʹӨڹΛ༩͑ͳ͍͜ͱ

Slide 72

Slide 72 text

Ϧείϑͷஔ׵ݪଇ ̏

Slide 73

Slide 73 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ೿ੜܕ͸ ͦͷجຊܕͱ ஔ׵ՄೳͰͳ͚Ε͹ͳΒͳ͍ɻ -JTLPWͷஔ׵ݪଇ 5IF-JTLPW4VCTUJUVJPO1SJODJQMF-41

Slide 74

Slide 74 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE -JTLPWʢϦείϑʣ͸ ਓͷ໊લͳͷͰؾʹ͠ͳ͍

Slide 75

Slide 75 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE جຊܕʹͰ͖Δ͜ͱ͕ ೿ੜܕͰ Ͱ͖ͳ͘ͳͬͯ͸͍͚ͳ͍

Slide 76

Slide 76 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ʮਖ਼ํܗ͸௕ํܗͰ͋Δʯ

Slide 77

Slide 77 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE class Rectangle { // ௕ํܗ public Rectangle(int x, int y, int width, int height) { … } public void SetWidth(int width) { … } public void SetHeight(int height) { … } } class Square : Rectangle { // ௕ํܗΛܧঝͯ͠ਖ਼ํܗ public Square(int x, int y, int width, int height) { … } public void SetWidth(int width) { … } public void SetHeight(int height) { … } } ྫ͑͹ɺ௕ํܗΛܧঝͯ͠ਖ਼ํܗΛͭ͘Δ ͦΕ͸ਖ਼͍͔͠ʁ

Slide 78

Slide 78 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ౴ɿਖ਼͘͠ͳ͍ ਖ਼ํܗ͸ৗʹ 8JEUIʢ෯ʣ)FJHIUʢߴ͞ʣ Λຬͨ͢ඞཁ͕͋Δ

Slide 79

Slide 79 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE Αͬͯɺਖ਼ํܗͷ 4FU8JEUI4FU)FJHIU͸ɺ ௚ײʹ൓͢Δಈ࡞Λ͢Δ ͦͷͨΊɺਖ਼ํܗ͸௕ํܗͱ ஔ͖׵͑Δ͜ͱ͕Ͱ͖ͳ͍

Slide 80

Slide 80 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ਖ਼ํܗ͸௕ํܗͱ ஔ͖׵͑Δ͜ͱ͕Ͱ͖ͳ͍ ͱ͍͏͜ͱ͸ ܧঝͯ͠͸͍͚ͳ͍

Slide 81

Slide 81 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ஔ͖׵͑Δ΋ͷ͕ Ͱ͖ͳ͍΋ͷΛ ಉҰͷ΋ͷͱͯ͠ ѻͬͯ͸͍͚ͳ͍

Slide 82

Slide 82 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ྫ

Slide 83

Slide 83 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE Shape ShapeType Circle +Draw() Square +Draw() void DrawShape(Shape& s) { switch(s.type) { case Square: ((Square&)s).Draw(); break; case Circle: ((Circle&)s).Draw(); break; } これではCircleやSquareは
 Shapeの代わりに使えない。 ࢀߟɿϩόʔτɾ$ɾϚʔνϯʢʣʮΞδϟΠϧιϑτ΢ΣΞ։ൃͷԞٛʯ4#ΫϦΤΠςΟϒ Draw()
 がない

Slide 84

Slide 84 text

ґଘؔ܎ٯసͷݪଇ ̐

Slide 85

Slide 85 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE B ্ҐͷϞδϡʔϧ͸
 ԼҐͷϞδϡʔϧʹ
 ґଘͯ͠͸ͳΒͳ͍ɻ
 ͲͪΒͷϞδϡʔϧ΋
 ʮந৅ʯʹґଘ͢΂͖Ͱ͋Δɻ ґଘؔ܎ٯసͷݪଇ
 5IF%FQFOEFODZ*OWFSTJPO1SJODJQMF%*1

Slide 86

Slide 86 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE C ʮந৅ʯ͸࣮૷ͷৄࡉʹ
 ґଘͯ͠͸ͳΒͳ͍ɻ
 ࣮૷ͷৄࡉ͕
 ʮந৅ʯʹґଘ͢΂͖Ͱ͋Δɻ ґଘؔ܎ٯసͷݪଇ
 5IF%FQFOEFODZ*OWFSTJPO1SJODJQMF%*1

Slide 87

Slide 87 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ্ҐͷϞδϡʔϧ͸ ԼҐͷϞδϡʔϧʹ ґଘͯ͠͸͍͚·ͤΜ ͲͪΒ΋ ʮந৅ʯʹґଘ͢΂͖Ͱ͢

Slide 88

Slide 88 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ʮந৅ʯ͸ ࣮૷ͷৄࡉʹ ґଘͯ͠͸͍͚·ͤΜ ࣮૷ͷৄࡉ͕ ʮந৅ʹʯґଘ͢΂͖Ͱ͢

Slide 89

Slide 89 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE Ͳ͏͍͏͜ͱͰ͠ΐ͏͔ʁ

Slide 90

Slide 90 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ൶ΛΠϝʔδ͠·͢

Slide 91

Slide 91 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE υΞʹ͸υΞͦͷ΋ͷͱ υΞϊϒ͕͋Γ·͢ υΞ͕ϊϒʹґଘ͍ͯ͠Δͷ͔ʁ ϊϒ͕υΞʹґଘ͍ͯ͠Δͷ͔ʁ ͲͪΒͰ͠ΐ͏͔ʁ

Slide 92

Slide 92 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ྫ͑͹۩ମతʹଘࡏ͢Δ
 ʮమͷυΞʯʮ伴ͷ͔͔Δϊϒʯ
 ͸ʮ࣮૷ʯͰ͢ ʮந৅ʯͰ͋ΔʮυΞʯʮϊϒʯ
 ʹ໨Λ޲͚·͢

Slide 93

Slide 93 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ͦ͏Ͱ͢ ࣮૷Ͱ͋ΔʮమͷυΞʯ͸ ந৅Ͱ͋ΔʮυΞʯʹґଘ͍ͯ͠·͢ ࣮૷Ͱ͋Δʮ伴ͷ͔͔Δϊϒʯ͸ ந৅Ͱ͋Δʮϊϒʯʹґଘ͍ͯ͠·͢

Slide 94

Slide 94 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ྫ

Slide 95

Slide 95 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE Lamp +TurnOn() +TurnOff() Button +Poll() ButtonはPollでメッセージを受け取ると ボタンの状態からLampのTurnOn/TurnOffを呼び出し 明かりを灯すか消します。 これは何故間違っているのでしょうか? ButtonはLampに直接依存しているので、 他のスイッチを制御できません。 ࢀߟɿϩόʔτɾ$ɾϚʔνϯʢʣʮΞδϟΠϧιϑτ΢ΣΞ։ൃͷԞٛʯ4#ΫϦΤΠςΟϒ

Slide 96

Slide 96 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE <>
 ButtonServer +TurnOn() +TurnOff() Button +Poll() Lamp 上位とは何か?
 それは即ち「抽象」です。 Buttonが依存するのは、 ButtonServerというInterfaceで
 あるべきで、LampはButtonServerを
 実装すれば良いので依存が逆転します。 ࢀߟɿϩόʔτɾ$ɾϚʔνϯʢʣʮΞδϟΠϧιϑτ΢ΣΞ։ൃͷԞٛʯ4#ΫϦΤΠςΟϒ

Slide 97

Slide 97 text

ΠϯλʔϑΣΠε෼཭ͷݪଇ ̑

Slide 98

Slide 98 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ΫϥΠΞϯτʹɺ
 ΫϥΠΞϯτ͕ར༻͠ͳ͍
 ϝιου΁ͷґଘΛ
 ڧ੍ͯ͠͸ͳΒͳ͍ɻ ΠϯλʔϑΣʔε෼཭ͷݪଇ
 5IF*OUFSGBDF4FHSFHBUJPO1SJODJQMF*41

Slide 99

Slide 99 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ؔ৺ͷ෼཭ ͱ΋ݴΘΕ·͢

Slide 100

Slide 100 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ՄೳͳݶΓ ॏෳ͕ͳ͍ ෳ਺ͷػߏʹ෼཭͢Δ͜ͱ

Slide 101

Slide 101 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ྫ͑͹ ΧʔυೖΕΛ૝૾͠·͢ ෳ਺ͷϙέοτΛ࣋ͬͨΧʔυೖΕ ༷ʑͳΧʔυ͕ೖΓ·͢

Slide 102

Slide 102 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE Ͱ͸ɺศརͦ͏͔ͩΒͱ ʮͲΜͳΧʔυͰ΋ೖΔΧʔυೖΕʯ Λઃܭͨ͠ΒͲ͏Ͱ͠ΐ͏͔ʁ

Slide 103

Slide 103 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE B社の名刺 どんなカードでも入る
 カード入れ A社の名刺 会員証 チケット ݶΓ͕ͳ͍΋ͷʹରԠ͢Δͱ ԿͰ΋ೖΔʹංେԽͨ͠ޱ Λ૑Β͟ΔΛಘ·ͤΜ ݱ࣮Ͱ͸Χʔυͷ࢓༷ͱ͍͏ͷ͸ܾ·͍ͬͯ·ͤΜ

Slide 104

Slide 104 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ৽͍͠ن֨ɺαΠζͷΧʔυ͕ ొ৔͢Δͨͼʹ ଞͷશͯͷΧʔυΛೖΕ͍ͯͨޱ͕ ӨڹΛड͚Δ͜ͱʹͳΓ·͢

Slide 105

Slide 105 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ྫ

Slide 106

Slide 106 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE Door Timed Door <> Timer Client +Lock() +Unlock() +IsOpen() + TimeOut() Timer Doorから、一定時間開放されていると
 警報が鳴るTimed Doorを作りましたが……。 DoorというInterfaceがTimeOutという口を使う羽目に。 Doorを汚染 ࢀߟɿϩόʔτɾ$ɾϚʔνϯʢʣʮΞδϟΠϧιϑτ΢ΣΞ։ൃͷԞٛʯ4#ΫϦΤΠςΟϒ

Slide 107

Slide 107 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE Door Timed Door <> Timer Client +Lock() +Unlock() +IsOpen() + TimeOut() Timer + TimeOut() Door Timer
 Adapter + TimeOut() TimerClientから 派生する
 Adapterを作成 具体的処理は TimedDoorに委譲 ࢀߟɿϩόʔτɾ$ɾϚʔνϯʢʣʮΞδϟΠϧιϑτ΢ΣΞ։ൃͷԞٛʯ4#ΫϦΤΠςΟϒ

Slide 108

Slide 108 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE Door Timed Door <> Timer Client +Lock() +Unlock() +IsOpen() + TimeOut() Timer + TimeOut() 多重継承に近いことができるなら こうした設計も考えられる ࢀߟɿϩόʔτɾ$ɾϚʔνϯʢʣʮΞδϟΠϧιϑτ΢ΣΞ։ൃͷԞٛʯ4#ΫϦΤΠςΟϒ

Slide 109

Slide 109 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ઃܭͷݪଇ͸ ݱ࣮తͳ໰୊Λ ղܾ͢Δ͜ͱʹ΋ ౰ͯ͸·Γ·͢

Slide 110

Slide 110 text

ήʔϜ։ൃͷ ϙΠϯτ

Slide 111

Slide 111 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ݴΘΕͯͳ͍͜ͱͰ΋ ༧ଌ͓ͯ͘͠

Slide 112

Slide 112 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ϓϩάϥϚʮ͜Εͬͯɺ̍छྨͰ͢ΑͶʁʯ σΟϨΫλʔʮͦ͏ͩͶɺࠓͷͱ͜Ζ͸ʯ

Slide 113

Slide 113 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ൒೥ޙʜʜ

Slide 114

Slide 114 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE σΟϨΫλʔʮ͋Ε૿΍͍ͨ͠Μ͚ͩͲɺ ɹɹɹɹɹɹɹ͍͚Δʁʯ

Slide 115

Slide 115 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE @ Ωλʔ

Slide 116

Slide 116 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ϓϩάϥϚʮແཧͰ͢ɻ
 ɹɹɹɹɹɹͩͬͯɺ૿΍͞ͳ͍ͬͯ ɹɹɹɹɹɹ͍ͬͨ͡Όͳ͍Ͱ͔͢ʯ

Slide 117

Slide 117 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE Կઍճ Կສճͱ ܁Γฦ͞Εͨ ͜ͷ΍ΓͱΓʜʜ

Slide 118

Slide 118 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ࢥ͍ͩͦ͏ ԿͷҝʹήʔϜΛ
 ૑͍ͬͯΔͷ͔ʁ

Slide 119

Slide 119 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE Ϣʔβʔ͞Μ͕ ໘ന͍ͱײͯ͘͡ΕΔͨΊʹ ૑͍ͬͯΔ ໨త͸׬੒ͤ͞Δ͜ͱ ऴΘΒͤΔ͜ͱͰ͸ͳ͍

Slide 120

Slide 120 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ίϯηϓγϣϯ ϓϩτλΠϓ ΞϧϑΝ ϕʔλ Ϛελʔ ෆ ֬ ࣮ ੑ ߴ ௿ σόοά ήʔϜ։ൃͷϑΣΠζͱ ෆ࣮֬ੑͷཧ૝తͳ૬ؔਤ

Slide 121

Slide 121 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ෆ࣮֬ੑΛ ঃʑʹɺ࣮ͦͯ֬͠ʹ ௵͍ͯ͘͠ͷ͕ ϓϩάϥϚͷ੹຿Ͱ͋Δ

Slide 122

Slide 122 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE εέδϡʔϧ্ ίϯηϓτ ϓϦϓϩμΫγϣϯ ڥ໨͕͋ΔΑ͏ʹݟ͑Δ ϓϩμΫγϣϯ ϙετ
 ϓϩμΫγϣϯ

Slide 123

Slide 123 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ݱ࣮ͷਐḿ ܾఆ ະܾఆ Ծܾఆ ະܾఆ ܾఆ ࣮ࡍͷ։ൃʹ͸ͦ͜·Ͱ໌֬ͳڥ໨͸ͳ͍ ࣮૷ࡁΈ Ծ࣮૷ ະܾఆ ࣮૷ࡁΈ ࣮૷ࡁΈ ܾఆ ະܾఆ Ծܾఆ

Slide 124

Slide 124 text

·ͱΊ

Slide 125

Slide 125 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE มԽʹରԠ͢Δٕज़ ͦΕ͕໘ന͞ʹۙͮͨ͘Ίʹ Ͳ͏ͯ͠΋ඞཁͳ͜ͱ

Slide 126

Slide 126 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ଈͪͦΕ͕ɹ
 ٕज़͕ͳ͚Ε͹
 ໘ന͍΋ͷ͕ ૑Εͳ͍ཧ༝

Slide 127

Slide 127 text

$PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ͝੩ௌ͋Γ͕ͱ͏͟͝·ͨ͠