Ähnliche Dokumente
Objektorientierte Programmierung. Kapitel 12: Interfaces

German Section 28 - Online activitites

Moderne Apps in WxPerl

Listening Comprehension: Talking about language learning

Java: Vererbung. Teil 3: super()

Lektion 3: Nominativ und Akkusativ (nominative and accusative cases)

Abschnitt 9: Schnittstellen: Interfaces

miditech 4merge 4-fach MIDI Merger mit :

Ergebnisse. Umfrage Kurz-Statistiken Umfrage 'Feedback und Entertain 2.0'

Objektorientierung: Klassen und Objekte

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Semantic Web. RDF, RDFS, OWL, and Ontology Engineering. F. Abel, N. Henze, and D. Krause IVS Semantic Web Group

ROOT Tutorial für D. Liko

Objektorientierte Programmierung OOP

KURZANLEITUNG. Firmware-Upgrade: Wie geht das eigentlich?

Was ist neu an Perl 6? Mein Weg Stolperfallen Perl 6 in Perl 5 Mehr Praktisches Grundkonzepte

Pragmatik von Programmiersprachen

ORM & OLAP. Object-oriented Enterprise Application Programming Model for In-Memory Databases. Sebastian Oergel

Testen mit JUnit. Motivation

Computeranwendung und Programmierung (CuP)

Folgende Voraussetzungen für die Konfiguration müssen erfüllt sein: - Ein Bootimage ab Version Optional einen DHCP Server.

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Factory Method (Virtual Constructor)

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

SWE1 / Übung 2 ( )

Mojolicious. Ich zeige dir jetzt, wie du mit Mojolicious eine Vorlage. Das Mojolicious-Gerüst

Grundzüge der Programmierung. Konzepte der objektorientierten Programmierung (OOP) VERERBUNG

Personalpronomen und das Verb to be

Study guide written by René Koglbauer

1. Grundlegende Eigenscha5en 2. Redefini+on 3. Polymophie 4. Mehrfachvererbung

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Einführung in die Programmierung

Rapide An Event-Based Architecture Definition Language

Workshop 6. Einführung in die objektorientierte Programmierung. Teil: Java mit BlueJ

Kapitel 6. Vererbung

1 Vom Problem zum Programm

Thema. Intelligente Agenten im Web

Programmentwicklung ohne BlueJ

Ablauf des Unterrichtsbeispiels

Vererbung & Schnittstellen in C#

Große Übung Praktische Informatik 1

Typdeklarationen. Es gibt in Haskell bereits primitive Typen:

Einführung in die Programmierung

Gebundene Typparameter

Leitfaden E-Books Apple. CORA E-Books im ibook Store kaufen. Liebe Leserinnen und Leser, vielen Dank für Ihr Interesse an unseren CORA E-Books.

DSLs mit Xtext entwerfen , A. Arnold

EinfÅhrung in die objektorientiere Programmierung (OOP) unter Delphi 6.0. EDV Kurs 13/2

State Machine Workflow mit InfoPath Formularen für SharePoint 2010 Teil 6

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Programmieren in Java

5. Tutorium zu Programmieren

Kapitel 4. Mehrfachvererbung. Beispiel 1: typische Diamant Struktur. Person. Hiwi

OO Softwareentwicklung

Delegatesund Ereignisse

Kapitel 6. Vererbung

Klausur BWL V Investition und Finanzierung (70172)

Modellierung und Programmierung 1

Zählen von Objekten einer bestimmten Klasse

3. Auflage. O Reillys Taschenbibliothek. C# 5.0 kurz & gut. Joseph Albahari & Ben Albahari O REILLY. Aktualisierung von Lars Schulten

Lektion 9: Konjugation von Verben im Präsens (conjugation of verbs in present tense)

Einführung in die Programmierung für Wirtschaftsinformatik

12. Vererbung. Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)

Client-Server-Beziehungen

Umbenennen eines NetWorker 7.x Servers (UNIX/ Linux)

Seit über. Jahren WIR SIND KARTZFEHN. Leitlinien zur Führung und Zusammenarbeit

Kapitel 12: Übersetzung objektorienter Konzepte

Klassenbeziehungen & Vererbung

Was meinen die Leute eigentlich mit: Grexit?

Handbuch. Artologik EZ-Equip. Plug-in für EZbooking version 3.2. Artisan Global Software

Prinzipien Objektorientierter Programmierung

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

Erfolg beginnt im Kopf

Menü auf zwei Module verteilt (Joomla 3.4.0)

Bauteilattribute als Sachdaten anzeigen

Programmierkurs Java

Access und die andern (Office) Programme. Armin Hess


Löschen eines erkannten aber noch nicht konfigurierten Laufwerks

Catch Me If You Can! Grundlagenstudie zur Parallelnutzung mehrerer Screens und deren Auswirkungen auf Aufmerksamkeit, Involvement und Werbewahrnehmung

Das neue Volume-Flag S (Scannen erforderlich)

Objektorientierte Programmierung

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

German Section 33 - Online activitites

XML-Namensräume. Marc Monecke

Kapitel 6. Vererbung

SAMMEL DEINE IDENTITÄTEN::: NINA FRANK :: :: WINTERSEMESTER 08 09

TIn 1: Feedback Laboratories. Lecture 4 Data transfer. Question: What is the IP? Institut für Embedded Systems. Institut für Embedded Systems

Windows 7 - Whoami. Whoami liefert Informationen wie z.b. die SID, Anmelde-ID eines Users, sowie Gruppenzuordnungen, Berechtigungen und Attribute.

Registrierungsprozess des Boardgeräts (OBU) Inhalt Registrierung auf der Online-Benutzeroberfläche HU-GO

1. Richtig oder falsch? R F

Ein reales Testumfeld bereitstellen - basierend auf einer Produktionsdatenbank (ohne eine neue Kopie zu erstellen)

Toolbeschreibung: EVERNOTE

Anspruchsvolle Dreierausdrücke zum selbstständigen Lernen

3 Objektorientierte Konzepte in Java

EUROPEAN CONSORTIUM FOR THE CERTIFICATE OF ATTAINMENT IN MODERN LANGUAGES

Zur drittletzten Zeile scrollen

Transkript:

Perl 6 OOP

Was ist OOP?

Du meinst OPP?

Was ist OOP?

Position

Out Of Position

OOP

Mann Mit Ahnung

Lies Das!

Damian Sagt: 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

All There in Beauty

In Search Of Perf.

Klasse

Klasse class

Klasse class instanzierbarer Namensraum

Klasse class module package

Klasse class Excalibur; class Babylon;

Klasse class Instanzierbarer Namensraum

NR in Klammern class 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 Paramter clone($pos1, $pos2);

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

Mit Autoquoting clone( :key<value>,);

Old School Geht Auch clone( key=>'value',);

Objekt new & clone bless blieb

Attribute + Methoden

Raumschiff

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

Kann Ich auch!

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

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

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

Attributbenutzung P5 $self->speed shift->speed P6 $.speed self.speed $!speed

Twigil der Accessoren.! öffentlich privat

Twigil der Accessoren.! öffentlich privat has $!speed; # privat

Twigil der Accessoren.! has $speed; öffentlich privat # auch privat

trusts

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

trusts class Katze { method stehlen { my $tim = Hund.new(); $tim!knochen = 0;...

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

Sigils $ @ % Skalar Array Hash

Sigils has $.speed; has @.shuttle; has %.crew;

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

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

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

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

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

Perl 6 Attribute kein: isa default (nur Syntax) predicate required coerce reader writer init_arg clearer builder lazy_build

Hab ich mir ausgedacht!

Perl 6 & Moose has is

Subtypen

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

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

Delegation

Excalibur

Perl 6 class Excalibur; has $.clock handles 'now'; $excalibur = Excalibur.new; $excalibur.clock.now;

Perl 6 class Excalibur; has DateTime $.clock handles 'now'; $excalibur = Excalibur.new; $excalibur.now;

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

Umbenennen M* has 'clock' => ( handles => { now => 'time' }; );

Umbenennen P6 has DateTime $.clock handles { :time<'now'>};

Perl 6 Rename class Spaceship; has DateTime $.clock handles { :time<'now'>};

Methoden

Methods method stop { }

Methods method!stop { }

Methods method!stop { } submethod

Methods method!stop { } submethod #!erbbar

MMD?

MMD Multi Method Dispatch

MMD only multi proto

MMD only #sowieso default multi # anschaun! proto # später

MMD multi method navigate (Coord $place) {} multi method navigate (Str $cmd) {};

MMD $excalibur.navigate('back');

MMD only #sowieso default multi # MMD proto # selber regeln

Vererbung

MooseX::Declare class WhiteStar extends Spaceship;

Vererbung extends => is

Perl 6 class WhiteStar is Spaceship;

Mehrfachvererbung class WhiteStar is Spaceship is Membari;

Vererbung später extends => also is

MooseX::Declare class WhiteStar;... extends Spaceship;

Perl 6 class WhiteStar {... also is Spaceship;

Rollen

Klassenhierarchie

Wo kommt die Neue rein?

Lösung des Problems Rolle: wiederverwendbare Funktionseinheiten

Optimierung Rolle: Möglichst Klein

Kl. Erinnerung Rolle: Möglichst Klein Klasse: instanzierbarer Namensraum

Alles Was Objekt braucht Rolle: Möglichst Klein Klasse: Vollständig => Groß

Klasse Kann nicht beides Rolle: Möglichst Klein!= Klasse: Vollständig => Groß

Rollen werden vererbt! wenn in die Klasse & zur Laufzeit raus

Rollen Konflikte werfen Ausnahme

Rollen Konflikte werfen Ausnahme Überschreiben nicht global wie Ruby Mixins

Rollen Konflikte werfen Ausnahme Rollen > Mehrfachvererbung (dort bleiben Konflikte auch unbemerkt)

Rollen Konflikte werfen Ausnahme außer wenn Methode leer

Rollen Konflikte werfen Ausnahme außer wenn Methode leer dann muß überschrieben werden (Interface)

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

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

Rollen anwenden with => does

Moose class Excalibur extends Spaceship with Clock;

Perl 6 class Excalibur is Spaceship does Clock;

Perl 6 class Excalibur is Spaceship; also does Clock;

Perl 6 class Excalibur is Spaceship; also does Clock does PlasmaGun;

Perl 6 $excalibur does Clock;

Introspektion

Methoden 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

Methoden 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

Methoden 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

Introspektion Class.HOW.methods($obj) Class.^methods()

Metaobjektmethoden identifier name authority version author description licensed subject parents language roles

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

Introspektion Alles is ein Objekt

Introspektion Alles is ein Objekt Objekte sind doof.uc

Introspektion Alles is ein Objekt Befehle sind Methoden

Introspektion Alles is ein Objekt Befehle sind Methoden (Operatoren auch)

Introspektion Alles is ein Objekt Befehle sind Methoden (Operatoren auch) MMD ist überall

Introspektion Alles is ein Objekt Befehle sind Methoden (Operatoren auch) MMD ist überall Auch in den Regex

Namenräume package module class

Auch 'ne Art Klasse package module class grammar

Grammatiken grammar { token { } rule { } regex { } }

Lern Mehr S12: Objekte,S14: Rollen perl6.org/documentation http://perlcabal.org/syn/ opt. Präzision & Umfang

Lern Mehr Perl 6 Docs doc.perl6.org/language/objects optimiert: Kürze & Genauigkeit

Lern Mehr Perl 6 Tablets tablets.perl6.org opt.: Hypertext & Umfang

Schlaraffenland

Thank You