Orientação a Objetos
Elegante e Eficiente
[ Brevíssima Introdução ao Moose ]
Breno G. de Oliveira
< garu@cpan.org >
Eden C...
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
● Faci...
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 l...
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...
WTF?!
Erm...
Sem Moose (zoom out...)
package Shape;
use strict;
use warnings;
use Carp qw( confess );
sub new {
    my $class = shift;
...
Pequeno demais?
(talvez dividindo a tela...)
Sem Moose (2a tentativa)
package Shape;
use strict;
use warnings;
use Carp qw( confess );
sub new {
    my $class = shift;...
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' => ...
Muito mais que atributos e açúcar
● Meta Classes
Classes que definem Classes!
Shape­>meta­>name   # 'Shape'
Shape­>meta­>a...
Mais infomações
Moose::Cookbook
Moose::Manual
● Concepts
● Classes
● Attributes
● Delegation
● MethodModifiers
● Roles
● T...
use Moose
use Moose;
Obrigado!
Dúvidas?
Upcoming SlideShare
Loading in …5
×

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

1,526 views

Published on

Published in: Technology, Sports
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,526
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
11
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

  1. 1. Orientação a Objetos Elegante e Eficiente [ Brevíssima Introdução ao Moose ] Breno G. de Oliveira < garu@cpan.org > Eden Cardim
  2. 2. Disclaimer ● Não, não sou o Eden :P ● Não, não sou especialista em OO (essa é a idéia!)
  3. 3. Perl & Orientação a Objetos ● Bare-bones para implementação ● TIMTOWTDI ● Muita digitação, propenso a erros
  4. 4. 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”
  5. 5. Moose :: Exemplo package Shape; use Moose; has 'x' => ( is => 'rw' );
  6. 6. Moose :: Exemplo package Shape; use Moose; has 'x' => (      is      => 'rw',     isa     => 'Int',     default => 0, );
  7. 7. 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
  8. 8. Moose :: usando o exemplo use Shape; my $shape = Shape­>new( x => 1); print $shape­>x; $shape­>x( 42 );
  9. 9. Com Moose package Shape; use Moose; has 'x' => (      is      => 'rw',     isa     => 'Int',     default => 0, );
  10. 10. Sem Moose package Shape; use strict; use warnings; use Carp qw( confess ); sub new {     my $class = shift;     my %params = ref $_[0] ? %{ $     $params{x} = 0
  11. 11. WTF?!
  12. 12. Erm...
  13. 13. 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}; }
  14. 14. Pequeno demais? (talvez dividindo a tela...)
  15. 15. Sem Moose (2a tentativa) 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}; }
  16. 16. Com Moose package Shape; use Moose; has 'x' => (      is      => 'rw',     isa     => 'Int',     default => 0, );
  17. 17. Muito mais que atributos e açúcar ● Extensões (subclasses) package Rectangle; use Moose; extends 'Shape'; has 'height' => ( is => 'ro' ); has '+x' => ( default => 42 );
  18. 18. 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( ... );
  19. 19. Mais infomações Moose::Cookbook Moose::Manual ● Concepts ● Classes ● Attributes ● Delegation ● MethodModifiers ● Roles ● Types ● MooseX ● BestPractices ● FAQ
  20. 20. use Moose
  21. 21. use Moose;
  22. 22. Obrigado! Dúvidas?

×