Buscar

Aula 3 - Exemplos de Classes, Herança e Polimorfismo

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 !

Continue navegando