«前の日記(2005年12月16日) 最新 次の日記(2005年12月18日)» 編集

日々をアレコレ


2005年12月17日

命名(仮)

とりあえず、作成しようとするシステムを、Rubyでメーラー(仮)と命名する。コードを1行も書いてないし、まだ仮名ということで。

Rubyでクラスの継承

昨日書いたRubyでメーラー(仮)の設計で、

"net/pop.rb"と"net/smtp.rb"の両方を継承したクラスを作成

なんて書いた。だけど、Rubyでは、多重継承ができないようになっているようだ。多重継承を許すとクラスの相関関係が複雑なモノになりやすい、というものらしい。代わりに、別に定義されたモジュールのメソッドと定数をクラスに取り込む「Mix-in」という概念がある。ただ、このMix-inはあくまで「モジュール」が対象で、「モジュール」内で定義された「クラス」は含まれない。

要するに、"net/pop.rb"と"net/smtp.rb"それぞれで定義されたクラス、"Net::POP3"と"Net::Smtp"の両方を継承することは不可能。そこで、継承とは別の方法をとることにする。

  1. 新規にクラスを定義(仮に、Mailerクラスとする)する。
  2. Mailerクラス内で、"Net::POP3"と"Net::SMTP"のインスタンスを生成して、メンバ変数として持つ。
  3. "Net::POP3"と"Net::SMTP"に渡す情報はInitialize時に渡すのではなく、明示的に設定する関数を作成し、そこから設定するようにする。

これは、あくまで「POP before SMTP」に対応するためのものであって、そんな必要がないならこんな実装は全く無意味だ。


«前の日記(2005年12月16日) 最新 次の日記(2005年12月18日)» 編集