SlideShare una empresa de Scribd logo
1 de 72
Descargar para leer sin conexión
ORIENTAÇÃO A OBJETOS
                             ...




Thursday, June 14, 2012                    1
PA LEST RA DE
                          , MAIS UMA
          SIM
                    ORIENTAÇÃO A OBJETOS




Thursday, June 14, 2012                                2
PA LEST RA DE
                          , MAIS UMA
          SIM
                    ORIENTAÇÃO A OBJETOS

                                            @AUGUS
                                                   TOHP
                                            @ALGAN
                                                   ET

Thursday, June 14, 2012                                   3
AGENDA




Thursday, June 14, 2012            4
AGENDA




                     CONCEITOS




Thursday, June 14, 2012                   4
AGENDA




                     CONCEITOS

                     PARADIGMAS DE PROGRAMAÇÃO




Thursday, June 14, 2012                          4
CONCEITOS




Thursday, June 14, 2012               5
ESTADO




Thursday, June 14, 2012            6
hardware na maioria das vezes nem sabe o estado


                                                            ESTADO




Thursday, June 14, 2012                                              7
hardware na maioria das vezes nem sabe o estado


                                                            ESTADO




                                                                        INCADEIRA
                                                                     BR
Thursday, June 14, 2012                                                             8
ESTADO




Thursday, June 14, 2012            9
TIPAGEM




Thursday, June 14, 2012             10
TIPAGEM




Thursday, June 14, 2012             11
REUSO




Thursday, June 14, 2012           12
REUSO




Thursday, June 14, 2012           13
FIBONACCI




Thursday, June 14, 2012               14
SEQUÊNCIA DE FIBONACCI




Thursday, June 14, 2012                            15
SEQUÊNCIA DE FIBONACCI
                                      HTTPS://EN.WIKIPEDIA.ORG/WIKI/FIBONACCI_NUMBER




Thursday, June 14, 2012                                                                16
PARADIGMAS DE
                          PROGRAMAÇÃO




Thursday, June 14, 2012                   17
ASSEMBLY




Thursday, June 14, 2012              18
.data
        fibonacci DWORD 100 dup (0)
        .code
        mov edx,offset fibonacci
        mov eax,1
        mov ebx,1
        mov ecx,49
        @@:
        mov DWORD PTR [edx],eax
        mov DWORD PTR [edx+4],ebx
        add eax,ebx
        add ebx,eax
        add edx,8
        sub ecx,1
        jnz @B
                          HTTP://WWW.CODECODEX.COM/WIKI/FIBONACCI_SEQUENCE#80386.2B_ASSEMBLY




Thursday, June 14, 2012                                                                        19
.data
        fibonacci DWORD 100 dup (0)
        .code
        mov edx,offset fibonacci
        mov eax,1
        mov ebx,1
        mov ecx,49
        @@:
        mov DWORD PTR [edx],eax
        mov DWORD PTR [edx+4],ebx
        add eax,ebx
        add ebx,eax
        add edx,8
        sub ecx,1
        jnz @B
                          HTTP://WWW.CODECODEX.COM/WIKI/FIBONACCI_SEQUENCE#80386.2B_ASSEMBLY




Thursday, June 14, 2012                                                                        20
.data
        fibonacci DWORD 100 dup (0)
        .code
        mov edx,offset fibonacci
        mov eax,1
        mov ebx,1
        mov ecx,49
        @@:
        mov DWORD PTR [edx],eax
        mov DWORD PTR [edx+4],ebx
        add eax,ebx
        add ebx,eax
        add edx,8
        sub ecx,1
        jnz @B
                          HTTP://WWW.CODECODEX.COM/WIKI/FIBONACCI_SEQUENCE#80386.2B_ASSEMBLY




Thursday, June 14, 2012                                                                        21
.data
        fibonacci DWORD 100 dup (0)
        .code
        mov edx,offset fibonacci
        mov eax,1
        mov ebx,1
        mov ecx,49
        @@:
        mov DWORD PTR [edx],eax
        mov DWORD PTR [edx+4],ebx
        add eax,ebx
        add ebx,eax
        add edx,8
        sub ecx,1
        jnz @B
                          HTTP://WWW.CODECODEX.COM/WIKI/FIBONACCI_SEQUENCE#80386.2B_ASSEMBLY




Thursday, June 14, 2012                                                                        22
.386
        .model	
  Flat
        public	
  Fibonacci
        include	
  iosmacros.inc	
  ;	
  inclui	
  macros	
  de	
  output	
  para	
  tela

        .code
        Fibonacci	
  proc

        	
  	
  	
  	
  MOV	
  EAX,	
  [ESP+4]
        	
  	
  	
  	
  CMP	
  EAX,	
  1
        	
  	
  	
  	
  JA	
  Recurse
        	
  	
  	
  	
  MOV	
  EAX,	
  1	
  	
  	
  	
  	
  	
  	
  	
  ;	
  retorna	
  o	
  valor	
  de	
  eax
        	
  	
  	
  	
  JMP	
  exit

        Recurse:
        	
  	
  	
  	
  PUSH	
  EBX	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ;	
  preserva	
  o	
  valor	
  de	
  ebx
        	
  	
  	
  	
  DEC	
  EAX
        	
  	
  	
  	
  PUSH	
  EAX
        	
  	
  	
  	
  CALL	
  Fibonacci
        	
  	
  	
  	
  MOV	
  EBX,	
  EAX	
  	
  	
  	
  	
  	
  ;	
  ebx	
  preservado,	
  seguro	
  de	
  usar
        	
  	
  	
  	
  DEC	
  [ESP]	
  	
  	
  	
  	
  	
  	
  	
  	
  ;	
  decrementa	
  o	
  valor	
  no	
  stack
        	
  	
  	
  	
  CALL	
  Fibonacci
        	
  	
  	
  	
  ADD	
  EAX,	
  EBX	
  	
  	
  	
  	
  	
  ;	
  retorna	
  o	
  valor	
  em	
  eax
        	
  	
  	
  	
  ADD	
  ESP,	
  4	
  	
  	
  	
  	
  	
  	
  	
  ;	
  remove	
  o	
  valor	
  do	
  stack
        	
  	
  	
  	
  POP	
  EBX	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ;	
  restaura	
  o	
  valor	
  antigo	
  de	
  ebx
        exit:
        ret
        Fibonacci	
  endp                                                     HTTP://STACKOVERFLOW.COM/QUESTIONS/5616684/RECURSIVE-FIBONACCI-IN-ASSEMBLY




Thursday, June 14, 2012                                                                                                                                    23
PROCEDURAL




Thursday, June 14, 2012                24
1        <?php
                 2        $past     = 0;
                 3        $current = 1;
                 4        $limit    = 20;
                 5        for($i=1; $i<$limit; $i++) {
                 6            $final     = $past + $current;
                 7            $past      = $current;
                 8            $current = $final;
                 9            echo $final . PHP_EOL;
                10        }

                                           HTTP://WWW.DREAMINCODE.NET/CODE/SNIPPET920.HTM




Thursday, June 14, 2012                                                                     25
1
              2
              3
              5
              8
              13
              21
              34
              55
              89
              144
              233
              377
              610
              987
              1597
              2584
              4181
              6765

Thursday, June 14, 2012   26
1        <?php
                 2        $past     = 0;
                 3        $current = 1;
                 4        $limit    = 20;
                 5        for($i=1; $i<$limit; $i++) {
                 6            $final     = $past + $current;
                 7            $past      = $current;
                 8            $current = $final;
                 9            echo $final . PHP_EOL;
                10        }

                                           HTTP://WWW.DREAMINCODE.NET/CODE/SNIPPET920.HTM




Thursday, June 14, 2012                                                                     27
1        <?php
                 2        $past     = 0;
                 3        $current = 1;
                 4        $limit    = 20;
                 5        for($i=1; $i<$limit; $i++) {
                 6            $final     = $past + $current;
                 7            $past      = $current;
                 8            $current = $final;
                 9            echo $final . PHP_EOL;
                10        }

                                           HTTP://WWW.DREAMINCODE.NET/CODE/SNIPPET920.HTM




Thursday, June 14, 2012                                                                     28
1        <?php
                 2        $past     = 0;
                 3        $current = 1;
                 4        $limit    = 20;
                 5        for($i=1; $i<$limit; $i++) {
                 6            $final     = $past + $current;
                 7            $past      = $current;
                 8            $current = $final;
                 9            echo $final . PHP_EOL;
                10        }

                                           HTTP://WWW.DREAMINCODE.NET/CODE/SNIPPET920.HTM




Thursday, June 14, 2012                                                                     29
1        <?php
                 2        $past     = 0;
                 3        $current = 1;
                 4        $limit    = 20;
                 5        for($i=1; $i<$limit; $i++) {
                 6            $final     = $past + $current;
                 7            $past      = $current;
                 8            $current = $final;
                 9            echo $final . PHP_EOL;
                10        }

                                           HTTP://WWW.DREAMINCODE.NET/CODE/SNIPPET920.HTM




Thursday, June 14, 2012                                                                     30
1        <?php
                 2        $past     = 0;
                 3        $current = 1;
                 4        $limit    = 20;
                 5        for($i=1; $i<$limit; $i++) {
                 6            $final     = $past + $current;
                 7            $past      = $current;
                 8            $current = $final;
                 9            echo $final . PHP_EOL;
                10        }

                                           HTTP://WWW.DREAMINCODE.NET/CODE/SNIPPET920.HTM




Thursday, June 14, 2012                                                                     31
1        <?php
                 2        $past     = 0;
                 3        $current = 1;
                 4        $limit    = 20;
                 5        for($i=1; $i<$limit; $i++) {
                 6            $final     = $past + $current;
                 7            $past      = $current;
                 8            $current = $final;
                 9            echo $final . PHP_EOL;
                10        }

                                           HTTP://WWW.DREAMINCODE.NET/CODE/SNIPPET920.HTM




Thursday, June 14, 2012                                                                     32
1        <?php
                 2        $past     = 0;
                 3        $current = 1;
                 4        $limit    = 20;
                 5        for($i=1; $i<$limit; $i++) {
                 6            $final     = $past + $current;
                 7            $past      = $current;
                 8            $current = $final;
                 9            echo $final . PHP_EOL;
                10        }

                                           HTTP://WWW.DREAMINCODE.NET/CODE/SNIPPET920.HTM




Thursday, June 14, 2012                                                                     33
1        <?php
                 2        $past     = 0;
                 3        $current = 1;
                 4        $limit    = 20;
                 5        for($i=1; $i<$limit; $i++) {
                 6            $final     = $past + $current;
                 7            $past      = $current;
                 8            $current = $final;
                 9            echo $final . PHP_EOL;
                10        }

                                           HTTP://WWW.DREAMINCODE.NET/CODE/SNIPPET920.HTM




Thursday, June 14, 2012                                                                     34
1        <?php
                 2        $past     = 0;
                 3        $current = 1;
                 4        $limit    = 20;
                 5        for($i=1; $i<$limit; $i++) {
                 6            $final     = $past + $current;
                 7            $past      = $current;
                 8            $current = $final;
                 9            echo $final . PHP_EOL;
                10        }

                                           HTTP://WWW.DREAMINCODE.NET/CODE/SNIPPET920.HTM




Thursday, June 14, 2012                                                                     35
1        <?php
                 2        $past     = 0;
                 3        $current = 1;
                 4        $limit    = 20;
                 5        for($i=1; $i<$limit; $i++) {
                 6            $final     = $past + $current;
                 7            $past      = $current;
                 8            $current = $final;
                 9            echo $final . PHP_EOL;
                10        }

                                           HTTP://WWW.DREAMINCODE.NET/CODE/SNIPPET920.HTM




Thursday, June 14, 2012                                                                     36
1 <?php
                2         function fibonacci($limit) {
                3             $past     = 0;
                4             $current = 1;
                5             for($i=1; $i<$limit; $i++) {
                6                 $final     = $past + $current;
                7                 $past      = $current;
                8                 $current = $final;
                9                 echo $final . PHP_EOL;
               10             }
               11         }
               12         fibonacci(20);



Thursday, June 14, 2012                                            37
1 <?php
                 2        function fibonacci($iteration) {
                 3            $past     = 0;
                 4            $current = 1;
                 5            for($i=1; $i<$iteration; $i++) {
                 6                $final     = $past + $current;
                 7                $past      = $current;
                 8                $current = $final;
                 9            }
                10            return $current;
                11        }
                12        echo fibonacci(20) . PHP_EOL; // 6765



Thursday, June 14, 2012                                            38
1 <?php
                   2 require 'fibonacci-func-return.php';
                   3
                   4 for ($i=1; $i<=20; $i++)
                   5     echo fibonacci($i) . PHP_EOL;




Thursday, June 14, 2012                                     39
ORIENTADO A OBJETOS




Thursday, June 14, 2012                         40
1     <?php
                2     require 'Fibonacci.php';
                3
                4     $iterator = new Fibonacci(20);
                5     while ($iterator->valid()) {
                6         echo $iterator->current() . PHP_EOL;
                7         $iterator->next();
                8     }




Thursday, June 14, 2012                                          41
1     <?php
                2        INSTÂNCIA
                      require 'Fibonacci.php';
                3
                4     $iterator = new Fibonacci(20);
                5     while ($iterator->valid()) {
                6         echo $iterator->current() . PHP_EOL;
                7         $iterator->next();
                8     }




Thursday, June 14, 2012                                          42
1 <?php
                                      CLASSE
                2 require 'Fibonacci.php';
                3
                4 $iterator = new Fibonacci(20);
                5 while ($iterator->valid()) {
                6     echo $iterator->current() . PHP_EOL;
                7     $iterator->next();
                8 }




Thursday, June 14, 2012                                      43
1     <?php
                2     require 'Fibonacci.php';
                3
                4     $iterator = new Fibonacci(20);
                5     while ($iterator->valid()) {
                6         echo $iterator->current() . PHP_EOL;
                7         $iterator->next();
                8     }




Thursday, June 14, 2012                                          44
1     <?php
                2     require 'Fibonacci.php';
                3
                4     $iterator = new Fibonacci(20);
                5     while ($iterator->valid()) {
                6         echo $iterator->current() . PHP_EOL;
                7         $iterator->next();
                8     }




Thursday, June 14, 2012                                          45
1     <?php
                2     require 'Fibonacci.php';
                3
                4     $iterator = new Fibonacci(20);
                5     while ($iterator->valid()) {
                6         echo $iterator->current() . PHP_EOL;
                7         $iterator->next();
                8     }




Thursday, June 14, 2012                                          46
1    <?php
                2    class Fibonacci
                3    {
                4        // Conteúdo da classe
                5    }




Thursday, June 14, 2012                          47
1     <?php
             2     class Fibonacci
             3     {
             4         /**
             5           * Número anterior, o primeiro na sequência é o 0 (zero).
             6           *
             7           * @var integer
             8           */
             9         protected $previous = 0;
            10         /**
            11           * Número atual, o segundo na sequência é o 1 (um).
            12           *
            13           * @var integer
            14           */
            15         protected $current    = 1;
            16         /**
            17           * Número da iteração.
            18           *
            19           * @var integer
            20           */
            21         protected $iteration = 0;
            22         /**
            23           * Qual o limite de iterações a executar.
            24           *
            25           * @var integer
            26           */
            27         protected $limit;
            28     }


Thursday, June 14, 2012                                                             48
1      <?php
              2      class Fibonacci
              3      {
              4          // ... (Proriedades)
              5
              6           /**
              7             * Construtor.
              8             *
              9             * @example $i = new Fibonacci(25);
             10             * @param   integer $n=25 Limite de iterações
             11             */
             12           public function __construct($n=25)
             13           {
             14                $this->limit = $n;
             15           }
             16
             17           // ... (outros métodos)
             18      }




Thursday, June 14, 2012                                                    49
1      <?php
              2      class Fibonacci
              3      {
              4          // ... (Construtor e Propriedades)
              5
              6           /**
              7             * Retorna o elemento atual da sequência.
              8             *
              9             * @return integer
             10             */
             11           public function current()
             12           {
             13                return $this->current;
             14           }
             15
             16           // ... (outros métodos)
             17      }




Thursday, June 14, 2012                                                50
HTTP://GIT.IO/HAPPYPANDA
Thursday, June 14, 2012                              51
1      <?php
              2      class Fibonacci
              3      {
              4          // ...
              5
              6           /**
              7             * Retorna o número da iteração atual.
              8             *
              9             * @return integer
             10             */
             11           public function key()
             12           {
             13                return $this->iteration;
             14           }
             15
             16           // ... (outros métodos)
             17      }




Thursday, June 14, 2012                                             52
1      <?php
              2      class Fibonacci
              3      {
              4          // ...
              5
              6           /**
              7             * Vai para próxima iteração.
              8             *
              9             * @return void
             10             */
             11           public function next()
             12           {
             13                $final = $this->current + $this->previous;
             14                $this->previous = $this->current;
             15                $this->current = $final;
             16                $this->iteration++;
             17           }
             18
             19           // ... (outros métodos)
             20      }



Thursday, June 14, 2012                                                     53
1      <?php
              2      class Fibonacci
              3      {
              4          // ...
              5
              6           /**
              7             * Volta para primeira iteração.
              8             *
              9             * @return void
             10             */
             11           public function rewind()
             12           {
             13                $this->previous = $this->iteration = 0;
             14                $this->current = 1;
             15           }
             16
             17           // ... (outros métodos)
             18      }




Thursday, June 14, 2012                                                  54
1      <?php
              2      class Fibonacci
              3      {
              4          // ...
              5
              6           /**
              7             * Retorna se existe uma próxima iteração válida.
              8             * Caso não existe, executa Fibonacci::rewind().
              9             *
             10             * @see Fibanacci::rewind()
             11             * @return boolean
             12             */
             13           public function valid()
             14           {
             15                if ($this->iteration < $this->limit)
             16                    return true;
             17
             18               $this->rewind();
             19               return false;
             20           }
             21      }


Thursday, June 14, 2012                                                        55
DESIGN PATTERNS




Thursday, June 14, 2012                     56
1    <?php
                2    class FibonacciIterator implements Iterator
                3    {
                4        // ...
                5    }




Thursday, June 14, 2012                                            57
1 <?php
                2 require 'FibonacciIterator.php';
                3
                4 foreach ($iterator as $i)
                5     echo $i . PHP_EOL;




                                                     HTTP://PHP.NET/ITERATOR



Thursday, June 14, 2012                                                        58
COMPOSIÇÃO
                                >
                          GENERALIZAÇÃO




Thursday, June 14, 2012                   59
AGENDA




Thursday, June 14, 2012            60
AGENDA

                     CONCEITOS




Thursday, June 14, 2012                   60
AGENDA

                     CONCEITOS

                          ESTADO, TIPAGEM E REUSO




Thursday, June 14, 2012                             60
AGENDA

                     CONCEITOS

                          ESTADO, TIPAGEM E REUSO

                          SEQUÊNCIA DE FIBONACCI




Thursday, June 14, 2012                             60
AGENDA

                     CONCEITOS

                          ESTADO, TIPAGEM E REUSO

                          SEQUÊNCIA DE FIBONACCI

                     PARADIGMAS DE PROGRAMAÇÃO




Thursday, June 14, 2012                             60
AGENDA

                     CONCEITOS

                          ESTADO, TIPAGEM E REUSO

                          SEQUÊNCIA DE FIBONACCI

                     PARADIGMAS DE PROGRAMAÇÃO

                          ASSEMBLY




Thursday, June 14, 2012                             60
AGENDA

                     CONCEITOS

                          ESTADO, TIPAGEM E REUSO

                          SEQUÊNCIA DE FIBONACCI

                     PARADIGMAS DE PROGRAMAÇÃO

                          ASSEMBLY

                          PROCEDURAL




Thursday, June 14, 2012                             60
AGENDA

                     CONCEITOS

                          ESTADO, TIPAGEM E REUSO

                          SEQUÊNCIA DE FIBONACCI

                     PARADIGMAS DE PROGRAMAÇÃO

                          ASSEMBLY

                          PROCEDURAL

                          ORIENTAÇÃO A OBJETOS



Thursday, June 14, 2012                             60
PERGUNTAS?




Thursday, June 14, 2012                61
OBRIGADO!




Thursday, June 14, 2012               62
RECADOS DA PARÓQUIA
                                                4 a 8 julho




                                      HTTP://WWW.THEDEVELOPERSCONFERENCE.COM.BR



Thursday, June 14, 2012                                                           63

Más contenido relacionado

Más de Augusto Pascutti

Logs: O que comem, onde vivem e como se reproduzem.
Logs: O que comem, onde vivem e como se reproduzem.Logs: O que comem, onde vivem e como se reproduzem.
Logs: O que comem, onde vivem e como se reproduzem.Augusto Pascutti
 
TDD - Test Driven Development (em PHP)
TDD - Test Driven Development (em PHP)TDD - Test Driven Development (em PHP)
TDD - Test Driven Development (em PHP)Augusto Pascutti
 
Guia do mochileiro para escalabilidade
Guia do mochileiro para escalabilidadeGuia do mochileiro para escalabilidade
Guia do mochileiro para escalabilidadeAugusto Pascutti
 
Falhando miseralvelmente com PHP
Falhando miseralvelmente com PHPFalhando miseralvelmente com PHP
Falhando miseralvelmente com PHPAugusto Pascutti
 
SfCon: Test Driven Development
SfCon: Test Driven DevelopmentSfCon: Test Driven Development
SfCon: Test Driven DevelopmentAugusto Pascutti
 
PHP - O que, porquê e como
PHP - O que, porquê e comoPHP - O que, porquê e como
PHP - O que, porquê e comoAugusto Pascutti
 
Testar é bom, integrar é ainda melhor
Testar é bom, integrar é ainda melhorTestar é bom, integrar é ainda melhor
Testar é bom, integrar é ainda melhorAugusto Pascutti
 
PHPSC Conference 2010 - Testar é bom, integrar é melhor ainda!
PHPSC Conference 2010 - Testar é bom, integrar é melhor ainda!PHPSC Conference 2010 - Testar é bom, integrar é melhor ainda!
PHPSC Conference 2010 - Testar é bom, integrar é melhor ainda!Augusto Pascutti
 
Orientação a Objetos com PHP
Orientação a Objetos com PHPOrientação a Objetos com PHP
Orientação a Objetos com PHPAugusto Pascutti
 
Boas Práticas, Práticas !
Boas Práticas, Práticas !Boas Práticas, Práticas !
Boas Práticas, Práticas !Augusto Pascutti
 
Mão na Massa: Orientação a Objetos na Prática
Mão na Massa: Orientação a Objetos na PráticaMão na Massa: Orientação a Objetos na Prática
Mão na Massa: Orientação a Objetos na PráticaAugusto Pascutti
 

Más de Augusto Pascutti (19)

Errors
ErrorsErrors
Errors
 
Porque VIM?
Porque VIM?Porque VIM?
Porque VIM?
 
Logs: O que comem, onde vivem e como se reproduzem.
Logs: O que comem, onde vivem e como se reproduzem.Logs: O que comem, onde vivem e como se reproduzem.
Logs: O que comem, onde vivem e como se reproduzem.
 
TDD - Test Driven Development (em PHP)
TDD - Test Driven Development (em PHP)TDD - Test Driven Development (em PHP)
TDD - Test Driven Development (em PHP)
 
Guia do mochileiro para escalabilidade
Guia do mochileiro para escalabilidadeGuia do mochileiro para escalabilidade
Guia do mochileiro para escalabilidade
 
Falhando miseralvelmente com PHP
Falhando miseralvelmente com PHPFalhando miseralvelmente com PHP
Falhando miseralvelmente com PHP
 
SfCon: Test Driven Development
SfCon: Test Driven DevelopmentSfCon: Test Driven Development
SfCon: Test Driven Development
 
Under engineer
Under engineerUnder engineer
Under engineer
 
The small things
The small thingsThe small things
The small things
 
Somos jardineiros
Somos jardineirosSomos jardineiros
Somos jardineiros
 
PHP - O que, porquê e como
PHP - O que, porquê e comoPHP - O que, porquê e como
PHP - O que, porquê e como
 
Frameworks PHP
Frameworks PHPFrameworks PHP
Frameworks PHP
 
Testar é bom, integrar é ainda melhor
Testar é bom, integrar é ainda melhorTestar é bom, integrar é ainda melhor
Testar é bom, integrar é ainda melhor
 
PHPSC Conference 2010 - Testar é bom, integrar é melhor ainda!
PHPSC Conference 2010 - Testar é bom, integrar é melhor ainda!PHPSC Conference 2010 - Testar é bom, integrar é melhor ainda!
PHPSC Conference 2010 - Testar é bom, integrar é melhor ainda!
 
Segurança em PHP
Segurança em PHPSegurança em PHP
Segurança em PHP
 
Orientação a Objetos com PHP
Orientação a Objetos com PHPOrientação a Objetos com PHP
Orientação a Objetos com PHP
 
Boas Práticas, Práticas !
Boas Práticas, Práticas !Boas Práticas, Práticas !
Boas Práticas, Práticas !
 
Mitos do PHP
Mitos do PHPMitos do PHP
Mitos do PHP
 
Mão na Massa: Orientação a Objetos na Prática
Mão na Massa: Orientação a Objetos na PráticaMão na Massa: Orientação a Objetos na Prática
Mão na Massa: Orientação a Objetos na Prática
 

Orientação a objetos v2

  • 1. ORIENTAÇÃO A OBJETOS ... Thursday, June 14, 2012 1
  • 2. PA LEST RA DE , MAIS UMA SIM ORIENTAÇÃO A OBJETOS Thursday, June 14, 2012 2
  • 3. PA LEST RA DE , MAIS UMA SIM ORIENTAÇÃO A OBJETOS @AUGUS TOHP @ALGAN ET Thursday, June 14, 2012 3
  • 5. AGENDA CONCEITOS Thursday, June 14, 2012 4
  • 6. AGENDA CONCEITOS PARADIGMAS DE PROGRAMAÇÃO Thursday, June 14, 2012 4
  • 9. hardware na maioria das vezes nem sabe o estado ESTADO Thursday, June 14, 2012 7
  • 10. hardware na maioria das vezes nem sabe o estado ESTADO INCADEIRA BR Thursday, June 14, 2012 8
  • 18. SEQUÊNCIA DE FIBONACCI HTTPS://EN.WIKIPEDIA.ORG/WIKI/FIBONACCI_NUMBER Thursday, June 14, 2012 16
  • 19. PARADIGMAS DE PROGRAMAÇÃO Thursday, June 14, 2012 17
  • 21. .data fibonacci DWORD 100 dup (0) .code mov edx,offset fibonacci mov eax,1 mov ebx,1 mov ecx,49 @@: mov DWORD PTR [edx],eax mov DWORD PTR [edx+4],ebx add eax,ebx add ebx,eax add edx,8 sub ecx,1 jnz @B HTTP://WWW.CODECODEX.COM/WIKI/FIBONACCI_SEQUENCE#80386.2B_ASSEMBLY Thursday, June 14, 2012 19
  • 22. .data fibonacci DWORD 100 dup (0) .code mov edx,offset fibonacci mov eax,1 mov ebx,1 mov ecx,49 @@: mov DWORD PTR [edx],eax mov DWORD PTR [edx+4],ebx add eax,ebx add ebx,eax add edx,8 sub ecx,1 jnz @B HTTP://WWW.CODECODEX.COM/WIKI/FIBONACCI_SEQUENCE#80386.2B_ASSEMBLY Thursday, June 14, 2012 20
  • 23. .data fibonacci DWORD 100 dup (0) .code mov edx,offset fibonacci mov eax,1 mov ebx,1 mov ecx,49 @@: mov DWORD PTR [edx],eax mov DWORD PTR [edx+4],ebx add eax,ebx add ebx,eax add edx,8 sub ecx,1 jnz @B HTTP://WWW.CODECODEX.COM/WIKI/FIBONACCI_SEQUENCE#80386.2B_ASSEMBLY Thursday, June 14, 2012 21
  • 24. .data fibonacci DWORD 100 dup (0) .code mov edx,offset fibonacci mov eax,1 mov ebx,1 mov ecx,49 @@: mov DWORD PTR [edx],eax mov DWORD PTR [edx+4],ebx add eax,ebx add ebx,eax add edx,8 sub ecx,1 jnz @B HTTP://WWW.CODECODEX.COM/WIKI/FIBONACCI_SEQUENCE#80386.2B_ASSEMBLY Thursday, June 14, 2012 22
  • 25. .386 .model  Flat public  Fibonacci include  iosmacros.inc  ;  inclui  macros  de  output  para  tela .code Fibonacci  proc        MOV  EAX,  [ESP+4]        CMP  EAX,  1        JA  Recurse        MOV  EAX,  1                ;  retorna  o  valor  de  eax        JMP  exit Recurse:        PUSH  EBX                    ;  preserva  o  valor  de  ebx        DEC  EAX        PUSH  EAX        CALL  Fibonacci        MOV  EBX,  EAX            ;  ebx  preservado,  seguro  de  usar        DEC  [ESP]                  ;  decrementa  o  valor  no  stack        CALL  Fibonacci        ADD  EAX,  EBX            ;  retorna  o  valor  em  eax        ADD  ESP,  4                ;  remove  o  valor  do  stack        POP  EBX                      ;  restaura  o  valor  antigo  de  ebx exit: ret Fibonacci  endp HTTP://STACKOVERFLOW.COM/QUESTIONS/5616684/RECURSIVE-FIBONACCI-IN-ASSEMBLY Thursday, June 14, 2012 23
  • 27. 1 <?php 2 $past = 0; 3 $current = 1; 4 $limit = 20; 5 for($i=1; $i<$limit; $i++) { 6 $final = $past + $current; 7 $past = $current; 8 $current = $final; 9 echo $final . PHP_EOL; 10 } HTTP://WWW.DREAMINCODE.NET/CODE/SNIPPET920.HTM Thursday, June 14, 2012 25
  • 28. 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 Thursday, June 14, 2012 26
  • 29. 1 <?php 2 $past = 0; 3 $current = 1; 4 $limit = 20; 5 for($i=1; $i<$limit; $i++) { 6 $final = $past + $current; 7 $past = $current; 8 $current = $final; 9 echo $final . PHP_EOL; 10 } HTTP://WWW.DREAMINCODE.NET/CODE/SNIPPET920.HTM Thursday, June 14, 2012 27
  • 30. 1 <?php 2 $past = 0; 3 $current = 1; 4 $limit = 20; 5 for($i=1; $i<$limit; $i++) { 6 $final = $past + $current; 7 $past = $current; 8 $current = $final; 9 echo $final . PHP_EOL; 10 } HTTP://WWW.DREAMINCODE.NET/CODE/SNIPPET920.HTM Thursday, June 14, 2012 28
  • 31. 1 <?php 2 $past = 0; 3 $current = 1; 4 $limit = 20; 5 for($i=1; $i<$limit; $i++) { 6 $final = $past + $current; 7 $past = $current; 8 $current = $final; 9 echo $final . PHP_EOL; 10 } HTTP://WWW.DREAMINCODE.NET/CODE/SNIPPET920.HTM Thursday, June 14, 2012 29
  • 32. 1 <?php 2 $past = 0; 3 $current = 1; 4 $limit = 20; 5 for($i=1; $i<$limit; $i++) { 6 $final = $past + $current; 7 $past = $current; 8 $current = $final; 9 echo $final . PHP_EOL; 10 } HTTP://WWW.DREAMINCODE.NET/CODE/SNIPPET920.HTM Thursday, June 14, 2012 30
  • 33. 1 <?php 2 $past = 0; 3 $current = 1; 4 $limit = 20; 5 for($i=1; $i<$limit; $i++) { 6 $final = $past + $current; 7 $past = $current; 8 $current = $final; 9 echo $final . PHP_EOL; 10 } HTTP://WWW.DREAMINCODE.NET/CODE/SNIPPET920.HTM Thursday, June 14, 2012 31
  • 34. 1 <?php 2 $past = 0; 3 $current = 1; 4 $limit = 20; 5 for($i=1; $i<$limit; $i++) { 6 $final = $past + $current; 7 $past = $current; 8 $current = $final; 9 echo $final . PHP_EOL; 10 } HTTP://WWW.DREAMINCODE.NET/CODE/SNIPPET920.HTM Thursday, June 14, 2012 32
  • 35. 1 <?php 2 $past = 0; 3 $current = 1; 4 $limit = 20; 5 for($i=1; $i<$limit; $i++) { 6 $final = $past + $current; 7 $past = $current; 8 $current = $final; 9 echo $final . PHP_EOL; 10 } HTTP://WWW.DREAMINCODE.NET/CODE/SNIPPET920.HTM Thursday, June 14, 2012 33
  • 36. 1 <?php 2 $past = 0; 3 $current = 1; 4 $limit = 20; 5 for($i=1; $i<$limit; $i++) { 6 $final = $past + $current; 7 $past = $current; 8 $current = $final; 9 echo $final . PHP_EOL; 10 } HTTP://WWW.DREAMINCODE.NET/CODE/SNIPPET920.HTM Thursday, June 14, 2012 34
  • 37. 1 <?php 2 $past = 0; 3 $current = 1; 4 $limit = 20; 5 for($i=1; $i<$limit; $i++) { 6 $final = $past + $current; 7 $past = $current; 8 $current = $final; 9 echo $final . PHP_EOL; 10 } HTTP://WWW.DREAMINCODE.NET/CODE/SNIPPET920.HTM Thursday, June 14, 2012 35
  • 38. 1 <?php 2 $past = 0; 3 $current = 1; 4 $limit = 20; 5 for($i=1; $i<$limit; $i++) { 6 $final = $past + $current; 7 $past = $current; 8 $current = $final; 9 echo $final . PHP_EOL; 10 } HTTP://WWW.DREAMINCODE.NET/CODE/SNIPPET920.HTM Thursday, June 14, 2012 36
  • 39. 1 <?php 2 function fibonacci($limit) { 3 $past = 0; 4 $current = 1; 5 for($i=1; $i<$limit; $i++) { 6 $final = $past + $current; 7 $past = $current; 8 $current = $final; 9 echo $final . PHP_EOL; 10 } 11 } 12 fibonacci(20); Thursday, June 14, 2012 37
  • 40. 1 <?php 2 function fibonacci($iteration) { 3 $past = 0; 4 $current = 1; 5 for($i=1; $i<$iteration; $i++) { 6 $final = $past + $current; 7 $past = $current; 8 $current = $final; 9 } 10 return $current; 11 } 12 echo fibonacci(20) . PHP_EOL; // 6765 Thursday, June 14, 2012 38
  • 41. 1 <?php 2 require 'fibonacci-func-return.php'; 3 4 for ($i=1; $i<=20; $i++) 5 echo fibonacci($i) . PHP_EOL; Thursday, June 14, 2012 39
  • 42. ORIENTADO A OBJETOS Thursday, June 14, 2012 40
  • 43. 1 <?php 2 require 'Fibonacci.php'; 3 4 $iterator = new Fibonacci(20); 5 while ($iterator->valid()) { 6 echo $iterator->current() . PHP_EOL; 7 $iterator->next(); 8 } Thursday, June 14, 2012 41
  • 44. 1 <?php 2 INSTÂNCIA require 'Fibonacci.php'; 3 4 $iterator = new Fibonacci(20); 5 while ($iterator->valid()) { 6 echo $iterator->current() . PHP_EOL; 7 $iterator->next(); 8 } Thursday, June 14, 2012 42
  • 45. 1 <?php CLASSE 2 require 'Fibonacci.php'; 3 4 $iterator = new Fibonacci(20); 5 while ($iterator->valid()) { 6 echo $iterator->current() . PHP_EOL; 7 $iterator->next(); 8 } Thursday, June 14, 2012 43
  • 46. 1 <?php 2 require 'Fibonacci.php'; 3 4 $iterator = new Fibonacci(20); 5 while ($iterator->valid()) { 6 echo $iterator->current() . PHP_EOL; 7 $iterator->next(); 8 } Thursday, June 14, 2012 44
  • 47. 1 <?php 2 require 'Fibonacci.php'; 3 4 $iterator = new Fibonacci(20); 5 while ($iterator->valid()) { 6 echo $iterator->current() . PHP_EOL; 7 $iterator->next(); 8 } Thursday, June 14, 2012 45
  • 48. 1 <?php 2 require 'Fibonacci.php'; 3 4 $iterator = new Fibonacci(20); 5 while ($iterator->valid()) { 6 echo $iterator->current() . PHP_EOL; 7 $iterator->next(); 8 } Thursday, June 14, 2012 46
  • 49. 1 <?php 2 class Fibonacci 3 { 4 // Conteúdo da classe 5 } Thursday, June 14, 2012 47
  • 50. 1 <?php 2 class Fibonacci 3 { 4 /** 5 * Número anterior, o primeiro na sequência é o 0 (zero). 6 * 7 * @var integer 8 */ 9 protected $previous = 0; 10 /** 11 * Número atual, o segundo na sequência é o 1 (um). 12 * 13 * @var integer 14 */ 15 protected $current = 1; 16 /** 17 * Número da iteração. 18 * 19 * @var integer 20 */ 21 protected $iteration = 0; 22 /** 23 * Qual o limite de iterações a executar. 24 * 25 * @var integer 26 */ 27 protected $limit; 28 } Thursday, June 14, 2012 48
  • 51. 1 <?php 2 class Fibonacci 3 { 4 // ... (Proriedades) 5 6 /** 7 * Construtor. 8 * 9 * @example $i = new Fibonacci(25); 10 * @param integer $n=25 Limite de iterações 11 */ 12 public function __construct($n=25) 13 { 14 $this->limit = $n; 15 } 16 17 // ... (outros métodos) 18 } Thursday, June 14, 2012 49
  • 52. 1 <?php 2 class Fibonacci 3 { 4 // ... (Construtor e Propriedades) 5 6 /** 7 * Retorna o elemento atual da sequência. 8 * 9 * @return integer 10 */ 11 public function current() 12 { 13 return $this->current; 14 } 15 16 // ... (outros métodos) 17 } Thursday, June 14, 2012 50
  • 54. 1 <?php 2 class Fibonacci 3 { 4 // ... 5 6 /** 7 * Retorna o número da iteração atual. 8 * 9 * @return integer 10 */ 11 public function key() 12 { 13 return $this->iteration; 14 } 15 16 // ... (outros métodos) 17 } Thursday, June 14, 2012 52
  • 55. 1 <?php 2 class Fibonacci 3 { 4 // ... 5 6 /** 7 * Vai para próxima iteração. 8 * 9 * @return void 10 */ 11 public function next() 12 { 13 $final = $this->current + $this->previous; 14 $this->previous = $this->current; 15 $this->current = $final; 16 $this->iteration++; 17 } 18 19 // ... (outros métodos) 20 } Thursday, June 14, 2012 53
  • 56. 1 <?php 2 class Fibonacci 3 { 4 // ... 5 6 /** 7 * Volta para primeira iteração. 8 * 9 * @return void 10 */ 11 public function rewind() 12 { 13 $this->previous = $this->iteration = 0; 14 $this->current = 1; 15 } 16 17 // ... (outros métodos) 18 } Thursday, June 14, 2012 54
  • 57. 1 <?php 2 class Fibonacci 3 { 4 // ... 5 6 /** 7 * Retorna se existe uma próxima iteração válida. 8 * Caso não existe, executa Fibonacci::rewind(). 9 * 10 * @see Fibanacci::rewind() 11 * @return boolean 12 */ 13 public function valid() 14 { 15 if ($this->iteration < $this->limit) 16 return true; 17 18 $this->rewind(); 19 return false; 20 } 21 } Thursday, June 14, 2012 55
  • 59. 1 <?php 2 class FibonacciIterator implements Iterator 3 { 4 // ... 5 } Thursday, June 14, 2012 57
  • 60. 1 <?php 2 require 'FibonacciIterator.php'; 3 4 foreach ($iterator as $i) 5 echo $i . PHP_EOL; HTTP://PHP.NET/ITERATOR Thursday, June 14, 2012 58
  • 61. COMPOSIÇÃO > GENERALIZAÇÃO Thursday, June 14, 2012 59
  • 63. AGENDA CONCEITOS Thursday, June 14, 2012 60
  • 64. AGENDA CONCEITOS ESTADO, TIPAGEM E REUSO Thursday, June 14, 2012 60
  • 65. AGENDA CONCEITOS ESTADO, TIPAGEM E REUSO SEQUÊNCIA DE FIBONACCI Thursday, June 14, 2012 60
  • 66. AGENDA CONCEITOS ESTADO, TIPAGEM E REUSO SEQUÊNCIA DE FIBONACCI PARADIGMAS DE PROGRAMAÇÃO Thursday, June 14, 2012 60
  • 67. AGENDA CONCEITOS ESTADO, TIPAGEM E REUSO SEQUÊNCIA DE FIBONACCI PARADIGMAS DE PROGRAMAÇÃO ASSEMBLY Thursday, June 14, 2012 60
  • 68. AGENDA CONCEITOS ESTADO, TIPAGEM E REUSO SEQUÊNCIA DE FIBONACCI PARADIGMAS DE PROGRAMAÇÃO ASSEMBLY PROCEDURAL Thursday, June 14, 2012 60
  • 69. AGENDA CONCEITOS ESTADO, TIPAGEM E REUSO SEQUÊNCIA DE FIBONACCI PARADIGMAS DE PROGRAMAÇÃO ASSEMBLY PROCEDURAL ORIENTAÇÃO A OBJETOS Thursday, June 14, 2012 60
  • 72. RECADOS DA PARÓQUIA 4 a 8 julho HTTP://WWW.THEDEVELOPERSCONFERENCE.COM.BR Thursday, June 14, 2012 63