Your SlideShare is downloading. ×
P6oo
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

P6oo

214
views

Published on

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


0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
214
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
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. Perl 6 OOP
  • 2. Was ist OOP ?LarryWall
  • 3. Du meinst OPP ?
  • 4. Was ist OOP ?
  • 5. Position
  • 6. Out Of Position
  • 7. OOP
  • 8. Was ist OOP ?
  • 9. Lies Das !
  • 10. Lies Das ! Object-oriented programming ... many opinions, theories, and even ideologies have been formulated on the subject. ... Most are mutually inconsistent.
  • 11. OOP Klassen / Prototypen(Multiple) Vererbung / Rollen MMD + Delegation Typen + Subtypen Introspektion / Metaobj.
  • 12. Seine Meinung
  • 13. TIMTOWTDI
  • 14. Alles da in Schönheit
  • 15. Suche Perfektion
  • 16. Klasse
  • 17. Klasseclass
  • 18. Klasseclassinstanzierbarer Namensraum
  • 19. Klasseclass module package
  • 20. Klasseclass Excalibur;class Babylon;
  • 21. KlasseclassInstanzierbarer Namensraum
  • 22. NR in Klammernclass Excalibur { ...}
  • 23. Objekt
  • 24. Objekt my $obj =Klasse.new();
  • 25. Objekt my $obj =Klasse.new();
  • 26. Neu Erschaffen
  • 27. Bestehendes Klonen
  • 28. Objekt my $obj =$alt.clone();
  • 29. Objekt my $obj =$alt.clone(...);
  • 30. Positionale Paramterclone($pos1, $pos2);
  • 31. Benannte Parameterclone( :key(value),);
  • 32. Mit Autoquotingclone( :key<value>,);
  • 33. Old School Geht Auchclone( key=>value,);
  • 34. Objektnew & clonebless blieb
  • 35. Attribute +Methoden
  • 36. Klasseclass Spaceship { has Int $.speed; method stop { $.speed = 0 }}
  • 37. Kann Ich auch !
  • 38. In Perl 5package Spaceship;use Moose;has speed => ( is => ro; isa => Int;);sub stop { $self = shift; $self->speed = 0;}
  • 39. In Perl 5use MooseX::Declare;class Spaceship { has speed => ( is => ro; isa => Int; ); method stop { $self->speed = 0; }}
  • 40. Klasseclass Spaceship { has Int $.speed; method stop { $.speed = 0; }}
  • 41. Attributbenutzung P5 P6$self->speed $.speedshift->speed self.speed $!speed
  • 42. Twigil derAccessoren. öffentlich! privat
  • 43. Twigil der Accessoren . öffentlich ! privathas $!speed; # privat
  • 44. Twigil der Accessoren . öffentlich ! privathas $speed; # auch privat
  • 45. trusts
  • 46. trustsclass Hund { trusts Katze; has $!Knochen;}
  • 47. trustsmy $carlo = Hund.new();my $mine = Katze.new();$mine!Knochen = 0;
  • 48. Twigils. öffentliche A.! private A.^ pos. auto para.: ben. Auto para.* globale? compiler info= POD~ sublang
  • 49. Sigils$ Skalar@ Array% Hash
  • 50. Sigilshas $.speed;has @.shuttle;has %.crew;
  • 51. Keine Typ Hashrefhas $.speed;has @.shuttle;has %.crew;
  • 52. MooseXuse MooseX::Declare;class Raumschiff { has speed => ( is => ro; isa => Int; ); method stop { $self->speed = 0; }}
  • 53. MooseXuse MooseX::Declare;class Raumschiff { has speed => ( is => rw; isa => Int; ); method stop { $self->speed = 0; }}
  • 54. Perl 6class Raumschiff { has Int $.speed is rw; method stop { $.speed = 0; }}
  • 55. Perl 6class Raumschiff { has Int $.speed is rw = 0; method stop { $.speed = 0; }}
  • 56. MooseXuse MooseX::Declare;class Raumschiff { has speed => ( is => rw; isa => Int; default => 0; ); method stop { $self->speed = 0; }}
  • 57. Perl 6 Attributekein:isa default (nur Syntax)predicate required coercereader writer init_argclearer builder lazy_build
  • 58. Hab ich mir ausgedacht!
  • 59. Perl 6 & Moosehas is
  • 60. Subtypen
  • 61. Moosesubtype Slogan => as Str => where {length $_< 50};
  • 62. Perl 6my subset Slogan of Str where {$_.chars < 50};
  • 63. Delegation
  • 64. Perl 6class spaceship;has DateTime $.clock;$excalibur.clock.now;
  • 65. Perl 6class spaceship;has DateTime $.clock handles now;$excalibur.clock.now;
  • 66. Perl 6class spaceship;has DateTime $.clock handles now;$excalibur.clock.now; # ==$excalibur.now;
  • 67. Moosehas clock => ( handles => now;);
  • 68. Moose++, Nicht P6has clock => ( handles => { now => time };);
  • 69. Methoden
  • 70. Methodeclass Spaceship;method stop { … }
  • 71. Private Methodemethod !stop { … }
  • 72. Methodenmethod !stop { … }submethod go { … }
  • 73. Methoden# wird vererbtmethod !stop { … }# nicht erbbarsubmethod go { … }
  • 74. MMD?
  • 75. MMDMultiMethodDispatch
  • 76. Schlüsselworteonlymultiproto
  • 77. Schlüsselworteonly #sowieso defaultmulti # anschaun !proto # später
  • 78. MMDmulti method go (Coord $place) {}multi method go (Str $cmd) {};
  • 79. MMD$excalibur.go(back);
  • 80. MMDonly #sowieso defaultmulti # MMDproto # selber regeln
  • 81. Vererbung
  • 82. Vererbung Moose P6extends => is
  • 83. MooseX::Declareclass WhiteStar extends Spaceship;
  • 84. Perl 6class WhiteStar is Spaceship;
  • 85. Mehrfachvererbungclass WhiteStaris Spaceship is Membari;
  • 86. Vererbung späterMoose P6extends => also is
  • 87. MooseX::Declareclass WhiteStar;...extends Spaceship;
  • 88. Perl 6class WhiteStar { ... also is Spaceship;
  • 89. Rollen
  • 90. Klassenhierarchie
  • 91. Wo kommt die Neue rein?
  • 92. Rollenwerden nicht vererbt ! geht nur ins Objekt & zur Laufzeit raus
  • 93. Rollen werden vererbt !wenn in eine Klasse gemischt
  • 94. RollenKonflikte werfen Ausnahme
  • 95. RollenKonflikte werfen AusnahmeÜberschreiben nicht global wie Ruby Mixins
  • 96. RollenKonflikte werfen AusnahmeRollen > Mehrfachvererbung(dort bleiben Konflikte auch unbemerkt)
  • 97. RollenKonflikte werfen Ausnahmeaußer wenn Methode leer
  • 98. RollenKonflikte werfen Ausnahmeaußer wenn Methode leer dann muß überschrieben werden (Interface)
  • 99. Rollenrole Spaceship { has Int $.speed; method stop { $.speed = 0 }}
  • 100. Rollenrole Clock { has DateTime $.time; method alarm { ... }}
  • 101. Rollen anwenden Moose P6 with => does
  • 102. Mooseclass WhiteStar extends Spaceship with Clock;
  • 103. Perl 6class WhiteStar is Spaceship does Clock;
  • 104. Perl 6class WhiteStar is Spaceship;also does Clock;
  • 105. Perl 6class WhiteStar is Spaceship;also does Clock does PlasmaGun;
  • 106. Laufzeiteinbindung$excalibur does Clock;
  • 107. Introspektion
  • 108. 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
  • 109. 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
  • 110. IntrospektionClass.HOW.methods($obj)Class.^methods()
  • 111. Metaobjektmethodenidentifier name authority version authordescription subject languagelicensed parents roles
  • 112. Immer tiefer$obj.^methods()[$which].signature
  • 113. IntrospektionAlles is ein Objekt
  • 114. Introspektion Alles is ein Objekt„Objekte sind doof“.uc (wie in Ruby)
  • 115. Introspektion Alles is ein ObjektBefehle sind Methoden
  • 116. Introspektion Alles is ein ObjektBefehle sind Methoden (Operatoren auch)
  • 117. Introspektion Alles is ein ObjektBefehle sind Methoden (Operatoren auch) MMD ist überall
  • 118. Introspektion Alles is ein ObjektBefehle sind Methoden (Operatoren auch) MMD ist überall Auch in den Regex
  • 119. Namenräumepackage moduleclass
  • 120. Auch ne Art Klasse package module class grammar
  • 121. Grammatikengrammar { token { … } rule { … } regex { … }}
  • 122. Grammatiken Klassen derenMethoden Regex anwenden und Matchobjekte zurückgeben
  • 123. Grammatikengrammar + MMD= Perl 6 Interna
  • 124. Lern MehrS12: Objekte,S14: Rollenperl6.org/documentationhttp://perlcabal.org/syn/opt. Präzision & Umfang
  • 125. Lern Mehr Perl 6 Docsdoc.perl6.org/language/objectsoptimiert: Kürze & Genauigkeit
  • 126. Lern Mehr Perl 6 Tablets tablets.perl6.orgopt.: Hypertext & Umfang
  • 127. Wann Kommt Perl 6 ?
  • 128. Thank You