タグ

関連タグで絞り込む (2)

タグの絞り込みを解除

traitに関するkamipoのブックマーク (5)

  • PHP5.4とScalaのトレイト比較 - なんたらノート第三期ベータ

    PHP5.4にはトレイトという文法が導入されて、多重継承の便利さが享受できるようになるそうです。 いろいろ試してみることにしました。 トレイトといえば代表選手はScalaですね。Scalaでいうトレイトは、インターフェースの定義とメソッドの実装を同時にやってくれる便利な概念でした。単一継承のOOP言語では「〜は〜の一種」という制約が強すぎて、「ペンギンは鳥の飛行メソッドによって飛行できてしまう」という問題があります。でもちゃんと「ペンギンは飛べないが泳げる鳥」を綺麗に解決する必要はあって、その解答として、トレイトのあるScalaではこんな解が導けます。 abstract class Animal abstract class Bird extends Animal { def hasBeak = true // 鳥にはかならずクチバシがある def hasWings = true // 翼

    PHP5.4とScalaのトレイト比較 - なんたらノート第三期ベータ
    kamipo
    kamipo 2011/07/05
  • 社内勉強会 - Pixel Pedals of Tomakomai

    Moose::RoleはJavaのInterfaceなんかじゃないの内容を社内勉強会でやったので、スライドだけ貼っておきます。 slideshareの貼り方ははてなブログでslideshareのプレゼンテーションflashを貼る方法で教わりました。

    社内勉強会 - Pixel Pedals of Tomakomai
  • Moose::Roleのメソッドの競合(2) - 蛇足編 - Pixel Pedals of Tomakomai

    かなり蛇足ですが、昨日のエントリに追記。 「メソッドが競合している」ではなく、「クラス側にメソッドを実装しなさい」と怒られる Traitsの形式的定義によれば、 clashes, i.e., names that are defined in both T1 and T2 , annihilate each other and do not appear in the resulting record. となってますので、重複したメソッドは削除されて合成されることを想定しているようです。じゃあ、なんでこんなエラーになるのかとソースを読むと、 Moose::Meta::Role::Application::RoleSummation にて・・・ foreach my $method (@all_methods) { if (exists $seen{$method->{name}}) { if

    Moose::Roleのメソッドの競合(2) - 蛇足編 - Pixel Pedals of Tomakomai
  • Moose::Roleのメソッドの競合 - Pixel Pedals of Tomakomai

    再びTraits: Composable Units of Behaviorのネタです。 Moose::Roleを使った場合、メソッドの優先順位は 自クラス → Role → スーパークラス ... となりますが、ここで Role だけは複数持てるため、競合がありえます。 以下のTaxとTotalの二つのRoleは、どちらもtotal_priceを持っています。 # 価格から税金計算 package Tax; use Moose::Role requires 'price'; sub tax { my $self = shift; return $self->price * 0.05; } sub total_price { my $self = shift; return $self->price + $self->tax; } no Moose::Role; # 単価から合計計算 pa

    Moose::Roleのメソッドの競合 - Pixel Pedals of Tomakomai
  • 第3回 Moose::Role:役割単位のクラス分け | gihyo.jp

    多重継承しないほうがよい場合 前回は多重継承を利用してクラスを拡張するときにありがちな問題と、そのひとつの解決策を見てきましたが、クラスにいくつかのメソッドを追加したいだけであれば、むしろ継承を利用しないほうがふさわしい場合もあります。 たとえば「コウモリ」というクラスを実装するとき、「⁠乳を出す」というメソッドのために「ほ乳類」というクラスを、「⁠空を飛ぶ」というメソッドのために「鳥類」というクラスを継承するのは――たしかにそれで当座の問題は解決するかもしれませんが――違和感が残ります。 use strict; use warnings; use Test::More tests => 4; package Mammal; sub new { bless {}, shift; } sub produce_milk { print "I can produce milk.\n"; } pa

    第3回 Moose::Role:役割単位のクラス分け | gihyo.jp
  • 1