å¤ãã®æ¥æ¬äººããªãã¸ã§ã¯ãæåããã°ã©ãã³ã°ãè¦æã¨ããã®ã¯è±èªã¢ã¬ã«ã®ã¼ã ãããï¼
ãã¯ããå¤ãã®äººãããããããªã³ã¡ã³ããããã ãã¨ãæå¤ãªçºè¦ããããããããã§ãã
プログラミングと設計は本来切り離せないものなのでは - 達人プログラマーを目指して
ã®ãã¯ãã®ã³ã¡ã³ãã«
ä½ãã主èªããªãããç解ãé£ããèªã¿ç©
ã¨ããã®ãããã¾ãããç§ã®æç« ã®æããã¾ãã¯åçããªãã¦ã¯ãªãã¾ããããã ãæ®æ®µããæ¥æ¬èªã話ããããæç« ãæ¸ãããããéã«ã¯ãã¾ãæèãã¦ããªãã£ãã®ã§ãããããããèãã¦ã¿ãã¨æ¥æ¬èªã®æç« ã§ã主èªãã¨å¼ã°ãããã®ããªãã¨ãªãçç¥ããããã¨ãå¤ãããã«æãã¦ãã¾ãããä¸å¦æ ¡ã®å½èªã®ææ¥ã§ã¯ãã¯ãããããã¨ããå©è©ãã¤ããè¨èã主èªã§ããã¨ç¿ã£ãã¨è¨æ¶ãã¦ããã®ã§ãããå®éã«ãæä¸ã§æ示çã«ãã®ãããªæç¯ã表ããªãç¾ããªããã¨ãå¤ãããã«æãã¾ãã
ããã§ãæ¥æ¬èª 主èªãã§æ¤ç´¢ãã¦ã¿ãããé常ã«èå³æ·±ãè¨äºãããã¤ãè¦ã¤ããã¾ããã
http://www.geocities.co.jp/CollegeLife-Labo/6084/shugo.htm
リベラル21 日本語に主語はあるのか
主語 - Wikipedia
ãè±ã¯ç¾ããããããè±ãå²ãããã¯æã§ããã
å¦æ ¡ææ³ã§ã¯ããè±ã¯ãããè±ããã主èªã ã¨æãããï¼æ¥æ¬èªã«ä¸»èªã¯ããï¼
ä¸ä¸ææ³ã§ã¯ããè±ã¯ããé¡ããè±ãããä¸»æ ¼ã¨ãããï¼æ¥æ¬èªã«ä¸»èªã¯ãªãï¼
ä¸å¸ãé¨ä¸ã«ããã®ä»äºããã£ã¦ãããªããï¼ãã¨å£°ããããã¨ãããããã«çããã¨ãã«ã¯ããããã¾ããã¨ããã®ãæ®éã§ããããããããããã«ã¯ã主èªãããããã®ããªãããã¨ãã£ã¦ããç§ã¯ããã¾ããã¨è¨ã£ã¦ãããç§ãããã¾ããã¨è¨ã£ã¦ããæå³ã¯å¾®å¦ã«éã£ã¦ãã¦ãã¾ãããç§ã¯ããã¾ããã ã¨ããä»ã®äººã¯ç¥ããªããç§ã¯ãããã¨ããæå³ã«ãªããä»ã«èª°ãã«æä¼ã£ã¦ãããããããã§ããããç§ãããã¾ããã ã¨ãèªåããã£ã¦ææãç«ã¦ããããä»ã®è ã«ã¯ããããªãã§ãããã¨ãã£ã¦ããæãã¨ãªãããã®ãã¨ã¯ããããã¾ããããç§ã¯ããã¾ããã®çç¥å½¢ã§ããç§ãããã¾ããã®çç¥å½¢ã§ããªããã¨ãæå³ãã¦ãããã¤ã¾ããæ¥æ¬èªã§ã¯ãã主èªããªã©ãªãã¨ãããããã¾ããã ãã§ååã«ä¸ã¤ã®æã ã¨ãããã¨ã«ãªãã
ã¤ã¾ããæ¥æ¬èªã«ãããã主èªã¨ããæ¦å¿µãåå¨ãããã©ããã¨ããç¹ã«ã¤ãã¦ã¯ãå°éã®å¦è
ã®éã§ãã¾ã çµ±ä¸çè¦è§£ããªãã¨ããã®ãäºå®ã®ããã§ãããããã主èªããªãã¨ãã説ã«ããã°ã主èªã¯çç¥ããã¦ããã®ã§ã¯ãªãã¦ãããããåå¨ããªãã¨ãããã¨ã«ãªãã®ã ããã§ããã ããã主èªãå¿
é ã§ããè±èªãæ©æ¢°çã«ç¿»è¨³ããæç« ã§ã¯ããããã¯ããæã
ã¯ãã彼女ã¯ããªã©ã¨ããããã«ãä¸èªç¶ãªè¨ãåããå¤ç¨ããããã¨ã«ãªã£ã¦ãã¾ãã®ã§ããããä¸»æ ¼ãã¯ã£ããã¨ããããå¥ç´ææ¸ãªã©ã§ã¯ãç²ã¯ãããä¹ã¯ããªã©ã¨ããæ§ã«ã主èªããæ示ãã¾ãããæè¡ææ¸ãªã©ã§ãææ§ãããªããããã«å¤å°æ¥æ¬èªã¨ãã¦ã¯ä¸èªç¶ã§ã主èªãæ示ããã¨ãããã¨ã¯ããããããã¾ããããã ããæ¬æ¥æ¥æ¬èªã®ææ³ã¯è±èªããã©ã³ã¹èªãªã©ãã¨ãã¨ä¸»èªï¼subject)ã¨ããæ¦å¿µãåå¨ããè¨èªã¨ã¯æ§é ãéãã®ã§ããã¨ãããã¨ãä»ã«ãªã£ã¦ç¥ããç®ãããããã®è½ã¡ããããªæãã§ããï¼ãããªãã¨å¦æ ¡ã®ææ¥ã§ã¯æãããªãã£ãã®ã§ï¼
ã¨ããã§ã主èªã®åé¡ã ãã§ãªããèªé ãè¤æ°å½¢ãæå¶ã®èãæ¹ãªã©ãæ¥æ¬èªã¨è±èªã§ã¯ã¾ã£ããç°ãªãã®ã§ããããããããè±èªãæ¯å½èªã¨ãã¦æ¥å¸¸ãã使ã£ã¦ãã人ãä½ã£ãå¤ãã®ããã°ã©ãã³ã°è¨èª*1ã§æ¸ãããããã°ã©ã ãç解ããããã«ã¯ã好ãã好ã¾ãããã«ãããããããã¯ããè±èªè³ãç¸å½éãã¦ããäºã大åãªã®ãã¨èããããå¾ãªãæ°ããã¾ããæ¥æ¬äººããã°ã©ãã¼ã«ã¨ã£ã¦è±èªã®å£ã大ããªãã³ãã£ã¨ãããã¨ã¯äºå®ã¨ãã¦åãã¨ãããããä¹ãè¶ããã ãã®åªåãå¿
è¦ãªã®ã ã¨æãã¾ãã*2
ã³ã¼ããèªããªã顧客ã¯è¨è¨ã§èªããããªãã
ã¨ããã³ã¡ã³ãã§ã確ãã«é¡§å®¢ãã¨ã³ãã¦ã¼ã¶ã¼ã¨ãããã¨ãªãç¡çã¯ãªãã§ãããå
è«SEã¨ãããã¨ã ã£ãããããã°ã©ã ãèªããªã以åã«ãåã«è±èªã¢ã¬ã«ã®ã¼ãªã®ã§ããã°ã©ã ãèªããã¨ããªãã®ã§ã¯ãªããã¨ãæã£ã¦ãã¾ãã¾ãããã«ãã»ã«åãªã©ããã¡ãã¨è¡ã£ãè¨è¨ãããå ´åãç¹ã«ãµã¼ãã¹ã¬ã¤ã¤ã¼ãªã©æ¯è¼çä¸ä½ã®ã¬ã¤ã¤ã¼ã«å±ããã¯ã©ã¹ã®ããã°ã©ã ã¯ãã»ã¨ãã©è±èªã¨å¤ãããªããããªã¬ãã«ã®è¨è¿°ã«ãªãã¨æãã¾ãã®ã§ãSEã¨åä¹ã£ã¦ãã以ä¸ãããç¨åº¦è±èªãèªãããããã®è±èªåã¯æã£ã¦ãã¦ã»ããã®ã§ããã*3
ã¡ãªã¿ã«ãJavaã ã¨æ®æ®µã¯æèãã¦ããªãããããã¾ããããç´°ããã¨ãããè¦ã¦ããã¨è¨èªãä½ã£ã人ãã§ããéãèªç¶ãªè±èªã«è¿ã¥ãããã¨ããæããæ±²ã¿åããã¨ãã§ãã¦é¢ç½ãã§ãããã¨ãã°ãã¯ã©ã¹å®£è¨ã§ã¯
public class Customer extends Party { }
ã¨ããæ¸ãæ¹ããã¾ããããextendsãã®é¨åã«3人称ã®ãsããã¤ãã¦ãããã¨ããããã®å®£è¨æã¯ãç¾å¨å½¢ãã®è±èªãæèãããã®ã§ããã¨æ¨æ¸¬ããã¾ããå®éã
The public class Customer extends Party.
ã¨ããè±æã¨ã»ã¨ãã©å¤ããã¾ãããï¼å è©ã®Theã¨ããªãªããã¤ãããããã®éãï¼ç¾å¨å½¢ãªã®ã¯ãã®ææ¸ããpublicãªã¯ã©ã¹ã§ããCustomerãPartyãæ¡å¼µãããã¨ããäºå®ã宣è¨ãã¦ããã¨èããã¨é常ã«èªç¶ãªè¡¨ç¾ã§ããåæ§ã«ã¡ã½ããã®å®£è¨ãç¾å¨å½¢ã§ãããã¨ã¯ä¾å¤å®£è¨ãããã±ã¼ã¹ãèããã°æããã¨ãªãã¾ãã
public String doSomething() throws Exception {}
ãã®å ´åãthorwsã«ãsããã¤ãã¦ããããã®å ´åã®ä¸»èªã¯doSomething()ã¡ã½ããã¨èãããã¨ãã§ãã¾ãã
ä¸æ¹ã§ããã¸ãã¯ã®å®è¡ä¸ã«åºç¾ããã¡ã½ããå¼ã³åºãã«ã¯åè©ã«æ±ºãã¦å¤ãã®å ´åãsããä»ãã¾ãããã¤ã¾ãç¾å¨å½¢ã§ã¯ãªãã¦åå½¢ãªã®ã§ãã£ã¦ãããã¯è±èªã®å½ä»¤æãæèãããã®ã§ããã¨èãããã¨ãã§ãã¾ãã*4
Paul, pass me the salt!ï¼ãã¼ã«ãããã®å¡©ãã¨ã£ã¦ï¼
ä¸å¦æ ¡ã®è±èªã®æç§æ¸ã«è¼ã£ã¦ãããªä¾æã§ããããã®ãããªç´æ¥è©±æ³ã®å½ä»¤æã®å ´åãpassã¨ããåè©ã¯åå½¢ã§ãsããã¤ãã¾ãããå®éãJavaã®å ´åãèããã¨ããã¨ãã°ã以ä¸ã®ãããªDAOï¼ãã¼ã¿ã¢ã¯ã»ã¹ï¼ã¯ã©ã¹ã®å®è£ ã«å¯¾ãã¦
public class CustomerDao { @PersistenceContext EntityManager entityManager; public void persist(Cusutomer customer) { entityManager.persist(customer); } }
entityManager.persist(customer)ã®é¨åã¯
EntityManager, persist the customer!
ã¨è±èªã§å«ãã§ããã¨æãã°ãã¨ã³ãã£ãã£ç®¡ç人ãããã®é¡§å®¢ãæ°¸ç¶åãããã¨ããèªç¶ã«èªããã®ã§ãããã®å ´åentityManager*5ã¨ãããªãã¸ã§ã¯ããæ¬äººåãã¦ãããã«å¯¾ãã¦å½ä»¤ããã¦ããã¨ããå½¢ã«ãªã£ã¦ãããããè±èªã¨ãã¦èªãã¨ãããèªç¶ã«ãªãã¸ã§ã¯ãæåã§èãã¦ããã¨ãããã¨ã«ãªãã®ã§ãããªãè³ä»¥åã«è±èªè³ã«ãªã£ã¦ããªãã¨ãåãªãé¢æ°ã®å¼ã³åºãã«è¦ãã¦ãã¾ãããªãã¸ã§ã¯ãã«å½ä»¤ããã¨ããçºæ³ã§èãã«ããã¨æãã¾ãã
ãã®ä»ãRuby on Railsã§ã¯è¦ç´ã§DBã®ãã¼ãã«åãè¤æ°å½¢ã®åè©ã«ãã¾ããï¼Customerã«å¯¾ãã¦ã¯Customersãªã®ã§ãããChildãªãChildsã§ãªãå½ç¶Childrenã¨ãªãã¾ããï¼ã©ããã¦ãããªã£ã¦ãããã¨ããã¨ããã¡ãããSQLã§SELECTæãæ¸ããæã«è±èªã«è¿ããªãããã§ããåæ°ãè¤æ°ã®ä½¿ãåããæ¥æ¬èªã«ã¯æ¦å¿µã®ãããæ¥æ¬äººã®é常ã«è¦æã¨ããã¨ããã§ãã
SELECT child FROM children
ããã«ãæè¿ã¯DSLã¨ããèãæ¹ããããããè±èªã«è¿ãæ§æã§ããã°ã©ã ãæ¸ãã¨ããçºæ³ãããããã§ãã*6ãããªã£ã¦ããã¨ã顧客ãããã°ã©ã ãæ¸ããªãã¾ã§ããå°ãªãã¨ãèªãã§ç解ããããã°ã©ãã¼ã¨ä¼è©±ããã¨ãããã¨ãã¾ã£ããéç¾å®çãªãã¨ã¨ã¯æããªããªãã¾ãã
æ¢ã«ãã©ããã§èª°ããææããã¦ãããã¨ããããã¾ãããããã¯ããå¤ãã®æ¥æ¬äººããªãã¸ã§ã¯ãæåããã°ã©ãã³ã°ãè¦æã¨ããã®ã¯è±èªã¢ã¬ã«ã®ã¼ã®äººãå¤ããããªã®ãã¨æã£ã¦ãã¾ãã¾ããããã¡ããè±èªããã©ãã©ãªãJavaã®ããã°ã©ã ãå¾æãã¨ããã¨ãããªãã¨ã¯ãªãã§ãããå°ãªãã¨ãé人ããã°ã©ãã¼ã§ããã°è±èªãããç¨åº¦ç解ã§ããã®ã¯å½ç¶ã¨ãããã¨ã¯è¨ããã¨æãã¾ããç¹ã«ãæ¥åã¢ããªã±ã¼ã·ã§ã³ã®ãããªå ´åã ã¨ãè¤éãªã¢ã«ã´ãªãºã ã¯æ¢ã«ãã¬ã¼ã ã¯ã¼ã¯ãªã©ã§ã«ãã»ã«åããããã®ãåå©ç¨ã§ãããããå¤ãã®å ´åã¯è±ä½æã®åã®æ¹ãè«ççæèãã¢ã«ã´ãªãºã ã®ç解ãããéè¦ã¨ãããããããããã¾ããã(è±èªåã¨ããã°ã©ãã³ã°åã¨ã®ç¸é¢é¢ä¿ã«ã¤ãã¦ä½ããã®å®¢è¦³çãç§å¦çãªèª¿æ»ãåå¨ãããã©ããã¯ä»ã®ã¨ããä¸æã)
è±èªåã¯æ
å ±ã調ã¹ãããã¨ã©ã¼ã解æããããè±æã®æè¡æ¸ãèªãã ããé©åãªå¤æ°åãèããããããã°ã©ãã¼ãSEã¨ãã¦ã¯å¿
é ã®äºé
ãªã®ã§ã¯ãªãã§ãããããæã
ä¸ç´è·ã®SEã§ãããç§ã¯è±èªã¯ã¾ã£ããè¦æã§ãã¨å ã
ã¨è¨ã£ã¦ãã人ããã¾ãããããã¯ã¨ã³ã¸ãã¢ã¨ãã¦ã¯æ¬æ¥ãããæ¥ãããããã¨ã ã¨æãã¾ãã
*1:Rubyãªã©ã¯æ¥æ¬äººãä½ã£ãè¨èªã§ãããçºæ³ã¯è±èªãå ã«ããä»ã®è¨èªãåèã«ä½ããã¦ãããããçµå±æ¥æ¬äººåãã§ã¯ãªãã®ãæ²ããã¨ããã§ããããï¼æåãªæ¥æ¬äººåãã®è¨èªã¨ãã¦ã¯ãããªã§ããããªã©ããã£ãã¨ãããã¾ãããæ®å¿µãªããä»äºã§ä½¿ã£ããã¨ã¯ããã¾ããã
*2:è±èªã®å¦ç¿æ¹æ³ã¯äººã«ãã£ã¦ãã¾ãã¾ã ã¨æãã¾ãããç§ã®å ´åã¯CDã®è±èªææãèãã¾ããã¨ããã®ãæå¹ã§ããããã¡ããå¦æ ¡ã§ç¿ãç¨åº¦ã®åºæ¬ææ³ãåèªã®ç解ã¯ããç¨åº¦åæã§ãããç¹ã«æè¿ã¯éè´ãè¡ãã½ãããããã¾ãããï¼http://www.wweden.com/ï¼ã3åéãªã©ã§èãåãè¨ç·´ããããã¨ã§ãç¸å½è±èªè³ãéãããã¾ãã®ã§ãå§ãã§ãã
*3:ã©ã¤ãã©ãªã¼ã®è±æããã¥ã¢ã«ãã¨ã©ã¼ã¡ãã»ã¼ã¸ãªã©æ¥ã è±èªã¨è§¦ãåããªãã¦ã¯ãªããªãä¸æµããã°ã©ãã¼ã¨æ¯è¼ãã¦ãå¤ãã®å ´åä¸æµSEï¼hands-offã¢ã¼ããã¯ãå«ãï¼ã¯æ¥åä¸è±èªã«ã¾ã£ãã触ãããã¨ããªãã¨ãããã¨ãè±èªåä½ä¸ã®åå ããããã¾ããã
*4:booleanãè¿ãè¿°èªé¢æ°ã¯é常ç¾å¨å½¢ã§isã()ãhasã()ã¨ãªããã¾ããgetterãsetterã¯å¯¾è±¡ãªãã¸ã§ã¯ãã«å¯¾ããå½ä»¤ã¨ããããIã主èªã¨ããç¾å¨å½¢ã¨èããã®ãèªç¶ããã ããJavaã§ã¯æ§æä¸ã¡ã½ããã¨åºå¥ãã¤ããªãããC#ãªã©ã®è¨èªã§ã¯ãããã®ã¡ã½ããã¯æ¬æ¥ããããã£ã¨ãã¦å®ç¾©ã§ãããè±èªè³ã«ã¯ãcustomer.getName()ããcustomer.nameã®æ¹ãèªç¶ã«èªããã
*5:ã¯ã©ã¹åãã¤ã³ã¹ã¿ã³ã¹åã«-erã-orãªã©ã®æ¥å°¾è¾ã®ã¤ããåèªã使ããã¨ãå¤ãã®ã¯ãè±èªnativeã®äººããªãã¸ã§ã¯ããæ¬äººåãã¦ãã証æ ã§ã¯ãªãã§ãããããManagerãTranslatorãªã©ã¯äººã«å¯¾ãã¦ä½¿ã£ã¦ããããããªãåèªã§ãã
*6:ããã°ã©ã ãè±èªã«è¿ã¥ãããã¨ãã試ã¿ã¯å®ã¯COBOLã®æ代ãããã£ããã®ã¨èãããã¨ãã§ãã¾ããCOBOLã«ã¯ä½ç¾ã¨ããè±èªã®äºç´èªããããæãç¯ã段è½ãªã©ã¯ã¾ãã«è±æãã¢ãã«ã«ãã¦ãã¾ããè±èªè³ã§ãªãã¨ãã¢ã«ã´ãªãºã ããã¼ã¿æ§é ã°ããèãã¦ãã¾ããããã°ã©ã ã®æç« ã¨ãã¦ã®å¯èªæ§ã¨ããã¨ããã¾ã§é ãã¾ãããªãã®ãåé¡ã§ãã