P6oo
Upcoming SlideShare
Loading in...5
×
 

P6oo

on

  • 276 views

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

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

Statistics

Views

Total Views
276
Slideshare-icon Views on SlideShare
276
Embed Views
0

Actions

Likes
0
Downloads
1
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    P6oo P6oo Presentation Transcript

    • Perl 6 OOP
    • Was ist OOP ?LarryWall
    • Du meinst OPP ?
    • Was ist OOP ?
    • Position
    • Out Of Position
    • OOP
    • Was ist OOP ?
    • Lies Das !
    • Lies Das ! Object-oriented programming ... many opinions, theories, and even ideologies have been formulated on the subject. ... Most are mutually inconsistent.
    • OOP Klassen / Prototypen(Multiple) Vererbung / Rollen MMD + Delegation Typen + Subtypen Introspektion / Metaobj.
    • Seine Meinung
    • TIMTOWTDI
    • Alles da in Schönheit
    • Suche Perfektion
    • Klasse
    • Klasseclass
    • Klasseclassinstanzierbarer Namensraum
    • Klasseclass module package
    • Klasseclass Excalibur;class Babylon;
    • KlasseclassInstanzierbarer Namensraum
    • NR in Klammernclass Excalibur { ...}
    • Objekt
    • Objekt my $obj =Klasse.new();
    • Objekt my $obj =Klasse.new();
    • Neu Erschaffen
    • Bestehendes Klonen
    • Objekt my $obj =$alt.clone();
    • Objekt my $obj =$alt.clone(...);
    • Positionale Paramterclone($pos1, $pos2);
    • Benannte Parameterclone( :key(value),);
    • Mit Autoquotingclone( :key<value>,);
    • Old School Geht Auchclone( key=>value,);
    • Objektnew & clonebless blieb
    • Attribute +Methoden
    • Klasseclass Spaceship { has Int $.speed; method stop { $.speed = 0 }}
    • Kann Ich auch !
    • In Perl 5package Spaceship;use Moose;has speed => ( is => ro; isa => Int;);sub stop { $self = shift; $self->speed = 0;}
    • In Perl 5use MooseX::Declare;class Spaceship { has speed => ( is => ro; isa => Int; ); method stop { $self->speed = 0; }}
    • Klasseclass Spaceship { has Int $.speed; method stop { $.speed = 0; }}
    • Attributbenutzung P5 P6$self->speed $.speedshift->speed self.speed $!speed
    • Twigil derAccessoren. öffentlich! privat
    • Twigil der Accessoren . öffentlich ! privathas $!speed; # privat
    • Twigil der Accessoren . öffentlich ! privathas $speed; # auch privat
    • trusts
    • trustsclass Hund { trusts Katze; has $!Knochen;}
    • trustsmy $carlo = Hund.new();my $mine = Katze.new();$mine!Knochen = 0;
    • Twigils. öffentliche A.! private A.^ pos. auto para.: ben. Auto para.* globale? compiler info= POD~ sublang
    • Sigils$ Skalar@ Array% Hash
    • Sigilshas $.speed;has @.shuttle;has %.crew;
    • Keine Typ Hashrefhas $.speed;has @.shuttle;has %.crew;
    • MooseXuse MooseX::Declare;class Raumschiff { has speed => ( is => ro; isa => Int; ); method stop { $self->speed = 0; }}
    • MooseXuse MooseX::Declare;class Raumschiff { has speed => ( is => rw; isa => Int; ); method stop { $self->speed = 0; }}
    • Perl 6class Raumschiff { has Int $.speed is rw; method stop { $.speed = 0; }}
    • Perl 6class Raumschiff { has Int $.speed is rw = 0; method stop { $.speed = 0; }}
    • MooseXuse MooseX::Declare;class Raumschiff { has speed => ( is => rw; isa => Int; default => 0; ); method stop { $self->speed = 0; }}
    • Perl 6 Attributekein:isa default (nur Syntax)predicate required coercereader writer init_argclearer builder lazy_build
    • Hab ich mir ausgedacht!
    • Perl 6 & Moosehas is
    • Subtypen
    • Moosesubtype Slogan => as Str => where {length $_< 50};
    • Perl 6my subset Slogan of Str where {$_.chars < 50};
    • Delegation
    • Perl 6class spaceship;has DateTime $.clock;$excalibur.clock.now;
    • Perl 6class spaceship;has DateTime $.clock handles now;$excalibur.clock.now;
    • Perl 6class spaceship;has DateTime $.clock handles now;$excalibur.clock.now; # ==$excalibur.now;
    • Moosehas clock => ( handles => now;);
    • Moose++, Nicht P6has clock => ( handles => { now => time };);
    • Methoden
    • Methodeclass Spaceship;method stop { … }
    • Private Methodemethod !stop { … }
    • Methodenmethod !stop { … }submethod go { … }
    • Methoden# wird vererbtmethod !stop { … }# nicht erbbarsubmethod go { … }
    • MMD?
    • MMDMultiMethodDispatch
    • Schlüsselworteonlymultiproto
    • Schlüsselworteonly #sowieso defaultmulti # anschaun !proto # später
    • MMDmulti method go (Coord $place) {}multi method go (Str $cmd) {};
    • MMD$excalibur.go(back);
    • MMDonly #sowieso defaultmulti # MMDproto # selber regeln
    • Vererbung
    • Vererbung Moose P6extends => is
    • MooseX::Declareclass WhiteStar extends Spaceship;
    • Perl 6class WhiteStar is Spaceship;
    • Mehrfachvererbungclass WhiteStaris Spaceship is Membari;
    • Vererbung späterMoose P6extends => also is
    • MooseX::Declareclass WhiteStar;...extends Spaceship;
    • Perl 6class WhiteStar { ... also is Spaceship;
    • Rollen
    • Klassenhierarchie
    • Wo kommt die Neue rein?
    • Rollenwerden nicht vererbt ! geht nur ins Objekt & zur Laufzeit raus
    • Rollen werden vererbt !wenn in eine Klasse gemischt
    • RollenKonflikte werfen Ausnahme
    • RollenKonflikte werfen AusnahmeÜberschreiben nicht global wie Ruby Mixins
    • RollenKonflikte werfen AusnahmeRollen > Mehrfachvererbung(dort bleiben Konflikte auch unbemerkt)
    • RollenKonflikte werfen Ausnahmeaußer wenn Methode leer
    • RollenKonflikte werfen Ausnahmeaußer wenn Methode leer dann muß überschrieben werden (Interface)
    • Rollenrole Spaceship { has Int $.speed; method stop { $.speed = 0 }}
    • Rollenrole Clock { has DateTime $.time; method alarm { ... }}
    • Rollen anwenden Moose P6 with => does
    • Mooseclass WhiteStar extends Spaceship with Clock;
    • Perl 6class WhiteStar is Spaceship does Clock;
    • Perl 6class WhiteStar is Spaceship;also does Clock;
    • Perl 6class WhiteStar is Spaceship;also does Clock does PlasmaGun;
    • Laufzeiteinbindung$excalibur does Clock;
    • Introspektion
    • Methoden jedes Objektes WHAT short name WHICH object ID (type) WHO package, long name in str context WHERE memory address HOW object of meta class WHEN (reserved for events?) WHY (reserved for documentation) WHENCE autovivification of closures
    • InteressantesteWHAT short nameWHICH 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
    • IntrospektionClass.HOW.methods($obj)Class.^methods()
    • Metaobjektmethodenidentifier name authority version authordescription subject languagelicensed parents roles
    • Immer tiefer$obj.^methods()[$which].signature
    • IntrospektionAlles is ein Objekt
    • Introspektion Alles is ein Objekt„Objekte sind doof“.uc (wie in Ruby)
    • Introspektion Alles is ein ObjektBefehle sind Methoden
    • Introspektion Alles is ein ObjektBefehle sind Methoden (Operatoren auch)
    • Introspektion Alles is ein ObjektBefehle sind Methoden (Operatoren auch) MMD ist überall
    • Introspektion Alles is ein ObjektBefehle sind Methoden (Operatoren auch) MMD ist überall Auch in den Regex
    • Namenräumepackage moduleclass
    • Auch ne Art Klasse package module class grammar
    • Grammatikengrammar { token { … } rule { … } regex { … }}
    • Grammatiken Klassen derenMethoden Regex anwenden und Matchobjekte zurückgeben
    • Grammatikengrammar + MMD= Perl 6 Interna
    • Lern MehrS12: Objekte,S14: Rollenperl6.org/documentationhttp://perlcabal.org/syn/opt. Präzision & Umfang
    • Lern Mehr Perl 6 Docsdoc.perl6.org/language/objectsoptimiert: Kürze & Genauigkeit
    • Lern Mehr Perl 6 Tablets tablets.perl6.orgopt.: Hypertext & Umfang
    • Wann Kommt Perl 6 ?
    • Thank You