Your SlideShare is downloading. ×
0
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
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
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
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
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
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
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
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
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
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
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
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

1,354

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

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Orientação a Objetos Elegante e Eficiente [ Brevíssima Introdução ao Moose ] Breno G. de Oliveira < garu@cpan.org > Eden Cardim
  • 2. Disclaimer ● Não, não sou o Eden :P ● Não, não sou especialista em OO (essa é a idéia!)
  • 3. Perl & Orientação a Objetos ● Bare-bones para implementação ● TIMTOWTDI ● Muita digitação, propenso a erros
  • 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. Moose :: Exemplo package Shape; use Moose; has 'x' => ( is => 'rw' );
  • 6. Moose :: Exemplo package Shape; use Moose; has 'x' => (      is      => 'rw',     isa     => 'Int',     default => 0, );
  • 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. Moose :: usando o exemplo use Shape; my $shape = Shape­>new( x => 1); print $shape­>x; $shape­>x( 42 );
  • 9. Com Moose package Shape; use Moose; has 'x' => (      is      => 'rw',     isa     => 'Int',     default => 0, );
  • 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. WTF?!
  • 12. Erm...
  • 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. Pequeno demais? (talvez dividindo a tela...)
  • 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. Com Moose package Shape; use Moose; has 'x' => (      is      => 'rw',     isa     => 'Int',     default => 0, );
  • 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. 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. Mais infomações Moose::Cookbook Moose::Manual ● Concepts ● Classes ● Attributes ● Delegation ● MethodModifiers ● Roles ● Types ● MooseX ● BestPractices ● FAQ
  • 20. use Moose
  • 21. use Moose;
  • 22. Obrigado! Dúvidas?

×