[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[jfriends] Re: ¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ë³ÊǼ¤¹¤ë¥Ç¡¼¥¿¥ª¥Ö¥¸¥§¥¯¥È¤Ë»ý¤Äµ¡Ç½(Re: CAD¤Î¥¯¥é¥¹¹½Â¤)
In article <9909020425.AA28261@xxxxxxxxxx>
Kazuya Maebashi wrote:
>>draw(Shape)¤È¤¤¤¦¥á¥½¥Ã¥É¤Î¼ÂÁõ¤¬°ì¤Ä¤·¤«¤Ê¤±¤ì¤Ð¤½¤¦¤Ê¤ê¤«¤Í¤Þ¤»
>>¤ó¤Í.
>
>¤³¤Á¤é¤Ï¤¢¤Þ¤ê¤Ë¤âÈᤷ²á¤®¤Þ¤¹¤Î¤Ç¡£
>
>>>¡¦ShapeRunTime¤È¤¤¤¦abstract¥¯¥é¥¹¤òºî¤Ã¤Æ¡¢¤½¤Î¥¤¥ó¥¹¥¿¥ó¥¹
>>> ¤òShape¥¤¥ó¥¹¥¿¥ó¥¹¤¬ÊÝ»ý¤¹¤ë¤è¤¦¤Ë¤¹¤ë¡£
>>>¡¦ShapeRunTime¤ò·Ñ¾µ¤·¤Æ¡¢ShapeRunTimeForDrawer¤òºî¤ê¡¢
>>> ¡Ödraw¤¹¤ë¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¡×¤Ç¤Ï¡¢Shape¤Ë¤½¤¤¤Ä¤ò¤¯¤Ã¤Ä¤±
>>> ¤Æ¤ª¤¯¡£Â¾¤Î¤³¤È¤¹¤ë¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ï¡¢¤½¤ì¤¾¤ì
>>> ShapeRunTimeForXXXX¤òºî¤ë¡£
>>>¡¦¡Ödraw¤¹¤ë¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¡×¤Ï¡¢ShapeRunTime¤ò¥À¥¦¥ó¥¥ã¥¹
>>> ¥È¤·¤Æ»È¤¦(¤³¤³¤¬Èþ¤·¤¯¤Ê¤¤)¡£
>>>¡¦ShapeRunTimeForDrawer¤Ë¤Ï¡¢abstract¤Ê¥á¥½¥Ã¥É¤È¤·¤Æ¡¢
>>> draw()¤òÆþ¤ì¤Æ¤ª¤¯¡£ShapeRunTimeForDrawer¤ò·Ñ¾µ¤·¤Æ
>>> LineRunTimeForDrawer¤Ê¤É¤òºî¤ë¡£draw()¤Î¼ÂÁõ¤Ï¤½¤³¤Ë½ñ¤¯¡£
>¤¿¤È¤¨¤Ð¡¢¥Ç¡¼¥¿¹½Â¤¤ò¥·¥ê¥¢¥é¥¤¥º¤·¤Æ¥Õ¥¡¥¤¥ë¤Ë³ÊǼ¤¹¤ë¾ì¹ç¡¢
>¤½¤Î¥Ç¡¼¥¿¥Õ¥©¡¼¥Þ¥Ã¥È(¤Ä¤Þ¤ê¡¢Shape¤Î¹½Â¤)¤¬¸ø³«¤µ¤ì¤Æ¤¤¤ì¤Ð¡¢
>¤½¤ì¤òÍøÍѤ¹¤ë¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ï¡¢¤¤¤í¤ó¤Ê²ñ¼Ò¤¬¶¥¹ç¤·¤Æ³«È¯
>¤¹¤ë²ÄǽÀ¤â¤¢¤ê¤Þ¤¹¡£¤½¤¦¤¤¤¦¾ì¹ç¤Ï¡¢¥¢¥×¥êËè¤ÎÆÈΩÀ¤ò¤Ê¤Ë
>¤¬¤Ê¤ó¤Ç¤â³ÎÊݤ·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¤Ç¤·¤ç¤¦¤·¡£
Shape¥µ¥Ö¥¯¥é¥¹¤¬ShapeRunTime¤òÃΤäƤ¤¤ë¤ï¤±¤Ç¤Ï¤Ê¤¯(¥Ç¡¼¥¿¥Ù¡¼
¥¹¤«¤é¼è¤ê½Ð¤·¤Æ¤«¤é³°¤«¤éÉÕ¤±¤ë¤È¤Î¤³¤È¤Ê¤Î¤Ç)¡¢³ÆÁÈ¿¥¤¬¤½¤³¤ÎÆÈ
¼«¤Î¼ÂÁõ¤òÉÕ¤±¤ë¤ï¤±¤Ç¤¹¤Í.
¤½¤Î¾ì¹ç¡¢
In article <37cdd7be.3692.87cced020f2c6377@xxxxxxxxxx>
Shin wrote:
> :
> otherYYYY(shape); // ÆÃ¼ì¤ÊÁàºî¤Î¾ì¹ç
> :
¤ÈÁ°¶¶¤µ¤ó°Æ¤ÏƱ¤¸¤³¤È¤«¤È»×¤¤¤Þ¤¹.
¤Þ¤º¡¢LineRunTimeForDrawerÅù¤òShape¤Î¥µ¥Ö¥¯¥é¥¹¤¿¤Á¤Ë´ØÏ¢ÉÕ¤±¤ë½è
Íý¤¬É¬Íפʤ櫓¤Ç¤¹¤¬¡¢¤³¤ì¤ò¹Ô¤¦¤Ë¤Ï·ë¶É¡¢
if (shape instanceof Line) {
shape.runtime = new LineRunTimeForDrawer();
} else if () {
}
¤ß¤¿¤¤¤Ê»ö¤¬É¬ÍפˤʤäƤ·¤Þ¤¤¤Þ¤¹.
¤Ç¡¢Shape¤Ë¥á¥ó¥Ð¤ò»ý¤Ä·Á¤À¤È¤½¤Î¸åDrawer¤ò»È¤¦»þ¤Ë¡¢
(LineRunTimeForDrawer)(shape.runtime).draw();
¤Ê¤ó¤Æ¤·¤Ê¤¤¤È¤¤¤±¤Ê¤¤¤Î¤Ç¡¢¤½¤ì¤Ê¤é¡¢
¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¦¤ÇShapeRuntimeForDrawer¤òÊÝ»ý¤·¤Æ¡¢
if (shape instanceof Line) {
drawer = new LineRunTimeForDrawer(shape);
} else if () {
}
:
drawer.draw();
¤ÎÊý¤¬¤Þ¤·¡¢¤È¤Ê¤ê¤Þ¤¹¤¬¡¢¤³¤ì¤À¤È¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¦¤Ç°·¤¦Shape¥ª
¥Ö¥¸¥§¥¯¥È¤Î¿ô¤À¤±Drawer¥ª¥Ö¥¸¥§¥¯¥È¤ò´ÉÍý½ÐÍè¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¤Î
¤Ç¡¢´ÉÍý¤¹¤ë¤³¤È¤ò¤¢¤¤é¤á¤Æ¡¢
draw(shape) {
if (shape instanceof Line) {
new LineRunTimeForDrawer(shape).draw();
// ¤Þ¤¿¤Ï¡¢
// drawLine(shape);¢¨
} else if () {
:
}
:
}
¤È¤·¤Æ¤·¤Þ¤¨¤Ð¤¤¤¤.
¡Ö¤³¤ì¤À¤È»È¤¤¼Î¤Æ¥ª¥Ö¥¸¥§¥¯¥È¤¬·ù¤À¤«¤é¢¨¤ÎÊý¤ò»È¤¦¡×¤È¤Þ¤¢¤ª¤ó
¤Ê¤¸¤è¤¦¤Ê¤â¤Î¤«¤Ê?(¶¯°ú¤À)
¤³¤ì¤ÏShape¤¬¥Ç¡¼¥¿¥¯¥é¥¹¤È³ä¤êÀڤä¿Àß·×(¤È¤¤¤¦¤«ÆÈ¼«¤Î¼ÂÁõ¤òËä
¤á¹þ¤à¤ï¤±¤Ë¤¤¤«¤Ê¤¤¤Î¤Ç¤½¤¦¤¹¤ë¤·¤«¤Ê¤¤¶ÉÌÌ)¤Î¾ì¹ç¤Ç¤¹.
>¤Ç¡¢Shape¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤òÀ¸À®(¤Þ¤¿¤Ï¥Ç¥·¥ê¥¢¥é¥¤¥º)¤¹¤ë¤È¤
>¤Ë¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ë±þ¤¸¤ÆÉ¬ÍפÊShapeRunTime¤òÀ¸À®¤·¤Æ¡¢¤½
>¤³¤Ë¤¯¤Ã¤Ä¤±¤ë¤ï¤±¤Ç¤¹¡£
>
>¤Ä¤¤¤Ç¤Ë¡¢ShapeRunTime¤Ï¡¢¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤Ç¤Ï¤Ê¤¯¤Æ¥¯¥é¥¹¤Ç¤¹¡£
>¼Â¹Ô»þ¤Î¤ß¤ËɬÍפʥǡ¼¥¿¥á¥ó¥Ð¤Î³ÊǼ¾ì½ê¤Ë¤â¤¹¤ë¤¿¤á¤Ç¤¹¡£
>¤½¤Î¾ì¹ç¡¢ShapeRunTime¶¦Ä̤Υǡ¼¥¿¤â¤¢¤ë¤Ç¤·¤ç¤¦¤·¡¢DrawerÀì
>ÍѤΤâ¤Î¤Ê¤é¡¢ShapeRunTimeForDrawer¤ËÆÍ¤Ã¹þ¤á¤Ð¤¤¤¤¤Î¤Ç¤¹¡£
ÍøÍѼԤϡÖShapeRunTime¤È¤¤¤¦¥¯¥é¥¹¤ò¥µ¥Ö¥¯¥é¥¹²½¤·¤Æ¡¢ÆÈ¼«¤Î¼ÂÁõ
¤ò½ñ¤¡¢Shape¤Ë¼Â¹Ô»þ¤Ë¼«Ê¬¤ÇÀßÄꤷ¤Æ¡¢narrowing cast¤·¤Æµ¡Ç½¤ò¸Æ
¤Ó½Ð¤¹¡×¤È¤¤¤¦Ìó«¤ò¼é¤ì¤ë¤Î¤Ç¤·¤ç¤¦¤«?
Ê̤δÑÅÀ¤«¤é¸«¤Æ¡¢ShapeRunTime¤Ë¤Ï¼Â¹Ô»þ¤Î¤ß»È¤¨¤ë´ðËܵ¡Ç½¤â»ý¤¿
¤»¤ë¤³¤È¤¬¹Í¤¨¤é¤ì¤Þ¤¹¤è¤Í.
¤½¤ì¤ÈÆ±ÄøÅÙ¤Ëdraw()¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤ÎɬÍ×À¤¬¤¢¤ì¤Ð¡¢
ShapeRunTime#draw()¤È¤¤¤¦(Ãê¾Ý)¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤â½ñ¤¤¤Æ¤ª¤±¤Ð¡¢
narrowing cast̵¤·¤Ç¸Æ¤Ó½Ð¤»¤Þ¤¹.
>>»ä¤Ï¡¢¤³¤¦¤¤¤¦¤Î¤òÍѰդ·¤Æ¡¢
>>
>>interface ShapeFunction {
>> public void draw2D();
>> public void draw3D();
>> public void otherXXXX();//¤½¤Î¾¤ÎÈÆÍÑŪ¤½¤¦¤Êµ¡Ç½?
>>}
>...
>>»È¤ï¤Ê¤¤¥á¥½¥Ã¥É¤¬ShapeFunction¤Î¼ÂÁõ¥¯¥é¥¹¤Ë¸ºß¤¹¤ë¤³¤È¤â¤¢¤ê¤Þ
>>¤¹¤¬¤½¤ì¤ÏÌäÂê»ë¤¹¤ë¤³¤È¤â¤Ê¤¤¤È»×¤¤¤Þ¤¹.
>
>¤¦¡¼¤ó¡¢ShapeFunction¤Ï¥·¥ê¥¢¥é¥¤¥ºÂоݳ°¤Ç¤¹¤«¤é¡¢¥Ç¡¼¥¿¥Ù¡¼
>¥¹¤Ë³ÊǼ¤µ¤ì¤¿¥â¥Î¤Ë¤Ä¤¤¤Æ¤Ï¡¢±Æ¶Á¤òÍ¿¤¨¤Ê¤¯¤Æ¡¢¤½¤ì¤Ï¤½¤ì¤Ç
>°ÕÌ£¤Î¤¢¤ë¤³¤È¤À¤È»×¤¦¤Î¤Ç¤¹¤±¤ì¤É¤â¡£
>
>»È¤ï¤Ê¤¤¥á¥½¥Ã¥É¤¬ShapeFunction¤Ë¤¢¤ë¤È¤¤¤¦¤³¤È¤Ï¡¢¤¢¤Ã¤Á¤Î
>¥¢¥×¥ê¤ò²þ¤¤¹¤ë¤È¡¢¤³¤Ã¤Á¤Î¥¢¥×¥ê¤Ë¤â±Æ¶Á¤¬½Ð¤ë¤È¤¤¤¦¤³¤È¤Ë
>¤Ê¤ê¤Þ¤»¤ó¤«? javac¤Î¾ì¹ç¥ê¥³¥ó¥Ñ¥¤¥ë¤¬Íפ뤫¤É¤¦¤«¤Ï¤è¤¯ÃÎ
>¤ê¤Þ¤»¤ó¤±¤É¡£
¤¦¡¼¤ó¤È¤³¤Î¾ì¹ç¤ÎShapeFunction¼ÂÁõ¥¯¥é¥¹¤Ï¡¢Shape¥µ¥Ö¥¯¥é¥¹¤ÈƱ
ÍͤËÊ£¿ô¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤«¤é»È¤ï¤ì¤ë¥¯¥é¥¹¥é¥¤¥Ö¥é¥ê¤Î°ÌÃÖÉÕ¤±
¤Ç¤¹¤Í.¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ËÆÈ¼«¤Î¼ÂÁõ¤Ï...¤ÎÉôʬ(¾å¤Ë°úÍѤ·¤Þ¤·¤¿)
¤Ë¤â¤¢¤ë¤è¤¦¤ËShapeFunction¤È¤ÏÆÈΩ¤·¤Æºî¤é¤¶¤ë¤òÆÀ¤Ê¤¤¤È»×¤¤¤Þ¤¹.
>>Á°¶¶¤µ¤ó°Æ¤Ï¡¢
>>interface ShapeRunTime {
>>}
>>interface ShapeRunForDraw2D extends ShapeRunTime {
>> public void draw2D();
>>}
>>interface ShapeRunForDraw3D extends ShapeRunTime {
>> public void draw3D();
>>}
>>interface ShapeRunForXXXX extends ShapeRunTime {
>> public void XXXX();
>>}
>>¤Ç¡¢»È¤¦»þ¤ËShapeRunForDraw2D/3D/XXXXÅù¤Ë¥¥ã¥¹¥È¤¬É¬ÍפȤ¤¤¦¥Ñ¥¿
>>¡¼¥ó¤Ç¤¹¤Í.
>>Shape¤¬¾åµ¤Î¤É¤Îinterface¤ò¼ÂÁõ¤·¤¿¥¯¥é¥¹¤òÊÖ¤¹¤«¤¬(ÍøÍѼԤË)¤ï
>>¤«¤é¤Ê¤¤¤Î¤¬ÌäÂ꤫¤Ê¤¢.¤Ã¤Æ»ö¤¬¤¤¤¤¤¿¤«¤Ã¤¿¤Î¤Ç¤¹.
¢¬¤³¤ÎÉôʬ¤Ï¸í²ò¤¬¤¢¤Ã¤¿¤Î¤Ç¤¹¤¬¡¢
>
>ShapeRunTimeForXXX¤ÏÍøÍѼÔËè¤ËʬÎष¤Æ¤¢¤ë¤ï¤±¤Ç¤¹¤«¤é¡¢¤¢¤ë
>ÍøÍѼԤËɬÍפÊShapeRunTime¤Ï°ì¼ïÎà¤Î·è¤áÂǤÁ¤Ç¤¤¤¤¤ï¤±¤Ç...
¤¢¤ëÍøÍѼԤ·¤«»È¤ï¤Ê¤¤¼ÂÁõ¤Ç¤¹¤È¡¢ShapeRunTime¤Î¥µ¥Ö¥¯¥é¥¹¤Ç¤¢¤ë
ɬÍ×À¤â¤È¤¯¤Ë¤Ê¤¤µ¤¤¬¤¹¤ë¤È¤¤¤¦ÅÀ¤È¡¢
# Ê£¿ô°·¤¦¤«¤â¤·¤ì¤Ê¤¤Shape¤È°ìÂаì¤Ë¤¯¤Ã¤Ä¤±¤ÆÆ±»þ¤Ë°ú¤ÅϤ·¤¿¤ê
# ¤Ç¤¤ë¤³¤È¤Ë°ÕµÁ¤¬¤¢¤ë¤È¤¤¤¦¤³¤È¤Ê¤é¤ï¤«¤ê¤Þ¤¹.
# ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¦¤ÇƱ»þ¤Ë¤Ï°ì¤Ä¤º¤Ä¤·¤«ShapeRunTime¥µ¥Ö¥¯¥é¥¹
# ÁêÅö¤Îµ¡Ç½¤ò»È¤ï¤Ê¤¤¤Ê¤é¡¢Àè¤Ë½ñ¤¤¤¿¤è¤¦¤Êñ¤Ê¤ë¥á¥½¥Ã¥É¤ÇÎɤ¤
# ¤È»×¤¤¤Þ¤¹.
»ä¤Î°Æ¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¦¤Î¹Ô¤¦¼ÂÁõ¤Ç¤Ï¤Ê¤¯¡¢Shape¤Ë´ØÏ¢¤¹¤ë¥¯¥é
¥¹¥é¥¤¥Ö¥é¥ê¤ÎÀ߷פ˴ؤ¹¤ëÏäÀ¤Ã¤¿¤È¤¤¤¦¤¢¤¿¤ê¤Ç¤¹¤Í.
¸åÊݼé¤Ë´Ø¤¹¤ë»ëÅÀ¤¬·ç¤±¤Æ¤ë¤Î¤Ç¤â¤¦¾¯¤·¹Í¤¨¤Ê¤¤¤È¤¤¤±¤Ê¤¤¤Ç¤¹¤¬.
¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡
ÌÚ²¼ ¿®¡÷¥¤¥Ç¥¢
¤ä¤Ã¤Ñ¤ê8·î°Ê¹ß¤ÏƬ¤Î²óž¤¬°¤¤µ¤¤¬¤¹¤ë...¤¦¤Þ¤¯À°Íý½ÐÍè¤Ê¤¤¤Ç¤¹.
¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡¨¡