Padrão para Implementação de Aplicações Java - Alessandro Cerqueira - 20/8/2007
Módulo IV
Uma Proposta de Projeto para Aplicações Java
Objetivo Descrever como implementar aplicações Java a partir de produtos do processo de software
Implementaçção de Aplica Aplicaçções Java - Alessandro Cerqueira - 20/8/2007 Padrão para Implementa
2
Camadas da Aplicação • Ao iniciarmos o projeto de uma aplicação, devemos visualizá-la em três camadas fundamentais: – Camada de Interface (ou de Apresentaç Apresentação) • É composta pelos objetos responsá responsáveis pelo estabelecimento de uma interface grá gráfica com o usuá usuário (GUI – Graphical User Interface).
– Camada de Controle (ou de Negó Negócios) • É composta pelos objetos responsá responsáveis pela execuç execução dos casos de uso do sistema.
– Camada de Domí Domínio (ou de Dados) • É composta pelos objetos pertencentes às classes geradas pelo processo de modelagem de dados; assim, estes descrevem os os dados que são manipulados durante a execuç execução do sistema
Implementaçção de Aplica Aplicaçções Java - Alessandro Cerqueira - 20/8/2007 Padrão para Implementa
3
Projeto da Camada de Interface • Projeto de Interface – Deve ser realizado durante o fluxo de trabalho de Projeto. Projeto. – Identificar quais elementos de interface que serão necessá necessários para dar suporte às diversas ações que podem ser executadas durante os casos de uso do sistema. – Dividir o projeto de interface em duas fases: • Projeto de Interface Abstrato – Identifica os artefatos de interface que serão gerados, quais são os eventos aos quais estes são sensí sensíveis, quais ações devem ser executadas e quais transiç transições devem ser efetuadas. – Este projeto pode ser elaborado a partir de um diagrama de grá gráficos de estado. estado. – Regra: Para cada caso de uso devemos gerar um diagrama de grá gráficos de estado.
• Projeto de Interface Concreto – Design visual dos elementos de interface a serem gerados.
Implementaçção de Aplica Aplicaçções Java - Alessandro Cerqueira - 20/8/2007 Padrão para Implementa
4
Projeto da Camada de Interface • Projeto de Interface (continuaç (continuação) – Em aplicaç aplicações tradicionais, tradicionais, realizamos o design das janelas do sistema. sistema. Em aplicaç aplicações web, web, realizamos o design das pá páginas HTML com seus formulá formulários. – Identificar quais são os eventos aos quais os elementos de interface são sensí sensíveis. – Com isto, estamos preparando o caminho para que a aplicaç aplicação adote o estilo de Programaç Programação Orientada a Eventos. Eventos.
5
Implementaçção de Aplica Aplicaçções Java - Alessandro Cerqueira - 20/8/2007 Padrão para Implementa
Projeto de Interface Abstrato (Diagrama de Gráficos de Estado) Caso de Uso: Efetuar Login [numErros = 3]
[numErros < 3]
Login
Verificar nú número de falhas
Mensagem Lida
Erro
conta e senha informadas
Verificar Conta e Senha [conta ou senha invá inválidas]
[conta e senha válidas]
Menu Principal
Implementaçção de Aplica Aplicaçções Java - Alessandro Cerqueira - 20/8/2007 Padrão para Implementa
6
Projeto de Interface Abstrato (Diagrama de Gráficos de Estado)
Caso de Uso: Manter Turmas [Inclusão Ok] Ok]
AlterarTurma
[Exclusão Ok] Ok]
ExibirTurmas
[Alteraç [Alteração Ok] Ok]
Botão Ok
Janela AlterarTurma
Botão Cancelar Botão Cancelar
Janela Turmas
ExcluirTurma
Botão Sair
Botão Incluir
Botão Alterar
ExibirJanelaIncluirTurma
ExibirJanelaAlterarTurma
Botão Cancelar
Botão Ok
Janela ExcluirTurma Botão Excluir
ExibirJanelaExcluirTurma IncluirTurma
Botão Ok e [Voltar Alteraç Alteração]
Botão Ok
[Erro de Inclusão]
[Erro de Alteraç Alteração]
Janela IncluirTurma Botão Ok e [Voltar Inclusão]
Erro
[Erro de Exclusão] Botão Ok e [Voltar Exclusão]
Implementaçção de Aplica Aplicaçções Java - Alessandro Cerqueira - 20/8/2007 Padrão para Implementa
7
Projeto da Camada de Interface • Para cada caso de uso gerar um diagrama de gráficos de estado – Cada estado representa uma janela ou página a ser implementada – Os eventos produzidos pelos usuá usuários indicam a realizaç realização de uma ação do sistema na execuç execução do caso de uso – De acordo com as condiç condições de té término da aç ação, é realizada uma transiç transição para outro artefato de interface.
8
Implementaçção de Aplica Aplicaçções Java - Alessandro Cerqueira - 20/8/2007 Padrão para Implementa
Projeto da Camada de Interface • Regras Básicas para Criação – Para aplicações convencionais: • Para cada tipo de janela identificada no Projeto, iremos criar uma classe em Java. • Para cada elemento de interface na janela, deve ser adicionado um atributo desta classe. • Para cada evento ao qual esta janela é sensí sensível deve ser um método desta classe. A missão deste mé método é entrar em contato com o controlador do caso de uso e notificá notificá-lo da ocorrência do evento.
– Para aplicações web: • Para cada tipo de pá página identificada no Projeto, iremos criar uma página JSP. JSP. • Cada elemento de interface é inserido na pá página utilizando componentes visuais de interface (ex. em JSF Text). Text). • Cada evento ao qual esta janela é sensí sensível deve ter um có código que efetue uma requisiç requisição ao servidor. servidor.
Implementaçção de Aplica Aplicaçções Java - Alessandro Cerqueira - 20/8/2007 Padrão para Implementa
9
Projeto da Camada de Interface • Regras Básicas para Criação – Caso observemos que um conjunto de elementos esteja se repetindo em vá várias janelas, podemos criar uma classe para este conjunto • Estí Estímulo ao reuso
– Os mé métodos da classe de interface não devem implementar nem fazer referência a conceitos do domí domínio. nio. Simplesmente deverão avisar ao controlador responsá responsável que tal evento ocorreu.
Implementaçção de Aplica Aplicaçções Java - Alessandro Cerqueira - 20/8/2007 Padrão para Implementa
10
Projeto da Camada de Controle • Modelagem de Casos de Uso – Deve ser realizado durante o fluxo de trabalho de Levantamento de Requisitos. Requisitos.
• Um sistema é composto de vá vários casos de uso. uso. Cada caso de uso descreve um conjunto de aç ações que são executadas até até que um bem tangí tangível seja dado ao usuá usuário ao final de sua execuç execução. – Um caso de uso indica uma funcionalidade do sistema.
• Regra Geral: – Para cada caso de uso iremos codificar um classe que implementará implementará um controlador para o caso de uso. – Cada aç ação tratada pelo caso de uso (identificada no diagrama de grá gráficos de estado) irá irá se transformar em um mé método. todo. – A execuç execução do mé método de aç ação será será disparada a partir do envio de uma mensagem de um objeto da camada de interface para o controlador.
Implementaçção de Aplica Aplicaçções Java - Alessandro Cerqueira - 20/8/2007 Padrão para Implementa
11
Projeto da Camada de Controle • Variante para a Regra – Crie uma classe abstrata chamada Comando que contenha um mé método abstrato chamado executar() – Cada aç ação do caso de uso poderá poderá se transformar em uma classe que seja especializaç especialização da classe Comando (ou seja, que codifique o mé método executar()) executar()) • O controlador de casos de uso será será uma composiç composição de Comandos que ficam registrados em um HashMap (tó (tópico futuro) • A partir da ordem recebida pela interface, recuperar o objeto Comando e execute o mé método executar() • O grupamento de classes de aç ação deve ficar em um pacote pró próprio ou como classes internas à classe do controlador.
12
Implementaçção de Aplica Aplicaçções Java - Alessandro Cerqueira - 20/8/2007 Padrão para Implementa
Projeto da Camada de Domínio • Modelagem de Dados – Deve ser realizado durante o fluxo de trabalho de Aná Análise. lise.
• As classes de domínio são aquelas que identificamos na modelagem de dados nas atividades de análise. – Pela UML, documentamos a modelagem de dados atravé através de um diagrama de classes
• Regra – Cada classe identificada na modelagem de dados deverá deverá ser implementada sob o padrão JavaBeans (mó (módulo 06). 06). • Resumo – Pelo menos ter o construtor com assinatura vazia – Métodos get e set vinculados a cada atributo
– Vinculada a cada classe JavaBean iremos també também construir també também um DAO (Data Access Object) Object)
Implementaçção de Aplica Aplicaçções Java - Alessandro Cerqueira - 20/8/2007 Padrão para Implementa
13
Projeto da Camada de Domínio • Data Access Object (DAO) – São objetos que interagem com os controladores com o objetivo de fazer a busca, recuperaç recuperação e armazenamento dos objetos do domí domínio. nio. – Para cada classe presente no diagrama de classes iremos criar uma classe DAO • Ex:
Classe Turma Classe DaoTurma Classe Aluno Classe DaoAluno
– Se um controlador precisar recuperar um ou mais objetos de uma classe de domí domínio, ele o fará fará junto ao DAO da classe necessá necessária. Se um objeto precisar ser persistido (armazenado), quem o fará fará será será o DAO – A estraté estratégia de persistência fica encapsulada nas classes DAO.
14
Implementaçção de Aplica Aplicaçções Java - Alessandro Cerqueira - 20/8/2007 Padrão para Implementa
Camadas da Aplicação • A comunicação entre as camadas deve seguir a seguinte estratégia: Camada de Interface Mensagens
Retorno Camada de Controle
Mensagens
Retorno Camada de Domínio
15
Implementaçção de Aplica Aplicaçções Java - Alessandro Cerqueira - 20/8/2007 Padrão para Implementa
Artefatos do Processo de Desenvolvimento • Todos os artefatos produzidos no Processo de Software influenciam direta ou indiretamente a implementaç implementação; entretanto destacamos alguns dos mais importantes: •
Diagrama de Casos de Uso – Para geraç geração da camada de controle
•
Modelagem de Dados (diagrama de classes) – Para geraç geração da camada de domí domínio – Para geraç geração de DAOs (Data Access Objects) Objects)
•
Projeto de Interface Abstrato realizado com o Diagrama de Grá Gráficos de Estado – Para identificaç identificação dos elementos de interface
•
Projeto de BD – Para a geraç geração do mapeamento OO Relacional
16
Implementaçção de Aplica Aplicaçções Java - Alessandro Cerqueira - 20/8/2007 Padrão para Implementa
Padrões de Projeto • Padrão – Maneira testada ou documentada de alcanç alcançar um objetivo qualquer • Design Patterns ou Padrões de Projeto – Padrões para alcanç alcançar objetivos na engenharia de software usando classes e mé métodos em linguagens orientadas a objeto
• "Design Patterns: Patterns: Elements of Reusable ObjectObject-Oriented Software" Software" – Livro de Erich Gamma, Gamma, John Vlissides, Vlissides, Ralph Jonhson e Richard Helm (Conhecidos como "The "The Gang of Four", ou GoF) GoF) – Catá Catálogo que descreve 23 padrões de projeto úteis. – Inspirado em “A Pattern Language” Language” de Christopher Alexander sobre padrões de arquitetura de cidades, casas e pré prédios.
• “Os padrões de projeto são descriç descrições de objetos que se comunicam e classes que são customizadas para resolver um problema gené genérico de design em um contexto especí específico“ (GoF) GoF)
Implementaçção de Aplica Aplicaçções Java - Alessandro Cerqueira - 20/8/2007 Padrão para Implementa
17
Padrões de Projeto • Um padrão de projeto é a descriç descrição de uma estraté estratégia que podepode-se adotar para solucionar um determinado tipo de problema que pode ocorrer de formas diferentes mas que, na essência, apresenta a mesma estrutura. • Paró Paródia – Um time de futebol chamado Casco da Grama e que é treinado pelo té técnico Regato Maluco está está perdendo suas partidas há há 20 jogos. Seu presidente pergunta a seus benemé beneméritos o que fazer. Soluç Solução: demitir o té técnico Regato Maluco. Maluco. – Na realidade esta soluç solução não se aplica somente ao Casco da Grama em relaç relação ao té técnico Regato Maluco, mas pode ser generalizada em um Padrão de Projeto.
• Padrão de Projeto “Detonator” Detonator” – Problema gené genérico: Um time está está perdendo há há muitos jogos. – Soluç Solução gené genérica: detonar com seu té técnico.
Implementaçção de Aplica Aplicaçções Java - Alessandro Cerqueira - 20/8/2007 Padrão para Implementa
18
Camadas da Aplicação • Projetando assim uma aplicação, estamos implementando padrão de projeto MVC (ModelViewer-Controller) – Model Classes do Domí Domínio – Viewer Classes da Interface – Controller Classes de Controle
• A grande vantagem desta estruturação é a obtenção da Independência de Diálogo – A troca no projeto de interface não implica em alteraç alterações nos mé métodos ligados ao controle ou ao domí domínio.
Implementaçção de Aplica Aplicaçções Java - Alessandro Cerqueira - 20/8/2007 Padrão para Implementa
19
Camadas da Aplicação • A princípio, vamos estruturar nossa aplicação da seguinte forma: – As classes da camada de interface farão parte do pacote “face” – As classes da camada de controle farão parte do pacote “controle” – As classes da camada de domínio farão parte do pacote “dominio” – Para cada aplicação iremos criar uma classe chamada Programa que pertencerá a pacote “controle” e que só conterá o método main.