Alluren of prototype-based OOP

  • 917 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
917
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
1
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. プロトタイプベースOOPへの誘い Hachioji.pm #2 LT @ytnobody
  • 2. あんた誰ですか?● twitter id: @ytnobody ● 本名: あずまさとし – 北海道函館市出身 近頃Elonaというローグライク – 1980年11月13日生まれ ゲームにハマってます。 ● 誕生日がキムタクと同じ! – だからどうした● 相模大野のITベンチャーに在籍 ● N/Wおよびサーバの構築/管理 ● 最近は開発がメインに。● プライベート ● ScalaとForthが楽しい今日この頃
  • 3. プロトタイプベースOOPとは?● オブジェクト指向プログラミングの一種。 ● 別名「インスタンスベースOOP」。 ● クラスの概念が無いとか、クラスとオブジェクトを区別しないと か。 ● 新規オブジェクトの生成は、既存オブジェクトを複製すること で実現。 – 基底オブジェクトが最低でも1つ存在● 大抵の場合、OOP=クラスベースOOP ● JavaもRubyもPythonもPHPもC++もScalaもetc... ● 無論、PerlのOOPもクラスベースOOP – bless { ... }, MyClass; ってやりますよね
  • 4. どんな言語で使えるか ナニコレ?● SELF(セルフ) マイナー言語ばっかりじゃない。 ● プロトタイプベースOOPの元祖。 こんなの使いたくないよーだ!● Lua(ルア) ● ブラジル発のスクリプト言語。MMORPGの組み込み用等で人気。● Io(アイオー) ● 割と最近開発されたカッコイイ言語 – Actorとかco-routineが使えて、並行性もばっちり – 正規表現がPerlっぽい – 高階関数など、関数型言語の側面も併せ持つらしい● Cyan(サイアン) ● 2008年、一人の天才高校生によって開発された言語● Javascript ● 自前のjs作ったことのある人なら、一度は体験してるはず。● Perl 何を言ってるんですか。 ● 拙作「Plass」を使えば、結構簡単に書けます! これを見たらね、 ● 実はこんなの使わなくても実現できますけどね>< 「あー僕もプロトタイプOOPしたい」 って言うに決まってるんですから!
  • 5. 今回のLTテーマ 「Perl以外」が、敢えてPerl
  • 6. Plassを使った プロトタイプベースOOPの一例humanオブジェクトを作成use Plass;my $human = plass hello => sub { ,"Hi. My name is ".shift->name."." }; humanオブジェクトを継承したprogrammerオブジェクトを作成 my $programmer = $human->plass( code => sub { bless { work => $_[1] }, Code } );programmerオブジェクトを継承したmikeオブジェクトを作成my $mike = $programmer->plass( name => mike); mikeさんからのご挨拶です。 $mike->hello; ### Hi. My name is mike.では彼にコードを作ってもらいます。my $thing = $mike->code;print ref( $thing ); ### Code
  • 7. プロトタイプOOPの功罪● メリット ● 概念的に簡易である ● 拡張が容易である ● 継承が容易である ● オブジェクトに対してメソッド等を動的に結びつけること が可能● デメリット ● オブジェクトの管理が煩雑になりがち ● クラスの概念が無いので型チェックしようとすると曖昧に なる
  • 8. ご清聴ありがとうございました!