Baixe o app para aproveitar ainda mais
Prévia do material em texto
Operadores Aritméticos Relacionais Lógicos Binários Ternário Concatenação Operadores Aritméticos + Adição também utilizado para concatenação de strings - Subtração * Multiplicação / Divisão % Módulo resto da divisão inteira) Pode-se usar uma notação sintetizada, que faz uma operação e uma atribuição ao mesmo tempo: x += 5 é a mesma coisa que x = x + 5 Operadores Relacionais Operadores relacionais geram um resultado booleano (true ou false). Eles avaliam a relação entre os valores dos operandos. Os operadores relacionais são: menor que ( < ) maior que ( > ) menor ou igual a ( <= ) maior ou igual a ( >= ) igual ( == ) diferente ( != ) Operadores Lógicos Os operadores lógicos produzem um valor booleano conforme o relacionamento lógico dos seus argumentos. AND ( && ) OR ( || ) NOT ( ! ) Operadores lógicos apenas podem ser aplicados a valores booleanos. Operadores Binários Permitem a manipulação de bits individuais em tipos primitivos. AND(&) OR(|) XOR(^) NOT(~) Operador Ternário Retorna um valor ou outro dependendo do resultado de uma expressao booleana. Sempre retorna um valor. variavel = expressao ? valor, se true : valor, se false; Exemplos: int x = (y != 0)?50:500; String titulo = (sexo == 'f')?"Sra.":"Sr."; Operador de Concatenação O operador + aplicado a strings tem o objetivo de concatená-las. Numa concatenação de valores, se pelo menos um deles é uma string, os outros são convertidos para string. A conversão é feita automaticamente para primitivos. Para os demais tipos a conversão é feita chamando- se o método toString(). Exemplo: String s = 1 + 2 + 3 + "=" + 4 + 5 + 6; Resultado: s contem a String "6 = 456" Exercício 10 Refaça o exercício 9 usando o operador % (módulo). Visibilidade e acesso de atributos friendly (padrão) - O atributo só pode ser acessado por classes de dentro do mesmo pacote. public - Acesso permitido a classes de qualquer pacote, respeitando o acesso à classe a qual pertence. private - Acesso permitido somente para a classe que definiu o atributo. protected - Acesso permitido a classes do mesmo pacote e subclasses da classe onde foi definido o atributo (mesmo estando em outro pacote). Alguns modificadores de atributos final - Atributos final não podem ser reinicializados com outro valor. static - Atributo estático pertence à classe e é compartilhado por todas as suas instâncias. Visibilidade e acesso de métodos friendly (padrão) - O método só pode ser acessado por classes de dentro do mesmo pacote. public - Acesso permitido a classes de qualquer pacote, respeitando o acesso à classe a qual pertence. private - Acesso permitido somente para a classe que definiu o método. protected - Acesso permitido a classes do mesmo pacote e subclasses da classe onde foi definido o método (mesmo estando em outro pacote). Alguns modificadores de métodos static - Métodos estáticos pertencem à classe e não às suas instâncias. Eles podem ser invocados pela classe, senão houver instâncias. Métodos estáticos só podem acessar variáveis ou métodos também estáticos. abstract - Método abstrato não implementa funcionalidade, tem apenas a assinatura. final - Método final não pode ser sobrescrito nas subclasses. Visibilidade e acesso de classes friendly (padrão) - A classe só pode ser acessada por outras classes de dentro do mesmo pacote. public - A classe pode ser acessada por qualquer outra, independente de estar no mesmo pacote. Modificadores de classes abstract - É uma classe abstrata Classes abstratas não tem sua implementação totalmente definida. Elas não podem ser instanciadas, ou seja, não geram objetos. final Classes final não podem ser estendidas, ou seja, não possuem subclasses. TypeCast TypeCast é a capacidade de trocar dinamicamente o tipo de um dado para um outro tipo compatível. Quando possível, Java troca automaticamente o tipo de um dado. É necessário fazer TypeCast quando queremos explicitar a conversão de tipos ou para forçar o compilador a fazer uma conversão que normalmente ele não poderia fazer. TypeCast A sintaxe do TypeCast é: (tipo) variavel; Exemplo: Conta c = new Conta(); ContaPoupanca cp = c; // ERRADO!!! ContaPoupanca cp = (ContaPoupanca) c; Upcasting Tipos genéricos (acima, na hierarquia) sempre podem receber objetos de suas subclasses: Conta c = new ContaPoupanca(); Há garantia de que subclasses possuem pelo menos os mesmos métodos que a superclasse. c só tem acesso à "parte Conta" de ContaPoupanca. Qualquer extensão (métodos definidos em ContaPoupanca) faz parte somente da extensão e não pode ser usada pela referência c. Downcasting Tipos específicos (abaixo, na hierarquia) não podem receber explicitamente seus objetos que foram declarados como referências de suas superclasses: Conta c = new Conta(); ContaPoupanca cp = c; // não compila! O código acima não compila, apesar de c apontar para uma Conta! É preciso converter a referência: ContaPoupanca cp = (ContaPoupanca) c; Como realizar TypeCast nos casos abaixo: Conta c = new Conta(); ContaCorrente cc = new ContaCorrente(); ContaPoupanca cp = new ContaPoupanca(); TypeCast ? ? ? c = cc; c = cp; cc = c; cp = c; cc = cp; cp = cc; OK!!! cc = (ContaCorrente) c; cp = (ContaPoupanca) c; cc = (ContaCorrente)(Conta)cp; cp = (ContaPoupanca)(Conta)cc; Interfaces e Classes A unidade fundamental de programação na linguagem de programação Java é a classe, mas a unidade fundamental de projeto orientado a objetos é o tipo. Interfaces definem tipos em uma forma abstrata como uma coleção de métodos ou outros tipos que formam o “contrato” para aquele tipo. Interfaces e Classes Uma interface é uma expressão de projeto puro, enquanto que uma classe é uma mistura de projeto e implementação. Uma interface, portanto, promove – mas não define – muito mais formas de implementações do que uma classe: trata-se da generalização extrema! “O Que?” x “Como?” Uma interface define “o que“ fazer: Não têm atributos de dados (só pode ter constantes estáticas); Não tem construtor; Todos os métodos são abstratos; Não é declarada como class, mas como interface. Objetos não são criados a partir de uma interface! Ex.: interface Conta { void encerrar( ); void creditar( double valor ); void debitar( double valor ); } “O Que?” x “Como?” A interface (“o que”) é conhecida em tempo de compilação, mas o objeto para o qual ela aponta (implementação – “como”) é conhecido em tempo de execução através de ligação tardia – late binding. Objetos podem ser substituídos em tempo de execução sem que seja necessário “reconstruir o programa”. Polimorfismo O polimorfismo (poli=muitos, morfo=forma) destaca as muitas formas de execução de um tipo. Ex.: Cliente umCliente = new PessoaFisica(“Henrique”); Conta[] contas = new Conta[4]; contas[0] = new ContaPoupanca(umCliente, 200); contas[1] = new ContaCorrente(umCliente, 200); contas[2] = new ContaCorrente(umCliente, 600); contas[3] = new ContaPoupanca(umCliente, 600); for (int x = 0 ; x < clientes.length; x++){ contas[x].debitar(50); System.out.println(clientes[x].saldo); } Exercício 11 Altere os atritutos de todas as classes de modo que tenham visibilidade protected. Compilenovamente todas as classes após as alterações usando javac. Exercício 12 Crie uma programação no método void debitar(double valor) da classe ContaPoupanca que testa a quantidade de dias acumulados no atributo carenciaDias (criado no exercício 5). Quando carenciaDias for menor que 90 (dias) o débito deverá ser realizado com cpmf. Do contrário, o débito deverá ser realizado sem cpmf. Use um comando if – else. Compile novamente todas as classes após as alterações usando javac. Exercício 13 Transforme a classe OperacaoBancaria em uma interface possuindo um metodo void realizar( ) . Com isso, troque extends OperacaoBancaria para implements OperacaoBancaria na programação das classes-filhas de OperacaoBancaria. As classes OperacaoMesmoBanco e OperacaoOutroBanco deverão se tornar classes abstratas. Sobrescreva nessas classes o método void realizar( ) da interface OperacaoBancaria de modo que ele seja nessas classes- filhas um método abstrato. Compile novamente todas as classes após as alterações usando javac. Exercício 14 Crie na classe Saque os atributos double valor e Conta contaOrigem; Crie na classe Deposito os atributos double valor e Conta contaDestino; Crie na classe Doc os atributos double valor, Conta contaCredito, Conta contaDebito e o atributo de valor constante double TARIFA igual a R$ 10,00. Compile novamente todas as classes após as alterações usando javac. Exercício 15 Pense como seria realizado um depósito, um saque e um doc no cotidiano de uma agência bancária e depois crie uma programação dentro do método void realizar( ) da classe Deposito, outra programação dentro do método void realizar( ) da classe Saque e outra programação dentro do método void realizar( ) da classe Doc. Compile novamente todas as classes após as alterações usando javac. Slide 1 Slide 2 Slide 3 Slide 4 Slide 5 Slide 6 Slide 7 Slide 8 Slide 9 Slide 10 Slide 11 Slide 12 Slide 13 Slide 14 Slide 15 Slide 16 Slide 17 Slide 18 Slide 19 Slide 20 Slide 21 Slide 22 Slide 23 Slide 24 Slide 25 Slide 26 Slide 27 Slide 28 Slide 29
Compartilhar