Loading…

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

Like this presentation? Why not share!

Orientação a Objetos Elegante e Eficiente: Brevíssima Introdução ao Moose

on

  • 1,531 views

 

Statistics

Views

Total Views
1,531
Views on SlideShare
1,531
Embed Views
0

Actions

Likes
0
Downloads
8
Comments
0

0 Embeds 0

No embeds

Accessibility

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

Orientação a Objetos Elegante e Eficiente: Brevíssima Introdução ao Moose Orientação a Objetos Elegante e Eficiente: Brevíssima Introdução ao Moose Presentation Transcript

  • Orientação a Objetos Elegante e Eficiente [ Brevíssima Introdução ao Moose ] Eden Cardim Breno G. de Oliveira < garu@cpan.org >
  • Disclaimer ● Não, não sou o Eden :P ● Não, não sou especialista em OO (essa é a idéia!)
  • Perl & Orientação a Objetos ● Bare-bones para implementação ● TIMTOWTDI ● Muita digitação, propenso a erros
  • Moose ● Sistema de Objetos Completo para Perl 5 ● Lições de CLOS (Lisp), Smalltalk, Perl 6, ... ● Estável e robusto ● Facilmente extensível (MooseX::*) ● Não é “tudo ou nada”
  • Moose :: Exemplo package Shape; use Moose; has 'x' => ( is => 'rw' );
  • Moose :: Exemplo package Shape; use Moose; has 'x' => (      is      => 'rw',     isa     => 'Int',     default => 0, );
  • O que isso fez? ● Criou uma classe ● Usou 'strict' e 'warnings' ● Adicionou um atributo 'x' ● Fez com que 'x' fosse para leitura e escrita ● Exigiu que o tipo de 'x' seja 'Int' ● Caso 'x' não seja definido, seu valor é 0
  • Moose :: usando o exemplo use Shape; my $shape = Shape­>new( x => 1); print $shape­>x; $shape­>x( 42 );
  • Com Moose package Shape; use Moose; has 'x' => (      is      => 'rw',     isa     => 'Int',     default => 0, );
  • Sem Moose package Shape; use strict; use warnings; use Carp qw( confess ); sub new {     my $class = shift;     my %params = ref $_[0] ? %{ $     $params{x} = 0
  • WTF?!
  • Erm...
  • Sem Moose (zoom out...) package Shape; use strict; use warnings; use Carp qw( confess ); sub new {     my $class = shift;     my %params = ref $_[0] ? %{ $_[0] } : @_;     $params{x} = 0         unless exists $params{x};     $class­>_validate_x( $params{x} );     return bless %params, $class; } sub _validate_x {     shift;     my $x = shift;     confess 'x must be an integer'         unless $x =~ /^[­]?d+$/; } sub x {     my ($self, $x) = (@_);     if (defined $x) {         $self­>_validate_x( $x );         $self­>{x} = $x;     }     return $self­>{x}; }
  • Pequeno demais? (talvez dividindo a tela...)
  • Sem Moose (2a tentativa) package Shape; sub _validate_x { use strict;     shift; use warnings;     my $x = shift; use Carp qw( confess );     confess 'x must be an integer' sub new {         unless $x =~ /^[­]?d+$/;     my $class = shift; }     my %params = ref $_[0]                 ? %{ $_[0] }  sub x {                : @_     my ($self, $x) = (@_);                ;     if (defined $x) {     $params{x} = 0         $self­>_validate_x( $x );         unless exists $params{x};         $self­>{x} = $x;     }     $class­>_validate_x( $params{x} );     return $self­>{x};     return bless %params, $class; } }
  • Com Moose package Shape; use Moose; has 'x' => (      is      => 'rw',     isa     => 'Int',     default => 0, );
  • Muito mais que atributos e açúcar ● Extensões (subclasses) package Rectangle; use Moose; extends 'Shape'; has 'height' => ( is => 'ro' ); has '+x' => ( default => 42 );
  • Muito mais que atributos e açúcar ● Meta Classes Classes que definem Classes! Shape­>meta­>name   # 'Shape' Shape­>meta­>add_method( ... ); Shape­>meta­>add_attribute( ... ); Shape­>meta­>remove_method( ... );
  • Mais infomações Moose::Cookbook Moose::Manual ● Concepts ● Classes ● Attributes ● Delegation ● MethodModifiers ● Roles ● Types ● MooseX ● BestPractices ● FAQ
  • use Moose
  • use Moose;
  • Obrigado! Dúvidas?