From: keiju@... (ÀÐÄÍ·½¼ù ) Date: 1997-03-31T03:12:00+09:00 Subject: [ruby-list:2510] Re: class design (Re: url escape) ã‘ã„ã˜ã‚…ï¼ SHLジャパンã§ã™. 知らãªã„é–“ã«ãƒ¡ã‚¤ãƒ«ã®æ´ªæ°´ãŒèµ·ã“ã£ã¦ã„ã¾ã™ã­.... In [ruby-list :02487 ] the message: "[ruby-list:2487] Re: class design (Re: url escape) ", on Mar/29 11:23(+0200) matz@caelum.co.jp (Yukihiro Matsumoto) writes: >「rubyã«ã‚ˆã‚‹ã€Žä½œã‚‹ã€ã‚ªãƒ–ジェクト指å‘ã€ã¨ã„ã†æ–‡ç« ãŒãã®ã†ã¡çŸ³ >塚ã•ã‚“ã‹ç§ã«ã‚ˆã£ã¦æ›¸ã‹ã‚Œã‚‹ã¯ãšã§ã™ã‹ã‚‰ï¼Œãã“ã«ã¯ãã£ã¨è¼‰ã‚‹ã‚“ >ã˜ã‚ƒãªã„ã§ã™ã‹ï¼Ÿ ã„ã¿ã‚りã’ãªã(^^;;; >後,特異メソッドã®ã„れもã®ã¨ã—ã¦ä½¿ã†ãªã‚“ã¦ä½¿ã„方も考ãˆã‚‰ã‚Œã¾ >ã™ã­ï¼Žã‚ã¾ã‚Šæ­£å½“çš„ã§ã¯ãªã„ã¨æ€ã„ã¾ã™ã‘ã©ï¼Ž 特異メソッドã®ã‚¯ãƒ©ã‚¹ç‰ˆ(特異クラス??)ã®å…¥ã‚Œã‚‚ã®ã¨ã—ã¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使ã†ã¨ ã„ã†ã¦ã‚‚ã‚りã¾ã™ã­(^^;;; >|æŸï¼©å¡šã•ã‚“ã§ã™ã­ã€‚(^_^) ç§ã‚‚最åˆã‚ã¾ã‚Šä½¿ã‚ãªã‹ã£ãŸã‚“ã§ã™ãŒã€ >|I塚ã•ã‚“ãŒè‰¯ã使ã‚れるã®ã§ç§ã‚‚影響をå—ã‘ã¦ã„ã‚‹ã®ã§ã™ã€‚一辺 >|ãŸãšã­ã¦ã¿ãŸã‹ã£ãŸã®ã§ã™ãŒã€ã©ã†ã—㦠特異メソッド㨠extend >|を多用ãªã•ã‚‹ã®ã§ã—ょã†ã€‚> 石塚ã•ã‚“ >メタクラスãŒè¦‹ãˆã‚‹Smalltalk出身ã ã‹ã‚‰ï¼Ÿ 学生時代ã¯meta-mathematics(数学基礎論), ç‰¹ã«æ§‹æˆçš„æ•°å­¦ã«ã¯ã¾ã£ã¦ã„ãŸã‹ ら(^^;;; 冗談ã¯ã•ã¦ãŠã. Smalltalk出身ã§ã‚ã‚‹ã“ã¨ã¯äº‹å®Ÿãªã®ã§ã™ãŒ, Smalltalkã¯ã‚· ングル継承ã—ã‹ã§ãã¾ã›ã‚“ã®ã§, é¸æŠžè‚¢ãŒç‹­ãã¦ã‚ã¾ã‚Šè¿·ã†ä½™åœ°ã¯ã‚りã¾ã›ã‚“ よã­. 一方, rubyã¯è‰²ã€…é¸ã¹ã¦ã‹ãˆã£ã¦è¿·ã£ã¦ã—ã¾ã†ã¨ã„ã†... ç§ã¯å…ƒã€…, super class/subclassã®æ§‹æˆã«é–¢ã—ã¦ã¯, 標準的ã¨ã„ã†ã‹ç´”粋ã¨ã„ ã†ã‹æ­£è¦çš„ã§ã‚ã£ã¦, 変ãªç¶™æ‰¿ã®ä»•æ–¹ã¯å¥½ã¿ã§ã‚りã¾ã›ã‚“. 例ãˆã°, Arrayã®ã‚µãƒ–クラスã¨ã—ã¦(æ•°å­¦ã®)ベクトルを表ã™Vectorを作るã¨ã‹ ã¯çµ¶å¯¾ã—ã¾ã›ã‚“. ãã†ã„ã†æ„味ã§ã¯, 純粋ãªSmalltalkerã¨ã„ãˆã‚‹ã®ã§ã™ãŒ... ãŸã , ãれã¯ã‚·ãƒ³ã‚°ãƒ«ç¶™æ‰¿ã—ã‹é¸æŠžè‚¢ã®ãªã‹ã£ãŸæ™‚ã§ã®è©±ã—ã§, rubyã®å ´åˆã¯ ã¡ã‚‡ã£ã¨å¤‰ã‚ã£ã¦ãã¾ã™ã‚ˆã­... ç§ã®è€ƒãˆã®ã‚‚ã†1ã¤ã®åŸºæœ¬ã¨ãªã‚‹ã‚‚ã®ã¯, クラスã¨ã„ã†æ¦‚念ã¯å‰¯æ¬¡çš„ãªã‚‚ã®ã§ ã‚ã£ã¦, ã¾ãšã‚ªãƒ–ジェクトã‚りãã§ã™. クラスã¯ã‚る共通ã—ãŸæ€§è³ªã‚’æŒã¤ã‚ªãƒ– ジェクト群を抽象化ã—ãŸã‚‚ã®ã§ã‚ã‚‹ã¨ã„ã†é¢¨ã«è€ƒãˆã¦ã„ã¾ã™. # ãã†ã„ã†æ„味ã§ã¯æ§‹æˆçš„æ•°å­¦ã®ãƒ‘ラダイムã®å½±éŸ¿ã‚’å—ã‘ã¦ã„ã‚‹ã¨ã„ãˆãªã„ã§ # ã‚‚ãªã„ã§ã™ã­. ã¾ã‚, ãã‚“ãªã‚ã‘ã§ã‚¯ãƒ©ã‚¹å˜ä½ã§ã¯ãªãã¦, 個別ã®ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã«æ©Ÿèƒ½ã‚’追加 ã™ã‚‹ã¨ã„ã†è€ƒãˆæ–¹ã«ã¯ãれã»ã©é•和感をもã£ã¦ã„ã¾ã›ã‚“. ã¨ã¯ã„ãˆ, 本当ã®ç†ç”±ã¯, 特異メソッドやextendã«ã“ã£ã¦ã„ã‚‹ã®ã¯, 物çã—ã„ ã ã‘ã‹ã‚‚知れã¾ã›ã‚“(^^;;; ã“ã†ã„ã†è¨€èªžã¯æ‰‹å…ƒã«ã‚りã¾ã›ã‚“ã§ã—ãŸã®ã§... 色々使ã£ã¦ã¿ã¦å®Ÿéš›ã«ã©ã®ã‚ˆã†ãªç”¨é€”ãŒã‚ã‚‹ã®ã‹ä½“験中ã£ã¦ã¨ã“ã‚ã§ã—ょã†ã‹... 最近ã¯, ã‚½ã‚±ãƒƒãƒˆã®æ±Žç”¨ãƒ—ロトコル作æˆ/é€šä¿¡ãƒ•ãƒ¬ãƒ¼ãƒ ãƒ¯ãƒ¼ã‚¯ã«æŒ‘戦中ãªã®ã§ ã™ãŒ, ãã“ã§ã¯ mix-inモジュールã®åŠ¹æžœçš„åˆ©ç”¨æ³•ã«æŒ‘戦中ã§ã™. FWã®æ§˜ãªã‚ る程度制é™ã•れãŸç”¨é€”ã®ã‚¯ãƒ©ã‚¹ãƒ©ã‚¤ãƒ–ラリã«ãŠã‘ã‚‹mix-inモジュールも色々㪠用途ãŒã‚ã‚‹ãªã‚ã¨å®Ÿæ„Ÿã—ã¤ã¤ã‚りã¾ã™. rubyã§ã¯, 色々ãªã‚¯ãƒ©ã‚¹(オブジェクト)æ§‹æˆæ³•ãŒã‚ã£ã¦é¢ç™½ã„ã¨æ€ã£ã¦ã„ã¾ã™. モジュールã§ã¯: * メソッドをã¾ã¨ã‚ã‚‹ãŸã‚ã«ä½¿ã†ãƒ‘ッケージã¨ã—ã¦ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ« * includeã•れるãŸã‚ã®mix-inモジュール * 主ã«extendã«ç”¨ã„られるモジュール * 抽象モジュール(抽象クラスã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ç‰ˆ) クラスã®ä½œã‚Šæ–¹ã¨ã—ã¦ã¯: * 独立クラス * サブクラス * proxyクラス(デレゲーション) * ã‚るクラスをincludeã—ãŸã‚¯ãƒ©ã‚¹ ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã®æ§‹æˆæ³•: * インスタンス * 特異メソッドを付加ã—ãŸã‚ªãƒ–ジェクト * モジュールをextendã—ãŸã‚ªãƒ–ジェクト æ—¢ã«ã‚ã‚‹ã‚¯ãƒ©ã‚¹ã«æ©Ÿèƒ½ã‚’追加ã™ã‚‹ã«ã¯: * サブクラスを作る. * proxyクラスをã¤ãã‚‹. * æ—¢ã«ã‚るクラスã«ç›´æŽ¥ãƒ¡ã‚½ãƒƒãƒ‰ã‚’追加ã™ã‚‹. * æ—¢ã«ã‚るクラスã«ç›´æŽ¥ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’追加(include)ã™ã‚‹. * インスタンスã«å¯¾ã—ã¦ç‰¹ç•°ãƒ¡ã‚½ãƒƒãƒ‰ã‚’定義ã™ã‚‹. * インスタンスã«å¯¾ã—ã¦ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’extendã™ã‚‹. ã“ã®ã‚ˆã†ã«è‰²ã€…ãªç”¨æ³•ãŒã‚ã‚‹ã‚ã‘ã§ã™ã‹ã‚‰, è‰²ã€…ã¨æ‚©ã‚€ã®ã‚‚当ãŸã‚Šå‰ã¨ã„ãˆã° 当ãŸã‚Šå‰ã§ã™ã­. PS. ãŸã , ç§ã ã£ã¦, 実際ã¯extendや特異メソッドã ã‘を使ã£ã¦ã„ã‚‹ã‚ã‘ã§ ãªãã¦, サブクラスを使ã£ã¦ã„ã‚‹ã“ã¨ã®æ–¹ãŒå¤šã„ã‚“ã§ã™ã‚ˆ. __ .....................................石塚 圭樹@SHLジャパン(æ ª)... ------------->アドレス変ã‚りã¾ã—ãŸ!! e-mail: keiju@shljapan.co.jp <----