p6oo

128
Perl 6 OOP

Upload: lichtkind

Post on 15-May-2015

227 views

Category:

Documents


0 download

DESCRIPTION

Eine praktische Einleitung in the OO-Syntax von Perl 6 mit ein wenig Theorie

TRANSCRIPT

Page 1: P6oo

Perl 6 OOP

Page 2: P6oo

Was ist OOP ?

LarryWall

Page 3: P6oo

Du meinst OPP ?

Page 4: P6oo

Was ist OOP ?

Page 5: P6oo

Position

Page 6: P6oo

Out Of Position

Page 7: P6oo

O O P

Page 8: P6oo

Was ist OOP ?

Page 9: P6oo

Lies Das !

Page 10: P6oo

Lies Das !

Object-oriented programming ... many opinions, theories, and even ideologies have

been formulated on the subject. ... Most are

mutually inconsistent.

Page 11: P6oo

O O P

Klassen / Prototypen(Multiple) Vererbung / Rollen

MMD + DelegationTypen + Subtypen

Introspektion / Metaobj.

Page 12: P6oo

Seine Meinung

Page 13: P6oo

TIMTOWTDI

Page 14: P6oo

Alles da in Schönheit

Page 15: P6oo

Suche Perfektion

Page 16: P6oo

Klasse

Page 17: P6oo

Klasse

class

Page 18: P6oo

Klasse

class

instanzierbarer Namensraum

Page 19: P6oo

Klasse

class module package

Page 20: P6oo

Klasse

class Excalibur; class Babylon;

Page 21: P6oo

Klasse

class

Instanzierbarer Namensraum

Page 22: P6oo

NR in Klammern

class Excalibur { ... }

Page 23: P6oo

Objekt

Page 24: P6oo

Objekt

my $obj = Klasse.new();

Page 25: P6oo

Objekt

my $obj = Klasse.new();

Page 26: P6oo

Neu Erschaffen

Page 27: P6oo

Bestehendes Klonen

Page 28: P6oo

Objekt

my $obj = $alt.clone();

Page 29: P6oo

Objekt

my $obj = $alt.clone(...);

Page 30: P6oo

Positionale Paramter

clone($pos1, $pos2);

Page 31: P6oo

Benannte Parameter

clone( :key('value'),);

Page 32: P6oo

Mit Autoquoting

clone( :key<value>,);

Page 33: P6oo

Old School Geht Auch

clone( key=>'value',);

Page 34: P6oo

Objekt

new & clone

bless blieb

Page 35: P6oo

Attribute

+

Methoden

Page 36: P6oo

Klasse class Spaceship { has Int $.speed; method stop { $.speed = 0 } }

Page 37: P6oo

Kann Ich auch !

Page 38: P6oo

In Perl 5package Spaceship;use Moose;has 'speed' => ( is => 'ro'; isa => 'Int';);sub stop { $self = shift; $self->speed = 0;}

Page 39: P6oo

In Perl 5use MooseX::Declare;class Spaceship { has 'speed' => ( is => 'ro'; isa => 'Int'; ); method stop { $self->speed = 0; }}

Page 40: P6oo

Klasse class Spaceship { has Int $.speed; method stop { $.speed = 0; } }

Page 41: P6oo

Attributbenutzung

P5 P6

$self->speed $.speedshift->speed self.speed $!speed

Page 42: P6oo

Twigil der Accessoren

. öffentlich ! privat

Page 43: P6oo

Twigil der Accessoren

. öffentlich ! privat

has $!speed; # privat

Page 44: P6oo

Twigil der Accessoren

. öffentlich ! privat

has $speed; # auch privat

Page 45: P6oo

trusts

Page 46: P6oo

trusts

class Hund { trusts Katze; has $!Knochen;}

Page 47: P6oo

trusts

my $carlo = Hund.new();my $mine = Katze.new();

$mine!Knochen = 0;

Page 48: P6oo

Twigils . öffentliche A. ! private A. ^ pos. auto para. : ben. Auto para. * globale ? compiler info = POD ~ sublang

Page 49: P6oo

Sigils

$ Skalar

@ Array

% Hash

Page 50: P6oo

Sigils

has $.speed;

has @.shuttle;

has %.crew;

Page 51: P6oo

Keine Typ Hashref

has $.speed;

has @.shuttle;

has %.crew;

Page 52: P6oo

MooseXuse MooseX::Declare;class Raumschiff { has 'speed' => ( is => 'ro'; isa => 'Int'; ); method stop { $self->speed = 0; }}

Page 53: P6oo

MooseXuse MooseX::Declare;class Raumschiff { has 'speed' => ( is => 'rw'; isa => 'Int'; ); method stop { $self->speed = 0; }}

Page 54: P6oo

Perl 6 class Raumschiff { has Int $.speed is rw; method stop { $.speed = 0; } }

Page 55: P6oo

Perl 6 class Raumschiff { has Int $.speed is rw = 0; method stop { $.speed = 0; } }

Page 56: P6oo

MooseXuse MooseX::Declare;class Raumschiff { has 'speed' => ( is => 'rw'; isa => 'Int'; default => 0; ); method stop { $self->speed = 0; }}

Page 57: P6oo

Perl 6 Attribute

kein:isa default (nur Syntax)predicate required coercereader writer init_argclearer builder lazy_build

Page 58: P6oo

Hab ich mir ausgedacht!

Page 59: P6oo

Perl 6 & Moose

has is

Page 60: P6oo

Subtypen

Page 61: P6oo

Moose

subtype 'Slogan' => as 'Str' => where {length $_< 50};

Page 62: P6oo

Perl 6

my subset Slogan of Str where {$_.chars < 50};

Page 63: P6oo

Delegation

Page 64: P6oo

Perl 6class spaceship;has DateTime $.clock;

$excalibur.clock.now;

Page 65: P6oo

Perl 6class spaceship;has DateTime $.clock handles 'now';

$excalibur.clock.now;

Page 66: P6oo

Perl 6class spaceship;has DateTime $.clock handles 'now';

$excalibur.clock.now; # ==$excalibur.now;

Page 67: P6oo

Moose

has 'clock' => ( handles => 'now'; );

Page 68: P6oo

Moose++, Nicht P6

has 'clock' => ( handles => { now => 'time'

}; );

Page 69: P6oo

Methoden

Page 70: P6oo

Methode

class Spaceship;

method stop { … }

Page 71: P6oo

Private Methode

method !stop { … }

Page 72: P6oo

Methoden

method !stop { … }

submethod go { … }

Page 73: P6oo

Methoden

# wird vererbtmethod !stop { … }# nicht erbbarsubmethod go { … }

Page 74: P6oo

MMD

?

Page 75: P6oo

MMD

MultiMethodDispatch

Page 76: P6oo

Schlüsselworte

only multi proto

Page 77: P6oo

Schlüsselworte

only #sowieso defaultmulti # anschaun !proto # später

Page 78: P6oo

MMD

multi method go (Coord $place) {}

multi method go (Str $cmd) {};

Page 79: P6oo

MMD

$excalibur.go('back');

Page 80: P6oo

MMD

only #sowieso defaultmulti # MMDproto # selber regeln

Page 81: P6oo

Vererbung

Page 82: P6oo

Vererbung

Moose P6

extends => is

Page 83: P6oo

MooseX::Declare

class WhiteStar extends Spaceship;

Page 84: P6oo

Perl 6

class WhiteStar is Spaceship;

Page 85: P6oo

Mehrfachvererbung

class WhiteStaris Spaceship is Membari;

Page 86: P6oo

Vererbung später

Moose P6

extends => also is

Page 87: P6oo

MooseX::Declare

class WhiteStar;...extends Spaceship;

Page 88: P6oo

Perl 6

class WhiteStar { ... also is Spaceship;

Page 89: P6oo

Rollen

Page 90: P6oo

Klassenhierarchie

Page 91: P6oo

Wo kommt die Neue rein?

Page 92: P6oo

Rollen

werden nicht vererbt !

geht nur ins Objekt

& zur Laufzeit raus

Page 93: P6oo

Rollen

werden vererbt !

wenn in eine Klasse gemischt

Page 94: P6oo

Rollen

Konflikte werfen Ausnahme

Page 95: P6oo

Rollen

Konflikte werfen Ausnahme

Überschreiben nicht global wie Ruby Mixins

Page 96: P6oo

Rollen

Konflikte werfen Ausnahme

Rollen > Mehrfachvererbung(dort bleiben Konflikte auch

unbemerkt)

Page 97: P6oo

Rollen

Konflikte werfen Ausnahme

außer wenn Methode leer

Page 98: P6oo

Rollen

Konflikte werfen Ausnahme

außer wenn Methode leer

dann muß überschrieben werden (Interface)

Page 99: P6oo

Rollen role Spaceship { has Int $.speed; method stop { $.speed = 0 } }

Page 100: P6oo

Rollen role Clock { has DateTime $.time; method alarm { ... } }

Page 101: P6oo

Rollen anwenden

Moose P6

with => does

Page 102: P6oo

Moose

class WhiteStar extends Spaceship with Clock;

Page 103: P6oo

Perl 6

class WhiteStar is Spaceship does Clock;

Page 104: P6oo

Perl 6

class WhiteStar is Spaceship;

also does Clock;

Page 105: P6oo

Perl 6

class WhiteStar is Spaceship;

also does Clock does PlasmaGun;

Page 106: P6oo

Laufzeiteinbindung

$excalibur does Clock;

Page 107: P6oo

Introspektion

Page 108: P6oo

Methoden jedes Objektes

WHAT short name WHICH object ID (type)WHO package, long name in str contextWHERE memory addressHOW object of meta classWHEN (reserved for events?)WHY (reserved for documentation)WHENCE autovivification of closures

Page 109: P6oo

InteressantesteWHAT short name WHICH object ID (type)WHO package, long name in str contextWHERE memory addressHOW object of meta classWHEN (reserved for events?)WHY (reserved for documentation)WHENCE autovivification of closures

Page 110: P6oo

Introspektion

Class.HOW.methods($obj)

Class.^methods()

Page 111: P6oo

Metaobjektmethoden

identifier name authority version author description subject language licensed parents roles

Page 112: P6oo

Immer tiefer

$obj.^methods()[$which].signature

Page 113: P6oo

Introspektion

Alles is ein Objekt

Page 114: P6oo

Introspektion

Alles is ein Objekt

„Objekte sind doof“.uc

(wie in Ruby)

Page 115: P6oo

Introspektion

Alles is ein ObjektBefehle sind Methoden

Page 116: P6oo

Introspektion

Alles is ein ObjektBefehle sind Methoden

(Operatoren auch)

Page 117: P6oo

Introspektion

Alles is ein ObjektBefehle sind Methoden

(Operatoren auch)MMD ist überall

Page 118: P6oo

Introspektion

Alles is ein ObjektBefehle sind Methoden

(Operatoren auch)MMD ist überall

Auch in den Regex

Page 119: P6oo

Namenräume

package module

class

Page 120: P6oo

Auch 'ne Art Klasse

package module

class grammar

Page 121: P6oo

Grammatiken

grammar { token { … } rule { … } regex { … }}

Page 122: P6oo

GrammatikenKlassen deren

Methoden Regex anwenden und Matchobjekte zurückgeben

Page 123: P6oo

Grammatiken

grammar + MMD

= Perl 6 Interna

Page 124: P6oo

Lern MehrS12: Objekte,S14: Rollen

perl6.org/documentationhttp://perlcabal.org/syn/

opt. Präzision & Umfang

Page 125: P6oo

Lern Mehr

Perl 6 Docs

doc.perl6.org/language/objects

optimiert: Kürze & Genauigkeit

Page 126: P6oo

Lern Mehr

Perl 6 Tablets

tablets.perl6.org

opt.: Hypertext & Umfang

Page 127: P6oo

Wann Kommt Perl 6 ?

Page 128: P6oo

Thank You