SlideShare a Scribd company logo
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

More Related Content

PDF
Orientação a Objetos na prática em php
PDF
Melhorando sua API com DSLs
PDF
Como escalar aplicações PHP
PDF
From programming to software engineering: ICSE keynote slides available
PDF
Numpy, the Python foundation for number crunching
PDF
Machine vision and device integration with the Ruby programming language (2008)
PPTX
01 computer programming
PDF
In search of good design...
Orientação a Objetos na prática em php
Melhorando sua API com DSLs
Como escalar aplicações PHP
From programming to software engineering: ICSE keynote slides available
Numpy, the Python foundation for number crunching
Machine vision and device integration with the Ruby programming language (2008)
01 computer programming
In search of good design...

Similar to Orientação a objetos v2 (20)

DOC
Course Breakup - C Porgramming Language
DOC
Course Break - C Language
DOC
Student copybca sem1-c
PDF
Introduction to Compiler Development
PDF
C the complete_reference
PPT
Programming Fundamentals - Lecture 1.ppt
PPT
Project
PPT
Code generator
PDF
Model-Driven Software Development - Introduction & Overview
PDF
2010 01 lecture SIG UM MFES 3 - Reverse engineering
PDF
Cois240 lesson01
DOCX
Ece 1322 programming_for_engineers_s1_201213(1)
PPTX
Machine language
PDF
The Price of the Free Lunch: Programming in the Multicore Era
PDF
Data Structures and Algorithms
PPTX
Ds12 140715025807-phpapp02
PPTX
Data structures using C
DOC
Course Breakup Plan- C
PDF
Ti1220 Lecture 1: Programming Linguistics
Course Breakup - C Porgramming Language
Course Break - C Language
Student copybca sem1-c
Introduction to Compiler Development
C the complete_reference
Programming Fundamentals - Lecture 1.ppt
Project
Code generator
Model-Driven Software Development - Introduction & Overview
2010 01 lecture SIG UM MFES 3 - Reverse engineering
Cois240 lesson01
Ece 1322 programming_for_engineers_s1_201213(1)
Machine language
The Price of the Free Lunch: Programming in the Multicore Era
Data Structures and Algorithms
Ds12 140715025807-phpapp02
Data structures using C
Course Breakup Plan- C
Ti1220 Lecture 1: Programming Linguistics
Ad

More from Augusto Pascutti (19)

PDF
PDF
Porque VIM?
PDF
Logs: O que comem, onde vivem e como se reproduzem.
PDF
TDD - Test Driven Development (em PHP)
PDF
Guia do mochileiro para escalabilidade
PDF
Falhando miseralvelmente com PHP
PDF
SfCon: Test Driven Development
PDF
Under engineer
PDF
The small things
PDF
Somos jardineiros
PDF
PHP - O que, porquê e como
PDF
Frameworks PHP
PDF
Testar é bom, integrar é ainda melhor
PDF
PHPSC Conference 2010 - Testar é bom, integrar é melhor ainda!
KEY
Segurança em PHP
KEY
Orientação a Objetos com PHP
KEY
Boas Práticas, Práticas !
KEY
Mitos do PHP
KEY
Mão na Massa: Orientação a Objetos na Prática
Porque VIM?
Logs: O que comem, onde vivem e como se reproduzem.
TDD - Test Driven Development (em PHP)
Guia do mochileiro para escalabilidade
Falhando miseralvelmente com PHP
SfCon: Test Driven Development
Under engineer
The small things
Somos jardineiros
PHP - O que, porquê e como
Frameworks PHP
Testar é bom, integrar é ainda melhor
PHPSC Conference 2010 - Testar é bom, integrar é melhor ainda!
Segurança em PHP
Orientação a Objetos com PHP
Boas Práticas, Práticas !
Mitos do PHP
Mão na Massa: Orientação a Objetos na Prática
Ad

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