Baixe o app para aproveitar ainda mais
Prévia do material em texto
Linguagem de Programação Java Prof. Marcelo Cabral www.fundacaoredeam.com.br 2016 Tópicos da aula de Hoje: ❖ Classe Scanner ❖ Diretiva Import e Importação estática ❖ Herança ❖ Classes Abstratas ❖ Métodos Abstratos ❖ Interface ❖ Polimorfismo Linguagem de Programação Java Bem vindos para mais uma aula Classe Scanner ❖ A classe Scanner tem como objetivo separar a entrada dos textos em blocos, gerando os conhecidos tokens, que são sequências de caracteres separados por delimitadores que por padrão correspondem aos espaços em branco, tabulações e mudança de linha. ❖ Com essa classe podem ser convertidos textos para tipos primitivos, sendo que esses textos podem ser considerados como objetos do tipo String, InputStream e arquivos. ❖ Veja os métodos principais no próximo slide e o restante podem ser encontrados no site: http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html Linguagem de Programação Java http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html Classe Scanner – Métodos Principais Linguagem de Programação Java Método Descrição close() Fecha o escaneamento de leitura. findInLine() Encontra a próxima ocorrência de um padrão ignorando máscaras ou strings ignorando delimitadores. hasNext() Retorna um valor booleano verdadeiro (true) se o objeto Scanner tem mais dados de entrada. hasNextXyz() Retorna um valor booleano como verdadeiro (true) se a próxima entrada a qual Xyz pode ser interceptada como Boolean, Byte, Short, Int, Long, Float ou Double. match() Retorna o resultado da pesquisa do último objeto Scanner atual. next() Procura e retorna a próxima informação do objeto Scanner que satisfazer uma condição. nextBigDecimal(), nextBigInteger() Varre a próxima entrada como BigDecimal ou BigInteger. nextXyz() Varre a próxima entrada a qual Xyz pode ser interceptado como boolean, byte, short, int, long, float ou double. nextLine() Mostra a linha atual do objeto Scanner e avança para a próxima linha. radix() Retorna o índice atual do objeto Scanner. remove() Essa operação não é suportada pela implementação de um Iterator. skip() Salta para a próxima pesquisa de um padrão especificado ignorando delimitadores. string() Retorna uma string que é uma representação do objeto Scanner. Diretiva Import ❖ Para utilizar classes pertencentes a um pacote é empregada a diretiva import, no início do arquivo-fonte Java, para indicar quais pacotes e classes serão necessários. Exemplo: // importa *apenas* a classe Scanner do pacote java.util import java.util.Scanner A importação de todas classes de um pacote não produz qualquer efeito negativo (aumento do tamanho do código das classes ou performance inferior), sendo apenas uma simplificação permitida ao programador. No entanto, é recomendada a importação nominal das classes, pois isso evita problemas quando pacotes diferentes possuem classes com mesmo nome. Linguagem de Programação Java Importação estática ❖ A importação estática (import static) permite que constantes declaradas em uma classe externa sejam utilizadas sem necessidade de sua qualificação. Por exemplo a constante Math.PI ou Math.E geralmente usadas assim: public class SemImportStatic { public static void main(String args[]){ [...] //uso da constante qualificada double perim = 2 * Math.PI * raio [...] } } Linguagem de Programação Java Importação estática ❖ Por meio da importação estática o acesso às constantes é simplificado: //observe o uso do * após o nome da classe import static java.lang.Math.*; public class ComImportStatic { public static void main(String args[]){ [...] //uso abreviado da constante double perim = 2 * PI * raio; [...] } } Linguagem de Programação Java Herança ❖ A herança (inheritance) é um mecanismo que possibilita a uma classe usar campos e métodos definidos em outra classe, o que significa o compartilhamento de membros entre classes. A herança é baseada numa relação hierárquica, de modo que um pai (a classe tomada como referência) empresta suas definições para as classes definidas como filhas. Linguagem de Programação Java Herança ❖ O fragmento de código que segue ilustra o emprego básico da herança, designada pela palavra reservada extends. //superclasse, classe base ou classe pai public class Pai { } //subclasses, classes derivadas ou classes filha public class FilhaUm extends Pai { } public class FilhaDois extends Pai { } public class NetaUm extends FilhaUm { } Linguagem de Programação Java Herança ❖ A Figura abaixo retrata a representação de uma herança em um diagrama de classes. Observe que além das classes declaradas, aparece uma ligação entre as classes conectadas pelo mecanismo da herança. Linguagem de Programação Java Herança ❖ Por meio da herança, a subclasse conta com os membros públicos e protegidos da superclasse, podendo, opcionalmente, adicionar novos membros (extensão) ou substituir aqueles existentes por outros de funcionalidade ou nível de acesso distinto (restrição). ❖ A substituição de métodos, a implementação de um método na subclasse com a mesma assinatura de um método existente na superclasse, é denominada de sobreposição ou override. Esta técnica é bastante conveniente para prover a subclasse de uma implementação mais apropriada de um método. Linguagem de Programação Java Herança – Classe Pessoa Linguagem de Programação Java Veja os exemplos abaixo: import java.util.Date; public class Pessoa { private String nome, rg,cpf; private Date dataNascimento; public Pessoa(String nome, String rg, String cpf, Date dataNascimento) { this.nome = nome; this.rg = rg; this.cpf = cpf; this.dataNascimento = dataNascimento; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String getRg() { return rg; } public void setRg(String rg) { this.rg = rg; } public String getCpf() { return cpf; } public void setCpf(String cpf) { this.cpf = cpf; } public Date getDataNascimento() { return dataNascimento; } public void setDataNascimento(Date dataNascimento) { this.dataNascimento = dataNascimento; } @Override public String toString() { return "Pessoa{" + "nome=" + nome + ", rg=" + rg + ", cpf=" + cpf + ", dataNascimento=" + dataNascimento + '}'; } } Herança – Classe Funcionário Linguagem de Programação Java Veja os exemplos abaixo: import java.util.Date; public class Funcionario extends Pessoa{ private String pis, cargo; private float salario; public Funcionario(String pis, String cargo, float salario, String nome, String rg, String cpf, Date dataNascimento) { super(nome, rg, cpf, dataNascimento); this.pis = pis; this.cargo = cargo; this.salario = salario; } public String getPis() { return pis; } public void setPis(String pis) { this.pis = pis; } public String getCargo() { return cargo; } public void setCargo(String cargo) { this.cargo = cargo; } public float getSalario() { return salario; } public void setSalario(float salario) { this.salario = salario; } @Override public String toString() { return "Funcionario{" + "nome=" + getNome() + ", rg=" + getRg() + ", cpf=" + getCpf() + ", dataNascimento=" + getDataNascimento() + "pis=" + pis + ", cargo=" + cargo + ", salario=" + salario + '}'; } } Herança – Classe Cliente import java.util.Date; publicclass Cliente extends Pessoa { public Cliente(String nome, String rg, String cpf, Date dataNascimento) { super(nome, rg, cpf, dataNascimento); } } Linguagem de Programação Java Herança ❖ Veja como fica o diagrama de classe utilizando as classes mostradas anteriormente em um exemplo de Herança: Linguagem de Programação Java Classe Object ❖ A classe Object do pacote java.lang é muito importante, pois constitui a raiz de toda a hierarquia de classes do Java. Todas as classes, de maneira direta ou indireta, possuem a classe Object como sua superclasse. ❖ Assim a declaração da classe Hora foi: public class Hora { ...} ❖ Mas realmente correspondeu a: public class Hora extends Object {...} Linguagem de Programação Java Veja mais sobre essa classe no site: https://docs.oracle.com/javase/7/do cs/api/java/lang/Object.html Classes Abstratas ❖ Existem circunstâncias em que não devem ser implementados métodos particulares em uma classe, mas apenas suas especificações, tornando útil o emprego do modificador abstract em sua declaração, permitindo a inclusão de um protótipo e adiando sua implementação para subclasses. ❖ O uso de métodos abstratos tem duas implicações: I. Torna impossível instanciar objetos da classe, pois essas existem métodos incompletos; II. Obriga que suas subclasses só possam ser instanciadas quando todos os métodos abstratos forem implementados, criando uma espécie de contrato futuro. Linguagem de Programação Java Classes Abstratas Linguagem de Programação Java Mesmo sem métodos abstratos, uma classe pode ser declarada abstract para evitar a instanciação de seus objetos. Sendo assim classes que podem ter objetos instanciados (não abstratas) são conhecidas como classes concretas. Classes Abstratas ❖ Veja como fica o diagrama de classe utilizando uma classe abstrata no exemplo anterior: Linguagem de Programação Java Classes Abstratas ❖ Veja como fica a mudança do código: public abstract class Pessoa {...} Linguagem de Programação Java Interfaces ❖ Uma interface em Java é o mecanismo pela qual o programador pode definir um modelo de comportamento para outras classes. As interfaces podem conter apenas métodos sem implementação, ou seja, suas interfaces. Também é permitida a declaração de constantes. ❖ Observe nos exemplos o uso da palavra reservada interface. public interface Imprimivel { public void imprimir (); public void imprimirNoConsole(); } Linguagem de Programação Java Interfaces ❖ Veja outro exemplo public interface Editavel { public static final String INICIO = “ <inicio> “; public static final String FIM = “ <fim> ”; public void editar(String conteudo); } Linguagem de Programação Java Interfaces ❖ Todos os métodos das interfaces são implicitamente públicos e abstratos, sendo usualmente declarados como públicos. Por sua vez, as constantes de uma interface são implicitamente públicas, estáticas e finais, sendo essa a forma usual de sua declaração. ❖ As classes que devem possuir as operações definidas por uma interface devem implementá-las, fazendo tal indicação com a palavra reservada implements. Linguagem de Programação Java Interfaces ❖ Veja o exemplo: public abstract class Mensagem { private String conteudo; public Mensagem(String conteudo) { setConteudo(conteudo); } protected setConteudo(String conteudo){ this.conteudo = conteudo; } public String getConteudo() { return conteudo; } } Linguagem de Programação Java Interfaces ❖ Continuação do Exemplo: public class MensagemEditavel extends Mensagem implements Editavel, Imprimivel { public MensagemEditavel(String conteudo) { super(conteudo); } public void editar(String conteudo) { setConteudo (conteudo); } public void imprimir() { imprimirNoConsole(); } public void imprimirNoConsole(){ System.out.println(getConteudo()); } } Linguagem de Programação Java Interfaces ❖ Continuação do Exemplo: public class MensagemNaoEditavel extends Mensagem implements Editavel, Imprimivel { public MensagemNaoEditavel(String conteudo) { super(conteudo); } public void imprimir() { imprimirNoConsole(); } public void imprimirNoConsole(){ System.out.println(getConteudo()); } } Linguagem de Programação Java Interfaces ❖ A classe MensagemEditavel, subclasse de Mensagem, implementa as interfaces Editavel e Imprimivel, adicionando novas operações à Mensagem, mas sem alterar sua interface. ❖ A implementação de uma interface é considerada um contrato, onde uma classe se compromete a implementar os métodos indicados nas interfaces. Linguagem de Programação Java Interfaces ❖ Interfaces também podem ter suas funcionalidades modificadas por meio do mecanismo de herança, ou seja, é possível definir sub-interfaces com esse mecanismo.Veja um exemplo: public interface Editavel2 extends Editavel { public void limpar(); } Linguagem de Programação Java Polimorfismo ❖ A palavra polimorfismo significa muitas formas. Na programação orientada a objetos significa a realização de uma tarefa de formas diferentes. No Java, em particular, o polimorfismo se manifesta claramente na chamada de métodos, quando objetos de tipos diferentes (mas relacionados por uma mesma hierarquia de classe) são capazes de adicionar um mesmo método, mas produzindo resultados diferentes. Linguagem de Programação Java Polimorfismo ❖ Veja um exemplo: ❖ Classe Pessoa: public Pessoa(String nome, String rg, String cpf, Date dataNascimento) { this.nome = nome; this.rg = rg; this.cpf = cpf; this.dataNascimento = dataNascimento; } ❖ Classe Funcionário: public Funcionario(String pis, String cargo, float salario, String nome, String rg, String cpf, Date dataNascimento) { super(nome, rg, cpf, dataNascimento); this.pis = pis; this.cargo = cargo; this.salario = salario; } ❖ Classe Cliente: public Cliente(String nome, String rg, String cpf, Date dataNascimento) { super(nome, rg, cpf, dataNascimento); } Linguagem de Programação Java Polimorfismo ❖Veja um outro exemplo: ❖ Classe Pessoa: ❖ Classe Funcionário: ❖ Classe Cliente: public toString(){...} Linguagem de Programação Java Dúvidas Linguagem de Programação Java Linguagem de Programação Java Espero que tenham gostado ! Até próxima aula !
Compartilhar