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 for...
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 ...
In Perl 5use MooseX::Declare;class Spaceship {   has speed => (      is => ro;      isa => Int;   );   method stop {      ...
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=    ...
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 {      $s...
MooseXuse MooseX::Declare;class Raumschiff {   has speed => (      is => rw;      isa => Int;   );   method stop {      $s...
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;   );   me...
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 ...
InteressantesteWHAT short nameWHICH object ID (type)WHO package, long name in str contextWHERE memory addressHOW   object ...
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
Upcoming SlideShare
Loading in...5
×

P6oo

265

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
265
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
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×