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 5 e 6 Programação III 1 1 1 2 Agenda Conceitos de Orientação a Objetos – Parte 2 Continuação Herança Polimorfismo Classes abstratas e Concretas Interfaces 2 2 Agenda Programação Fundamental em Java – Parte 1 Variáveis Operadores Estruturas de Decisão Estruturas de Controle 3 Agenda Programação Fundamental em Java – Parte 2 Arrays Métodos Herança múltipla Exceções 4 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” 5 Conceitos de Orientação a Objetos Exemplo de Herança: Utiliza-se a palavra reservada extends para definir a Herança. 6 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 7 Conceitos de Orientação a Objetos 8 Conta { Creditar(valor); Debitar(valor); getSaldo(); } Poupança extends Conta{ renderJuros(valor); } Conceitos de Orientação a Objetos 9 ... Conta contaAlfa; contaAlfa = new Poupanca( ); contaAlfa.creditar(1000.00); contaAlfa.debitar(500.00); System.out.println(contaAlfa.getSaldo( )); ... Conceitos de Orientação a Objetos 10 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 11 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. 12 Conceitos de Orientação a Objetos Exemplo de Polimorfismo 13 Conceitos de Orientação a Objetos 14 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 15 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 (5 min – Entregar no final da aula) Conceitos de Orientação a Objetos 16 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 17 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 18 Conceitos de Orientação a Objetos 19 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 20 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 21 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! 22 Conceitos de Orientação a Objetos A classe concreta que estender a abstrata, será obrigada a implementar todos os métodos abstratos 23 Conceitos de Orientação a Objetos 24 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 25 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 26 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 27 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 28 Classe genérica Carro (abstrata): não pode ser instanciada Conceitos de Orientação a Objetos 29 Classe concreta Celta: pode ser instanciada Conceitos de Orientação a Objetos 30 Classe concreta Corsa: pode ser instanciada Programação Fundamental com Java 31 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 32 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 33 Programação Fundamental com Java 34 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 35 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 36 Ao implementar uma interface, a classe concreta é obrigada a implementar todos os seus métodos Programação Fundamental com Java 37 Programação Fundamental com Java 38 Programação Fundamental com Java 39 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 40 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 41 Porque a interface Bounceable não precisou implementar o método da interface Rollable? Programação Fundamental com Java 42 Porque somente uma classe concreta tem obrigação de implementar métodos de interfaces Programação Fundamental com Java 43 Programação Fundamental com Java 44 Programação Fundamental com Java 45 Atividade de Classe: Escrevam uma interface chamada Autenticavel com um método autentica que possui um parâmetro int senha retorna um valor boolean; Escrevam uma classe Gerente com um atributo privado int senha e implementa a interface Autenticavel; sobrescrevendo o método autentica testa se o parâmetro da senha é diferente do atributo da classe, neste caso o método retorna false. Caso contrário, ou seja, se forem iguais retorna true. (5 min – Entregar ao final da aula) Programação Fundamental com Java 46 Resolução da Atividade: Programação Fundamental com Java 47 Resolução da Atividade: Programação Fundamental com Java PARTE 1 Variáveis: Em Java existem dois tipos de variáveis: Primitivos Variáveis de Referência Toda variável tem um tipo que não pode ser mudado uma vez declarado: tipoDaVariavel nomeDaVariavel; Programação Fundamental com Java 49 Tipos Primitivos: Representam dados mais simples ou escalares Em Java, tais dados independem da plataforma em que o programa executa Programação Fundamental com Java 50 Tipos Primitivos: Programação Fundamental com Java 51 Programação Fundamental com Java Um tipo com tamanho menor é convertido automaticamente para um tipo maior na atribuição int a = 5; (32 bits) long b = 10; (64 bits) b = a; // Conversão automática! 52 Programação Fundamental com Java Ao se tentar atribuir um tipo de tamanho maior para outro de tamanho menor, é necessário fazer uma conversão explícita (Cast) int a = 5; (32 bits) long b = 10; (64 bits) a = (int) b; //Cast Obrigatório! 53 Programação Fundamental com Java Variáveis de Referência: São usadas para se referir (ou acessar) um objeto. É declarada como sendo de um tipo específico, e esse tipo não pode nunca ser modificado. 54 Programação Fundamental com Java Exemplos: Declarando e Inicializando um tipo primitivo: int idade; int idade = 20; Declarando e instanciando uma variável de Referência: Pessoa refPessoa = new Pessoa( ); 55 Programação Fundamental com Java Operadores Aritméticos Concatenação Comparação Lógicos Unários Ternários Atribuição simples e composta 56 Programação Fundamental com Java Operadores aritméticos + - / % * O operador / também utilizado para calcular divisões inteiras O operador % calcula o resto de uma divisão inteira 57 Programação Fundamental com Java Operador de concatenação + (aplicado a Strings) String nomeCompleto = nome + sobrenome; mensagem = “Este é o cliente número ” + x; System.out.oprintln (“Total: ” + total); 58 Programação Fundamental com Java Operadores de comparação, Lógicos Operadores de comparação ==, < , >, >=, <=, != Operadores booleanos Short-circuit && (e lógico) || (ou lógico) 59 Programação Fundamental com Java Operadores unários ++, -- y = ++x ; y = --x; Y = x++ ; y = x--; 60 Programação Fundamental com Java Operadores ternários Ternários ()? : boolean comTaxa = false; final double TAXA = 0.10; double valor = 400; double resultado = 0.0; resultado = ( comTaxa ) ? valor * TAXA : x; System.out.println (“O valor final eh: ” + resultado); 61 Programação Fundamental com Java Atribuição simples e composta = +=, -=, *=, /= x = 0; a = b = c = -1 x += 1 (igual x = x + 1) Y -=k (igual y = y –k) 62 Programação Fundamental com Java 63 Atividade de Classe: Escrevam uma classe Aluno com os atributos double: nota1, nota2, nota3, nota4, media; Escrevam um método calcularMedia que calcula a média e retorna a String “APROVADO” se a média ser igual ou superior a 7 ou “REPROVADO” se a média foi inferior a 7; Utilizem um operador ternário para realizar o teste da média. (5 min – Entregar no final da aula) Programação Fundamental com Java 64 Resolução da Atividade: Programação Fundamental com Java Estruturas de Decisão: Estrutura responsável por tomar um decisão de acordo com parâmetros especificados Java utiliza dois tipos de estrutura de decisão: if/else switch 65 Programação Fundamental com Java Estrutura if/else Formato básico: if( expressao_booleana ) { <bloco de comandos> }[ else { <bloco de comandos> }] 66 Programação III Exemplo if/else: 67 Programação III Só pode ser testada uma expressão booleana!! 68 Programação III Estrutura switch: Formato básico: switch (key) { case value : <bloco de comandos> break; default : <bloco de comandos> break; } 69 Programação III Exemplo switch: 70 Programação III Estruturas de Controle: Estruturas que permitem a repetição de um bloco de código de acordo com determinada condição Java utiliza três estruturas de controle: while do/while for 71 Programação III Estrutura while: Usada quando não se sabe quantas vezes a instrução se repetirá Sintaxe: while (expressao_booleana) { <bloco de comandos> } 72 Programação III Exemplo while: 73 Programação III Estrutura do/while: Semelhante ao while, exceto pelo fato de que a expressão dentro do loop será executada pelo menos uma vez Sintaxe: do { <bloco de comandos> } while (expressao_booleana); 74 Programação III Exemplo do/while: 75 Programação III Estrutura for: Usando quando se sabe antecipadamente o número de iterações Sintaxe: 76 Programação III Exemplo for: 77 Programação III Uso das instruções break e continue no loop for: Break: instrução que determina o encerramento da execução do loop atual e inicie o processamento posterior ao for Continue: instrução que fará com que somente a iteração atual seja encerrada e que a próxima continue sendo executada 78 Programação III Exemplo break: 79 Programação III Exemplo continue: 80 Programação III For aprimorado: A partir da versão 5 de Java, incluiu-se um for especializado que simplifica a tarefa de se fazer um loop através de arrays ou um conjunto. Ao invés de três componentes, o for aprimorado tem apenas dois. 81 Programação III Exemplo for aprimorado: 82 Programação Fundamental com Java PARTE 2 Programação Fundamental com Java Arrays: Coleção ordenada de qualquer tipo permitido em Java: tipos primitivos referências de objetos outros arrays Como também são objetos, também extendem a classe Object São sempre homogêneos, ou seja, com exceção de classes Polimórficas, todos os elementos do array são obrigatoriamente do mesmo tipo 84 Programação Fundamental com Java Utilização de Arrays: Para se utilizar arrays deve-se seguir 3 passos: Declaração Construção Inicialização 85 Programação Fundamental com Java Declaração de Arrays: A declaração de um array diz ao compilador o nome do array e o tipo de elemento que será armazenado int [] intArray; Object [] objArray; String [][] stringMatrix; Nenhuma memória é alocada no momento da declaração do array Não se pode estabelecer o tamanho do array no momento de sua declaração 86 Programação Fundamental com Java Construção de Arrays: Sintaxe: 87 Programação Fundamental com Java Construção de Arrays: Quando o array é construído, seus elementos são automaticamente inicializados para os valores padrão Uma vez definido o tamanho do array, este não pode mais ser alterado Quanto temos um array de referências para objetos, somente a memória ocupada pela referência em si é alocada. Nenhum objeto é criado neste momento. 88 Programação Fundamental com Java Inicialização de Arrays: Sintaxe: int size = 100; int [][] matriz = new int[size][size]; for( int i = 0; i < size; i++ ) { for( int j = 0. j < size; j++ ) { matriz[i][j] = (10 * i) + j; } } O menor índice do array é sempre 0 O maior índice do array é obtido através de array.length - 1 89 Programação Fundamental com Java Inicialização de Arrays: 90 Programação Fundamental com Java 91 Atividade de Classe: Escrevam uma classe Pessoa com um atributo nome e um construtor para esta classe com o atributo nome como parâmetro; Criem as classes Aluno e Professor, ambas estendendo a classe Pessoa; Escrevam uma classe TestePessoa com um método main que declara um array de Pessoa o qual deve ser inicializado na mesma linha de declaração com um aluno de nome “Carlos” e um professor de nome “Fernando”. (5 Min para a atividade – entregar ao final da aula) Programação Fundamental com Java 92 Resolução: Programação Fundamental com Java 93 Resolução: Programação Fundamental com Java 94 Resolução: Programação Fundamental com Java Sobrecarga e Sobrescrição de Métodos: Sobrescrição (Override): Ocorre quando uma subclasse tem um método com mesma assinatura da superclasse Resolvido dinamicamente em tempo de execução OBS.: Sobrescrever significa “Escrever por cima” 95 Programação Fundamental com Java Exemplo de Override: 96 Programação Fundamental com Java Sobrescarga (Overloading): Ocorre quando se usa o mesmo nome para métodos diferentes Compilador escolhe o método comparando os tipos de argumentos 97 Programação Fundamental com Java Exemplo de Overloading: 98 Programação Fundamental com Java Herança Múltipla: Java não permite a herança múltipla, ou seja, uma subclasse estender de mais de uma superclasse 99 Programação Fundamental com Java Entretanto, existe um artifício... Uma classe pode implementar várias interfaces 100 Programação Fundamental com Java Exceções: Mecanismo usado pelo Java para tratamento de erros, situações indesejadas ou de restrição. Para termos um sistema robusto precisamos... ...ter como se recuperar de falhas ...ter mensagens adequadas de erro ...ter validação de dados ...garantir que situações indesejadas ocorram ...garantir a consistência das operações 101 Programação Fundamental com Java Exceções: Exceções são objetos que encapsulam informações relevantes sobre o erro ocorrido. Fases do trabalho com as exceções: declaração (class...) lançamento (throw... ) tratamento (try... catch... finally) 102 Programação Fundamental com Java Exceções: São subclasses de... java.lang.Exception Razão para definir uma classe de exceção: Tratar e apresentar informações extras sobre ocorrido Viabilizar a captura e tratamento de vários tipos de erros 103 Programação Fundamental com Java Definindo uma Classe de Exceção: 104 Programação Fundamental com Java Declaro que posso lançar: Exceções são declaradas na assinatura dos métodos usando o comando throws Exceções são lançadas no corpo dos métodos usando o comando throw public void metodoX (...) throws problemaUmException, problemaDoisException { [...] throw new problemaDoisException (...); } 105 Programação Fundamental com Java Exemplo de lançamento: 106 Programação Fundamental com Java Captura e tratamento: Exceções são tratadas pelo bloco try-catch try{ [código que pode ocorrer erro...] }catch (Exc1 e1){ [manipular informações e apresentar mensagem adequada...] }finally{ [sempre será executado] } 107 Programação Fundamental com Java Captura e tratamento: 108 109 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? 110
Compartilhar