segunda-feira, 19 de novembro de 2012

Padrões para Web Semântica


Os padrões de projetos foram projetados pelas linguagens orientadas à objetos para fornecer  um vocabulário de projetos comuns, a ajuda de uma documentação e aprendizagem, e  o apoio à reorganização de software. Da mesma forma para a nomeação e catalogação de algoritmos e estruturas de dados por cientistas da computação, padrões de projeto são utilizados por engenheiros de software para se comunicar,
documentar e explorar alternativas de projeto usando um vocabulário de projetos comuns, ou um padrão de projetos por catálogo e também diminuir a complexidade do desenvolvimento e compreensão de software
sistemas. Além disso, os padrões de projeto oferecem soluções para problemas comuns, ajudando por exemplo um novato "agir" mais como um especialista e facilitar a engenharia reversa de sistemas existentes.
Abaixo exemplos de Padrões de Projetos para Web Semântica:

Padrão de Relações Inversion Relations
Intenção Permite definir inversas cujo alcance é restrito a determinado conceitos.
Também conhecido como relação inversa Restrita.
Motivação - Muitas vezes, a definição de inversas globais é muito genérica e rendimentos realizam excessivamente inferências gerais. Por exemplo, pode-se ter definições de ontologia que cada filme é um show em um teatro e cada jogo é dado em um teatro e em eventos com o host do teatro. Agora, o inverso local do host é mostrado e é limitada a faixa do filme e o inverso local do host é dado é restrito à série de reprodução.
A inversa global pode levar a conseqüências indesejáveis. Por esta razão este padrão permite a definição de propriedades inversas restringindo seu domínio e conceitos alcance.



segunda-feira, 5 de novembro de 2012

Serviços para a Web Semântica

O objetivo da Arquitetura da Web Semântica é fornecer uma representação do conhecimento de dados ligados de modo a permitir o processamento da máquina em uma escala global. A W3C desenvolveu uma nova geração de linguagens de marcação padrão aberto que agora estão prontos para liberar mais funcionalidades, flexibilidade e acima de tudo, a lógica da próxima geração Web, abrindo a porta para a próxima geração dos Web Services.

Atualmente os serviços da Web que usam a rede J2EE e frameworks estão se esforçando para expandir contra as limitações da arquitetura da Web existente e suas normas de propriedade. Serviços Web Semântica oferecem um grande salto no desenvolvimento, o desenvolvedor pode explorar com sucesso seu potencial  para entregar aplicações com busca semântica, e-mail coletivo e de processamento de texto colaborativo na web por exemplo.

Por que precisamos de um sistema deste tipo? Hoje em dia, é dificil  de manipular os dados disponíveis na HyperText Markup Language (HTML), basta pensar informações sobre os horários de avião, estatísticas de futebol, e informações de compra de um produto. Embora atualmente disponível em inúmeros sites, usando os dados em sua forma HTML o mesmo é problemático, mesmo se utilizado eXtensible Markup Language (XML). A Web Semântica oferece uma maneira mais fácil de publicar os dados que podem ser acessados e re-postos como necessários.

Dos serviços de Web Semântica postados aqui como, aplicações com busca semântica, e-mail coletivo e de processamento de texto colaborativo na web podemos citar a relevância de um sistema de busca de um site de compras por exemplo, ao usuário digitar o produto desejado a utilização de web semântica torna o resultado mais eficiente, pois retorna ao usuário uma busca mais eficaz a sua necessidade.




Abaixo a imagem de uma tela de uma aplicação Java que processa OWL através de um WebServices onde acrescentei uma funcionalidade de busca de filhos:


sábado, 20 de outubro de 2012

Lógica e Inferência com Protégé utilizando Pellet


Pellet é um OWL DL reasoner (raciocinador OWL DL) é open-source e baseado em Java, o Pellet atua basicamente como um raciocinador lógico, tem como objetivo, verificar a consistência de ontologias, classificar a taxonomia, verificar vínculos e responder a um subconjunto de consultas RDQL (conhecidas como consultas ABOX em  terminologia DL) é baseado nos algoritmos tableaux desenvolvido para Lógica Descritiva Expressiva. Ele suporta a expressividade completa OWL DL incluindo raciocínio sobre nominais (classes enumerados). 

Características especiais

Pellet tem uma série de características ou orientados por requisitos OWL ou questões da Web Semântica.

Análise e Reparação de Ontologias - OWL  possui dois dialetos principais, OWL DL e OWL Full, com OWL DL sendo um subconjunto de OWL Full. Todas as bases de conhecimento OWL são codificados como RDF / XML. OWL DL impõe uma série de restrições sobre grafos RDF, alguns dos quais são substanciais (por exemplo, que o conjunto de nomes de classe e individuais ser disjuntos) e outros menos (que cada item tem um rdf: tipo triplo). Garantir que um documento RDF / XML atende a todas as restrições é uma tarefa relativamente difícil para os autores, e muitos documentos OWL existentes são nominalmente OWL Full, mesmo que seus autores pretendem que eles sejam OWL DL. Pellet incorpora uma série de heurística para detectar "DLizable" OWL documentos completos "reparação" deles.

Vinculação em Web Semântica, vinculação é um ponto chave e o Pellet possui suporte a vinculação para satisfazer melhor as necessidades de seus usuários.

Raciocina Multi-Ontologias usando E-Connections - Uma E-Connection é uma linguagem de representação do conhecimento definida como uma combinação de outros formalismos lógicos. E-Connection são usadas como uma linguagem para definir e instanciar combinações de ontologias OWL-DL como uma forma de KBs combinando, ao invés de lógicas. Esta abordagem fornece uma alternativa para importações owl, pois sempre trará todas as axiomas da ontologia importada, permitindo a identificação das sub-partes de uma ontologia, proporcionando um quadro bem fundado e lógica de raciocínio com ontologias múltiplas. 

segunda-feira, 8 de outubro de 2012

Ontologias

Introdução

As Ontologias tem como objetivo a estruturação organizada de informações sobre algo, causando uma reflexão semântica de situações do mundo real.

Onde são utilizadas?
Em inteligência artificial, web semântica, engenharia de software e arquitetura da informação e outras áreas de informática.

Ontologias geralmente descrevem, Indivíduos - que são os objetos básicos; Classes - que são conjuntos, coleções ou tipos de objetos; Atributos - que são propriedades, características ou parâmetros que os objetos podem ter e compartilhar ou Relacionamentos - que são as formas como os objetos podem se relacionar com outros objetos.

OntoNegli - Uma ontologia no domínio das doenças negligenciadas
Domínio que a ontologia cobrirá: abrangerá o domínio das doenças negligenciadas; 
Definição do uso da ontologia: será utilizada por médicos ou profissionais da área da saúde para o compartilhamento do conhecimento estruturado na ontologia; 
Profissional que ficará responsável pela  manutenção  da ontologia: deverá ser um profissional que esteja devidamente capacitado. 

Na criação da OntoNegli, os termos tidos como os mais importantes foram: paciente, doença negligenciada, dengue, tuberculose, esquistossomose, leishmaniose, hanseníase, malária, doença de Chagas, sintomas, tratamento, agente etiológico, vetor, reservatório, período de transmissibilidade, imunidade, período de incubação, região, nome, bairro, município, estado, fase de doença, foco, modo de transmissão, período de transmissão, diagnóstico diferencial, exame, dentre  outros. A importância dos termos foi considerada mediante o domínio a ser representado e as necessidades apontadas pelo especialista. 

Classes e Hierarquia de Classes Uma vez estabelecidos os termos mais importantes, o próximo passo foi transfomá-los em classes. Esta etapa foi realizada basicamente em 2 passos: inicialmente foram definidas as classes de maior abrangência e, em seguida, suas subclasses. No entanto, não foi possível seguir um roteiro rígido nesta definição, pois houve casos que após definir uma classe, necessitou-se criar uma superclasse para a classe já existente. A definição de classes e subclasses é uma etapa que sofre alterações e exige correções constantes no decorrer da modelagem. Demanda conhecimento da ferramenta e do domínio de conhecimento. A aquisição do conhecimento foi intensa até a definição das classes e, apesar de reduzir o volume de aquisição, ainda assim, foi persistente durante todo o restante do desenvolvimento da OntoNegli. 

Uschold e Gruninger (1996) definiram enfoques  no desenvolvimento de hierarquia, sendo eles o processo  top-down, o  bottom-up  e um processo de desenvolvimento formado pela combinação entre os dois  anteriores. Uma vez que o domínio da ontologia é doenças negligenciadas e o foco principal é as doenças, os conceitos que receberam maior importância foram concretizados em classes e subsequentemente em subclasses. Para exemplificar, tem-se a doença dengue que é uma especialização da classe doença e que possui a subclasse febre hemorrágica dengue (FHD) e dengue clássico (DC). A Figura abaixo ilustra a classe e a subclasse da doença dengue. Por meio da enfermidade dengue, pode-se ilustrar que a ontologia criada utilizou os dois processos de desenvolvimento, o  top-down  e  botton-up. Ao criar a classe dengue, houve a necessidade de criar suas subclasses, as quais receberam o nome de FHD e DC. Esta ação caracterizou o processo  top-down,  pois primeiro foi criada a superclasse Dengue e, posteriormente, foram criadas as subclasses filhas (FHD e DC). Ao criar a nova classe de doença Tuberculose, observou-se que novas classes de doenças deveriam ser adicionadas e que essas necessitariam de uma classe mais genérica, a qual posteriormente foi criada e denominada de Doença, caracterizando, assim, o processo  botton-up. A Figura abaixo ilustra o exemplo dado. 


   Classe e Subclasses da Doença Dengue (top-down) 


 Classe Doença e Subclasses mais Especializadas de Doenças (botton-up)



Na ferramenta Protégé, uma nova ontologia contém uma classe chamada  owl:Thing. 
As classes OWL são interpretadas como conjuntos de indivíduos (ou conjunto de objetos). A classe owl:Thing é a classe que  representa o conjunto que contém todos os indivíduos, uma vez que todas as classes são subclasses de owl:Thing  (Horridge  et al., 2005). A Figura abaixo, gerada com recursos da ferramenta Protégé,  apresenta a classe  owl:Thing  com as demais classes e subclasses da OntoNegli. Ainda nesta figura são apresentadas todas as classes de doenças presentes na ontologia. Embora a ontologia tenha o foco em doenças negligenciadas, foi necessário criar classes e instanciar objetos de doenças não negligenciadas para que fosse possível realizar o levantamento de diagnóstico diferencial e, assim, identificar quais  são as outras doenças que possuem os mesmos sintomas, possibilitando assim novas investigações ou descarte de suspeita para alguma enfermidade. A OntoNegli não cobriu  todas as doenças que são apresentadas na Figura abaixo, pois este trabalho está limitado ao domínio de doenças negligenciadas. 

Completa Hierarquia de Classes da OntoNegli 

A partir da classe  owl:Thing, as demais classes foram criadas, representando os principais conceitos do domínio das doenças negligenciadas. A seguir são descritas as principais classes da OntoNegli: 

  • Agente_etiológico: Representa o agente causador de uma doença; 
  • Bairro: Representa o bairro de cada município;  
  • Doença: É a superclasse para todas as doenças. Esta classe possui um maior número de propriedades e atributos. Possui especializações e diversos atributos. Ela é considerada uma classe fundamental para a ontologia.
  • Estado: Representa o estado, que é formado por municípios. Esta classe é necessária para que seja possível distinguir municípios homônimos e também representa parte que compõe uma região; 
  • Exame:  Representa os exames a serem realizados para o correto diagnóstico da doença; 
  •  Manifestacoes_clinicas: Representa as manifestações clínicas que um paciente pode apresentar. Essas manifestações podem mostrar o quadro que o paciente se encontra em uma determinada fase da doença. Com esta sugestão tem-se uma resposta com maior precisão; 
  • Municipio: Representa os municípios de cada estado:
  • Regiao:  Representa a composição de alguns estados, formando uma determinada região geográfica, por exemplo a região Sul, composta pelos estado do Paraná, Santa Catarina e Rio Grande do Sul;   
  • Reservatorio:  A definição corrente de reservatório abrange qualquer ser humano, animal, artrópode, planta ou matéria inanimada onde vive e se multiplica um agente infeccioso do qual depende para sua sobrevivência, reproduzindo-se de maneira que possa ser transmitido a um hospedeiro suscetível; 
  • Sintoma: Representa os sintomas detectados pelo profissional da saúde ou informados pelo paciente. Por meio desta classe que é possível suspeitar qual a enfermidade do paciente. 
  • Transmissibilidade:  Esta é a superclasse das classes Modo_de_transmissao e Periodo_de_Transmissibilidade; 
  • Modo_de_transmissao: Representa os modos como uma doença pode ser transmitida; 
  • Periodo_de_Transmissibilidade: Representa o período em que uma doença pode ser transmitida; 
  • Classe Vetor: são seres que servem de intermediário para a transmissão de doenças como, por exemplo, o aedes aegipty é o mosquito vetor da dengue, pois é preciso esse inseto para a propagação da doença nos seres humanos. 
  • As subclasses de doença, nomeadas como: Amebíase,  Ancilostomose,  Calazar, Cirrose,  Dermatite,  Escarlatina,  Esplenomegalia,  Estrongiloidiase,  Febre_Amarela, Febre_Tifoide,  Giardiase,  Gripe,  Hepatite,  Influenza,  Leptospirose,  Leucemia,  Linfoma¸ Mononucleose, Rubéola, Salmonelose, Sarampo, Sífilis e Toxoplasmose, estão presentes na ontologia para o diagnóstico diferencial da propriedade temDiagnosticoDiferencialDe.





Referências:

segunda-feira, 24 de setembro de 2012

Altova SemanticWorks - Editor OWL

OWL foi uma linguagem projetada para o processamento de informações, ao invés de simplesmente realizar uma organização visual de seu conteúdo é utilizada para definir e instanciar ontologias na web que podem incluir descrição, propriedade e relacionamentos de classes.

O Altova SemanticWorks é um editor de arquivos RDF/OWL e tem como diferencial a possibilidade de visualmente criar a ontologia observando sua estrutura em diagramas como mostra a imagem abaixo:




O mesmo também suporta OWL Lite, OWL DL e OWL Full, possui chegagem de sintaxe de acordo com as especificações RDF/XML, me pareceu uma ferramenta completa para o desenvolvido de uma Web Semântica, entretanto é disponibilizado somente uma versão trial de 30 dias o que limita o tempo de desenvolvimento caso o usuário não compre o software, o software também só disponibiliza um código de acesso para registro Trial para emails corporativos, abaixo a imagem mostra o email que recebi dizendo isso:



O Software também poderia ser melhorado se tivesse opcões de versionamento e edição colaborativa de ontologia.

segunda-feira, 10 de setembro de 2012

Resource Description Framework - RDF



RDF é um Framework utilizado para descrever recursos web como por exemplo, titulo, autor, data de modificação, conteúdo e informações sobre direitos autorais de uma página Web. O RDF tem uma semântica formal e tem como objetivo o uso de um vocabulário URI-based, uma sintaxe XML-based e o suporte de uso de XML. Os arquivos RDF têm três componentes básicos que o tornam altamente escalável; recurso, propriedade e indicação.
RDF descreve recursos com classes, propriedades e valores e também precisa definir classes de aplicações especificas e propriedades que podem ser definidas utilizando extensões de RDF, um tipo de extensão é RDF Schema abaixo um exemplo:

No exemplo acima “DOOIII” é uma subclasse de “aula”
Podemos abreviar a sintaxe acima usando rdfs:Class ao invés de rdf:Description e retirar rdf:type information tendo dessa forma uma estrutura mais compacta:



Para descrever grupos são utilizados Containers RDF através dos seguintes elementos:
<rdf:Bag> - este elemento é usado para descrever uma lista de valores que não precisam estar em uma ordem especifica e pode conter valores duplicados;
 <rdf:Seq> - este elemento é usado para descrever uma lista ordenada como letras em ordem alfabética por exemplo e também pode conter valores duplicados;
<rdf:Alt> - este elemento é usado para descrever uma lista de valores alternativos.
Os valores que estão dentro do conteiners são chamados de membros não de “lista de valores”, o que não quer dizer que outros membros podem ser adicionados, por isso são utilizadas coleções RDF para descrever grupos que podem adicionar membros específicos e são descritas pelo seguinte atributo: rdf:parseType="Collection". Abaixo um exemplo retirado do site da W3C:
Para promover uma declaração para que esta possa ser usada por outras declarações deve se Reificar um RDF. Para isto acontecer deverá ser definido uma URIref da seguinte forma:

rdf:statement - tipo da declaração;
rdf:subject  - sujeito da declaração;
rdf:predicate - predicado da declaração;
rdf:object  - objeto da declaração;

Abaixo um esquema em XML que foi transformado para RDF:



 Nota-se que o código em RDF ficou mais formalizado e dessa forma se consegue uma melhor utilização do mesmo pois o código em RDF pode ser lido por diversas aplicações.

RDFPic
É uma ferramenta que cria arquivos RDF a partir de dados informados pelo usuário com o objetivo de fornecer uma descrição de imagens em formato JPEG, abaixo está uma screenshot da aplicação e o código do arquivo gerado:





Extensible markup language - XML

XML é uma linguagem de marcação recomendada pela W3C, é amplamente utilizada na estruturação hierárquica  de diversos tipos de dados, por ser amplamente difundida encontramos vários exemplos de utilização dessa linguagem na internet, abaixo selecionei alguns e criei outros:

Exemplo de um Curriculo Vitae em XML:


















fonte:http://pt.wikipedia.org/wiki/XML


Abaixo um exemplo dos dados de um disco e uma receita de pão em XML:










fonte:http://www.tecmundo.com.br/programacao/1762-o-que-e-xml-.htm




Exemplo de um carro:
 De uma música:
 De uma pessoa:
 De um filme:




Abaixo a criação que representa a estrutura de dados de um Professor, aluno e curso seguinto a sugestão de modelagem do link: http://ia.ucpel.tche.br/~lpalazzo/Aulas/IWS/UNIV2009b.htm

Um Professor:
 Um Aluno:
 Um Curso:




Exemplos de ferramentas para XML:

 SAX - É uma API para XML, usada para acessar documentos XML e é muito utilizado por servlets que precisam enviar e receber documentos XML porque é o mecanismo mais rápido, pois utiliza pouca memoria comparado a outros mecanismos com a mesma função.

DOM - É uma estrutura de árvores padrão, onde cada nó contem um dos componentes de uma estrutura XML . Os dois tipos mais comuns de nós são textos e elementos. Utilizando as funções do DOM nos permite a criação, remoção e edição de nodos e mudar sua hierarquia

quarta-feira, 13 de junho de 2012

Mediator Pattern


Nome e Classificação do Padrão
Mediator – Padrão Comportamental


Intenção e objetivo
Possui como objetivo encapsular a forma como vários outros objetos interagem

Motivação 
Torna o desenvolvimento mais flexível, pois ao encapsular a forma como vários outros objetos interagem o Mediator dá oportunidade de alteração do código sem que isso afete as demais partes do objeto, pois os objetos são referenciados ao Mediator diminuindo o número de conexões entre eles.
Pode ser usado para manter a consistência da interface.


Aplicabilidade
Quando um conjunto de objetos se comunicam entre si de forma complexa embora bem definido;
Quando está difícil refatorar algum código;
Quando temos objetos com muitas dependências


Estrutura



Participantes 

O objeto Mediador gerencia todas as atividades das classes BtnTocar, BtnProcurar e BtnTransferir implementando um método de execução da interface Command


Colaborações

Command - define a interface para a comunicação entre os objetos próximos.
Mediator - implementa a interface e coordena a interação entre os objetos que estão ligados.
BtnTocar, BtnProcurar, BtnTransferir - se comunica com outros objetos através do mediator


Consequência 

Simplifica a relação entre os objetos, transforma o protocolo de "any to any" para "one to any";
Ajuda a entender o funcionamento dos objetos abstraindo a forma na qual eles cooperam entre si;
Centraliza o comportamento;
Promove desacoplamento entre os objetos. 


Implementação
Processo de um MP3 Player:
A classe principal executa o método MediatorDemo() na classe MediatorDemo que prepara o MP3 Player para execução e o deixa pronto para escutar, transferir ou procurar músicas, ao executar uma das funções é acionado um método específico dentro da classe Mediator.

Exemplos de Código 

Link do projeto com o padrão Mediator
http://www.4shared.com/zip/Mcqbx6Op/Mediator1.html

Link do projeto sem o padrão Mediator
http://www.4shared.com/zip/naGFxEGp/Mediator2.html


Usos Conhecidos
ET++
THINK C
Smalltalk


Padrões relacionados
Façade
Observer




quarta-feira, 6 de junho de 2012

Proxy Pattern



Nome e Classificação do Padrão
Proxy – Padrão Estrutural



Intenção e objetivo
Possui o objetivo de substituir outro objeto para controlar seu acesso, é basicamente uma classe que funciona como uma interface para outra classe podendo se conectar à qualquer coisa à um arquivo, conexão de rede e etc...




Motivação 
Há situações em que o cliente não faz, ou não pode fazer referencia a um objeto diretamente, mas quer ainda interagir com o mesmo.
Um objeto proxy pode agir como intermediário entre o cliente e o objeto no qual ele deseja interagir.
“Serve como uma pessoa autorizada a interagir pela outra”.



Aplicabilidade
Proxies são úteis sempre que há uma necessidade de referenciar de forma mais sofisticada um objeto fornecendo mais consistência do que um simples ponteiro ou uma referência simples pode fornecer.
Remote proxy: representante local para um objeto remoto;
Virtual proxy: cria objetos sob demanda, somente criará esse objetos quando precisar;



Estrutura




Participantes 

O objeto MusicaProxy e o objeto real (MusicaReal) implementam a mesma interface, neste caso chamada de Musica O Proxy encapsula o acesso ao objeto real.



Colaborações

Subject
Interface 
Proxy
Implementa a mesma interface do Real Subject O Proxy encapsula o acesso ao RealSubject.
Real Subject
Implementa a mesma interface do Proxy



Consequência 


Um proxy remoto pode ocultar o fato de que um objeto reside em um espaço de endereçamento diferente;
Um proxy virtual pode implementar otimizações,
como criação de um objeto sob demanda;




Implementação
Processo de um MP3 Player via Web.
A classe principal executa o método play() na classe MusicaProxy que verifica  se a música já foi baixada se sim ele executa o método play() na Classe MúsicaReal e toca a música. O construtor do Objeto MusicaReal carrega a música antes de toca-lá.




Exemplos de Código 

Link do projeto com o padrão Proxy




Usos Conhecidos
O Proxy É muito utilizado pela tecnologia J2EE, pelo objeto ‘javax.ejb.EJBObject’, que representa uma referência remota ao EJB.
O Framework Hibernate também utiliza Proxy em uma técnica utilizada para acessar o banco de dados somente quando for necessário.




Padrões relacionados
Adapter
Decorator




quarta-feira, 30 de maio de 2012

Builder Pattern



Nome e Classificação do Padrão

Builder – Padrão de criação



Intenção e objetivo

Possui o objetivo de reduzir a complexidade de uma classe movendo a lógica de construção de uma classe para um objeto externo separando a construção deste objeto com a sua respectiva representação produzindo diferentes representações.
Criar passo a passo objetos mais complexos



Motivação

Este padrão de criação traz a possibilidade de separar da classe os seus métodos numa outra estrutura de dados da mesma forma que possibilita também a utilização dessa estrutura para coletar as opções de um cliente e construir objetos diferentes, através somente dos parâmetros necessários para este desenvolvimento.
Apenas conhecendo os atributos da classe em questão pode instanciar objetos diferentes baseado nos métodos de criação e comportamento de uma classe



Aplicabilidade

Deve permitir diferentes representações para o objeto que é construído
É aplicavel para simplificar um algoritmo complexo, deve ser independente das partes que compõem o objeto e de como elas são.



Estrutura





Participantes 


Builder
Interface abstrata utilizada para criação de objetos no caso podem ser produtos.
Concrete Builder
Realiza a implementação do Builder. É um objeto que construi outros objetos.
Director
A classe Director é responsável pela manutenção da sequencia correta de criação do objeto, recebe a classe Concrete Builder como paramentro e realiza as operações necessárias.
Product
O objeto final que é criado pelo Diretor usando a classe Builder




Colaborações

O usuário cria o objeto Director e o configura com o objeto Builder desejado
Director notifica o construtor sempre que uma parte do produto deve ser construída ou convertida
Builder trata solicitações do diretor e acrescenta partes ao produto
O cliente recupera o produto do construtor


Consequencia

Vantagens [Metsker, 2004]: 
Redução da extensão e da complexidade de uma classe;
Independência entre a representação de um objeto e a sua construção;
Criação de regras graduais de construção para um objeto;
Geração de construções diversificadas de um tipo de objeto, ou de construções de objetos diversificados entre si, a partir de um construtor-base; 
Desvantagem
Por ser bastante flexível, este padrão só apresentará desvantagem se o seu construtor-base for mal planejado, o que poderia resultar em construções redundantes ou com baixo aproveitamento operacional.



Implementação

Processo de produção de uma pizza
Normalmente em pizzarias o processo de fabricação possui três parâmetros específicos a massa, o molho e a cobertura
A classe PizzaBuilder penas disponibiliza constantes que são utilizadas de maneira recorrente na aplicação, de maneira que podem ser acessadas pelas classes que a implementam.
As classes dos tipos de pizza realizam a implementação do Builder.
A classe Garconete é responsável pela manutenção da sequencia correta de criação do objeto, recebe o pedido como parametro e realiza as operações necessárias.
A classe pizza é o objeto final que é criado pela classe Garconete usando a classe PizzaBuilder






Exemplos de Código


Link do projeto com o padrão Builder
http://www.4shared.com/zip/bCoRDsGr/PizzaBuilder.html
Link do projeto sem o padrão Builder
http://www.4shared.com/zip/6E5Hn9T9/Projeto_PizzaBuider_sem_o_patt.html





Usos Conhecidos

Construção de árvores de análise sintática
Classes que funcionam ao mesmo tempo como Builder e
Director para criar sub-classes delas mesmas




Padrões relacionados

Abstract Factory
Composite