Upgrade to Pro — share decks privately, control downloads, hide ads and more …

なぜ技術がないと 面白いゲームが創れないのか?

なぜ技術がないと 面白いゲームが創れないのか?

「現場のエンジニアが語る『Fate/Grand Order』の開発技術からアップデートに関するノウハウまで一挙公開 Presented by GMOアプリクラウド」の講演資料です。

B9a9de7133e19856616325f37e1f8b8b?s=128

Yuki Tamura

July 10, 2017
Tweet

Transcript

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

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

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

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

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

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

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

  8. ήʔϜۀք ࢒ࠅ෺ޠ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  31. ඞཁͳٕज़ͱ͸ʁ

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

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

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

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

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

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

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

  39. มԽʹߋ৽ͱ͸ʁ

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

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

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

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

  44. ྑ͍ઃܭͱ͸ʁ

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

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

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

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

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

  50. Ͳ͏ର߅͢Δ͔

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

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

  53. ୯Ұ੹೚ͷݪଇ ̍

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

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

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

  57. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE class Programmer { // ԿͰ΋΍ΔϓϩάϥϚʔΫϥε public String Programming(); //

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

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

  60. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE Rectangle +Draw() +Area() Computational Geometry Application ジオメトリアプリ 計算させようとする Graphical

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

    GUI Geometric Rectangle +Area() 責任を分解 ࢀߟɿϩόʔτɾ$ɾϚʔνϯʢʣʮΞδϟΠϧιϑτ΢ΣΞ։ൃͷԞٛʯ4#ΫϦΤΠςΟϒ 責任は一つ!
  62. ΦʔϓϯɾΫϩʔζυͷݪଇ ̎

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

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

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

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

    15:00MTG 17:00ษڧձ
  67. $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(͕։࠵Ͱ͖ͳ͔ͬͨΓɺ ҙຯ͕ͳ͘ͳͬͯ͠·͏ɻ ݸʑ͕ີ݁߹ʹͳ͍ͬͯΔɻ
  68. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ྫ

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

  70. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE Client Client Interfaceという抽象クラスをつくる これはServerが実装するClientが使う口である ClientはServerとではなくInterfaceと会話する <<interface>> Client Interface Server

    Clientは Serverが別物になっても 気がつくことはない ࢀߟɿϩόʔτɾ$ɾϚʔνϯʢʣʮΞδϟΠϧιϑτ΢ΣΞ։ൃͷԞٛʯ4#ΫϦΤΠςΟϒ
  71. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ଈͪ ʮ։͍͍ͯΔʯͱ͸ɺ ৼΔ෣͍Λ֦ுͰ͖Δ͜ͱ ʮด͍ͯ͡Δʯͱ͸ɺ ଞʹӨڹΛ༩͑ͳ͍͜ͱ

  72. Ϧείϑͷஔ׵ݪଇ ̏

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

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

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

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

  77. $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) { … } } ྫ͑͹ɺ௕ํܗΛܧঝͯ͠ਖ਼ํܗΛͭ͘Δ ͦΕ͸ਖ਼͍͔͠ʁ
  78. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ౴ɿਖ਼͘͠ͳ͍ ਖ਼ํܗ͸ৗʹ 8JEUIʢ෯ʣ)FJHIUʢߴ͞ʣ Λຬͨ͢ඞཁ͕͋Δ

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

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

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

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

  83. $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()
 がない
  84. ґଘؔ܎ٯసͷݪଇ ̐

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

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

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

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

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

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

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

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

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

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

  95. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE Lamp +TurnOn() +TurnOff() Button +Poll() ButtonはPollでメッセージを受け取ると ボタンの状態からLampのTurnOn/TurnOffを呼び出し 明かりを灯すか消します。 これは何故間違っているのでしょうか?

    ButtonはLampに直接依存しているので、 他のスイッチを制御できません。 ࢀߟɿϩόʔτɾ$ɾϚʔνϯʢʣʮΞδϟΠϧιϑτ΢ΣΞ։ൃͷԞٛʯ4#ΫϦΤΠςΟϒ
  96. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE <<interface>>
 ButtonServer +TurnOn() +TurnOff() Button +Poll() Lamp 上位とは何か?
 それは即ち「抽象」です。

    Buttonが依存するのは、 ButtonServerというInterfaceで
 あるべきで、LampはButtonServerを
 実装すれば良いので依存が逆転します。 ࢀߟɿϩόʔτɾ$ɾϚʔνϯʢʣʮΞδϟΠϧιϑτ΢ΣΞ։ൃͷԞٛʯ4#ΫϦΤΠςΟϒ
  97. ΠϯλʔϑΣΠε෼཭ͷݪଇ ̑

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

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

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

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

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

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

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

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

  106. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE Door Timed Door <<interface>> Timer Client +Lock() +Unlock() +IsOpen()

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

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

    + TimeOut() Timer + TimeOut() 多重継承に近いことができるなら こうした設計も考えられる ࢀߟɿϩόʔτɾ$ɾϚʔνϯʢʣʮΞδϟΠϧιϑτ΢ΣΞ։ൃͷԞٛʯ4#ΫϦΤΠςΟϒ
  109. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ઃܭͷݪଇ͸ ݱ࣮తͳ໰୊Λ ղܾ͢Δ͜ͱʹ΋ ౰ͯ͸·Γ·͢

  110. ήʔϜ։ൃͷ ϙΠϯτ

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

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

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

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

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

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

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

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

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

  120. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ίϯηϓγϣϯ ϓϩτλΠϓ ΞϧϑΝ ϕʔλ Ϛελʔ ෆ ֬ ࣮ ੑ

    ߴ ௿ σόοά ήʔϜ։ൃͷϑΣΠζͱ ෆ࣮֬ੑͷཧ૝తͳ૬ؔਤ
  121. $PQZSJHIU%&-J()5803,4*OD"MM3JHIUT3FTFSWFE ෆ࣮֬ੑΛ ঃʑʹɺ࣮ͦͯ֬͠ʹ ௵͍ͯ͘͠ͷ͕ ϓϩάϥϚͷ੹຿Ͱ͋Δ

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

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

    ະܾఆ ࣮૷ࡁΈ ࣮૷ࡁΈ ܾఆ ະܾఆ Ծܾఆ
  124. ·ͱΊ

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

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

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