Orientação a Objetos Hyggo Oliveira de Almeida Laboratório de Sistemas Embarcados e Computação Pervasiva Centro de Engenharia Elétrica e Informática Universidade Federal de Campina Grande Apresentação do curso Motivação para o curso Objetivos do curso Estudo de caso Conteúdo Resultado esperado Avaliação Bibliografia Dúvidas??? 1 Motivação para o curso Por que orientação a objetos??? Voltemos um pouco no tempo... ... nos anos 80 e antes disso! O que é que está na moda? Paradigma estruturado!!! Análise (Entender o problema) Projeto (Modelar a solução) Programação (Implementar a solução) Pós-Sistemas de Informação - FAL 3 Motivação para o curso Entidades de abstração Funções e procedimentos Sistemas comerciais tradicionais Controle de estoque, por exemplo Linguagens Pascal, Cobol, C, Fortran Pós-Sistemas de Informação - FAL 4 2 Motivação para o curso Conjunto de procedimentos e funções invocados com base em uma seqüência Nível de complexidade dos sistemas condiz com o suporte do paradigma Problema Calcular o total do estoque Solução calcularTotalEstoque(); Pós-Sistemas de Informação - FAL 5 Motivação para o curso Problemas Aumento da complexidade dos sistemas Difícil gerenciamento Entidade de abstração muito granular Função Sistema corporativo “Calcular lucro das vendas” Recuperar informações das filiais Transmitir dados via rede Recuperar informações de câmbio Recuperar informações de taxas de juros ... Pós-Sistemas de Informação - FAL 6 3 Motivação para o curso SIMULA 67 Simulação de objetos do mundo real Objetos e relacionamento entre eles Que tal aproveitar a abstração??? Cadeira Sala Mesa Funções e dados dispersos e não coesos Enxergar o problema... pensando em objetos!!! Pós-Sistemas de Informação - FAL 7 Objetivo do curso Convencê-los de que OO é uma boa ferramenta para o desenvolvimento de sistemas de informação Introduzir conceitos básicos de OO Noções de... Análise orientada a objetos Projeto orientado a objetos Programação orientada a objetos Notação UML diagramas mais usados Pós-Sistemas de Informação - FAL 8 4 Estudo de caso Sistema de informação, em geral, possui complexidade de projeto Maior que a complexidade algorítmica De acordo com o tempo de curso... ...foco em aprender os conceitos ...saber como aplicá-los Vamos desenvolver uma agenda simples Nomes, endereços e telefones Pós-Sistemas de Informação - FAL 9 Conteúdo do curso (Parte I) OO - Conceitos básicos Visão abstrata Classificação Especialização Polimorfismo Visão concreta Encapsulamento, information hiding, passagem de mensagem Herança Ligação dinâmica, variáveis polimórficas Entendendo o estudo de caso com OO! Pós-Sistemas de Informação - FAL 10 5 Conteúdo do curso (Parte II) Análise Orientada a Objetos Análise de requisitos UML – O que é? Pra que serve? Diagrama de casos de uso Modelo conceitual Analisando o estudo de caso! Pós-Sistemas de Informação - FAL 11 Conteúdo do curso (Parte III) Projeto Orientado a Objetos Explodindo casos de uso: diagramas de interação Diagrama de seqüência Diagrama de colaboração Definindo classes, atributos e métodos: diagrama de classes Projetando o estudo de caso! Pós-Sistemas de Informação - FAL 12 6 Conteúdo do curso (Parte IV) Programação Orientada a Objetos Introdução à linguagem Java Mapeando conceitos para elementos da linguagem “Oi, eu sou um programa Java!” Programando o estudo de caso! Pós-Sistemas de Informação - FAL 13 Ao terminar o curso vocês devem... conhecer conceitos básicos da orientação a objetos! entender por que OO pode ser uma boa solução para o desenvolvimento de software saber realizar uma análise orientada a objetos entender conceitos de projeto orientado a objetos ter noções básicas de programação orientada a objetos Pós-Sistemas de Informação - FAL 14 7 Avaliação (em dupla) Entendendo o estudo de caso com OO! Exercício: 2,5 pontos Analisando o estudo de caso! Exercício: 2,5 pontos Projetando o estudo de caso! Exercício: 2,5 pontos Programando o estudo de caso! Exercício: 2,5 pontos Pós-Sistemas de Informação - FAL 15 Bibliografia Livros Object-Oriented Analysis and Design with Applications, Grady Booch,1993 Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design, Larman, Prentice-Hall, 1998 UML – Guia do usuário, James Rambaugh, Campus, 2000 Java How to Program, Harvey M. Deitel Paul J. Deitel, Prentice Hall, 2002 Artigos Object Orientation Revealed!, Dr Ashley M. Aitken, School of Information Systems, Curtin University of Technology, Perth, Australia Outras fontes Internet!!! Pós-Sistemas de Informação - FAL 16 8 Dúvidas sobre o curso??? Dúvidas sobre o conteúdo... É só isso??? Isso tudo professor??? E vai dar tempo??? Meu e-mail de contato: [email protected] Pós-Sistemas de Informação - FAL 17 Conceitos Básicos de Orientação a Objetos Visão abstrata Classificação Especialização Polimorfismo Visão concreta Encapsulamento Information hiding Passagem de mensagem Herança Ligação dinâmica Variáveis polimórficas Entendendo o estudo de caso com OO! 9 Visão abstrata Por que visão abstrata? Em geral, os conceitos de orientação a objetos são ensinados utilizando a tecnologia que dá suporte à OO “Java em 15 dias e meio” “C++ e OO, sem desespero” “Agora vai! PHP com OO” “É pra amanhã? Java e OO em uma noite!” Problema! Não se sabe a diferença entre conceito e tecnologia É possível implementar um código Java que não é orientado a objetos!!! Pós-Sistemas de Informação - FAL 19 Visão abstrata Os conceitos de OO são independentes de tecnologia O paradigma de OO define uma nova maneira de enxergar o mundo (leia-se, contexto do problema) Primeiro vamos aprender a enxergar o mundo pensando em objetos... ... depois aprendemos uma tecnologia para tornar a implementação possível Em Java! Pós-Sistemas de Informação - FAL 20 10 Visão abstrata Orientação a objetos é... “enxergar e modelar o mundo como um conjunto de objetos interrelacionados e em interação” Pós-Sistemas de Informação - FAL 21 Visão abstrata Uma vez que já vemos o mundo desta forma... tornase bem conveniente Enxergar o mundo... ... ou qualquer outro “sistema” ... inclusive um “sistema de software”. Pós-Sistemas de Informação - FAL 22 11 Visão abstrata Ok... mas o que são objetos? Árvore Bicicleta Churrasqueira Casa Carro Pessoa Árvore Pós-Sistemas de Informação - FAL 23 Visão abstrata Um objeto é uma entidade física ou conceitual que possui uma identidade, propriedades e operações. E que pode ser construído e destruído. Pós-Sistemas de Informação - FAL 24 12 Visão abstrata Identidade define a unicidade do objeto! MinhaÁrvore Minha Bicicleta Minha Churrasqueira MinhaCasa MeuCarro MeuPai MinhaOutra Árvore Pós-Sistemas de Informação - FAL 25 Visão abstrata Propriedades definem o estado do objeto!!! cor: verde espécie: pé de mato ☺ cor: preta marchas:32 grelhas: 4 material: ferro cor: marrom valor: 50000 cor: azul marca: ford ano: 1975 quilometragem: 5000 Pós-Sistemas de Informação - FAL nome: João profissão: jogador idade: 45 cor: verde espécie: pé de pau! ☺ 26 13 Visão abstrata Operações definem os comportamentos que podem ser desempenhados pelo objeto!!! • andar • comer • beber • germinar • fazer sombra • acelerar • frear • acelerar • frear • ligar • desligar • assar • germinar • fazer sombra Pós-Sistemas de Informação - FAL 27 Visão abstrata Mas eu preciso sempre enxergar todos os objetos do meu mundo (ou do meu sistema)??? Não!!! A maneira como eu enxergo o mundo depende do contexto do problema!!! Pós-Sistemas de Informação - FAL 28 14 Visão abstrata De que ferramenta eu preciso pra enxergar o mundo de acordo com o contexto??? Abstração Exercício intelectual de seleção de alguns aspectos de domínio do problema, desconsiderando outros aspectos não interessantes para o problema em questão Conceito fundamental da OO Pós-Sistemas de Informação - FAL 29 Visão abstrata Mundo Apenas o que interessa no mundo... Contexto do problema ... de acordo com o contexto! Pós-Sistemas de Informação - FAL 30 15 Visão abstrata Objeto • Propriedades: • Modelo • Propriedades: • Tamanho • Descrição • Custo • Preço de venda • Velocidade • Número • Instruções Estudante Vendedor Pós-Sistemas de Informação - FAL 31 Visão abstrata Objeto • Operações: • faturar • Operações: • somar • garantir • requisitar • subtrair • multiplicar • dividir Abstração Vendedor Enxergar os objetos de acordo com o contexto Pós-Sistemas de Informação - FAL Estudante 32 16 Visão abstrata Outros conceitos fundamentais da OO Classificação Orientação a Objetos Polimorfismo Especialização Pós-Sistemas de Informação - FAL 33 Visão abstrata Classificação Agrupamento de objetos que possuem um conjunto de propriedades e operações em comum. Define um tipo de objetos pelo conjunto de propriedades e operações cor: verde espécie: pé de mato • germinar • fazer sombra Pós-Sistemas de Informação - FAL cor: verde espécie: pé de pau! 34 17 Visão abstrata Classificação Tipo: árvore Propriedades: cor e espécie Operações: germinar e fazer sombra Objetos que são do tipo “árvore” Pé de mato Pé de pau Pós-Sistemas de Informação - FAL 35 Visão abstrata Especialização Identificação de um subconjunto de objetos dentro de uma classificação (tipo) que possui um conjunto adicional de propriedades e operações. Define um subtipo do tipo original Propriedades originais + propriedades adicionais Operações originais + operações adicionais Pós-Sistemas de Informação - FAL 36 18 Visão abstrata Especialização • Propriedades: • cor, espécie Tipo: árvore • Operações: • germinar, fazer sombra Adicional Subtipo: árvore frutífera Adicional • Propriedades: • cor, espécie e fruta • Operações: • germinar, fazer sombra e dar frutos Pós-Sistemas de Informação - FAL 37 Visão abstrata Especialização Especialização Tipo: árvore Generalização Subtipo: árvore frutífera Pé de mato Pé de pau Macieira Cajueiro Pós-Sistemas de Informação - FAL 38 19 Visão abstrata Pessoa Formada Carro Veiculo Oftalmologista Generalização Especialização Especialização/Generalização Carro de corrida Pós-Sistemas de Informação - FAL 39 Visão abstrata Polimorfismo É a habilidade de diferentes tipos de objetos realizarem as mesmas propriedades e operações de formas diferentes Tipo: veículo • acelerar • frear • acelerar • frear Subtipo: bicicleta Subtipo: carro Pós-Sistemas de Informação - FAL 40 20 Visão abstrata Polimorfismo Veículo pode acelerar e frear. Acelerar e frear possuem formas diferentes pra cada subtipo Subtipo: carro Subtipo: bicicleta acelerar = pedalar!!! frear = apertar o freio!!! frear = pisar no freio!!! acelerar = pisar no acelerador!!! Pós-Sistemas de Informação - FAL 41 Visão abstrata Entenderam os conceitos abstratos??? Observem que os conceitos são independentes de tecnologia Se aplicam a qualquer tipo de sistema Nenhuma linguagem de programação foi utilizada!!! Pensar orientado a objetos é independente de programar usando uma linguagem com suporte à orientação a objetos!!! Sendo assim... É possível entender a orientação a objetos, sem saber programar em nenhuma linguagem!!! Pós-Sistemas de Informação - FAL 42 21 Visão abstrata Mão na massa!!! “Enxergue” um dos objetos presentes na imagem abaixo de acordo com o triângulo de orientação a objetos! Menos os veículos, é claro!!! Classificação OO Polimorfismo Especialização Pós-Sistemas de Informação - FAL 43 Visão concreta Como construir objetos do mundo real usando objetos de software???? Pós-Sistemas de Informação - FAL 44 22 Visão concreta Em primeiro lugar... teremos que criá-los! Certo??? Nem tudo é “observação”!!! Sistema de controle de estoque • produto • item • estoque Sistema de controle de tráfego • carro • rua • vaga Sistema de acadêmico • aluno • professor • matrícula • nota Pós-Sistemas de Informação - FAL 45 Visão concreta Precisamos ter noção de como os objetos são criados... ... mais ainda, precisamos de um modelo pra criação de objetos diferentes de acordo com um mesmo tipo! Na visão concreta... precisamos de uma CLASSE!!! Pós-Sistemas de Informação - FAL 46 23 Visão concreta Uma classe é um modelo, um protótipo para a criação de exemplares ou instâncias de um mesmo tipo. Um objeto é um exemplar de uma classe Objetos Classe new Pé-de-pau B new Pé-de-pau C Modelo de pé de pau Pé-de-pau A Meu pé-de-pau Pós-Sistemas de Informação - FAL 47 Visão concreta Apesar da semelhança, classe é diferente de tipo Uma classe define, automaticamente, um tipo e uma implementação Tipo:Carro Define “o que” Define “como” Classe:Carro frear = pisar no freio!!! Pós-Sistemas de Informação - FAL acelerar = pisar no acelerador!!! 48 24 Visão concreta Todo objeto, instância de uma classe, terá: as mesmas propriedades/atributos da classe as mesmas operações/métodos da classe A classe então é uma ferramenta para padronizar a criação de objetos de um determinado tipo E aí? Entenderam pra que serve uma classe? Dúvidas sobre a construção de objetos? Relação objeto x classe? Podemos seguir na visão concreta de OO? Pós-Sistemas de Informação - FAL 49 Visão concreta Além da classe, para tornar os conceitos abstratos definidos anteriormente em tecnologia... Linguagem de programação Modelagem Modelos de banco de dados Modelos formais Etc... Classificação OO Especialização Polimorfismo ... as seguintes ferramentas devem ser providas: Encapsulamento, information hiding, passagem de mensagem, herança, variáveis polimórficas e ligação dinâmica Pós-Sistemas de Informação - FAL 50 25 Visão concreta As ferramentas da visão concreta dão suporte às diferentes fundações da visão abstrata Information Hiding Encapsulamento Passagem de mensagem Classificação OO Especialização Polimorfismo Ligação dinâmica Herança Variáveis polimórficas Pós-Sistemas de Informação - FAL 51 Visão concreta Concretizando classificação: Encapsulamento Agrupamento de atributos e métodos dentro de um objeto Objeto Métodos Acesso aos atributos apenas via métodos! Atributos O que você comeu no almoço? Pós-Sistemas de Informação - FAL 52 26 Visão concreta Concretizando classificação: Information Hiding Mostre ao cliente apenas o que ele pode ver!!! Métodos Objeto Privados/Protegidos Acesso apenas aos Métodos públicos! Atributos Pós-Sistemas de Informação - FAL 53 Visão concreta Concretizando classificação: Passagem de mensagem Diga ao objeto o que ele tem de fazer!!! “Objeto, me dá o teu nome pra eu mostrar na tela!!!” Cliente (outro objeto) getNome Objeto “Objeto, imprima seu nome na tela!!!” Cliente (outro objeto) imprimirNome Objeto Pós-Sistemas de Informação - FAL 54 27 Visão concreta Concretizando especialização: Herança Inclua os atributos e métodos de uma (super)classe em suas (sub)classes Classe A Herança Classe B Compartilhamento A herda de B ou A estende B Pós-Sistemas de Informação - FAL 55 Visão concreta Concretizando polimorfismo: Variáveis polimórficas Polimorfismo Variáveis/Atributos podem manipular objetos de mais de um tipo específico Pessoa p Tipo p = new Pessoa Mesmo tipo p = new Aluno Subtipo Nome p = new Professor Pós-Sistemas de Informação - FAL 56 28 Visão concreta Concretizando polimorfismo: Ligação dinâmica Veiculo p • acelerar Polimorfismo Que método executar em tempo de execução??? p = new Veiculo • acelerar p = new Carro • acelerar p = new Bicicleta • acelerar Pós-Sistemas de Informação - FAL 57 Visão concreta Mão na massa!!! Utilize objetos da figura para exemplificar cada um dos conceitos concretos definidos anteriormente Pós-Sistemas de Informação - FAL 58 29 Avaliação Mão na massa!!! Entendendo o estudo de caso com OO! Identifique cada um dos conceitos aprendidos e “enxergue” o estudo de caso utilizando orientação a objetos Classificação Especialização Polimorfismo Pós-Sistemas de Informação - FAL 59 Análise Orientada a Objetos Análise de requisitos Descrição dos requisitos Métodos de análise UML – O que é? Pra que serve? Diagrama de casos de uso Modelo conceitual Analisando o estudo de caso! 30 Análise de requisitos Independente do paradigma utilizando, no contexto de desenvolvimento de software, tem-se uma análise de requisitos O que desenvolver? Como funciona o software? Quais são seus requisitos funcionais e não-funcionais? Quem são os usuários do sistema? Quais as funcionalidades referentes a cada usuário do sistema? Quem manda??? O cliente!!!! Pós-Sistemas de Informação - FAL 61 Análise de requisitos Durante a análise de requisitos, como descrever as informações obtidas (do cliente) Linguagem conhecida por todos os desenvolvedores Compartilhamento dos requisitos deve ser simples Novos desenvolvedores podem entrar na equipe A equipe pode ser completamente alterada Pós-Sistemas de Informação - FAL 62 31 Descrição dos requisitos Análise estruturada Modelo Entidade-Relacionamento Diagrama de Fluxo de Dados Envia sinal Requisita cliente Se não recebeu dados Espera recepção de dados Cliente Se recebeu dados Armazenamento Dados em memória Consulta Analisa dados Processos Devolve posição Pós-Sistemas de Informação - FAL Memoriza 63 Descrição dos requisitos Análise estruturada Modelo de fluxo de controle Sistemas dirigidos a eventos CSPEC – Especificação de controle PSPEC: especificação de processo Texto narrativo, equações, tabelas... Ex.: processar senha... Dicionário de dados Listagem organizada das definições de todos os elementos pertinentes ao sistema Pós-Sistemas de Informação - FAL 64 32 Métodos de análise Análise orientada a objetos É necessário haver uma forma de mapear os requisitos em entidades do mundo real Se estamos no mundo de objetos, o fluxo de controle/dados utilizado anteriormente não é suficiente Precisamos mapear os mundos dos requisitos para os modelos conceituais de objetos Enfim...como descobrir classes a partir de um conjunto de requisitos??? Pós-Sistemas de Informação - FAL 65 Métodos de análise Principais métodos OMT - Rumbaugh Booch Fusion (HP) Objectory - Jacobson Coad / Yourdon Martin / Odell Shlaer / Mellor Pós-Sistemas de Informação - FAL 66 33 Métodos de análise O objetivo do curso não é apresentar processos de desenvolvimento... ... portanto, o ciclo padrão de desenvolvimento de software, com Análise, Projeto e Implementação será seguido. Simplificação do CDI Documentação???? UML!!!! Redefinição de fases para processos atuais RUP – Fases diferentes: Análise, Elaboração, Implementação e Implantação XP – Foco inicial em testes, fase de refatoramento Pós-Sistemas de Informação - FAL 67 Unified Modeling Language Linguagem de Modelagem Unificada OMG – 1994 Booch, Rambaugh, Jacobson (“Três amigos”) Unificação de várias outras linguagens (Objectory, Booch, OMT,...) Não define um processo... é apenas uma linguagem!!! Processos: Rational Unified Process (RUP) – “Três amigos” eXtreme Programming (XP) Agile Modeling (AM) Ciclo de Desenvolvimento Iterativo (CDI) Object Modeling Technique (OMT) Pós-Sistemas de Informação - FAL 68 34 Unified Modeling Language UML serve para… Comunicação Desenvolvedores compartilham idéias e informações Documentação Facilidade de manutenção e atualização do software Construção Facilita o processo de definição do projeto de software Especificação Facilita a especificação dos requisitos do software Concepção Facilita a atividade de abstração e mapeamento do problema para o mundo de objetos Pós-Sistemas de Informação - FAL 69 Unified Modeling Language Elementos da UML Estruturais Qual o “desenho” do software? Comportamentais Como o software funciona? Agupamento Como as entidades lógicas (objetos) e físicas (entidades computacionais) são agrupadas Pós-Sistemas de Informação - FAL 70 35 Unified Modeling Language Diagramas da UML (Modelo estático) Casos de Uso Descrição das funcionalidades do sistema Classe Qual o modelo de classes do sistema? Objetos. Qual o modelo de objetos do sistema, ou seja, como as instâncias das classes se relacionam em tempo de execução? Componentes Como as classes estão organizadas em componentes binários??? Implantação Como é a arquitetura física do sistema??? Pós-Sistemas de Informação - FAL 71 Unified Modeling Language Diagramas da UML (Modelo dinâmico) Seqüência Como ocorre a interação entre as entidades em relação ao tempo? Colaboração Como ocorre a interação entre as entidades em relação à agrupamentos funcional, organização ou conjunto de classes? Estados Quais os “retratos” do estado do sistema e de cada instância de classe em tempo de execução? Atividades Quais as atividades relacionadas à execução do sistema, em termos dos seus estados? Pós-Sistemas de Informação - FAL 72 36 Unified Modeling Language Os diagramas UML serão apresentados durante o curso de acordo com a necessidade de uso Voltemos ao foco de análise... ... lembram??? Precisamos de uma maneira de descobrir possíveis classes a partir de requisitos De acordo com o CDI... Diagrama de Casos de Uso Modelo conceitual Pós-Sistemas de Informação - FAL 73 Diagramas de casos de uso Técnica simples e intuitiva Identificação dos requisitos de um sistema Mais especificamente, serve para: captar os requisitos dos usuários; identificar objetos e suas propriedades; particionar um sistema em partes conhecidas e compreendidas pelos usuários; facilitar a definição da melhor alternativa de projeto. Pós-Sistemas de Informação - FAL 74 37 Diagramas de casos de uso Mais especificamente, serve para: elaborar o plano de testes e aceitação do sistema; descrever a funcionalidade do sistema e criar a documentação para os usuários; estimar porte e esforço de desenvolvimento do sistema. Pós-Sistemas de Informação - FAL 75 Diagramas de casos de uso O que é um caso de uso??? Casos de uso são cenários que descrevem as diversas situações em que os usuários utilizam o sistema. O conjunto desses cenários descreve a funcionalidade do sistema. Pós-Sistemas de Informação - FAL 76 38 Diagramas de casos de uso Notação de casos de uso Sistema Fronteira do sistema Caso de uso 1 Ator 1 Caso de uso 2 Atores Ator 2 Caso de uso 3 Ator 3 Casos de uso Pós-Sistemas de Informação - FAL 77 Diagramas de casos de uso O que é descrito num diagrama de casos de uso? Seqüência de ações / interações que ocorrem durante uma determinada execução do sistema. Conjunto de cenários mostrando as diversas seqüências de interação entre os atores e o sistema. Diálogo realizado entre um usuário e o sistema para se atingir algum objetivo. Pós-Sistemas de Informação - FAL 78 39 Diagramas de casos de uso Exemplo: Sistema de vendas (Loja) Sistema Comprar produto Cliente Notificar promoções ... Adicionar/Remover produto Gerente ... Pós-Sistemas de Informação - FAL 79 Diagramas de casos de uso Exemplo: Sistema de agência de viagens Sistema Comprar passagem Passageiro Adquirir Ticket ... Listar passageiros Atendente ... Pós-Sistemas de Informação - FAL 80 40 Diagramas de casos de uso Exemplo: Sistema acadêmico Sistema Ver notas Aluno ... Gerenciar Notas Professor ... Gerenciar disciplina ... Administrador Pós-Sistemas de Informação - FAL 81 Diagramas de casos de uso Detalhando casos de uso Gerenciar Disciplina Adicionar Disciplina Gerenciar Disciplinas Remover Disciplina Editar Disciplina Pós-Sistemas de Informação - FAL 82 41 Diagramas de casos de uso Casos de uso: versão estendida Caso de uso: Adicionar disciplina Atores: Administrador Descrição: O administrador solicita a adição de disciplina ao sistema, repassando o nome e o código da disciplina a ser adicionada. O sistema retorna um ok caso a operação tenha sucesso. Seqüência de eventos Ação do ator 1. Administrador solicita adição de disciplina repassando nome e código. Resposta do Sistema 2. Sistema verifica se não há outra disciplina com mesmo código e adiciona disciplina. 3. Sistema retorna ok para Administrador. Pós-Sistemas de Informação - FAL 83 Diagramas de casos de uso Mão na Massa!!! Crie um diagrama de casos de uso para o sistema de informação de sua empresa Identifique os atores Identifique as funcionalidades do sistema Relacione as funcionalidades aos atores Escolha 3 casos de uso para descrevê-los de forma estendida! Pós-Sistemas de Informação - FAL 84 42 Modelo conceitual Já sabemos analisar os requisitos do software... ...vamos agora enxergar o problema de acordo com os conceitos da orientação a objetos Objetivo: identificar as classes que fazem parte do sistema Através da identificação de objetos Aplicação do “triângulo da OO” Para descrever os objetos que fazem parte do modelo utilizaremos a notação UML Pós-Sistemas de Informação - FAL 85 Modelo conceitual Notação UML para classe Bicicleta Bicicleta marchas cor pedalar frear Nome Atributos Bicicleta marchas cor Métodos Pós-Sistemas de Informação - FAL 86 43 Modelo conceitual Em análise, os métodos das classes podem ser omitidos A idéia do modelo conceitual é ter uma primeira visão de como os objetos do sistema se relacionam Relacionam???? Tipos de relacionamento: Herança Associação Agregação/Composição Pós-Sistemas de Informação - FAL 87 Modelo conceitual Descrevendo herança (relacionamento “é um”) Veiculo Veiculo Bicicleta Bicicleta CarroEsportivo Pós-Sistemas de Informação - FAL Carro CarroCorrida 88 44 Modelo conceitual Associação (relacionamento comum) estuda Aluno Assunto Bidirecional Disciplina matricula-se ensina Rótulos Direção do relacionamento Professor Pós-Sistemas de Informação - FAL 89 Modelo conceitual Agregação/Composição (“é composto de”) Carro Roda Motor Velocimetro Painel Relógio Pós-Sistemas de Informação - FAL Porta luvas 90 45 Modelo conceitual Cardinalidade 4 Roda 0..* * Carro 1 Motorista 1 Motor Painel 1 Velocimetro 1 Relógio 1 Porta luvas Pós-Sistemas de Informação - FAL 91 Modelo conceitual Mão na Massa!!! Crie um modelo conceitual para o sistema de informação de sua empresa Identifique as entidades do modelo Identifique as classes envolvidas Defina as associações entre as classes Pós-Sistemas de Informação - FAL 92 46 Avaliação Mão na Massa!!! Realize uma análise orientada a objetos do estudo de caso Casos de uso Modelo conceitual Pós-Sistemas de Informação - FAL 93 Projeto Orientado a Objetos Explodindo casos de uso: diagramas de interação Definindo classes, atributos e métodos: diagrama de classes Agrupando funcionalidades: pacotes Diagrama de pacotes Diagramas de Implementação Projetando o estudo de caso! 47 Explodindo casos de uso: diagramas de interação Como mapear os requisitos descritos nos casos de uso em métodos das classes??? Caso de uso 3 Ator 1 ... Classe C Caso de uso 2 Ator 2 Classe B ... Caso de uso 1 Ator 3 Classe A Classe D ... Pós-Sistemas de Informação - FAL 95 Explodindo casos de uso: diagramas de interação Diagramas de interação modelagem dos aspectos dinâmicos do sistema mostra uma interação formada por um conjunto de objetos e seus relacionamentos, incluindo as mensagens que poderão ser trocados entre eles Interação = Objetos + Vínculos + Mensagens Dois tipos Diagramas de seqüência Diagramas de colaboração Pós-Sistemas de Informação - FAL 96 48 Explodindo casos de uso: diagramas de interação Diagramas de Seqüência Descrevem um comportamento interno Mostram os eventos entre objetos Descrevem uma interação no tempo Ideal para especificações de tempo real Não mostram os tipos de associação entre objetos Pós-Sistemas de Informação - FAL 97 Explodindo casos de uso: diagramas de interação Diagramas de Seqüência Possui duas características que os diferencia de diagramas de colaboração: Linha de vida do objeto Representa a existência de um objeto de acordo com o tempo Foco de controle Representa o período em que o objeto está executando algum processamento Pós-Sistemas de Informação - FAL 98 49 Explodindo casos de uso: diagramas de interação Diagramas de Seqüência Que interação/cenário iremos modelar? Conexão telefônica! 2 1 tu O chamador inicia a chamada 3 .. u.. uu u uu uu uu u uu Sinal de linha Discar 5 trim 6 4 m mm . tri m.. m tr im mm ... trim mm Toca no chamador Conexão estabelecida! Toca no receptor Pós-Sistemas de Informação - FAL 99 Explodindo casos de uso: diagramas de interação Objetos Diagramas de Seqüência Ator Linha de tempo Chamador :Telefone t = 0s levanta telefone t = 5s ouve o sinal t = 15s t = 20s :Recebedor Linha de vida disca toca campainha toca campainha Período de atividade atende pare de tocar t = 30s pare de tocar Fim da linha! Pós-Sistemas de Informação - FAL 100 50 Explodindo casos de uso: diagramas de interação Diagramas de Colaboração Representam interações entre classes O eixo dos tempos não está explicito As classes/objetos trocam mensagens, através de vínculos, ligações estabelecidas entre elas São semelhantes aos diagramas de seqüência, contendo as mesmas informações Pós-Sistemas de Informação - FAL 101 Explodindo casos de uso: diagramas de interação Diagramas de Colaboração Possui duas características que os diferencia de diagramas de seqüência: Caminho Existe o caminho para indicar como um objeto esta vinculado a outro Número de seqüência Ordem temporal de uma mensagem Pós-Sistemas de Informação - FAL 102 51 Explodindo casos de uso: diagramas de interação Diagramas de Colaboração Objetos Seqüência 1:procura assunto :GerenteMaterial 3.1:pede detalhes es çõ op e ec orn 2:f 3:pede detalhes :Livro Usuário 3.2:detalhes Ator Pós-Sistemas de Informação - FAL 103 Explodindo casos de uso: diagramas de interação Voltemos à pergunta: “Como mapear os requisitos descritos nos casos de uso em métodos das classes???” Exemplo: Sistema acadêmico Ver boletim Aluno ... Gerenciar Notas Professor ... Gerenciar disciplina Administrador ... Pós-Sistemas de Informação - FAL 104 52 Explodindo casos de uso: diagramas de interação Explodindo “Ver boletim” Ver boletim Quais as entidades envolvidas? Atores Aluno Entidades do modelo conceitual Aluno Nota Boletim Disciplina Pós-Sistemas de Informação - FAL 105 Explodindo casos de uso: diagramas de interação Descrição estendida do caso de uso Caso de uso: Ver notas Descrição: o aluno solicita ao sistema a visualização do boletim, o sistema retorna o boletim do aluno de acordo com as disciplinas que ele faz parte. Seqüência de eventos: Ação do ator Resposta do sistema 1. Aluno solicita a visualização do seu boletim repassando sua matrícula. 2. Sistema recupera boletim do aluno. 3. Sistema exibe o boletim ao aluno. Pós-Sistemas de Informação - FAL 106 53 Explodindo casos de uso: diagramas de interação Mão na massa!!! Crie um diagrama de seqüência e um diagrama de colaboração para o caso de uso “ver boletim”. Atores Entidades do modelo conceitual Aluno Nota Boletim Aluno Disciplina Pós-Sistemas de Informação - FAL 107 Explodindo casos de uso: diagramas de interação Diagrama de seqüência Aluno aluno1:Aluno :Boletim :Nota :Disciplina novo(“Hyggo”) exibir() getValor() retorna valor getNome() retorna nome mostrarNaTela Pós-Sistemas de Informação - FAL 108 54 Explodindo casos de uso: diagramas de interação Diagrama de colaboração 1:novo(“Hyggo”) 2:exibir() aluno1:Aluno Aluno :Boletim r() r alo lo tV va e g a : 1 rn 2. to re 2: . 2 2.5:mostrarNaTela 2. 4: re 2. to 3: rn ge a tV va alo lo r() r :Nota :Disciplina Pós-Sistemas de Informação - FAL 109 Definindo classes, atributos e métodos: diagrama de classes Reduzindo o abismo aluno1:Aluno Ver boletim :Boletim :Nota :Disciplina novo(“Hyggo”) exibir() getValor() retorna valor getNome() retorna nome mostrarNaTela Setas chegando!!! Métodos implementados pela classe alvo!!! Algumas são retornos de métodos!!! Pós-Sistemas de Informação - FAL 110 55 Definindo classes, atributos e métodos: diagrama de classes Reduzindo o abismo Transformando um modelo conceitual em um diagrama de classes!!! cursa Aluno Retornos novo(nome):nulo Disciplina Boletim Parâmetro + getNome():nome + exibir():nulo - mostrarNaTela() ??? Métodos Nota + getValor():valor Pós-Sistemas de Informação - FAL 111 Definindo classes, atributos e métodos: diagrama de classes Mas o que é “valor” e “nome”??? Melhor trabalhar com os tipos!!! Aluno novo(nome):nulo ??? Tipo: String Rep: cadeia de caracteres Exemplo: “joão”, “carro”,... Disciplina + getNome():nome ??? Nota + getValor():valor Tipo: int Rep: número inteiro Exemplo: 10, 9, 8923,... ??? Tipo primitivo (POO) Pós-Sistemas de Informação - FAL 112 56 Definindo classes, atributos e métodos: diagrama de classes Diagrama de classes Definindo tipos de parâmetros e retornos cursa Aluno novo(String nome):void Disciplina Tipo do parâmetro + getNome():String Tipo do retorno Boletim + exibir():void - mostrarNaTela():void Nota + getValor():int Pós-Sistemas de Informação - FAL 113 Agrupando funcionalidades: pacotes Na medida em que cresce o número de classes vai ficando mais difícil entender o projeto Classes acopladas Muitos relacionamentos Classes não separadas por contexto Contextos das classes Interface Relatório Armazenamento Negócio Pós-Sistemas de Informação - FAL CAOS!!! 114 57 Agrupando funcionalidades: pacotes Facilidade de entendimento e manutenção do programa Alta coesão das funcionalidades Agrupar funcionalidades relacionadas em “pacotes” BD Relatório Negócio Interface Pós-Sistemas de Informação - FAL 115 Diagrama de pacotes Relacionamentos entre os diversos pacotes podem ser descritos em um diagrama de pacotes Interface Dependências Negócio Banco de dados Relatório Pós-Sistemas de Informação - FAL 116 58 Diagramas de implementação Descrição do projeto físico necessário à execução do software Diagrama de componentes Descrição de relacionamentos entre módulos binários Diagrama de implantação Descrição de componentes físicos com algum tipo de processamento Pós-Sistemas de Informação - FAL 117 Diagramas de implementação Diagrama de componentes Classes e pacotes, quando compilados, tornam-se módulos binários... de execução de software No caso de Java, os módulos binários são encapsulados em arquivos .JAR (Java ARchive) No diagrama de componentes tem-se uma visão do relacionamento entre módulos binários do software sendo desenvolvido Pós-Sistemas de Informação - FAL 118 59 Diagramas de implementação Diagrama de componentes Dependências agenda.jar dados.xml usuario.ini relatorio.jar Unidades binárias (componentes) Pós-Sistemas de Informação - FAL 119 Diagramas de implementação Diagrama de implantação Arquitetura física do sistema Utilizado para descrever o sistema do ponto de vista de hardware Nome Nó = qualquer dispositivo com capacidade de processamento Pós-Sistemas de Informação - FAL 120 60 Diagramas de implementação Diagrama de implantação Cardinalidade 1 Servidor BD Cliente* Agenda * Impressora Servidor1 Impressão Pós-Sistemas de Informação - FAL 121 Diagramas de implementação Pacotes Implantação A junção dos diagramas descreve a estrutura completa do software de forma hierárquica agenda.jar Pós-Sistemas de Informação - FAL Classes Negócio Cliente (Agenda) 122 61 Projetando o estudo de caso! Realize o projeto orientado a objetos do estudo de caso A partir dos diagramas de caso de uso crie diagramas de interação Seqüência e colaboração A partir dos diagramas de interação crie o diagrama de classe completo Classes Atributos Métodos Visibilidade Cardinalidade Relacionamentos Pacote “agenda” Pós-Sistemas de Informação - FAL 123 Programação Orientada a Objetos Da modelagem ao software Introdução à linguagem Java “Oi, eu sou um programa Java!” Mapeando conceitos para elementos da linguagem Programando o estudo de caso! 62 Da modelagem ao software Como mapear os modelos orientados a objetos em programas??? ??? Mas antes disso... ... o que é um programa??? Pós-Sistemas de Informação - FAL 125 Da modelagem ao software O que são programas? Descrições de como os computadores devem operar para realizar os serviços que desejamos que façam É apenas a descrição de uma atividade em potencial Para obter o serviço é necessário instruir o computador a executar o programa Um programa em execução é um processo Pós-Sistemas de Informação - FAL 126 63 Da modelagem ao software Em que consiste um programa? Uma seqüência de instruções que um programa deve seguir Então... construir um programa é determinar estas seqüência de instruções Exemplo: programa pra calcular média aritmética 1: calcule a média aritmética de dois números Está correto! Mas o computador não vai entender! Pós-Sistemas de Informação - FAL 127 Da modelagem ao software Programar é detalhar!!! 1: leia os números cuja média será calculada 2: some os números 3: divida a soma dos números pela quantidade de números 4: imprima o resultado Está mais detalhado! Mas o computador entende esta linguagem??? Pós-Sistemas de Informação - FAL 128 64 Da modelagem ao software Linguagens de programação Os programas escritos anteriormente estão em português Mas o computador não entende português Linguagens de programação são projetadas para serem entendidas pelo computador Sendo assim, ao escrever um programa utilizando uma LP, este poderá ser “interpretado” e executado pelo computador Pós-Sistemas de Informação - FAL 129 Da modelagem ao software Linguagens de programação Em geral provê: Um conjunto básico de instruções Mecanismos para compor instruções Repetição, seqüência, alternativa Mecanismos de abstração Procedimentos e dados Pós-Sistemas de Informação - FAL 130 65 Introdução à Java O que é Java? Uma das mais modernas linguagens de programação OO que existem atualmente Implementa de forma clara os conceitos de OO É uma “extensão” da linguagem C/C++ Mais fácil de utilizar Mais robusta!!! Pós-Sistemas de Informação - FAL 131 Introdução à Java Programação não é o foco do curso Apenas conceitos básicos serão apresentados Necessários à execução do programa Apenas a parte OO será abordada, respondendo à pergunta: “Como ocorre o mapeamento dos modelos UML para Java” Para realmente criar programas Estudar algoritmos Estudar a sintaxe da linguagem Praticar muito!!! Pós-Sistemas de Informação - FAL 132 66 Introdução à Java Criando uma classe-exemplo Bicicleta Bicicleta public class Bicicleta{ private int marchas = 2; private String cor = “amarelo”; - marchas:int - cor: string + getMarchas():int + getCor(): string public int getMarchas(){ return marchas; } public String getCor(){ return cor; } } Pós-Sistemas de Informação - FAL 133 Introdução à Java Tipos de dados em Java (primitivos) Inteiros: byte / short / int / long Reais: float / double Outros: char / boolean / void Não são classes, apenas tipos byte numeroPequeno = 245; double minhaNota = 9.5; int numeroMaior = 245000; boolean souBonito = true; char primeiraLetra = ‘H’; Pós-Sistemas de Informação - FAL 134 67 Introdução à Java Mas como o computador entende Java??? Compilador/Interpretador 00001111010010 10010011010110 10100110 Compilador/ Interpretador public class Bicicleta{ ... } Java Binário Pós-Sistemas de Informação - FAL 135 “Oi, eu sou um programa Java” Onde é que a brincadeira começa??? Nas classes são definidas apenas as entidades, seus atributos e operações Mas quem invoca/solicita as operações??? Precisamos de um método principal onde a execução do programa começa!!! Em Java, o método principal = main Pós-Sistemas de Informação - FAL 136 68 “Oi, eu sou um programa Java” TestePrincipal (Exibindo a mensagem acima) Qualquer classe pode ter um método principal Esta é a sintaxe exata do método!!! public class TestePrincipal{ public static void main(String args[]){ System.out.println(“Oi, eu sou um programa Java”); } } Comando para exibir mensagens na tela!!! Pós-Sistemas de Informação - FAL 137 “Oi, eu sou um programa Java” Definindo variáveis Exemplo: Cálculo da média de duas notas: 5 e 6 public class TestePrincipal{ public static void main(String args[]){ double nota1 = 5; double nota2 = 6; double media = (nota1+nota2)/2; System.out.println(“Média:” + media); Variáveis } } Pós-Sistemas de Informação - FAL 138 69 “Oi, eu sou um programa Java” Atribuição: = int a = 2; char letra = ‘c’; boolean acesa = true; Aritméticos: + - * / % 2 + 2, a - a, 3*a, letra + letra Unários: a++; ++ -a = a+1; Lógicos: a--; a=a-1; = = != < > <= > 2 == 2; a == a; 5 > 3; a != 3; true != false; Pós-Sistemas de Informação - FAL 139 “Oi, eu sou um programa Java” Utilizando operadores public class TestePrincipal{ public static void main(String args[]){ int a = 1; System.out.println(a); a++; System.out.println(a); System.out.println(a > 2); System.out.println(a != 1); } } Pós-Sistemas de Informação - FAL 140 70 “Oi, eu sou um programa Java” Até agora, só classes... e como criar objetos a partir de uma classe??? Operador new public class TestePrincipal{ public static void main(String args[]){ Bicicleta minhaBike = new Bicicleta(); System.out.println(“Cor:” + minhaBike.getCor()); System.out.println(“Marchas:” + minhaBike.getMarchas()); } } Pós-Sistemas de Informação - FAL 141 “Oi, eu sou um programa Java” Parametrizando o método construtor de Bicicleta Não inicializados! Método construtor com mesmo nome da classe e sem retorno public class Bicicleta{ private int marchas; private String cor; public Bicicleta(int marchas, String cor){ this.marchas = marchas; this.cor = cor; } Atribuição: this resolve problema de nomes duplicado Pós-Sistemas de Informação - FAL Parâmetros necessários à construção 142 71 “Oi, eu sou um programa Java” Construindo o objeto via construtor parametrizado public class TestePrincipal{ public static void main(String args[]){ Bicicleta minhaBike1 = new Bicicleta(2, “verde”); System.out.println(“Cor 1:” + minhaBike1.getCor()); System.out.println(“Marchas 1:” + minhaBike1.getMarchas()); Bicicleta minhaBike2 = new Bicicleta(7, “azul”); System.out.println(“Cor 2:” + minhaBike2.getCor()); System.out.println(“Marchas 2:” + minhaBike2.getMarchas()); } } Pós-Sistemas de Informação - FAL 143 “Oi, eu sou um programa Java” Mão na massa!!! Crie as classes Pessoa e Carro Crie dois atributos e seus métodos de acesso (get) Utilize a classe TestePrincipal para criar dois objetos do tipo Pessoa e dois objetos do tipo Carro com atributos diferentes Pós-Sistemas de Informação - FAL 144 72 Mapeando conceitos para elementos da linguagem Como fazer herança??? Carro - cor:String; - chassi:int; + getCor():String; + getChassi():int; Carro CarroF1 - tipoBico:String; + getTipoBico():String; Carro de F1 Pós-Sistemas de Informação - FAL 145 Mapeando conceitos para elementos da linguagem Carro - cor:String; - chassi:int; + getCor():String; + getChassi():int; CarroF1 - tipoBico:String; + getTipoBico():String; public class Carro{ private String cor; private int chassi; public Carro(String cor, int chassi){ this.cor = cor; this.chassi = chassi; } ...gets... } public class CarroF1 extends Carro{ private String tipoBico; public CarroF1(String cor, int chassi, String tipoBico){ super(cor, chassi); this.tipoBico = tipoBico; } ...getTipoBico... } Pós-Sistemas de Informação - FAL 146 73 Mapeando conceitos para elementos da linguagem Associação e Agregação/Composição Carro 1 Atributo - coleção 4 Marcha 1 Roda Volante Aluno Atributos simples Professor Pós-Sistemas de Informação - FAL 147 Mapeando conceitos para elementos da linguagem Agregação/Composição e Associação Atributos simples (relacionamentos 1 para 1) Um atributo para cada instância??? Ou seja, n atributos??? Carro 1 Marcha 1 Volante public class Carro{ private Marcha marcha; private Volante volante; public Carro(Marcha marcha, Volante volante){ this.marcha = marcha; this.volante = volante; } } Pós-Sistemas de Informação - FAL 148 74 Mapeando conceitos para elementos da linguagem Agregação/Composição Atributos de coleção (relacionamentos 1 para n) Um atributo para cada instância??? Ou seja, n atributos??? Carro 4 Roda public class Carro{ private Marcha marcha; private Volante volante; private Roda roda1; private Roda roda2; private Roda roda3; private Roda roda4; ... } Pós-Sistemas de Informação - FAL 149 Mapeando conceitos para elementos da linguagem Agregação/Composição Problema??? E se for um time de futebol??? Relacionamento entre Time e Jogador é 1 para 12. Time 12 Jogador public class Time{ private Jogador jogador1; private Jogador jogador2; ... private Jogador jogador12; ... } Pós-Sistemas de Informação - FAL 150 75 Mapeando conceitos para elementos da linguagem Agregação/Composição Precisamos de um “saco” para guardar vários objetos de um mesmo tipo Precisamos de um array Roda[ ] rodas = new Roda[4]; Array de rodas!!! Atributo = coleção de “Roda” Pós-Sistemas de Informação - FAL 151 Mapeando conceitos para elementos da linguagem Agregação/Composição Usando array!!! Carro 4 Roda public class Carro{ private Roda[ ] rodas; } Pós-Sistemas de Informação - FAL 152 76 Mapeando conceitos para elementos da linguagem Agregação/Composição Usando array!!! public class TestePrincipal{ public static void main(String args[]){ Marcha minhaMarcha = new Marcha(); Volante meuVolante = new Volante(); Roda[ ] rodas = new Roda[4]; rodas[0] = new Roda(“Dianteira direita”); rodas[1] = new Roda(“Dianteira esquerda”); rodas[2] = new Roda(“Traseira direita”); rodas[3] = new Roda(“Traseira esquerda”); Carro meuCarro = new Carro(minhaMarcha, meuVolante, rodas); } } Pós-Sistemas de Informação - FAL 153 Mapeando conceitos para elementos da linguagem Mão na massa!!! Implementem o exemplo completo!!! Carro + getRodas() 1 Marcha 4 Roda 1 Volante - posicao:String + getPosicao():String Pós-Sistemas de Informação - FAL 154 77 Programando o estudo de caso Implemente o estudo de caso modelado anteriormente (Agenda) 1. Crie o pacote agenda!!! Comando package!!! Use o Eclipse!!! 2. 3. Crie as classes e os seus relacionamentos Crie uma ClassePrincipal que realiza uma operação de busca de contatos por nomes Pós-Sistemas de Informação - FAL 155 Programando o estudo de caso Pra facilitar o entendimento... todos iniciarão programando de acordo com o mesmo projeto simples Contato Agenda + buscarContato():Contato 5 - nome:String - end:String - telefone:String - email:String + gets... public class ClassePrincipal{ public static void main(String args[]){ Agenda minhaAgenda = new Agenda(); Contato contato = minhaAgenda.buscarContato(“Hyggo”); System.out.println(“Nome:” + contato.getNome()); System.out.println(“Endereço:” + contato.getEnd()); System.out.println(“Telefone:” + contato.getTelefone()); System.out.println(“E-mail:” + contato.getEmail()); Pós-Sistemas de Informação - FAL } } 156 78 Programando o estudo de caso Vocês vão precisar de três novos comandos: if, for e equals Estrutura condicional – IF If (condição){ ... }else{...} Exemplo: if (a == b){ System.out.println(“A e B são iguais!!!”) }else{ System.out.println(“A e B são diferentes!!!”) } Pós-Sistemas de Informação - FAL 157 Programando o estudo de caso Vocês vão precisar de três novos comandos: if, for e equals Estrutura de repetição – FOR for (declaração de variáveis locais ; condição de parada; incrementos){ \\código executado repetidas vezes } for (int i=0; i<10; i++){ System.out.println(“Contador:” + i); } Pós-Sistemas de Informação - FAL 158 79 Programando o estudo de caso Vocês vão precisar de três novos comandos: if, for e equals Método de comparação entre objetos – equals “objeto.equals(outroObjeto)” = true/false Ex.: “hyggo”.equals(“hyggo”) = true; Ex.: “hyggo”.equals(“HYGGO”) = false; String nome1 = “João”; String nome2 = “José”; if (nome1 == nome2){ System.out.println(“Nomes são iguais!!!”) }else{ System.out.println(“Nomes são diferentes!!!”) } Pós-Sistemas de Informação - FAL 159 Programando o estudo de caso Utilizando for, if e equals no método buscarContato public class Agenda{ private Contato[] contatos = new Contato[20]; public Contato buscarContato(String nome){ for (int i=0; i<this.contatos.length;i++){ if (contato[i].getNome().equals(nome)){ return contato[i]; } } System.out.println("Contato não encontrado!"); return new Contato(“”,””,””,””); } } Pós-Sistemas de Informação - FAL 160 80