PHP-Programando com orientação a objetos, Notas de estudo de Análise de Sistemas de Engenharia
agnaldo-jardel-trennepohl-10
agnaldo-jardel-trennepohl-10

PHP-Programando com orientação a objetos, Notas de estudo de Análise de Sistemas de Engenharia

580 páginas
50Números de download
1000+Número de visitas
Descrição
PHP-Programando com orientação a objetos
70 pontos
Pontos de download necessários para baixar
este documento
Baixar o documento
Pré-visualização3 páginas / 580
Esta é apenas uma pré-visualização
3 mostrados em 580 páginas
Esta é apenas uma pré-visualização
3 mostrados em 580 páginas
Esta é apenas uma pré-visualização
3 mostrados em 580 páginas
Esta é apenas uma pré-visualização
3 mostrados em 580 páginas
Inclui Design Patterns novatec Pablo Dall'Oglio PHP Programando com Orientação a Objetos PHP Programando com Orientação a Objetos Pablo Dall'Oglio Novatec Copyright & 2007 da Novarec Editora Ltda. Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. É proibida a reprodução desta obra, mesmo parcial, por qualquer processo, sem prévia autorização, por escrito, do autor e da Editora. Fditor: Rubens Prates Ediroração cletrônica: Rodolpho Lopes Revisão gramatical: Gabriela de Andrade Fazioni Capa: Pablo DalPOgiio e Rodolpho Lopes ISBN: 978-85-7522-137-2 Ec EpITORA LIDA. Rua Luís Antônio dos Santos 110 02460-000 — São Paulo, SP — Brasil Tel.: +55 11 6959-6529 Fax: +55 11 6950-8869 E-mail: novarec&novatec.com,br Site: www. novarec.com.br Dados Internacionais de Catalogação na Publicação (CIP) (Câmara Brasileira do Livro, SP, Brasil) Pall“Oglio, Zabio PH? : programando com crrentação a objetos Pablo Dall"Oglio. -- São Pauls : Hovateo Edit: 1. PHP (Linguacem i computadorori TSEX 978-85-7522- CDE 005.13 jices para cacálogo sistemático: 1. PHP + Tirquagen de programação : CompuLadores processamento de dados 005.133 Um dia Martin Luther King disse: “O que me preocupa não é o grito dos maus. É o silêncio dos bons” Dedico este livro a você que não silencia. Dedico este livro a você que é contra o preconceito, que é contra a violência. Dedico este livro a você que reage perante a injustiça quando poderia simplesmente se omitir. Dedico a você que ainda faz distinção entre o certo e o errado em uma sociedade em que a ética e o caráter têm se tornado cada vez mais flexíveis. Dedico este livro a vo. ê, que tem valores, princípios e consegue vencer na vida sem passar por cima de ninguém. Dedico este livro a você, que tem a grandeza de torcer e se emocionar com a vitória alheia, de querer o bem do próximo. Dedico este livro aos meus, minha família, meu amor, meus amigos. Vocês são o que importa. Sumário Sobre o autor..... Agradecimentos... Nota do autor... Organização do livro. Capítulo 1 - Introdução ao PHP... LO que éoPHP?.. 12 Um programa PHP... 1.21 Extensão de arquivos 122 Delimitadores de código ............... 123 Comentários... 124 Comandos de saída (output). 13 Variáveis 131'tipo booleano. 132 Tipo numérico... seiaemeseeesemeniis 133 Tipo string 134"Nipo array 135 Tipo objeto... . 136 Tipo recurso... 137 Tipo misto. 138 Tipo callbach 139 Tipo NULL... siste 14 Constantes 1,5 Operadores 1,51 Atribui 1.5.2 Aritméticos............... 1.53 Relacionais . 154 Lógicos. 16 Estruturas de controle 161TF..... 16.2 WHILE 163 FOR.. 8 PHP — Programando com Orientação a Objetos 164 SWITCH ii Ro 165 FOREACH......ii 166 CONTINUE 167 BREAI 17 Requisição de arquivo: 18 Manipulação de funções .... 181 Criação, I 183 Variáveis está Variáveis globais 1.84 Passagem de parâmetros... 18.5 Recursão 19 Manipulação de arquivos e diretórios LIO Manipulação de strings............ 1101 Declaração 110.2 Concatenação ..... 1103 Caracteres de escape 1104 Funções...... 1 Manipulação de arrays 1111 Criando um array... LIL? Arrays associativos. 1413 Tterações....... 1114 Acesso .... LIL5 Arrays multidimensionai: 1116 Funções LI2 Manipulação de objeros Capítulo 2 » Orientação a objetos...... 21 Introdução... 23 Objeto... 24 Construtores e destrutores 2.5 Herança. 26 Polimortsmo 27 Abstração . 2.71 Classes abstratas 2 Classes fin: Métodos abstrato: 74 Métodos finais... . 2 2 2 Sumário 2.8 Encapsulamento ... 281 Private... 28.2 Protected. 28.3 Public... 29 Membros da 291 Constantes 292 Propriedades e: 293 Métodos estático: 210 Associação, agregação e composição... 210.1 Associação. 2102 Agregação. 2103 Composição..... 2 Intercepções......seeeeamseeea 2111 Método setO. 211.2 Método — get 2M3 Método cano . « 214 Método tostringO .....i cc csresirenae ca cerenenaraerenecenentres 128 211,5 Método toxmO?..... 212 Intertaces. ue - 213 Método — clone) ........... 214 Autoload.... 215 Objetos dinâmicos... 216 Manipulação de XM 216.1 Exemplos ...... 217 Tratamento de erros... 2ATÃA função dieO 2 Retorno de flags 2173 Lançando erre 2.174 Tratamento de exceções. Capitulo 3 - Manipulação de dados...... 31 Acesso nativo... 341 Introduçé 312 Exemplos 32 PDO :: PHP Data Objecis........iiiis 321 Introdução... 322 Exemplos 33 Uma API orient 331 Introdução... 332 Sintaxe SQL... 10 PHP — Programando com Orientação a Objetos 333 Usando SQL. no PHP.. 334 Design pattern .... 335 Query Object. 336 Critérios de seleção. 337 Instruções SQL... . 33,8 Insert... stress teria teste menee entanto nereetese rea reeseensinesa 339 Update, 3310 Delete. 33M Selecr... 3312 Conexão com banco de dados... 3313 Controle de transações. Capítulo 4 » Mapeamento Objeto-Relacional 41 Persistência 411 Introduç: 4.2 Mapeamento objeto-relacional...... 421 Identity Field ......... 42.2 Foreign Key Mapping . 423 Association Iable Mapping 4.24 Single Table Inheritance.... 42.5 Concrete Table Inheritance 4.26 Class Table Inheritance.. 427 Lazy Initialization........... 4.3 Modelo de negócios ......... 4.31 Domain Model Pattern 432 Table Module .... 44 Gateways iii 441 Table Data Gateway . 44.2 Row Data Gateway 443 Active Record..... 444 Data Mapper ..... 4.5 Maunipulando objetos 4.51 Introdução 4.5.2 Exemplos 4.53 Novo abjeto ...... 4.54 Obter objeto... 4,55 Alterar objeto. 4,56 Clonar objeto 4.57 Exeluir objeto... Sumário " 46 Manipulando coleções ....... 461 Repository. 46.2 Obter coleção de objetos 46.3 Alterar coleção de objetos 464 Contar objetos... 465 Excluir coleção de objetos.......... 47 Aspectos avançados... 471 Iincapsulamento.. 47 473 Criar métodos de negócio Lazy Initializatior Capítulo 5 » Apresentação e controle ... 51 Introdução 52 Componentes ... . 521 Elementos HIML... .2 Tolhas de estilo... Ur 32,3 Imagens teens 524 Textos... 53 Contêine 531 Tabelas. 332 Painéis isa 533 Janelas....... 54 Diálogos e controles 54,1 Page Controller . . .353 D AÇÕES ii . 361 343 Diálogos de mensagem... rios 360 544 Diálogos de questionamento... 373 Capítulo 6 « Formulários e listagens..... 6.1 Formulários ......e. 6.11 Elementos de um formulário... 378 61.2 ixemplo de formulário ......... 380 613 Método POST... 6.2 Um formulário orientado a objetos 621 Introdução... 622 Elementos de um formulário ........... 6.23 Disposição e layout... 624 Outros componentes. 6. 63 Listagens .. 2.5 Exemplos 631 Exemplos de listagens....... esses 12 PHP — Programando com Orientação a Objetos 64 Listagens orientadas a objetos . 641 Introdução... 642 Elementos de uma DataCimid......... 643 Exemplos... Capítulo 7 » Criando uma aplicação 71 Organização da aplicação... 711 Model View Controller... 71.2 Pacore: 71.3 Internacionalização e Singleton Pattern... ZIA Seções e Registry Pauern Z 3 Front Controller... 716 Template View = 2 Uma aplicação-exemplo testes 721 listrutura 722 adastro de cidades... 723 Cadastro de fabricantes... 724 Cadastro de clientes. 72: 7.26 Processo de venda........ 23 334 72.7 Emissão de relatórios... isca rrenan 548 adastro de produtos. 733 Funcionamento 734 Remote Fazade.......cster 74 Conclusão... eerimeeseaserieereraneniaeenrasens . Índice remissivo Sobre o autor Pagro Da Ocnio é graduado em Análise de Sistemas pela Unisinos e autor de softwares reconhecidos como o Agata Report e o Tulip. Possui grande experiência no desenvolvimento de sistemas e está constantemente envolvido com análise, projeto e implementação de soitwares orientados a objetos, UML e design patterns. Criador da comunidade brasileira de PHP-GTK (www php-gik.com.br), é diretor de tecnologia da Adianti Solutions (www adianti com.br). 3 Agradecimentos Quero agradecer ao Rubens Prates, o editor mais bacana do mundo, por acreditar nas minhas idéias malucas e publicar meus livros. Quero agradecer aos meus avós por terem acreditado em mim e por terem patrocinado meus primeiros cursos de informática na década de 1990, quando informática era tida como coisa para gênio, — hoje porcionar educação superior — foram anos difíceis. Obrigado por terem lutado para que eu tivesse a oportunidade de estudar, obrigado pelos valores. Ter nascido humilde me taz valorizar muito cada pequena conquista da minha vi coisa para louco, Agradeço aos meus pais por todo o empenho em me pro- abalhei neste livro de dezembro de 2006 até hoje, 15 de agosto de 2007. Foi um verão escaldante e um inverno gelado aqui no Rio Grande do Sul. Este livro enfrentou temperaturas que variaram entre O e 40 graus durante todo este tempo. Ele literal mente foi escrito com muita transpiração, Quero agradecer a minha avó pelas guloseimas que me abasteceram nos últimos rno, principalmente o chocolate caseiro, e ao meu pai por ter comprado “dor que me impediu de congelar entre os capítulos cinco e seis. Para não ficar desinformado enquanto cu escrevia, meu avô me contava os resultados do nosso colorado durante o campeonato brasileiro. Também quero agradecer ao Abel Braga e ao Fernando Carvalho pelo título mundial sobre o Barcelona — oi uma verdadeira epopéia. meses de in um aque: Quero deixar um abraço muito especial para minha irmã Daline, que sempre conseguiu o que eu precisava a preços módicos na loja de informática onde trabalha — € nesse tempo foi um suporte para o notebook e um teclado novo, Já meu cunhado William começou a programar em PHP-GTK e está se saindo um bom programador, pena que no xadrez ele não aprende; bom para mim, que levo a melhor! Um abra- ço aos grandes amigos Júlia e Fábio, parceiro de violão, pelo blues da quarta-feira - não tocamos nada, mas tudo sempre acaba em pizza! Como músicos somos bons programadores. Ao amigo Ranzi. que não perde a oportunidade de dizer a todos que tem um amigo escritor, hehehe. Tenho orgulho de dizer que já tomei chimarrão contigo, cara! 14 Agradecimentos 5 Ao Martim Fowler e ao Scott Ambler, pelos excelentes livros, pela didática c pel idéias brilhantes. Aos meus clientes e parceiros de negócio, em alo Carvalha o Cererta, o Daniel Alvão, o pessoal da DBSeller e da Univares. Aos mestres Mouriac Diemer, Sílvio Cazella, Leandro Pompermeyer, Sérgio C Carlo Bellini. Neste livro, há uma parcela de conhecimento de cada um de vocês. Aos artistas que fizeram parte da trilha sonora deste livro, que teve The Beatles, The Eagles, Emmerson Nogueira, Danni Carlos, Marisa Monte, Roupa Nova, Creedence, John Lennon, nos importante, à Fernanda, minha eterna namorada. Digo eterna por que já venho dizendo que vou casar com ela desde o primeiro livro que escrevi, em 2004. Acho que antes do próximo eu não escapo. Só você para compreender minha rotina de trabalho maluca. Te amo muito! po, Cândido Fonseca e anberries, Mamonas, Bethoven e Vivaldi. Por último, mas não me- Nota do autor Minha história com PHP inicia-se no ano de 2000 quando fiz parte de um grande projeto de sistema para gestão acadêmica, chamado SAGU. Na época éramos pio- neiros no uso de PHP para o desenvolvimento de aplicações de negócio e isso nos rendeu inclusive uma visita do Rasmus, criador da linguagem, durante uma de suas passagens pelo Brasil. Desde aquela época, trabalhei em inúmeros projetos e passei a utilizar também o PLP-GTK para criar aplicações gráficas em PHP, culminando com o desenvolvimento do Agata Report em 2001 e o primeiro livro sobre PHP-GTK do mundo, publicado em 2004. Ao programar usando a extensão GTK, você precisa dominar a orientação a objetos, uma vez que seus componentes (janelas, botões, listas) são representados por classes. Foi uma transição para mim, uma vez que passei anos trabalhando com linguagens procedurais como o velho Clipper, minha primeira lin- guagem de trabalho, em 1994, Utilizando o GTK, os conceitos de orientação a objetos se solidificavam em mim que estava vislumbrado com a produtividade alcançada pela aplicação de conceitos como herança, encapsulamento e polimorásmo. No início de 2004 fiquei muito impressionado ao conhecer as novas características do PHP5 em relação à orientação a objetos. Passei a estudar os novos conceitos im- plementados e tudo coincidiu com a época na qual estava estudando design patterns na disciplina de engenharia de software na universidade, Na época escrevi um artigo intitulado PHPS, Orientação a Objetos e design patterns, uma pequena contribuição minha para a comunidade de PHP que desejava se inteirar sobre o assunto, tendo em vista que a maioria das referências na época estavam em inglês, O artigo foi um sucesso e logo nas primeiras semanas alguns milhares de pessoas já tinham realizado o seu download. Após anos trabalhando com PHP, fui desenvolvendo um conjunto de classes que implementavam funcionalidades básicas para qualquer projeto novo que eu iniciava, formulários e listagens. Em junho de 2006, resolvi reunir essas classes de forma consistente, sob a estrutura de um framework, para utilizar em meu trabalho de conclusão. Toi justamente quando eu estava de- como conexão com bancos de dados senvolvendo um projeto para uma universidade local, a Univates, cuja equipe gostou do meu framework e solicitou um treinamento para utilizá-lo em seus projetos. Ao mesmo tempo, tinha sido convidado para desenvolver a arquitetura de um sistema para 16 Nota do autor 17 gerenciar as pesquisas em saúde realizadas no Brasil, pelo Observatório de Ciência e Tecnologia do Ministério da Saúde. Como a equipe do projeto era jovem e o tempo era escasso, resolvi pela utilização do framework para acelerar o desenvolvimento. Durante esses dois projetos, percebi gue a utilização do framework tornava simples a tarefa de ensinar os conceitos bási os da orientação a objetos. Foi quando decidi escrever este. livro. Em dezembro de 2006 participei da primeira PHP Conference Brasil e lá pude conhecer de perto a comunidade PHP no Brasil e tomar ciência do crescente interesse em assuntos como a orientação a objetos e design parterns. Tudo que aconteceu cola- borou, de certa forma, para que eu decidisse escrever este livro, que é minha parcela de contribuição para quem está começando agora Espero que você apregue conhecimento é espero que este livro desperte-lhe idéias. Se isto acontecer, valerá muito a pena ter escrito. Não deixe de me escrever sob quais- quer circunstâncias. Adoraria receber e-mails com sugestões. Como toda primeira edição de um livro, esta dificilmente sairá sem erros. Espero contar com você para evoluir as idéias e juntos construirmos novas edições ou mesmo novos livros. Pablo DalPOglo Organização do livro Confira o que veremos em cada capítulo deste livro: O Capítulo 1 consiste de uma introdução à linguagem PHP Nele veremos os tipos de dados suportados, operadores lógicos e aritméticos, estruturas de controle, manipula o de funções, manipulação de arquivos, de strings e de arrays. O Capítulo 2 aborda exclusivamente os princípios básicos da orientação a objetos por meio de vários exemplos práticos. Nele abordamos os mais diversos aspectos da orientação a objetos, como abstração, herança, polimorfsmo, encapsulamento, agregação, composição, interfaces, métodos construtores, dentre outros. Ademais, abor- daremos assuntos como tratamento de exceções e manipulação de arquivos XML. O Capítulo 3 começa a abordar o acesso a bases de dados. Vemos primeiramente como se dá o acesso da forma tradicional, para então estudarmos a biblioteca PDO e propormos um conjunto de classes que possibilite manipular instruções SQL de forma orientada a objetos. Também criamos objetos para automatizar conexões, transações e regisuos de log. O Capítulo 4 aborda a persistência de objetos em bases de dados, ou seja, O mapeamento objeto-relacional. Neste capítulo, estudamos padrões (design patterns) utilizados para converter o modelo de negócios de uma aplicação, representado por objetos associados em memória por meio de relações como heranças, agregações e composições para registros de uma base de dados relacional. Ao final, escolhemos um padrão para ser utilizado ao longo do livro. O Capítulo 5 consiste da construção de uma série de classes que visam automa- tizar tarefas de visualização e controle. Nesse sentido, criaremos componentes para exibição de tabelas, janelas, painéis e também de diálogos de mensagem, além de abordarmos técnicas para o controle do fluxo de execução de uma aplicação. O Capítulo 6 é voltado para a construção de formulários e listagens. Nele, par- tremos para o desenvolvimento de um conjunto de classes para a construção de formulários e listagens por meio de diversos objetos que representam cada um dos elementos que os integram, como colunas, ações, combo-boxes, caixas de digitação e 18 Organização do livro 19 radio buttons. Dessa forma, poderemos trabalhar com entrada, visualização, edição e exclusão de registros de forma orientada a objetos. O Capítulo 7 apresenta o desenvolvimento de uma aplicação de negócios voltada à área de comércio. Esta aplicação será desenvolvida inteiramente por meio das classes criadas ao longo do livro, utilizando todos os conceitos vistos ao longo dos capítulos para solucionar problemas reais presentes no dia-a-dia do desenvolvimento de uma aplicação de negócios. Também iremos estudar soluções práticas voltadas a proble- mas pontuais como a distribuição da aplicação, internacionalização, manipulação de seções e web services. Capítulo 1 Introdução ao PHP A vida é uma peça de teatro que não permite ensoios.. Por isso, cante, rig, dance, chore e vivo intensamente cada momento de suo vida, antes que q cortina sc feche e a poça termino sem aplousos.. Charles Cnoplin Ao longo deste livro utilizaremos diversas funções, comandos e estruturas de con- trole básicos da linguagem PHP, que apresentaremos neste capítulo. Conheceremos as estruturas bá e iambém um icas da linguagem, suas variáveis e seus operador conjunto de funções para manipulação de arquivos, arrays, bancos de dados, entre outros. 1.10 que é 0 PHP? A linguagem de programação PHT, cujo logotipo vemos na Figura LI, foi criada no outono de 1994 por Rasmus Lerdort. No início era formada por um conjunto de seripts voltados à criação de páginas dinâmicas que Rasmus utilizava para monitorar o acesso ao seu currículo na internet. À medida que essa ferramenta foi crescendo em funcionalidades, Rasmus teve de escrever uma implementação em €, a qual permitia às pessoas desenvolverem de forma muito simples suas aplicações para web. Rasmus nomeou essa versão de PIP/FI (Personal Home Pages/Forms Interpreter) e decidiu disponibilizar seu código na web, em 1995, para compartilhar com outras pessoas, bem como receber ajuda e correção de bugs. Em novembro de 1997 foi lançada a segunda versão do PHP. Naquele momento, aproximadamente 50 mi domínios ou 1% da internet já utilizava PHP. No mesmo ano, Andi Gutmans e Zeev Suraski, dois estudantes que utilizavam PHP em um projeto acadêmico de comércio eletrônico, resolveram cooperar com Rasmus para 20 Capítulo 1 = Introdução ao PHP n aprimorar o PHP Para tanto, reescreveram todo o código-fonte, com base no PHP/FI2, dando início assim ao PHP 3, disponibilizado oficialmente em junho de 1998. Dentre as principais características do PHP 3 estavam a extensibilidade, a possibilidade de conexão com vários bancos de dados, novos protocolos, uma sintaxe mais consistente, suporte à orientação a objetos e uma nova APL que possibilitava a criação de novos módulos e que acabou por atrair vários desenvolvedores ao PHP No final de 1998, o PHP já estava presente em cerca de 10% dos domínios da internet, Nessa época o significado da sigla PHP mudou para PHP: Hypertext Preprocessor, retratando assim a nova realidade de uma linguagem com propósitos mais amplos. Figura 1.1 - Logo do PHP No inverno de 998, após o lançamento do PHP 3, Zeev e Andi começaram a trabalhar em uma reescrita do múcleo do PHP, tendo em vista melhorar sua perlor- mance e modularidade em aplica » Para tanto, resolveram batizar este núcleo de Zend Engine, ou Mecanismo Zend (Zeev + Andi.O PHP 4, baseado neste ões complex mecanismo, foi lançado oficialmente em maio de 2000, trazendo muitas melhorias ção de ve ser utilizado como linguagem para shell script. Nes recursos novos, como seções, suporte a diversos servidores web, além da abstra sua API, permitindo inclus e momento, o PHP já estava presente em cerca de 20% dos domínios da internet, além de ser utilizado por milhares de desenvolvedores ao redor do mundo. Apesar de todos os esforços, o PHP ainda necessitava maior suporte à orientação a objetos, tal qual existe em linguagens como C++ e Java. Tais recursos estão final- mente presentes no PHP 5, após um longo período de desenvolvimento que culminou com sua disponibilização oficial em julho de 2004, Ao longo do livro veremos esses recursos empregados em exemplos práticos. Fonte: PHP Group 1.2 Um programa PHP 1.2.1 Extensão de arquivos A forma mais comum de nomear programas em PHP é a seguinte: 2 PHP — Programando com Orientação a Objetos Extensão Significado «php Arquivo PHP contendo um programa. -Cass.php Arquivo PHP contendo uma classe. “inc. php Arquivo PHP a ser incluído, pode incluir constantes ou configurações. Entretanto, outras extensões podem ser encontradas principalmente em progra- mas antigos: Extensão — Significado .php3 Arquivo PHP contendo um programa PHP versão 3 .php4 Arquivo PHP contendo um programa PHP versão 4, «htm Arquivo PHP contendo um programa PII? e HTML na mesma página. 1.2.2 Delimitadores de código O código de um programa escrito em PHP deve estar contido entre os seguintes delimitadores: string(5) "Palio" [=> string(3) "Gol" Bl=> string(6) “Fiesta” Bl=> string(5) "Corsa" print r Imprime o conteúdo de uma variável de forma explanativa, assim como a var. dumpO, mas em um formato mais legível para o programador, com os conteúdos alinhados e suprimindo os tipos de dados. Exemplo: $vetor = array('Palio', 'Gol", "Fiesta", Corsa); print rCSvetor); 24 PHP . Programando com Orientação a Objetos ES Resultado: Array ( [0] => Palio [1] => Col 21 [3] => Corsa Fiesta 1.3 Variáveis Variáveis são identificadores utilizados para representar valores mutáveis e voláteis, que só existem durante a execução do programa. Elas são armazenadas na memória RAM e seu conteúdo é destruido após a execução do programa. Para criar uma va- riável em PHP precisamos atribuir-lhe um nome de identific dido pelo caractere cifrão (8). Veja os exemplos a seguir: ão, sempre pre E Resultado: da Silva, João Algumas dicas: «Nunca inicie a nomenclatura de variáveis com números. = Nunca utilize espaços em branco no meio do identificador da ve » Nunca utilize caracteres especia H% O ill; 4 )nanomenclatura das variáveis. = Evitecriar variáveis com mais de 15 caracteres em virtude da clareza do código- fonte. «Nomes de variáveis devem ser significativos e transmitir a idéia de seu conteúdo dentro do contexto no qual a variável e: á inserida, a Utilize preferencialmente palavras em minúsculo (separadas pelo caractere ou somente as primeiras letras em maiúsculo quando da ocorrência de mais palavras.
Até o momento nenhum comentário
Esta é apenas uma pré-visualização
3 mostrados em 580 páginas