Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Curso de Sistemas de Informação Prof. Robson Alves prof.robson.campelo@gmail.com AULAS 3 e 4 Programação III 1 1 1 2 Agenda Recapitulando a aula anterior veremos com mais detalhes... Conceitos de Orientação a Objetos – Parte 1 Objeto Mensagens Classe Encapsulamento Métodos 2 2 3 Agenda Conceitos de Orientação a Objetos – Parte 2 Construtores Instanciação Herança Polimorfismo Classes abstratas e Concretas Interfaces 3 3 Conceitos de Orientação a Objetos PARTE 1 Conceitos de Orientação a Objetos Objeto: É uma representação de uma entidade do mundo real Na modelagem de um sistema orientado a objetos, todos os elementos importantes são considerados objetos: Ex. Cliente, Fornecedor, Produto, Conta, Conta Especial etc. 5 Conceitos de Orientação a Objetos Todo objeto possui: Identidade único e pode ser distinguido de outros objetos Estado determinado pelos dados contidos no objeto Comportamento é definido pelos serviços/operações que ele oferece 6 Imaginemos que precisamos fazer a modelagem de um Sistema de Gestão Hospitalar, que tipos de objetos podemos identificar nesse sistema? 7 8 Paciente Médico Material Medicamento Nota Atendimento Requisição Paciente etc 9 Como distinguir um objeto Médico de outros? Geralmente pelo atributo id (identidade) Ex.: Id; Nome do médico; Especialidade CRM; 10 Qual o estado de um objeto Médico? Informações contidas num dado momento Ex.: id= 001 Nome do médico= José Almeida Especialidade= Clínico Geral CRM= 2548 11 Qual o comportamento de um objeto Médico? São ações que o objeto pode fazer no sistema Ex.: gravarMedico atualizarDados excluirDados gravarRequisição 12 Atividade de Classe Considerando um objeto Carro: Quais atributos e identidade do objeto podemos identificar? Qual estado do objeto podemos encontrar em dado momento? Qual comportamento pode ser identificado no objeto? (2 min para a atividade – para entregar no final da aula) 13 Atividade de Classe Identidade: Id= KFU6666 Estado: Cor= vermelho Modelo= fusca Marca=Volkswagen Comportamento: Acelerar(); Frear(); Andar(); Conceitos de Orientação a Objetos Mensagens: Uma mensagem é a maneira pela qual um objeto-emissor X dirige para um objeto-alvo Y uma solicitação para que o objeto Y aplique um de seus métodos. O envio de uma mensagem é como a chamada tradicional a uma função ou procedimento 14 Conceitos de Orientação a Objetos 15 Exemplo: Conceitos de Orientação a Objetos 16 Exemplo em uma classe: Conceitos de Orientação a Objetos 17 Atividade de Classe: Escrevam uma classe Funcionário com um método imprimirDocumento() que simplesmente chama: System.out.println("Imprimindo documento"); Escrevam uma classe Gerente que possui o método imprimirDocumento(Funcionario f) tendo um objeto do tipo funcionario como parâmetro que faz uma chamada ao método contido na classe Funcionário. Por fim, escrevam uma classe Teste com um método main que cria os dois objetos, chama o método do objeto Gerente passando o objeto Funcionário como parâmetro. (3 min – Entregar no final da aula) Conceitos de Orientação a Objetos 18 Resolução da Atividade: Conceitos de Orientação a Objetos 19 Resolução da Atividade: Conceitos de Orientação a Objetos 20 Pergunta: Que mecanismo foi estabelecido no relacionamento entre os objetos Funcionário e Gerente? R.: Troca de mensagens entre os objetos Conceitos de Orientação a Objetos Classe: É o modelo que descreve um objeto. É uma abstração de um conjunto de objetos similares do mundo real Dizemos que um objeto é uma instância de uma Classe 21 C Conceitos de Orientação a Objetos Notação de Classe: Diagrama de modelagem dos atributos e comportamentos de uma Classe Nome da Classe Atributos Métodos Pessoa Nome Data Nasc. CPF Acordar Comer Dormir 22 Conceitos de Orientação a Objetos Toda classe pode ter: Atributos; Métodos; Construtores; Outras classes. 23 Conceitos de Orientação a Objetos Atributos: São propriedades ou elementos que representam o estado de um determinado objeto Ex.: Cliente Nome; CPF; RG; Endereço; Estado Civil; ... 24 Conceitos de Orientação a Objetos Declaração de Atributos: private static final int TAMANHO = 200; private int indice = 0; private String nome, cpf; 25 Conceitos de Orientação a Objetos Modificadores: Palavras reservadas na linguagem Java que definem como uma Classe ou membro (atributo ou método) poderá ser acessado por outros elementos do Sistema Modificadores de acesso public, protected e private Outros modificadores static, final, abstract transient, synchronized 26 Conceitos de Orientação a Objetos Public: Todas as outras classes tem acesso ao método ou atributo Protected: Somente as classes que tiverem o relacionamento de herança terão acesso ou as que pertencem a um mesmo pacote Private: Somente os membros da própria classe têm acesso, às outras classes este é restrito “default”: se não for indicado o modificador de acesso, ele é “implicitamente’ definido como sendo visível para objetos de classes do mesmo pacote. 27 Conceitos de Orientação a Objetos 28 Para entendermos melhor como funcionam os modificadores de acesso, é preciso compreender que a linguagem Java é centrada no uso de pacotes para uma boa organização do código Conceitos de Orientação a Objetos 29 Na classe Carro temos: O atributo modelo foi definido como de acesso público Conceitos de Orientação a Objetos 30 Na classe TesteCarro temos: O atributo modelo é visível pela classe TesteCarro mesmo estando em outro pacote Conceitos de Orientação a Objetos 31 Na classe Carro se modificarmos o modificador para private: Conceitos de Orientação a Objetos 32 Na classe TesteCarro temos: O atributo modelo é não é mais visível pela classe TesteCarro Conceitos de Orientação a Objetos 33 Na classe Carro se modificarmos o acesso para default (basta não utilizar nenhum modificador): Conceitos de Orientação a Objetos 34 Na classe TesteCarro temos: O atributo modelo ainda não é visível pela classe TesteCarro Conceitos de Orientação a Objetos 35 Entretanto, para classe TesteCarroB: O atributo é visível porque está no mesmo pacoteA da classe Carro Conceitos de Orientação a Objetos 36 Por fim, na classe Carro mudamos o acesso para protected: Conceitos de Orientação a Objetos 37 Para classe Fusca, que estende Carro, o atributo é visível APENAS por herança: Conceitos de Orientação a Objetos Final: Em atributos: Torna o atributo uma constante O atributo não pode ser alterado depois de inicializado Em classes: As classes com final não podem ser estendidas 38 Conceitos de Orientação a Objetos Exemplos: 39 Conceitos de Orientação a Objetos Static: Atributo de classe: os atributos static pertencem à classe e não aos objetos. Não é necessário instanciar para usá-los. Ex.: Math.PI Só uma cópia do atributo para todos os objetos daquela classe O atributo é static são usados como constantes Uso baseado no nome da classe: use o nome da classe para ter acesso ao atributo. 40 Conceitos de Orientação a Objetos Exemplo: 41 Conceitos de Orientação a Objetos 42 Atividade de Classe: Escrevam uma classe Cores com os seguintes atributos String públicos, final e static: PRETO, AZUL e VERMELHO; todos estes atributos são inicializados com uma string com o mesmo nome da cor. Escrevam uma classe TesteCores com um método main que imprime os valores contidos nos atributos da classe Cores (3 min – Entregar no final da aula) Conceitos de Orientação a Objetos 43 Resolução: Conceitos de Orientação a Objetos 44 Perguntas: Por que não é necessário criar um objeto da classe Cores (Ex. new Cores()) para ter acesso aos seus atributos? O que ocorre caso tente-se alterar o valor desses atributos na classe Teste? Caso os atributos tivessem sido definidos como de acesso private, teriam alguma utilidade para outras classes? Conceitos de Orientação a Objetos Encapsulamento: É o resultado ou ato de ocultar os detalhes de implementação do objeto, métodos (operações ou comportamentos) e atributos (dados) dentro de uma classe. 45 Conceitos de Orientação a Objetos Exemplo de Encapsulamento: 46 Conceitos de Orientação a Objetos Métodos: São operações que realizam ações (consulta e alteração) sobre o estado (dados) do objeto responsável por suas chamadas (execução). Definem o comportamento de um objeto ou as ações que este pode fazer em um sistema Ex.: Cliente verificarSaldoConta(); efetuarSaqueConta(); depositarValor() ... 47 Conceitos de Orientação a Objetos Declaração de Métodos: 48 public boolean existe(String numero) modificador retorno nome ( parâmetros ) Conceitos de Orientação a Objetos Métodos e modificadores: protected: podem ser chamados por objetos de classes dentro do mesmo pacote ou de qualquer subclasse da classe na qual ele foi definido “default”: não definido o modificador para o método, este será acessível apenas pelos objetos de classes do mesmo pacote. Static: não precisam de instância para serem executados, são métodos de classe 49 Conceitos de Orientação a Objetos Exemplo 1: 50 Conceitos de Orientação a Objetos Exemplo 2: 51 Conceitos de Orientação a Objetos PARTE 2 Conceitos de Orientação a Objetos Construtores: Métodos especiais responsáveis pela inicialização dos atributos de uma Classe na sua instanciação Estes podem ser: Default: definidos implicitamente na Classe pelo Java, caso não seja especificado explicitamente A partir do momento em que se especifica um Construtor, o construtor default não é mais gerado 53 Conceitos de Orientação a Objetos Exemplos de Construtores: 54 Conceitos de Orientação a Objetos Instanciação: É a criação de um objeto a partir da referência a uma Classe É feita uma chamada ao construtor da classe que pode ser o default ou um que tenha sido especificado 55 Conceitos de Orientação a Objetos Exemplos de Instanciação A palavra reservada new avisa ao Java para Criar um Objeto do tipo Pessoa chamando o Construtor da Classe 56 Conceitos de Orientação a Objetos A partir do momento em que se instancia um Objeto de uma classe, passa-se a obter acesso aos seus membros definidos como public 57 Conceitos de Orientação a Objetos 58 Atividade de Classe: Escrevam uma classe Aluno com 3 atributos privados: String matricula, String nome e int idade; a seguir escrevam 2 construtores para a classe Aluno: um que recebe matricula e nome do aluno e outro que recebe nome e idade. Escrevam uma classe TesteAluno que em seu método main cria dois objetos Aluno diferentes cada um chamando um construtor. (3 min – Entregar no final da aula) Conceitos de Orientação a Objetos 59 Resolução: Conceitos de Orientação a Objetos 60 Resolução: Conceitos de Orientação a Objetos 61 Perguntas: O que ocorre caso tente-se criar um objeto Aluno usando o construtor padrão sem parâmetros (new Aluno())? O que ocorre caso tente-se chamar um método de um objeto sem que este tenha sido instanciado? Conceitos de Orientação a Objetos Herança: Mecanismo que permite definir uma nova classe (subclasse) a partir de uma classe já existente (superclasse) Evita repetição de código, já que as “classes-filhas” herdam atributos e comportamento da “classe-pai” 62 Conceitos de Orientação a Objetos Exemplo de Herança: Utiliza-se a palavra reservada extends para definir a Herança. 63 Conceitos de Orientação a Objetos Princípio da Substituição em Herança: Toda Poupança é um conta, mas nem toda conta é uma poupança 64 Conceitos de Orientação a Objetos 65 Conta { Creditar(valor); Debitar(valor); getSaldo(); } Poupança extends Conta{ renderJuros(valor); } Conceitos de Orientação a Objetos 66 ... Conta contaAlfa; contaAlfa = new Poupanca( ); contaAlfa.creditar(1000.00); contaAlfa.debitar(500.00); System.out.println(contaAlfa.getSaldo( )); ... Conceitos de Orientação a Objetos 67 Typecast (Conversão de tipo) ... Conta c1; c1 = new Conta( ); ( (Poupanca) c1 ).renderJuros(0.05); System.out.println( c1.getSaldo( ) ); ... Conceitos de Orientação a Objetos 68 Operador instanceof Retorna valor booleano após verificar se uma classe é daquele tipo Deve ser usado antes de se fazer um cast, evitando erros. ... if (c1 instanceof Poupanca) ( (Poupanca) c ).renderJuros (0.05); else System.out.println( “Objeto não é do tipo Poupanca”); ... Conceitos de Orientação a Objetos Polimorfismo: Etimologicamente, quer dizer “várias formas”. É a capacidade de um objeto responder a uma mensagem de uma maneira peculiar a ele mesmo. 69 Conceitos de Orientação a Objetos Exemplo de Polimorfismo 70 Conceitos de Orientação a Objetos 71 O polimorfismo é importante para definirmos um comportamento específico para um determinado objeto Figura Geométrica: calcularArea() A = L2 A = x R2 A = B x H Conceitos de Orientação a Objetos 72 Atividade de Classe: Escrevam uma classe Pessoa com um método imprimirDados(); Escrevam as classes PessoaFisica e PessoaJuridica, ambas estendendo a classe Pessoa; Sobrescrevam o método imprimirDados em cada uma onde: em PessoaFisica imprime o CPF e em PessoaJuridica imprime o CNPJ (3 min – Entregar no final da aula) Conceitos de Orientação a Objetos 73 Resolução: Conceitos de Orientação a Objetos Classes Abstratas: Usamos classes abstratas para representar grupos que tem características comuns, mas que, em alguns detalhes específicos, agem de maneira diferente (Ex. Funcionário: Gerente, Presidente, Diretor) Construção de uma hierarquia consistente de classes Clareza no polimorfismo Simplicidade no reuso de código 74 Conceitos de Orientação a Objetos É declarada com o modificador abstract: public abstract class Cliente Não pode ser instanciada Pode fornecer construtores para maximizar o reuso nas subclasses 75 Conceitos de Orientação a Objetos 76 Se houver um único método abstrato na Classe, esta obrigatoriamente deverá ser abstrata Conceitos de Orientação a Objetos Algumas observações: Uma classe final não pode ser abstrata Uma classe final não pode possuir métodos abstratos Os métodos private, static e final não podem ser abstratos Uma classe sem métodos pode ser definida como abstrata, para não ser possível instanciá-la 77 Conceitos de Orientação a Objetos Classes Abstratas versus Classes Concretas As Classes Abstratas não possuem instâncias diretas, mas suas classes descendentes possuem As Classes Concretas são instanciáveis 78 Conceitos de Orientação a Objetos Exemplo de Classe Abstrata: Só tem sentido ter uma classe abstrata quando pelo menos tem um método abstrato! 79 Conceitos de Orientação a Objetos A classe concreta que estender a abstrata, será obrigada a implementar todos os métodos abstratos 80 Conceitos de Orientação a Objetos 81 A pergunta que não quer calar: Por que criar uma classe abstrata se você não pode criar objetos dela? Conceitos de Orientação a Objetos 82 Para entendermos melhor, vamos imaginar o seguinte exemplo Temos uma classe Carro que tenha atributos e métodos comuns a todos os tipos de carros: preço; modelo; ano; acelerarRapidamente(); Conceitos de Orientação a Objetos 83 Mas você não quer que alguém de fato crie um objeto Carro, pois algumas perguntas iriam surgir: Qual a cor do carro? Quantos assentos? Qual a potência do motor? Direção hidráulica ou não? Conceitos de Orientação a Objetos 84 O precisamos na verdade é que sejam criados objetos específicos do tipo Carro como: Fusca, Gol, Corsa, Celta etc. Todos esses objetos são concretos, portanto, instanciáveis Cria-se então a classe Carro como abstract, ficando os demais tipos como extensões desta Conceitos de Orientação a Objetos 85 Classe genérica Carro (abstrata): não pode ser instanciada Conceitos de Orientação a Objetos 86 Classe concreta Celta: pode ser instanciada Conceitos de Orientação a Objetos 87 Classe concreta Corsa: pode ser instanciada Programação Fundamental com Java 88 Interfaces Uma interface é como uma classe 100% abstrata O objetivo do uso de uma interface é deixar seu código mais flexível e possibilitar a mudança de implementação sem maiores traumas Quando se cria uma interface, define-se um contrato, sem mencionar nada sobre como a classe que a implementar o fará Programação Fundamental com Java 89 Por exemplo, se uma interface Bounceable (Saltitante) for definida, qualquer classe que quiser ser tratada como “algo saltitante” poderá implementá-la Programação Fundamental com Java 90 Programação Fundamental com Java 91 Interfaces são úteis para permitir que classes radicalmente diferentes possuam características em comum Por exemplo, imaginemos as classes Ball (Bola) e Tire (Pneu). Queremos que estas classes tenham um mesmo comportamento, mas elas não têm nada em comum Programação Fundamental com Java 92 Ball estende Toy (brinquedo), enquanto Tire só estende java.lang.Object Podemos relacionar essas classes através da interface Bounceable Desta forma estaremos dizendo que as duas classes podem ser tratadas como “coisas saltitantes” Programação Fundamental com Java 93 Ao implementar uma interface, a classe concreta é obrigada a implementar todos os seus métodos Programação Fundamental com Java 94 Programação Fundamental com Java 95 Programação Fundamental com Java 96 Pergunta: O que ocorreu entre as duas classes após a implementação da interface? R.: Ambas as classes Ball e Tire agora têm comportamento (ações) em comum por implementarem a interface Bounceable Programação Fundamental com Java 97 Algumas regras: Uma interface não pode implementar outra interface Uma interface não pode estender nada que não seja outra interface Por exemplo, imaginemos outra interface Rollable (Rolável) A interface Bounceable pode perfeitamente extender Rollable Programação Fundamental com Java 98 Porque a interface Bounceable não precisou implementar o método da interface Rollable? Programação Fundamental com Java 99 Porque somente uma classe concreta tem obrigação de implementar métodos de interfaces Programação Fundamental com Java 100 Programação Fundamental com Java 101 102 Atividade Extraclasse: Escrevam uma classe abstrata Funcionário com um atributo protected salario; um construtor que recebe o salario e um método getBonificacao() que retorna um valor double referente ao atributo salario * 1.2; Escrevam uma classe Gerente que estende Funcionario, sobrescreve o método getBonificacao() alterando seu retorno para: salario * 1.4 + 1000; Escrevam uma classe TesteFuncionario com o método main que instancia um Gerente atribuindo a uma variável do tipo Funcionario; em seguida faz uma chamada ao método getBonificacao() imprimindo seu resultado. Enviem para meu e-mail ATÉ A PRÓXIMA AULA: prof.robson.campelo@gmail.com Dúvidas? 103
Compartilhar