ãã©ã´ã³ãã¼ã«ã§å¦ã¶ãªãã¸ã§ã¯ãæåãæ¹ï¼ç¬¬å¼è©±ï¼
ãã©ã´ã³ãã¼ã«ã§ãªãã¸ã§ã¯ãæåã®å¦ç¿ã¨ããå ãã¿ã®ã¢ã¤ãã¢ããããã®ããドラゴンボールで学ぶオブジェクト指向 改 - 達人プログラマーを目指してã®è¨äºãããªã大ããªåé¿ãããã¾ãããååã®è¨äºã§ã¯ãã¯ã©ã¹å³ã¨ãã¶ã¤ã³ãã¿ã¼ã³ã使ã£ãè¨è¨ã«ããããã©ã´ã³ãã¼ã«ã®ä¸çãã¢ãã«åããä¾ã«ã¤ãã¦èª¬æãã¾ããããã ãããã®èª¬æã®å 容ã ã¨ãéçãªã¢ããªã³ã°ã«åã£ã¦ããã¨ããããããå ·ä½çã«ã©ã®ããã«ããã°ã©ã ã®è¨è¨ã«å½¹ã«ç«ã¤ã®ãã¨ããç¹ãè¦ãã«ããã¨ããããã£ãããããã¾ãããä»åã¯ãåå説æããããªãã£ããããã¤ãã®ç¹ã«ã¤ãã¦ãããä¸æ©è¸ã¿è¾¼ãã§èª¬æãã¦ã¿ããã¨æãã¾ãã
ããã°ã©ãã³ã°è¨èªã«ãããã¯ã©ã¹ã¨ãªãã¸ã§ã¯ã
ååã®è¨äºã§ã¯ãæ¦å¿µçãªãªãã¸ã§ã¯ãæåã¢ããªã³ã°ã®è¦³ç¹ããã
- ã¯ã©ã¹âè¤æ°ã®ãªãã¸ã§ã¯ããå ±éã§æºããæ§è³ªï¼å±æ§ãæ¯ãèãï¼ãæ¦å¿µã¨ãã¦è¡¨ç¾ãããã®ãï¼å°ç人æ¦é家ããµã¤ã¤äººãæ¦éåãã¡ãã¯æ人ã種ã¨ãã¦ã®ã»ã«ãªã©ï¼
- ãªãã¸ã§ã¯ãâç¹å®ã®ã¯ã©ã¹ã®æ§è³ªãæºããå ·ä½çãªäººãç©ãªã©ï¼ã¯ãªãªã³ãã¤ã ãã£ãæ空ãããã³ããã»ã«ãªã©ï¼
ã®ããã«ã¯ã©ã¹ã¨ãªãã¸ã§ã¯ãã説æãã¾ããããã®åºæ¬çãªèãæ¹ããã©ã®ããã«ããã°ã©ãã³ã°è¨èªã§å®ç¾ãããã«ã¤ãã¦ã¯ãæ¦éã¨åãã§ãããããªæµæ´¾ãããã®ã§ãããC++ãJavaãªã©ç¾å¨ä¸»æµã®ãªãã¸ã§ã¯ãæåè¨èªã§ã¯ã ããã以ä¸ã®ããã«ãããã³ã°ããã¦ãã¾ãã
- ã¯ã©ã¹ã¯ãã¼ã¿ï¼ãã£ã¼ã«ããã¡ã³ãå¤æ°ï¼ã¨ãã¸ãã¯ï¼ã¡ã½ãããã¡ã³ãé¢æ°ï¼ãå®ç¾©ããããã®è¨èªæ§é
- ã¯ã©ã¹ã®ä¿æãããã¼ã¿ãã¡ã¢ãªä¸ã«å²ãå½ã¦ããã¨ã§ãã®ã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ã§ãããªãã¸ã§ã¯ãã表ç¾ãã
- ã¯ã©ã¹ã¯ãªãã¸ã§ã¯ãï¼ã®åç §ï¼ãæ ¼ç´ããå¤æ°ã®åã«ãªãï¼Javaã«ã¯ã¯ã©ã¹ã®åã¨ããå´é¢ã®ã¿ã«æ³¨ç®ããã¤ã³ã¿ã¼ãã§ã¼ã¹ã¨å¼ã°ããç¹æ®ãªã¯ã©ã¹ãããï¼
- å®è¡æã«ãµãã¯ã©ã¹ã®ã¡ã½ãããå¼ã³åãããã¨ã§ããªã¢ã¼ãã£ãºã ãå®ç¾ããï¼ä»®æ³é¢æ°å¼ã³åºããé 延çµåããã¤ãããã¯ãã¤ã³ãã£ã³ã°ï¼
ããã¦ãè¨èªã«ãã£ã¦ãªãã¸ã§ã¯ãã®çæã®ãããã«ã¯ãã¾ãã¾ãªæ¹æ³ãããã¾ãããã»ã¼ãã¹ã¦ã®è¨èªã§newã¨å¼ã°ããæ¼ç®åã使ã£ã¦åçã«ãªãã¸ã§ã¯ãï¼ã¤ã³ã¹ã¿ã³ã¹ï¼ãçæãã¦å©ç¨ã§ããããã«ãªã£ã¦ãã¾ããçæãããªãã¸ã§ã¯ãã¯ãã¼ãï¼ããªã¼ã¹ãã¢ï¼ã¨å¼ã°ããã¡ã¢ãªé åã«åçã«ç¢ºä¿ããã¾ãã
ãã¨ãã°ã
å°ç人æ¦é家 ã¯ãªãªã³ = new å°ç人æ¦é家("ã¯ãªãªã³"); å°ç人æ¦é家 ã¤ã ã㣠= new å°ç人æ¦é家("ã¤ã ãã£");
ãªã©ã®ããã«è¨è¿°ãã¾ãã以ä¸ã®ã³ã¼ãã§ã¯å°ç人æ¦é家ã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ã§ããã¯ãªãªã³ã¨ã¤ã ãã£ã¨ããäºã¤ã®ãªãã¸ã§ã¯ããçæãããã®ãªãã¸ã§ã¯ããåç
§ããã¯ãªãªã³ãã¤ã ãã£ã¨ããå¤æ°ã«æ ¼ç´ãã¦ãã¾ããJavaã®å ´ånewæ¼ç®åã®å¾ã«ã¯ã³ã³ã¹ãã©ã¯ã¿ã®ååãæå®ããã®ã§ãããã³ã³ã¹ãã©ã¯ã¿ã¯ã¯ã©ã¹åã§ããã¨ãã決ã¾ããããã®ã§ãå®è³ªçã«ã¯ã©ã¹ãããã®ã¯ã©ã¹ã«å±ãããªãã¸ã§ã¯ããçæãã¦ã¡ã¢ãªã«å²ãå½ã¦ããã®ã¡ã¢ãªé åãåç
§ããå¤æ°ã«ä»£å
¥ãã¦ããã¨èãããã¨ãã§ãã¾ãã
ãã©ã´ã³ãã¼ã«ã®ä¸çã ã¨7åã®ãã©ã´ã³ãã¼ã«ãéãã¦ãç¥é¾ã«ä¸ã¤ã®é¡ãã¨ããã§ãããã¾ãããã®ç¥é¾ãä¸è½ã§ã¯ãªãããµã¤ã¤äººããã£ã¤ããããªããªã©å¶ç´ã大ããã®ã§ããããªãã¸ã§ã¯ãæåããã°ã©ãã³ã°ã®ä¸çã ã¨ãããã°ã©ãã¼ã¯ä¸è½ã®ç¥ã®ããã«ãªãã¾ãããnewã¨ãããé¡ããä½åº¦ã§ãå®è¡ã§ãããã®é½åº¦ãæ°ãããªãã¸ã§ã¯ããçæãããã®ã§ãããã¡ãããäºåã«ãªãã¸ã§ã¯ããçæããåºã«ãªãã¯ã©ã¹ãä½æãã¦ããå¿
è¦ãããã¾ããã人éãæãã¤ããããããã®ãã³ã³ãã¥ã¼ã¿ã¼ä¸ã§ãåµé ããããã¨ãã§ãã¾ãã
ã¡ã½ããå¼ã³åºãã¯çæãããªãã¸ã§ã¯ãã«å¯¾ããå½ä»¤ã®å®è¡
Cãªã©ã®æ§é åè¨èªã®ããã°ã©ãã¼ã®æ¹ã¯ãªãã¸ã§ã¯ãåã®å¤æ°ã¯æ§é ä½ã®ä¸ç¨®ã¨èããã¨ããã¨æãã¾ããããã¼ã¿ã®éåãä¿æãã¦ããã ãã§ãªããå¿ æ®ºæãç¹°ãåºãã¨ãã£ãæ¯ãèããåæã«ã«ãã»ã«åãã¦ããã¨ããç¹ã«æ³¨ç®ãã¦ãã ããã
ã¯ãªãªã³.æãç¹°ãåºã("æ°åæ¬");
ã®ããã«ãã¯ãªãªã³ããªãã¸ã§ã¯ãã«å¯¾ãã¦ã¡ã½ãããå¼ã³åºããã¨ã§å½ä»¤ãä¸ãããã¨ãã§ãã¾ããã¯ãªãªã³ã«å½ä»¤ããã¨ãå¾ã¯ã¯ãªãªã³ãèªçºçã«æ¯èããæãå®è¡ããã ãã§ãªããã¯ãªãªã³ã®æ°ã®æ®éãèªåçã«æ¸å°ãã¾ãããªãã¸ã§ã¯ãã«ã¯æ¯ãèãã¨ãã¼ã¿ãåæã«ã«ãã»ã«åããã¦ããã¨ãããã¤ã³ããæãåºãã¦ãã ãããæ°åæ¬ãå®è¡ããã¨ã©ãã ãæ°ãæ¸å°ãããã¨ãã£ããã¨ã¯ã¯ãªãªã³ãæ°åæ¬ã¨ãã£ããªãã¸ã§ã¯ãèªèº«ã®ä¸ã«çµã¿è¾¼ã¾ãã¦ãã¾ãããããã£ãæ§åãè¦è¦çã«è¡¨ç¾ããã«ã¯UMLã®ã·ã¼ã±ã³ã¹å³ãå©ç¨ãã¾ãã
ãªãã¸ã§ã¯ãæåã®ããã°ã©ãã³ã°ã§ã¯ããã®ããã«ã¯ã©ã¹ããçæãããªãã¸ã§ã¯ãã«å¯¾ãã¦ã¡ã½ãããéãã¦å½ä»¤ãä¸ãããã¨ã§ãå¦çãå®è¡ãã¦ããã¾ãã
ãªããpublicã¡ã½ããããªãã¸ã§ã¯ãã«å¯¾ããå¤é¨ããã®å½ä»¤ã§ããã¨ããç¹ã¯è±èªã§èããã¨ãããã£ããã¨ç解ã§ãã¾ãã以ä¸ã®ã¨ã³ããªãåèã«ãã¦ãã ããã多くの日本人がオブジェクト指向プログラミングを苦手とするのは英語アレルギーだからか? - 達人プログラマーを目指して
å¤æ°ã®åã¨ããªã¢ã¼ãã£ãºã
ã¯ã©ã¹ã«å¯¾ãã¦newãé©ç¨ãããã¨ã§ãªãã¸ã§ã¯ããçæã§ããã®ã§ãããã¯ã©ã¹ã«è¦ªåé¢ä¿ãããå ´åã親ã¯ã©ã¹ã®åã®å¤æ°ã«åã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ãä»£å ¥ã§ããã¨ãã大åãªãã¤ã³ããããã¾ããã ããã
å°ç人æ¦é家 ã¯ãªãªã³ = new å°ç人æ¦é家("ã¯ãªãªã³"); ãµã¤ã¤äºº æ空 = new ãµã¤ã¤äºº("æ空"); æ¦éåãã¡ãã¯æ人 ããã³ã = new æ¦éåãã¡ãã¯æ人("ããã³ã");
ã¨è¨è¿°ãã代ããã«
æ¦å£« ã¯ãªãªã³ = new å°ç人æ¦é家("ã¯ãªãªã³"); æ¦å£« æ空 = new ãµã¤ã¤äºº("æ空"); æ¦å£« ããã³ã = new æ¦éåãã¡ãã¯æ人("ããã³ã");
ã®ããã«è¨è¿°ãããã¨ãã§ãã¾ãããµãã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ã¯è¦ªã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ã§ããã¨ããæ³åãæãåºãã°ãè¨èªä¸ã®ããããè¦åã¯èªç¶ã«ç解ã§ããã¨æãã¾ãããã®ããã«ãã¹ã¦ã®ãªãã¸ã§ã¯ããåä¸ã®æ¦å£«åã¨ãã¦æ±ããã¨ãã§ããã°ããã¨ãã°ã以ä¸ã®ããã«é åã使ã£ã¦ä¸æ¬å¦çãããããªå ´åã«ã便å©ã§ãã
æ¦å£«[] Zæ¦å£« = {new å°ç人æ¦é家("ã¯ãªãªã³"), new ãµã¤ã¤äºº("æ空"), new æ¦éåãã¡ãã¯æ人("ããã³ã"), ...}; for (æ¦å£« ããã : Zæ¦å£«) { // æ¥æ¬èªã ã¨å¤§æåå°æåã®åºå¥ããªãããã¯ã©ã¹åã¨ãªãã¸ã§ã¯ãåã®èå¥ãã¡ãã£ã¨è¦ãã ããã.æãç¹°ãåºã(); // ããªã¢ã¼ãã£ãºã ã«ããã¡ã½ããåãåãã§ãåã«å¿ããæ¯ãèããããã }
ãªãã¸ã§ã¯ãã®çæã«é¢ãããã¿ã¼ã³
ãã®ããã«ããªãã¸ã§ã¯ãæåããã°ã©ãã³ã°ã§ã¯ãnewæ¼ç®åã使ã£ã¦ã¯ã©ã¹ãããªãã¸ã§ã¯ããçæãããã¨ãã§ãã¾ãããå ´åã«ãã£ã¦ã¯ãªãã¸ã§ã¯ããè¤éãªé¢é£ãæã£ã¦ãããããã¨ãåæåãè¤éã§é£ãããã¨ãããã¾ãããã¶ã¤ã³ãã¿ã¼ã³ã§ã¯ãªãã¸ã§ã¯ãã®çæãåæåã«é¢ãããã¿ã¼ã³ãããã¤ãç¥ããã¦ãã¾ãããªãã¸ã§ã¯ãã®çæãå°ä»»ã§åãæã¤ã¯ã©ã¹ãå¥éè¨è¨ãã¾ãããã®ãããªã¯ã©ã¹ã¯ä¸è¬ã«ãã¡ã¯ããªã¼ããã«ãã¼ãªã©ã¨å¼ã°ãã¾ãã
ãã©ã´ã³ãã¼ã«ã®ä¸çã§ã¯æ¦é家ãè²æããå ´æããã®ãã¡ã¯ããªã¼ããã«ãã¼ã«ç¸å½ããã¨èãããã¨ãã§ãã¾ããæ¦å£«ã¯çã¾ããªããã«æãç¿å¾ãã¦ããã¨ããããã§ã¯ãªããããå³ããä¿®è¡ãç©ãã§æãç¿å¾ããå¿
è¦ãããã¾ãã
ã¯ãªãªã³ãäºä»æµã«å
¥éãã¦æãç¿å¾ããã·ã¼ã±ã³ã¹ã以ä¸ã«ç¤ºãã¾ãã
æµæ´¾ã®æ義ã®å¤æ§æ§ã¯Strategyãã¿ã¼ã³ã§å¸åãã
æå¾ã«ãæµæ´¾ã®æ義ã«ã¤ãã¦ãåãæ¦éã®æµæ´¾ã§ã鶴ä»æµã¨äºä»æµã§ã¯æ義ã大ããç°ãªãã¾ããåç´ã«æµæ´¾ãã®ãã®ãç¶æ¿ããã¦ãã®éããå¸åãããã¨ãä¸å¯è½ã§ã¯ããã¾ãããã
- æµæ´¾éã§å ±éãã¦ãããã¨ããã
- å ±éé¨åã親ã¯ã©ã¹ã«æããããã¨ã§è¦ªåéã®ã¯ã©ã¹ã®çµå度ãé«ããªã
- å¤ãã®è¨èªã§ã¯å¤éç¶æ¿ãã§ããªããããè¤æ°ã®ããªã¨ã¼ã·ã§ã³ã表ç¾ã§ããªã
ãªã©ã®æ¬ ç¹ãããã¾ããè¤éãªãã¡ã¤ã³ã«å¯¾ããè¨è¨ã§ã¯ãå¤åããé¨åãã¤ã³ã¿ã¼ãã§ã¼ã¹ã¨ãã¦æ½åºãããã®ãµãã¯ã©ã¹ã«åã ã®ããªã¨ã¼ã·ã§ã³ãæãããã¨ãã£ãè¨è¨ããã¾ãããããStrategyパターンã¨å¼ãã§ãã¾ããåç¯ã®å³ã§æ義ã¤ã³ã¿ã¼ãã§ã¼ã¹ã¨ãã®å®è£ ã¯ã©ã¹ï¼äºä»æµã®æ義ã¨é¶´ä»æµã®æ義ï¼ã¨ã®é¢ä¿ããã®Strategyãã¿ã¼ã³ã«ãªã£ã¦ãã¾ãã
æå¾ã«
ä¸é¨ã«ã¯æ¥åã·ã¹ãã ã§ã¯ãªãã¸ã§ã¯ãæåã¯é¢ä¿ãªãã¨ããæè¦ãããããã§ãããJavaãC#ãªã©ã®ç¾ä»£çãªããã°ã©ãã³ã°è¨èªã使ã£ãéçºã«ããã¦ããªãã¸ã§ã¯ãæåã®èãæ¹ãç¿å¾ãããã¨ã¯æ¬ ãããªããã¨ã§ããã¨ç§ã¯æãã¾ãããªãã¸ã§ã¯ãæåã¨ããã®ã¯æ¦ç©ºè¡ããããã¯ãæ³¢ã®ããã«ç¹æ®ãªæè½ãæã£ã人ã®ã¿ã使ãããªããæã§ã¯ãªããå¼å¸æ³ãçåãã¬ã¼ãã³ã°ãªã©ã®ãããªåºç¤ä½åã«ãããé¨åã ã¨æãã¾ãããããããããã£ãåºç¤æè¡ã身ã«ã¤ãã¦ãããã©ããã§ããã°ã©ãã¼ã¨ãã¦ã®æ¦éåãæ¡éãã«å¤ãã£ã¦ããã¨ãããã¨ãã¾ãäºå®ã§ãã
SIæ¥çã®ä¸çã§ã¯ã以ä¸ã®ããã«åºç¤æè¡ã軽è¦ãããå¾åããããã¨ã¯é常ã«æ®å¿µãªãã¨ã§ããå®éãã¹ã¼ãã¼SEã¨ãã¦ä¸ç®ç½®ããããããªæ¹ãããã以ä¸ã®ãããªæè¦ãèªããã¦ãã¾ãã
http://www.hitachi-system.co.jp/superse/vol2/
ååãããã°ã©ãã³ã°å¥½ãã¯SEã«ã¯åãã¦ããªãã¨ã話ãã¾ãããã極端ãªè©±ãã§ããªãã¦ãæ§ãã¾ãããå®éã«ã¯ãããã°ã©ããçµé¨ãã¦ããSEã«ãªãã±ã¼ã¹ãå¤ããããªã®ã§ãã¹ãã«ãããæ¹ãã»ã¨ãã©ã®ããã§ãããSEã¢ã·ã¹ã¿ã³ãã¨ãã¦ã¹ã¿ã¼ãããããã°ã©ãã³ã°ãã»ã¨ãã©çµé¨ããªãã§ç¬ãç«ã¡ããã¨ããã±ã¼ã¹ãå°ãªãããã¾ããã
ãã ãã以åプログラマーの成長を考えないSIerの仮説は間違っている - 達人プログラマーを目指してã§ç§ãæ¸ããããã«ãããã°ã©ãã¼ã®åºæ¬çãªæè¡åãéè¦ãããã¨ã§çç£æ§ãå質ãä¿å®æ§ãªã©ãæ¡éãã«ä¸æããããã¨ãã§ããã¨æãã¾ãããSIerãããã°ã©ãã¼ã¨ãã¦ã®åºç¤æè¡ã§ãããªãã¸ã§ã¯ãæåã®ç¿å¾ãªã©ã«ãã£ã¨çå£ã«ã¨ãããã¹ãã ã¨æãã¾ãã
ãªããæ¬æã¨ã¯é¢ä¿ããã¾ããããYouTubeã§éè±ç¤¾ã«ããæ空ã¨ã¢ã©ã¬ã¡ããã®éç½ã«å¯¾ããå¿æ´ã¡ãã»ã¼ã¸ã®ãããªãç´¹ä»ããã¦ãã¾ããåçã¯å
¨é¡å¯ä»ãããããã§ãã