P6oo

347
-1

Published on

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
347
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

P6oo

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

×