..
おそらく既に他の場所で私たちのソースコードで書かれている、時々、"この"機能を持つオブジェクトのクラスを作成するだけでなく、"この"と"この他"。
言い換えれば、我々はソースコードの他の部分や、一部のライブラリで定義されたメソッドとプロパティを借りるクラスを作成したい。
逆に、我々はすべてにアクセス可能な一つの場所で私たちのソースコードと同じ機能の周囲に集まるでしょう。 どのように?
この型のすべてのニーズが多型の適切な使用で解決できることを - 私の考えではなく、完全に理由もなく - 純粋主義者は、オブジェクト指向プログラミングとサポートをぞっとされています。
その他は、彼らがCのような言語の使用経験から来る場合は特に+ +、多重継承を使用してこれらの要件のため、その正確に主張する。
Rubyのような実用的な言語は、しかし、"ミックス"と呼ばれるテクニック、名前を提供することでこの問題に対処する - それはね! - アイスクリームの男は彼女に、さまざまなアイスクリームの味(クリーム、チョコレート...)から成るMassuchussetsを与えた
Rubyのミックスイン
技術的には、Rubyのミックスインは、別のモジュール(モジュール)で定義されたクラス、コード内で使用して実装されています。
簡単な例を取るために、私は自動的にビジネスレターの私の友情をプリントアウトワードプロセッサを実装するとします。 あなたが必要なデータのみを入力するようにしたいので、受信者とメッセージを、すなわち。 プログラムは"敬具""卿"、のような別の友好を考えるとなる
フレンドリーな形で定義してみましょう:
モジュールCordialitaLettera
DEF開始(アドレス)
"親愛なる氏。"+受信+"\ n"を返す
最後に
最終的な署名(手紙)
手紙を返す+"\ nを"+"敬具、\ nCarloスミス"
最後に
最後に
特に何も、その後、テキストを変更できる唯一の2つのメソッドが入力として受信されません。
ちょうどミックス、これらのメソッドへのクラス"混合"書いてみましょう。
クラスの手紙
CordialitaLettera含まれています
最後のstampaLettera(受信者、メッセージ)
=スタート地点(受信機)
=手紙+ポスト
署名を置きます(手紙)
最後に
最後に
クラスの上にある文字は、モジュールで定義されているフレンドリーなフォーマットで、入力として文字の唯一の変数部分を受け取るメソッドを持っています。
もし構文がRubyの継承と非常によく似てわかるように、しかし、後者とは異なり、 クラスでのフォームの任意の数の実装することができます -をして知られているように、クラスのクラスから派生させることができるつのみの親クラス(Rubyは多重継承をサポートしていません!)
例えば、我々は書くことができます。
DEFメイン()
Lengin = Lettere.new
lEngine.stampaLettera('アレッシオSaltarini"、
"私はただ転送するために進め
あなたが要求されました。')
置く
lEngine.stampaLettera("マタイPisconi"、
"私はnr.038283873にFAXを送信します。')
最後に
これは次の値を返します。
親愛なるsig.Alessio Saltarini、 私はちょうどあなたが要求された転送を行ってきた。 誠実に、 カルロロッシ
親愛なるsig.Matteo Pisconi、 私はnr.038283873にFAXを送信。 誠実に、 カルロロッシこの手法は、他のもののうち、私たちはそのJavaのインターフェイスのミックスインの使用を吸収することができます:クラスは、フォームと"混合"の場合は実際には、、実際にはメソッドが(そのため、特定のインタフェースに適合する)実装します。