Rubyのmixin(モジュール)、Squeakのtrait、Scalaのtraitそれぞれについて: Q1: メソッドの実装を持てる? はい、はい、はい Javaのクラスは「はい」、インターフェイスは「いいえ」、C++とPythonのクラスは「はい」 Q2: クラスがそれを複数個継承できる? はい、はい、はい Javaのクラスは「いいえ」、インターフェイスは「はい」、C++とPythonのクラスは「はい」 Q3: インスタンスを作れる? いいえ、はい、いいえ C++とPythonのクラスは「はい」 Q4: 複数個継承した際に名前が衝突しました、どうなる? しれっと上書き、エラー(*)、エラー (*) Squeakはクラス定義時には例外を投げず、衝突したメソッドを「衝突した旨の例外を投げるメソッド」に置き換える。ユーザが衝突に気づくのは、クラスブラウザでメソッドを確認した時か、そのメソッド
今回は、AOPをScalaでやるには?ってテーマです。JavaだとAOPのライブラリを使って黒魔術的にごにょるワケですが、Scalaの場合はトレイトを使ったミックスインで実現できます。 trait Login { def login(userName:String,password:String) } trait LoggableLogin extends Login { abstract override def login(userName:String,password:String) = { println("logging start") super.login(userName,password) println("logging end") } } class DefaultLogin extends Login { def login(userName:String, pa
概要 [/2014-03-22] trait with [/2011-01-08] 初期化順 [2011-01-08] super[] [/2011-09-13] ソース分割の例 [/2011-08-26] 概要 Javaはクラスの多重継承は出来ないが、複数のインターフェース(interface)を1つのクラスに実装(implements)することが出来るようになっている。 そのクラスを呼び出す(使う)側からすれば、そのインターフェース経由でメソッドが呼べるということなので、分かり易くて便利だ。 しかしそのクラスを作る(用意する)側からすると、インターフェースで宣言されている全てのメソッドの中身をコーディングしなければならないので、面倒。 (インターフェースでは、メソッドの宣言は出来ても、その中身(本体)を記述することが出来ない為(JDK1.7以前)) 例えどのクラスでも同じようなコーディ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く