RICARDO ISHIBASHI MOREIRA DE ALMEIDA UTILIZAÇÃO DE PADRÕES DE PROJETO NO DESENVOLVIMENTO DE APLICAÇÕES WEB COM PHP 5 RELATÓRIO FINAL DE ESTÁGIO - PDF
RICARDO ISHIBASHI MOREIRA DE ALMEIDA UTILIZAÇÃO DE PADRÕES DE PROJETO NO DESENVOLVIMENTO DE APLICAÇÕES WEB COM PHP 5 RELATÓRIO FINAL DE ESTÁGIO
Download "RICARDO ISHIBASHI MOREIRA DE ALMEIDA UTILIZAÇÃO DE PADRÕES DE PROJETO NO DESENVOLVIMENTO DE APLICAÇÕES WEB COM PHP 5 RELATÓRIO FINAL DE ESTÁGIO"
Stéphanie di Azevedo Alencastre
1 RICARDO ISHIBASHI MOREIRA DE ALMEIDA UTILIZAÇÃO DE PADRÕES DE PROJETO NO DESENVOLVIMENTO DE APLICAÇÕES WEB COM PHP 5 RELATÓRIO FINAL DE ESTÁGIO PALMAS 2004
2 2 RICARDO ISHIBASHI MOREIRA DE ALMEIDA UTILIZAÇÃO DE PADRÕES DE PROJETO NO DESENVOLVIMENTO DE APLICAÇÕES WEB COM PHP 5 Monografia apresentada como requisito parcial da disciplina Prática de Sistemas de Informação I (Estágio) do curso de Sistemas de Informação, coordenada pelo Prof. Fernando Luiz de Oliveira. PALMAS 2004
3 3 RICARDO ISHIBASHI MOREIRA DE ALMEIDA UTILIZAÇÃO DE PADRÕES DE PROJETO NO DESENVOLVIMENTO DE APLICAÇÕES WEB COM PHP 5 Monografia apresentada como requisito parcial da disciplina Prática de Sistemas de Informação I (Estágio) do curso de Sistemas de Informação, coordenada pelo Prof. Fernando Luiz de Oliveira. Aprovada em dezembro de BANCA EXAMINADORA Prof. Fernando L. Oliveira Centro Universitário Luterano de Palmas Prof. Ricardo Marx Costa Soares de Jesus Centro Universitário Luterano de Palmas Prof. Msc. Eduardo Leal Centro Universitário Luterano de Palmas PALMAS 2004
4 4 SUMÁRIO 1. INTRODUÇÃO REVISÃO DE LITERATURA PHP PHP e a Orientação a Objetos Construtores e Destrutores Herança Encapsulamento Propriedades Estáticas Interface Classes Abstratas Padrões de Projeto Conceito Motivos para se adotar Padrões de Projeto Padrões de Responsabilidade Singleton Padrões de Construção Abstract Factory Padrões de Operação Template Method Padrões de Extensão MATERIAL E MÉTODOS Local e Período Materiais Hardware Software Bibliografia Utilizada Métodos RESULTADOS E DISCUSSÃO Descrição da Aplicação: Ordem do Dia...30
5 Situações e Soluções Propostas Comunicação com o Banco de Dados Gerenciamento de Sessões de Usuário Redefinição de Usuários CONSIDERAÇÕES FINAIS Trabalhos futuros REFERÊNCIAS BIBLIOGRÁFICAS...41
6 6 LISTA DE FIGURAS Figura 1: Tecnologia server-side (MORGAN & PARK & CONVERSE, 2004)...12 Figura 2: Construtores e destrutores...14 Figura 3: Modelo de Herança...15 Figura 4: Herança...15 Figura 5: Encapsulamento...16 Figura 6: Propriedades Estáticas...17 Figura 7: Interface (DALL OGLIO, 2004)...18 Figura 8: Classes Abstratas...18 Figura 9: Singleton (DALL OGLIO, 2004)...22 Figura 10: Abstract Factory 1 (DALL OGLIO, 2004)...23 Figura 11: Abstract Factory 2 (DALL OGLIO, 2004)...24 Figura 12: Template Method (DALL OGLIO, 2004)...25 Figura 13: Singleton Implementação da classe conexao...32 Figura 14: Abstract Factory - Implementação da classe membro...33 Figura 15: Abstract Factory - Implementação da classe participantes...34 Figura 16: Abstract Factory - Implementação da classe Factory...35 Figura 17: Abstract Factory - Exemplo de Utilização...35 Figura 18: Template Method - Implementação da classe usuario...37 Figura 19: Template Method - Implementação das subclasses admin e funcionario...38
7 7 RESUMO Esse trabalho possui como foco a utilização de metodologias de desenvolvimento baseadas em Padrões de Projeto para o desenvolvimento de uma ferramenta voltada para a Web. A ferramenta a ser utilizada como estudo de caso é denominada Ordem do Dia, e tem por objetivo auxiliar a Assembléia Legislativa do Estado do Tocantins a organizar os documentos referentes à pauta de cada sessão parlamentar realizada na referida Instituição. Como um dos objetivos da Assembléia Legislativa é aumentar sua transparência para com a sociedade, definiu-se que a ferramenta seria desenvolvida para estar disponível via Web. Assim, optou-se por utilizar a linguagem de desenvolvimento Web PHP 5, que é Orientada a Objetos e com isso, proporciona maiores benefícios ao desenvolvimento. O objetivo desse trabalho é enfocar a utilização dos Padrões de Projeto juntamente com o paradigma da Orientação a Objetos no desenvolvimento da ferramenta Ordem do Dia e não a ferramenta propriamente dita. Por isto, a mesma não será apresentada integralmente, abordando apenas situações e partes do seu desenvolvimento que foram solucionadas com a utilização de Padrões de Projeto.
8 8 ABSTRACT This article focus the application of methodologies based on Design Patterns in the web tools development. It was based on a case study: the Ordem do Dia (Order of the Day) tool development. That tool supports the organization of the documentation that reports each Tocantins State Legislature parliamentary session. The tool also provides that documentation through the Web, so the Tocantins State Legislature will make them totally available to the people. It was implemented using PHP 5, so that, benefiting the project with all the advantages provided by that object oriented programming language. However, it is important to mention that the target is not the tool itself but the application of Design Patterns in the software development. So, the tool will not be integrally presented, but we will present situations and parts of its development where Design Patterns solutions were adopted successfully.
9 9 1. INTRODUÇÃO O cenário mundial, cada vez mais globalizado e competitivo, cria um ciclo vicioso que exige das organizações um constante investimento em tecnologia. Assim, qualquer micro empresa nos dias de hoje passa a se preocupar em ter pelo menos algum sistema que dê suporte a seus processos gerenciais, para que, assim, não corra o risco de ficar totalmente fora do mercado. Porém, com a quantidade e velocidade que as informações e as tecnologias surgem atualmente, os sistemas precisam ser cada vez mais robustos e ágeis para que possibilitem uma boa aquisição e gerência dessas informações. E, para que isso seja possível, é necessário construir softwares seguindo metodologias que permitam um desenvolvimento otimizado, e que minimize as falhas. Com esse cenário, aplicam-se os Padrões de Projeto, que se tornam uma alternativa para solucionar esse problema. Nesse contexto, onde as informações são cada vez mais volumosas e rápidas, estar ligado a Internet tornou-se um fator de extrema importância para uma organização. Junto com essa necessidade cresce a importância das linguagens voltadas para o desenvolvimento de ferramentas para Internet. Esse desenvolvimento vem acontecendo com o surgimento de linguagens cada vez mais confiáveis. O PHP 5 é uma destas linguagens que visa o desenvolvimento Web que, a cada versão, foi se aprimorando e agregando suporte ao Paradigma da Orientação a Objetos. Aliado a esse paradigma, acrescenta-se, metodologias de Padrões de Projeto associadas, o que traz para o ambiente de desenvolvimento avanços significativos na área de desenvolvimentos de ferramentas Web. A Assembléia Legislativa do Estado do Tocantins, como uma instituição pública, tem o dever de deixar a sociedade bem informada sobre todas as decisões tomadas pelos seus parlamentares e, portanto, necessita que suas informações sejam trabalhadas de uma
10 10 forma transparente e com agilidade. Buscando esse propósito, a Assembléia Legislativa do Estado do Tocantins propôs uma reformulação em dois dos sistemas existentes na Instituição. O primeiro refere-se à reformulação do seu website e o outro se refere ao sistema Ordem do Dia. Esse trabalho utilizará o sistema Ordem do Dia como estudo de caso. Porém, não apresentará o seu desenvolvimento em detalhes. O objetivo se concentra em usar Padrões de Projeto, implementados em PHP 5, como possíveis soluções para determinadas situações detectadas durante o desenvolvimento do sistema Ordem do Dia, buscando sempre otimizar o código, aproveitando as características advindas e proporcionadas pela Programação Orientada a Objetos. Esse trabalho está assim organizado: a seção 2 trata da fundamentação teórica deste trabalho, abordando os conceitos da linguagem de desenvolvimento Web PHP5, além dos conceitos da metodologia de Padrões de Projeto. A seção 3 trata dos tipos de fontes de pesquisas e dos recursos utilizados para realização deste trabalho. A seção 4 aborda os resultados e discussão, gerados por esse trabalho a partir do estudo de caso do desenvolvimento do sistema Ordem do Dia. A seção 5 contém as conclusões e considerações finais do trabalho. E por fim, a seção 6 aborda as referências bibliográficas utilizadas para o desenvolvimento desse trabalho.
11 11 2. REVISÃO DE LITERATURA Esta seção apresenta os conceitos necessários para a fundamentação e para o desenvolvimento deste trabalho. Para tanto, será abordada a linguagem de programação Web PHP 5, verificando a sua adequação ao paradigma da Orientação a Objetos. Na seqüência serão abordados alguns padrões de projetos que auxiliam o desenvolvimento de software, sendo esses descritos e exemplificados, de acordo com a necessidade para o desenvolvimento do trabalho. 2.1 PHP 5 O PHP é uma linguagem voltada para o desenvolvimento Web, que foi desenvolvida para trabalhar em conformidade com a estrutura cliente-servidor. Nessa estrutura, o servidor é o responsável por interpretar os scripts que compõem o documento solicitado, transformá-los em código HTML (HyperText Markup Language) e enviar o resultado ao cliente, que fez a solicitação. Dessa forma, O PHP permite a criação de sites Web dinâmicos com a utilização de consultas a Banco de Dados, controle de cookies e váriáveis de seção, dentre muitos outros recursos. A figura a seguir de MORGAN & PARK & CONVERSE (2004) ilustra o funcionamento da tecnologia server-side.
12 12 Figura 1: Tecnologia server-side (MORGAN & PARK & CONVERSE, 2004) O PHP vem demonstrando ao longo de suas versões um grande amadurecimento como linguagem de programação, e no decorrer do tempo veio agregando características de Orientação a Objetos (OO). Na sua versão 4 já era possível utilizar vários destes recursos, mas somente em sua versão 5 é que o PHP se aproximou mais de uma linguagem OO, oferecendo suporte às principais características desse paradigma, porém, sem deixar de dar suporte aos scripts escritos nas suas versões anteriores. Os conceitos e o suporte a OO pelo PHP serão discutidos com mais detalhes nas seções seguintes PHP e a Orientação a Objetos Seguindo a vertente adotada pela maior parte das linguagens de programação, o PHP aos poucos foi agregando os conceitos da Orientação a Objetos. Esta adequação culminou no desenvolvimento da versão 5, que engloba a maior parte destes conceitos. Essa adequação possibilitou aos desenvolvedores usufruir das principais vantagens advindas com a OO no processo de desenvolvimento de aplicações, tais como reutilização de código, métodos construtores e destrutores, herança, encapsulamento.
13 13 Dessa forma, a camada de negócios de uma aplicação Web passa a ser trabalhada tal como seria desenvolvida em um aplicativo desktop, se apoiando em padrões de desenvolvimento que facilitem a manutenção e a reusabilidade de código. As seções seguintes abordam os conceitos implementados pela linguagem PHP, os quais serão descritos e exemplificados Construtores e Destrutores Segundo LINDEN (1997), um construtor é um tipo de método especial que inicializa um objeto. LINDEN (1997) afirma ainda que a necessidade do construtor se faz porque apenas os membros da mesma classe conseguem acessar dados cujo escopo seja limitado (dados geralmente do tipo private ou protected), não permitindo acesso externo. Por essa razão existe a necessidade de uma função com privilégios dentro da classe para preencher os valores iniciais dos dados de um objeto recém-criado. Já os destrutores são métodos que alertam o sistema quando um objeto chegou ao fim de sua execução. Eles são, portanto, o oposto dos contrutores, pois ao invés de inicializar um objeto, os destrutores desalocam o objeto. A versão anterior do PHP já dispunha de construtores, porém não de destrutores de objetos. O construtor era definido especificando um método com o mesmo nome da classe. Porém, a partir da versão 5, o PHP passou a dispor de dois métodos para implementar estas propriedades ( construct() e destruct()), os quais são executados no momento da construção e destruição de um objeto. A seguir será apresentado o código em PHP que corresponde à implementação destas propriedades.
14 14 class usuario { Function construct() { //construtor new usuario Function destruct() { //destrutor Figura 2: Construtores e destrutores Herança Herança é uma forma de reutilização de software em que novas classes são criadas a partir de classes existentes, absorvendo seus atributos e comportamentos e sofisticando-os com capacidades que as novas classes exigem (DEITEL, 2001). O conceito de herança é outra novidade do PHP 5 que não estava presente nas versões anteriores da linguagem. O PHP 5 implementa a herança chamando o método construtor da classe herdada (classe pai) no interior do construtor da classe herdante (classe filha). A figura a seguir apresenta um exemplo de herança, onde a classe Automóvel é a classe pai e possui as classes Moto, Carro e Ônibus como classes filhas.
15 15 Automóvel roda combustivel construct() Moto Carro Onibus Figura 3: Modelo de Herança A seguir é apresentado o código em PHP que representa um exemplo de implementação da figura acima. class automovel{ $roda; $combustivel; Function construct(){ //contruindo classe automovel class carro extends automovel{ Function construct(){ parent:: construct(); //Chama construtor do pai $roda = 4; $combustivel = gasolina; class moto extends automovel{ Function construct(){ parent:: construct(); //Chama construtor do pai $roda = 2; $combustivel = gasolina; class onibus extends automovel{ Function construct(){ parent:: construct(); //Chama construtor do pai $roda = 6; $combustivel = diesel; Figura 4: Herança
16 Encapsulamento Segundo LINDEN (1997), encapsulamento é a maneira de se associar os dados e as operações executadas neles de forma organizada, especificando claramente quais delas podem ser executadas em quais objetos. O PHP 5 introduziu os operadores de encapsulamento Public, Protected e Private para que se possa garantir quem terá acesso ou não a cada um dos objetos de uma classe. Cada operador de encapsulamento tem suas características, as quais serão apresentadas a seguir: Public: permite acesso irrestrito ao objeto; Protected: permite que apenas objetos da mesma classe e de suas classes filhas acessem o objeto desse tipo; Private: apenas objetos da mesma classe podem acessar um objeto Private. Com o intuito de manter a compatibilidade com as versões anteriores do PHP, se não for especificado nenhum operador de encapsulamento, o PHP entenderá como sendo do tipo Public. O código a seguir apresenta um exemplo de implementação deste conceito no PHP 5. class usuario{ protected $nome; protected function getidade(){ Return $this->idade; class funcionario extends usuario{ function maiordeidade(){ if(usuario::getidade()>=18){ return true; else{ return false; function getnome(){ return $this->nome; Figura 5: Encapsulamento
17 Propriedades Estáticas Segundo LINDEN (1997), um item estático é alguma coisa em uma classe que ocorre apenas uma vez, ao invés de ocorrer uma vez em cada instância da classe. Em sua versão 4, o PHP já permitia fazer chamada a métodos estáticos, ou seja, executar um método sem instanciar uma classe (DALL OGLIO, 2004). Porém, o PHP 5 ampliou a aplicação deste conceito, acrescentando esta propriedade aos atibutos de classe. class funcionario { static $salario=1; function getsalario() { return funcionario::$salario; static function getempresa() { return Empresa do Fulano S.A ; Figura 6: Propriedades Estáticas Interface Interface define um conjunto de funções que devem, obrigatoriamente, ser implementadas por uma classe. Na figura 7, que foi baseada em DALL OGLIO (2004), a interface Automovel define a função Ligar que deve ser, obrigatoriamente, implementada pela classe Palio.
18 18 interface Automovel { public function Ligar(); class Palio implements Automovel { public function Ligar() { //classe obrigatória Figura 7: Interface (DALL OGLIO, 2004) Classes Abstratas Uma classe abstrata é uma classe que não é concebida para criar instâncias. Seu propósito é servir como uma superclasse para outras classes (BARNES, 2004). Uma classe abstrata não pode conter instâncias diretas, podendo apenas ser herdada. O código abaixo exemplifica a utilização de uma classe abstrata no PHP 5. abstract class Automovel { //Classe abstrata class Fiat extends Automovel { //classe Fiat subclasse de Automovel $Palio = new Fiat; Figura 8: Classes Abstratas No exemplo da figura 8 a classe Fiat é uma subclasse de Automóvel que se trata de uma classe abstrata. Ao inicializar a variável Palio, deve-se instanciar a classe Fiat, pois a classe Automovel, por ser abstrata, não pode ser instanciada.
19 Padrões de Projeto Conceito Padrões de Projeto, também conhecido como Design Patterns, têm como objetivo encontrar métodos eficazes de se atingir um objetivo, ou resolver problemas (METSKER, 2004). Para tanto, podem-se aplicar padrões tanto na área de desenvolvimento de software, como também a qualquer meio onde se tenha um problema a ser solucionado. Erich Gamma, Richard Helm, Ralph Jonhson e John Vlissides, foram os precursores do movimento de Padrões de Projeto na área da Computação com o lançamento do livro "Design Patterns: Elements of Reusable Object-Oriented Software". Porém, a partir destes, inúmeros outros surgiram e estão surgindo para resolver os mais variados problemas. Problemas estes que são classificados em diversas formas. Por exemplo, em GAMMA (2000), são apresentados vinte e três (23) padrões, classificados em 3 categorias: Criacional, Estrutural e Comportamental. Já em METSKER (2004), são apresentados diversos padrões, os quais estão classificados em: Interface, Responsabilidade, Construção, Operação e Extensão. Este trabalho irá utilizar esta segunda vertente, porém, não irá abordar padrões de todas as categorias, se restringindo a alguns que serão úteis para o desenvolvimento do mesmo Motivos para se adotar Padrões de Projeto A utilização de Padrões de Projeto proporciona vários benefícios, onde ALUR & CRUPI & MALKS (2001) e ARRINGTON (2001), destacam: Alavancar o uso de uma solução comprovada: após comprovado o sucesso de um padrão, este pode ser reutilizado em tantos outros projetos futuros quantos forem necessários, prevenindo redundâncias comuns em projetos de software;
20 20 Prover um vocabulário comum: geralmente um projeto de software é desenvolvido por uma equipe e a comunicação é um fator crucial para o sucesso deste projeto. Padrões de projeto podem otimizar a comunicação entre a equipe, melhorar a troca de idéias e aumentar o nível de abstração, resultando em uma diminuição do risco de interpretaçõe errôneas; Restringir o domínio da solução: Padrões de Projeto evitam o emprego de soluções muito sobrecarregadas, levando o projeto a um caminho de soluções mais simples e rápidas; Facilidade de uso: desde o início do movimento existe um grande esforço para promover a documentação dos padrões criados, englobando as mais diversas áreas de aplicação, assim como um esforço para tornar essa documentação acessível; Reforçar a teoria OO: a prática demonstrou que a teoria OO não é facilmente assimilável para a maioria das pessoas. No entanto, por trabalhar com um universo bem delimitado, os padrões de projeto desenvolvidos segundo os conceitos da OO, tornam-se excelentes estudos de casos sobre a Orientação a Objetos Padrões de Responsabilidade Os padrões que compõem esta categoria são implementados como objetos que delegam tarefas vindas de um ambiente externo para outros objetos ou para uma unidade central. Uma boa maneira de se controlar a responsabilidade de cada objeto do sistema é utilizar nomes adequados e que indiquem exatamente o que eles fazem. A utilização de padrões de responsabilidade é uma boa maneira para se aplicar encapsulamento no sistema. Os padrões orientados a responsabilidade endereçam contextos nos quais precisamos nos desviar da regra normal de que a responsabilidade deveria ser distribuída tanto quanto possível (METSKER, 2004).
21 21 Existem diversos padrões de responsabilidade, cada qual com sua característica e aplicação. METSKER (2004) destaca os seguintes padrões: Singleton: centraliza a responsabilidade em uma única instância de uma classe; Observer: define uma dependência, de modo que quando um objeto mudar de estado, todos os seus dependentes sejam modificados e atualizados automaticamente; Mediator: centraliza a responsabilidade em uma classe responsável por supervisionar como um conjunto de outros objetos; Proxy: deixa um objeto agir em benefício de outro objeto; Chain of Responsibility: permite que uma solicitação percorra uma cadeia de objetos até que um desses objetos lide com ela; Flyweight: centraliza a responsabilidade em objetos compartilhados. Neste trabalho não serão discutidos todos os tipos de padrões, mas apenas alguns que se mostram úteis ao projeto deste estágio. Dos padrões de responsabilidade citados acima, será detalhado na próxima seção apenas o padrão Singleton Singleton O padrão Singleton caracteriza-se por centralizar a responsabilidade em uma única instância de uma classe. Assim, segundo METSKER (2004), utiliza-se Singleton quando se precisa garantir que uma classe só tenha uma instância e que forneça um ponto global de acesso a ela. A intenção do padrão Singleton sugere que um objeto específico carrega uma responsabilidade da qual outros objetos dependem (METSKER, 2004). No PHP, o padrão Singleton pode ser implementado associando os conceitos de propriedades estáticas a um método qualquer, que no caso da Figura 9 foi definido um para
22 retornar uma instância da conexão a um Banco de Dados. A figura a seguir de DALL OGLIO (2004), apresenta essa situação. 22 class conexao { private static $instancia = null; private function construct() { public static function RetornaInstancia(){ if(self::$instancia == null){ self::$instancia = new conexao; return self::$instancia; Figura 9: Singleton (DALL OGLIO, 2004) Padrões de Construção Segundo METSKER (2004), os padrões orientados para construção permitem a construção de um novo objeto mediante outros meios que não a chamada de um método construtor de classes. METSKER (2004) destaca os seguintes padrões de construção: Builder: Reúne informações para um objeto gradualmente, antes de solicitar sua construção; Factory Method: Posterga a decisão de qual classe instanciar; Abstract Factory: Constrói uma família de objetos que compartilhem uma característica; Prototype: Especifica um objeto a criar a partir de um exemplo existente; Memento: Reconstrói um objeto a partir de uma versão inativa que contenha apenas o estado interno do objeto. A seguir será discutido o Padrão de Construção Abstract Factory Abstract Factory
23 23 A intenção do padrão Abstract Factory é proporcionar a criação de uma família de objetos relacionados ou dependentes (METSKER, 2004). Este padrão atua centralizando a criação dos objetos de maneira a facilitar e padronizar a manutenção do código. A seguir é apresentado um exemplo de implementação em PHP para o padrão Abstract Factory retirado de DALL OGLIO (2004). # Classe Cliente Class Cliente{ function Cliente(){ echo "cliente...\n"; # Classe Fornecedor class Fornecedor{ function Fornecedor(){ echo "fornecedor...\n"; Figura 10: Abstract Factory 1 (DALL OGLIO, 2004) Na figura 10 são criadas as classes Cliente e Fornecedor, porém, verifica-se que em nenhuma delas há a presença de um construtor, pois como dito anteriormente, no Abstract Factory, a criação dos objetos é feita em uma classe centralizadora. Neste exemplo a classe centralizadora será a classe Factory que é apresentada na figura 11.
24 24 # Classe Fábrica de Objetos Class Factory { function CriarCliente($nome) { return new Cliente($nome); function CriarFornecedor($nome) { return new Fornecedor($nome); # Cria objeto Factory $Fabrica = new Factory; # Cria instancias de objetos. $Joao = $Fabrica->CriarCliente('joao'); $Jose = $Fabrica->CriarFornecedor('jose'); # Exibe resultado var_dump($joao); var_dump($jose); Figura 11: Abstract Factory 2 (DALL OGLIO, 2004) Padrões de Operação Os padrões orientados à operação tratam de contextos em que precisamos de mais de um método, geralmente com a mesma assinatura, para participar de um Projeto (METSKER, 2004). METSKER (2004) afirma ainda que classes diferentes podem implementar uma operação de maneira diferente, caracterizando o polimorfismo. Dentre os padrões orientados a operação, destacam-se: Template Method: implementa um algoritmo em um método, postergando a definição de alguns passos do algoritmo para que as subclasses possam redefini-los; State: Distribui uma operação de modo que cada classe represente um estado diferente;
25 25 Strategy: Encapsula uma operação, tornando as implementações intercambiáveis; Command: Encapsula uma chamada de método em um objeto; Interpreter: Distribui uma operação para que cada implementação se aplique a um tipo diferente de composição. A seguir será discutido o Padrão de Operação Template Method Template Method O Template Method é um padrão onde as subclasses podem redefinir o comportamento das classes sem alterar sua estrutura. As partes invariantes são implementadas na superclasse e as variantes são customizadas na subclasse. DALL OGLIO (2004), com o exemplo a seguir, ilustra a implementação de uma classe abstrata Casa, onde o próprio método construtor é o Template Method. # Classe abstrata Casa abstract class Casa{ #Método Construtor public final function Casa(){ print "Template::Construção\n"; // Chama métodos específicos $this->eletricidade(); $this->garagem(); // declara método como obrigatório protected abstract function Eletricidade(); // método opcional protected function Garagem() { # SubClasse MinhaCasa class MinhaCasa extends Casa{ // Método Instalação Elétrica protected function Eletricidade(){ print "Concreta::Eletricidade\n"; // Método Constrói Garagem protected function Garagem(){ print "Concreta::Garagem\n"; # Cria nova instância de MinhaCasa. $a = new MinhaCasa; Figura 12: Template Method (DALL OGLIO, 2004)
26 No exemplo da figura 12 a subclasse MinhaCasa redefine os métodos Eletricidade e Garagem da sua super classe Padrões de Extensão Os padrões orientados à extensão tratam de contextos nos quais precisamos acrescentar comportamento específico para uma coleção de objetos ou acrescentar novos comportamentos a um objeto sem alterar sua classe (METSKER, 2004). Ainda de acordo com METSKER (2004), tem-se os seguintes padrões que implementam Extensão: Template Method: permite a inserção de uma operação dentro de um algoritmo; Command: permite a implementação de uma nova operação que executa em resposta a um evento; Decorator: anexa responsabilidades adicionais a um objeto dinamicamente; Iterator: Fornece um meio de acessar uma coleção de instâncias de uma classe criada; Visitor: permite o acréscimo de novas operações em uma classe, sem alterá-la. Não será discutido nenhum Padrão de Extensão neste capítulo, pois já foi discutido no capítulo anterior o padrão Template Method que também é considerado um Padrão de Extensão.
27 27 3. MATERIAL E MÉTODOS Este trabalho foi realizado com o auxílio de materiais bibliográficos, apoiado por recursos de software e hardware que, juntamente com metodologias e orientação, tornaram possível a realização do mesmo. 3.1 Local e Período O desenvolvimento desse trabalho se deu no segundo semestre do ano de 2004 como parte da disciplina Prática em Sistemas de Informação I. Para tanto, o mesmo foi desenvolvido basicamente no setor de desenvolvimento de softwares da Assembléia Legislativa do Estado do Tocantins. 3.2 Materiais Os materiais utilizados para o desenvolvimento deste trabalho são em sua maioria patrimônio da Assembléia Legislativa do Estado do Tocantins, tendo também alguns recursos pessoais agregados para o auxílio no desenvolvimento Hardware Atlhon 1.4Ghz, 512Mb de RAM (Computador pessoal); Athlon XP 1.8Ghz, 256Mb de RAM (Recurso da Assembléia); Pentium IV 2.4Ghz, 768Mb de RAM (Recurso da Assembléia).
28 Software Microsoft Windows XP Professional; Microsoft Office XP Professional; Macromedia Dreamweaver MX; Macromedia Fireworks MX; Internet Explorer 6.0; Adobe Acrobat Reader 6.0; Microsoft SQLServer 2000; Rational Rose Bibliografia Utilizada Livros; Sites diversos; Artigos técnicos; Artigos científicos; Trabalhos de Conclusão de Curso. 3.3 Métodos Foram feitos levantamentos bibliográficos sobre Padrões de Projetos. A partir da identificação da popularidade e fácil usabilidade da linguagem PHP, entre as demais existentes, foram levantadas as características básicas da linguagem, bem como seu suporte à Orientação a Objetos. Foram encontradas situações onde a aplicação das metodologias de Padrões de Projeto juntamente com a linguagem PHP 5 se mostraram eficazes para a solução de tais problemas.
29 29 4. RESULTADOS E DISCUSSÃO Com a crescente globalização e o crescimento da Internet, as organizações percebem cada vez mais a necessidade de um modelo de negócios que lhe permita comunicar e estar inseridas dentro desse novo mundo virtual. Com esse novo cenário, as aplicações desktop tendem cada vez mais a serem integradas, ou até mesmo substituídas por versões para Web. Tal cenário também traz a necessidade de que novas tecnologias surjam para dar suporte ao crescimento acelerado da Web. O PHP 5 aparece como uma ferramenta preparada para atender essas necessidades e vem demonstrando um grande amadurecimento enquanto linguagem, mostrando que a Web está cada vez mais ganhando espaço, deixando de ser considerada como fator secundário nas tecnologias. Esse amadurecimento possibilita que se aplique em ferramentas Web conceitos e metodologias particulares ao desenvolvimento desktop. Outra característica decorrente desta situação trata da evolução das linguagens de desenvolvimento Web, que estão buscando agregar teorias mais consolidadas e que podem proporcionar vantagens no desenvolvimento de software, tal como ocorreu com a adequação da maior parte das linguagens com a Orientação a Objetos. Em decorrência disto, muito do que foi desenvolvido baseado na POO passa a ser utilizado no desenvolvimento de sistemas Web, tal como ocorre com muitos dos Padrões de Projeto existentes e disponibilizados para auxiliar na construção mais eficiente de sistemas computacionais. Para aplicar os conhecimentos adquiridos por esse trabalho, bem como verificar a validade das vantagens acima citadas, optou-se pelo desenvolvimento de um sistema, denominado Ordem do Dia, para a Assembléia Legislativa do Estado do Tocantins, no qual serão aplicados alguns Padrões de Projeto, assim como a utilização da linguagem PHP 5 para o seu desenvolvimento. O objetivo do referido sistema é possibilitar à Assembléia Legislativa mecanismos para organizar os documentos referentes às sessões ordinárias e