Noções de projeto orientado a objetos - camadas Prof. Gustavo Wagner (alterações) Prof. Tiago Massoni (Slides originais) Desenvolvimento de Sistemas FATEC-PB.

Slides:



Advertisements
Apresentações semelhantes
Prof. Thiago Pereira Rique
Advertisements

Programação Básica em Java
Polimorfismo e Acoplamento Dinâmico
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Wagner Santos C. de Jesus
Classes e objetos P. O. O. Prof. Grace.
Paradigmas de Linguagens de Programação Paradima da Programação Orientada à Objetos Professor: Armando Hage Belém-2008.
CRIANDO OBJETOS EM JAVA
PLC – Introdução a POO Java
Programação I Aula 2 (Métodos)
Linguagem de Programação JAVA
Introdução à Programação Orientada a Objetos com Java
Tipos Abstratos de Dados
Orientação a Objetos e Java Graduação em Ciência da Computação
Paulo Borba Centro de Informática Universidade Federal de Pernambuco
UML e Java, Introdução AB,20001 Diagrama de Classes UML e JAVA Problema Existem diversos tipos de contas bancárias. Todas as contas têm um atributo saldo.
Aulas 2 e 3 – Java – Prof. Marcelo Heitor # O método main e argumentos na linha de comando; # Fluxo padrão de entrada e saída; # A classe JOptionPane;
Linguagem II Exceções.
Implementação Orientada a Objetos – Aula 03
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Aula Prática 4 Monitoria IP/CC (~if669).
Prof.: Bruno Rafael de Oliveira Rodrigues. Construtor é bloco declarado que é chamado no momento em que o Objeto é criado (instanciado). Todas as classes.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota (com material da Qualiti Software Process)
Linguagem I Strings.
Vendo o código como um bolo... com várias camadas! Interface com o usuário (GUI) Comunicação Negócio Dados.
Herança e Arquitetura em camadas
Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,
Aula Prática 1 Monitoria IP/CC (~if669) (A partir do slide elaborado por Luís Gabriel)
Vendo o código como um bolo... com várias camadas! Interface com o usuário (GUI) Comunicação Negócio Dados.
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
Tarciane Andrade Análise de Casos de Uso Tarciane Andrade
Copyright 2000, Departamento de Informática, UFPE. Todos os direitos reservados sob a legislação em vigor. Orientação a Objetos e Java.
Vendo o código como um bolo... com várias camadas! Interface com o usuário (GUI) Comunicação Negócio Dados.
Vendo o código como um bolo... com várias camadas! Interface com o usuário (GUI) Comunicação Negócio Dados.
Engenharia de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade Federal de.
Orientação a Objetos Paradigma. Davi Pires Revisão Dúvidas da aula passada? –Características de Java –Compilador vs. Interpretador.
Paulo Borba Centro de Informática Universidade Federal de Pernambuco Exceções.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Orientação a Objetos e Java Alexandre Mota  Centro de Informática, UFPE.
Aula Prática 1 Monitoria IP/CC (~if669) (A partir do slide elaborado por Luís Gabriel)
Implementação Orientada a Objetos – Aula 04 Métodos, parâmetros e retorno Prof. Danielle Martin/Marcia Bissaco Universidade de Mogi das Cruzes
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Vendo o código como um bolo... com várias camadas! Interface com o usuário (GUI) Comunicação Negócio Dados.
JavaScript Introdução ao JavaScript 1. Objetivos Introdução Sintaxe Básica Arquivo (script) externo Script no HEAD da página Script no BODY da página.
Introdução ao Java Prof. Gustavo Wagner (modificações) Slides originais: Prof. Tiago Massoni Java Básico FATEC-PB  Centro de Informática, UFPE.
1. 2 Programação Orientada a Objetos Prof. Maurício Rodrigues de Morais
1 Introdução aos Padrões de Projetos (na prática) Créditos: Lúbia Vinhas Hazel Carvalho Crato Adaptações: Prof. Nécio de Lima Veras.
Web Application Rafael Muniz e Marcus Vinícius Plugins MAVEN 04/04/2009 Revisão 12/04/2009.
Programação Gráfica em Java Swing Aula Na aula passada vimos: Thread Animação Técnica de desenho eficiente (double-bufferring)
IFRN Técnico em Informática para Internet Desenvolvimento de Algoritmos Prof. Gilbert Azevedo.
Programação para Internet Aula 06 Linguagem Java (Orientação a Objetos – Atributos e Métodos)
Polimorfismo com Interfaces Pacotes em Java Prof. Gustavo Wagner (Alterações) Prof. Tiago Massoni (Slides Originais) Desenvolvimento de Sistemas FATEC-PB.
Herança em Java Curso: Informática Disciplina: Programação Orientada a Objetos Prof. Abrahão Lopes
Laboratório de Computação Aula 05 – Array Prof. Fábio Dias
Disciplina: Análise e Projeto de Sistemas
Strings e Arrays Prof. Gustavo Wagner (Alterações) Prof. Tiago Massoni (Slides Originais) Desenvolvimento de Sistemas FATEC-PB  Centro de Informática,
Introdução ao Eclipse 3.2 Prof. Gustavo Wagner (modificações) Slides originais: Prof. Tiago Massoni Java Básico  Centro de Informática, UFPE.
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
CONSTRUINDO CLASSES Dilvan Moreira (baseado no livro Big Java)
AULA Mais Herança Curso: Informática (Subseqüente) Disciplina: Programação Orientada a Objetos Prof. Abrahão Lopes
Herança e Polimorfismo Prof. Gustavo Wagner (Alterações) Prof. Tiago Massoni (Slides Originais) Desenvolvimento de Sistemas FATEC-PB  Centro de Informática,
Ambientação com a Sintaxe de Java: parte 2 Prof. Gustavo Wagner Slides Originais: Prof. Tiago Massoni Desenvolvimento de Sistemas FATEC-PB  Centro de.
INE5408 Estruturas de Dados Estruturas de Dados básicas utilizando Vetores - Listas.
Introdução à Orientação a Objetos em Java Prof. Gustavo Wagner (Alterações) Slides originais: Prof. Tiago Massoni Desenvolvimento de Sistemas FATEC-PB.
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal.
Aula 5 - Métodos. Desenvolvimento de Programas A melhor forma de construir programas grandes é dividi-los em programas menores que executam tarefas específicas.
Tratamento de exceções em Java Prof. Gustavo Wagner (Alterações) Prof. Tiago Massoni (Slides Originais) Desenvolvimento de Sistemas FATEC-PB  Centro de.
Criação e manipulação de objetos
Transcrição da apresentação:

Noções de projeto orientado a objetos - camadas Prof. Gustavo Wagner (alterações) Prof. Tiago Massoni (Slides originais) Desenvolvimento de Sistemas FATEC-PB  Centro de Informática, UFPE

2 Tudo Bem se Vemos o Programa como uma Caixa Preta... Funciona! Por que vou me preocupar?

3 Mas Internamente...

4 Quando Eu Quiser Analisar e Modificar o Programa… D A D NEGÓCIO U S I Não quero ver palavras cruzadas!

5 Péssimo Exemplo: Sistema Bancário public class Banco {... public void CreditarEmConta() { //apresenta tela inicial;aguarda entrada de dados; //processa numero e valor fornecidos pelo usuario //checa se conta existe,senao mensagem de erro //se ok,busca conta em arquivo pelo numero //dada a conta,acresce valor ao saldo anterior //retorna mensagem de sucesso da operacao }

6 Melhor Ver o Programa como um Bolo (em Camadas)! Classes Básicas Coleção de Dados Fachada Texto, Swing, Applet, JSP Front-end Back-end usa o suportedá suporte

7 Definição Camadas definem um conjunto de classes com preocupações em comum Separação de Código –GUI (Interface Gráfica) Apresentação da aplicação Entrada e saída de dados –Negócio Código inerente à aplicação sendo desenvolvida –Dados Código de acesso e manipulação de dados, exclusivamente

8 Benefícios do Sistema em Camadas Modularidade –Dividir para conquistar –Separação de conceitos –Reusabilidade e facilidade de mudança Mudanças em uma camada não afeta as outras –Funcionalidade plug and play –Várias GUIs para a mesma aplicação –Vários mecanismos de armazenamento para o mesmo sistema

9 Projeto em Camadas Conta Cliente Classes Básicas Coleção de Dados Fachada Texto, Swing, Applet, JSP

10 Classes Básicas Composta pelas classes elementares da aplicação Implementam serviços relacionados a um (1) objeto Possuem os métodos de acesso além de alguns serviços que atuam sobre os seus atributos Exemplos: Conta, Agencia, Cliente, Empregado, Venda, Aluno, Disciplina

11 Classes Básicas public class Conta{ private String numero;... public Conta(String num){ this.numero = num; } public void setNumero(String num){ this.numero = num; } public void creditar(double valor){ this.saldo += valor; } Métodos de acesso poderiam ser usados para tudo, mas comportamentos complexos em um objeto são encapsulados na classe básica

12 Projeto em Camadas Classes Básicas Coleção de Dados Fachada Texto, Swing, Applet, JSP RepositorioContas Array RepositorioClientes Array

13 Coleção de Dados (Repositório) Responsável por armazenar e recuperar objetos de UMA classe básica Definem estrutura para armazenar estes objetos: lista, array, etc… Preocupa-se APENAS com detalhes de armazenamento e recuperação dos objetos: inserir, remover, procurar Nome padrão: RepositorioClasseBasicaArmazenamento –Exemplo: RepositorioContasArray

14 Coleção de Dados public class RepositorioContasArray{ private Conta[] contas; private int proximaLivre; public RepositorioContasArray(int tamanho) { contas = new Conta[tamanho]; proximaLivre = 0; } public void inserir(Conta c){ contas[proximaLivre] = c; proximaLivre++; } Não testa se já existe a conta?? Estrutura escolhida, array! Tamanho passado ao construtor

15 Coleção de Dados public Conta procurar(String numero){ for (int i=0;i < proximaLivre;i++){ if (contas[i].getNumero().equals(numero)) return contas[i]; } return null; } Este código vai ficar repetitivo para remover, verificar existência...

16 Coleção de Dados private int procurarIndice(String numero){ for (int i=0;i < proximaLivre;i++){ if (contas[i].getNumero().equals(numero)) return i; } return -1; } public Conta procurar(String numero){ int indice = this.procurarIndice(numero); if (indice != -1) return contas[indice]; else return null; } Método privado Reutilização chamando o método

17 Coleção de Dados public void atualizar(Conta c){ int indice = this.procurarIndice(numero); if (indice > -1){ contas[indice] = c; } public boolean existe(String numero){ if (this.procurarIndice(numero) == -1) return false else return true; }

18 Projeto em Camadas FachadaBanco Classes Básicas Coleção de Dados Fachada Texto, Swing, Applet, JSP

19 Fachada Realiza as operações e testes de negócio –Ex: teste ‘não é possível inserir duas contas com o mesmo número’ – Ex: ‘creditar um valor em uma conta da coleção dado o número da mesma’ Realiza operações críticas de negócio envolvendo diferentes subsistemas (críticas de restrição de integridade). –Ex: não é possível inserir contas para clientes que ainda não foram cadastrados Utiliza os serviços do repositório para lhe dar suporte ao armazenamento dos objetos

20 Fachada Reúne todas as funcionalidades (métodos) de todas as coleções de dados combinadas –Centralização do acesso aos serviços do sistema Inicializa todos os “subsistemas” Pergunta? –Suponha que o sistema agora possui uma outra regra de negócio que não permite que contas com saldo inicial menor que 50.0 reais sejam cadastradas. Onde implementar essa nova regra?

21 Fachada public class FachadaBanco{ private RepositorioContasArray repContas; private RepositorioClientesArray repClientes; public Fachada(){ repContas = new RepositorioContasArray(100); repClientes = new RepositorioClientesArray(100); } public void cadastrarCliente (Cliente cli){ boolean achou = repClientes.existe(cli.getCpf()); if (!achou){ repClientes.inserir(cli); } Regra de negócio realizada utilizando o serviço da camada abaixo Inicialização do sistema

22 Fachada public void cadastrarConta (Conta c) { boolean achou = repContas.existe(c.getNumero()); if (!achou){ boolean existeCliente = repClientes.existe(c.getTitular().getCpf()); if (existeCliente) repContas.inserir(c); } public void debitar (String num, double valor) { Conta c = repContas.procurar(num); c.debitar(valor); }...//como seria o transferir? Regra de negócio envolvendo vários repositórios Agora passamos o número (serviço do sistema)

23 Projeto em Camadas InterfaceTexto Classes Básicas Coleção de Dados Fachada Texto, Swing, Applet, JSP

24 Interface “Gráfica” (GUI) Classe que faz a intermediação do usuário com o sistema Prepara entrada do usuário Possui uma referência ao objeto Fachada, para pedir serviços que o usuário precisa Classe que vai ser “executada” –Possui um método main() Depois veremos interface gráfica mesmo, com Swing

25 Interface “Gráfica” public class InterfaceTexto{ public static void main(String [] args){ FachadaBanco f = new FachadaBanco();... Cliente titular = f.procurarCliente(cpf); Conta novaConta = new Conta(numero,0.0,titular); f.cadastrarConta(novaConta);... }

Aula Prática Camadas

27 Objetivos da prática Organizar um sistema bancário em camadas Implementar lógica de negócio e armazenamento de dados para uma interface texto de um usuário do banco

28 Atividades Baixar material de apoio, extrair e importar para um novo projeto Todos as classes importadas ao pacote default Analise as classes vazias

29 Atividades Implementar classes básicas Conta, Cliente –Faltam: métodos de acesso, construtores, creditar, debitar (ignorar erros) Implementar Repositorios de array –Para armazenar contas e clientes –Implementar os métodos, com a ajuda do método privado procurarIndice() –Inserir, atualizar, procurar, existe Ignorar possíveis erros

30 Atividades Implementar FachadaBanco –Serviços indicados, utilizam chamadas aos repositórios –Construtor deve inicializar todos os repositórios –Ignorar possíveis erros Apenas evitar NullPointerException Checar se todos os erros de compilação foram resolvidos –Incrementar a interface texto com entradas de usuário Lista de funcionalidades como no exercício passado Oferecer opções que a Fachada oferece