Jude com POP

From COREPHP

Jump to: navigation, search

Com a biblioteca POP pode-se deixar de lado todas as questões de CRUD e criação de banco de dados, permitindo total autonomia ao analista em relação ao DBA.

Uma das melhores ferramentas disponíveis para modelagem é a Jude, que nos permite modelar todas nossas classes em UML e posteriormente exportar o código para Java.

Posteriormente à exportação, é possível modificar os objetos em Java para PHP sem maiores dificuldades, bastando para isso observar as regras básicas de criação de objetos POP.

Para isto, utilizaremos o mesmo exemplo dado para a biblioteca POP.

Imagem:ExemploPOP.png

Este gráfico visualizado aqui foi gerado pelo próprio Jude, utilizando o menu "Tool" >> "Export Image" >> "Save Diagram as PNG".

No mesmo menu "Tool", temos a opção "Export Java" que é a que utilizaremos agora.

Ao exportarmos todas nossas classes para Java, temos os serguintes arquivos gerados: Pessoa.java, PessoaFisica.java e Telefone.java.

Nossa primeira tarefa é renomear todos os arquivos para .php, assim teremos Pessoa.php, PessoaFisica.php e Telefone.php.

Agora iremos abrir o primeiro documento, Pessoa.php, com nosso editor PHP favorito. Como resultado teremos a seguinte declaração Java:

   public class Pessoa
   {
       protected char nome;
       protected Telefone[] telefone;
   }

Para converter este código para PHP, e mais especificamente, a declaração de uma classe POP, várias alterações serão feitas. A primeira delas é colocar os marcadores de tag PHP <? e ?>. Após isto feito devemos remover a declaração de visibilidade da classe PHP e definí-la como uma classe extendida da classe Persist da biblioteca POP. Posteriormente, mudamos todos os atributos para protected e retiramos a tipagem do java deles e acrescentamos o $ à frente do nome das variáveis. Retiramos também a tipagem que define a classe que poderá estar lá dentro. E por último declaramos o constructor para permitir o controle de tipagem pela POP, lembrando que ao final de sua declaração, o construtor da classe parent também deve ser chamado para herdar a tipagem. O resultado final será:

   <?
       class Pessoa extends Persist
       {
           protected $nome;
           protected $telefone;
   
           public function __construct()
           {
               $this->nome     = new PVarchar();
               $this->telefone = new PArrayOf("Telefone");
               
               parent::__construct();
           }
       }
   ?>

O objeto PessoaFisica não é muito diferente que o objeto Pessoa, mas ainda assim, em relação ao objeto Java, apresenta uma vantagem que é a tipagem para campos de Data. Assim, o objeto original Java:

   public class PessoaFisica extends Pessoa
   { 
       protected char cpf; 
       protected char nascimento;
   }

Ficará:

   <?
       class PessoaFisica extends Pessoa
       {
           protected $cpf; 
           protected $nascimento;
           
           public function __construct()
           {
               $this->cpf        = new PVarchar();
               $this->nascimento = new PDate();
               
               parent::__construct();
           }
       }
   ?>

Agora, o objeto Telefone já é um caso um pouco mais complexo. Note que na declaração ele é associado ao objeto Pessoa, e depende deste para existir. Assim, ele terá um atributo que o atrelará ao objeto Pessoa, que fará referência ao id do mesmo no banco de dados. Também é preciso declarar a classe pai que a contém no atributo array parent_classes. Telefone só existe porque Pessoa que tem Telefone(s) existe. A regra para declaração de associação para as filhas, pede que seja declarado um atributo do tipo inteiro com o nome id + _ + nome da classe pai. Então o objeto Telefone terá, obrigatoriamente, um atributo id_pessoa do tipo inteiro.

Em Java ele estará assim:

   public class Telefone
   { 
       protected char numero; 
       protected Pessoa pessoa; 
   }

Em PHP o mesmo ficará assim:

   <?
       class Telefone extends Persist
       {
           protected $parent_classes;
           
           protected $id_pessoa;
           protected $numero;
           
           public function __construct()
           {
               $this->parent_classes     = array("Pessoa");
               
               $this->id_pessoa          = new PInteger();
               $this->numero             = new PVarchar();
               
               parent::__construct();
           }
       }
   ?>

E isto finaliza nossa conversão e mini tutorial de como modelar com o Jude e converter para PHP com POP

This page was last modified on 14 July 2009, at 14:16. This page has been accessed 180 times.