Programação Java
Linguagem de Programação Java
Introdução à POO
Introdução à Programação Java
Sumário
• Atributos e Métodos Estáticos
• Interfaces
Ricardo Sant'Ana
Programação Java
Slide 2
Atributos Estáticos
• Atributos Estáticos ou Atributos de Classe
– São atributos válidos para toda a classe, ou seja, se
vc trocar o valor de um atributo de classe, vc estará
trocando o valor do atributo de TODOS os objetos
daquela classe.
– Atributos de classe DEVEM ser acessados utilizando
o nome da classe seguido pelo atributo
(nomeDaClasse.nomeDoAtributo).
• Isso torna o código mais claro do que se utilizássemos o
nomeDaInstância.nomeDoAtributo.
– O espaço de memória dos atributos estáticos é
compartilhado entre os objetos daquela classe.
Ricardo Sant'Ana
Programação Java
Slide 3
Atributos Estáticos
public class Aluno {
public String nome;
public static String instituicao;
}
public class ExAluno1 {
public static void main(String[] args) {
Aluno P = new Aluno();
P.nome="Fábio";
P.instituicao="CDS";
System.out.println("Nome: "+P.nome+"\tInstituição: "+P.instituicao);
Aluno Q = new Aluno();
Q.nome="Aline";
Q.instituicao="EME";
System.out.println("Nome: "+P.nome+"\tInstituição: "+P.instituicao);
System.out.println("Nome: "+Q.nome+"\tInstituição: "+Q.instituicao);
}
}
Analisar o código acima e determinar a saída.
Ricardo Sant'Ana
Programação Java
Slide 4
Atributos Estáticos
public class ExAluno2 {
public static void main(String[] args) {
Aluno P = new Aluno();
P.nome="Fábio";
Aluno.instituicao="CDS";
System.out.println("Nome:"+P.nome+"\tInstituição: "+Aluno.instituicao);
Aluno Q = new Aluno();
Q.nome="Aline";
Aluno.instituicao="EME";
System.out.println("Nome:"+P.nome+"\tInstituição: "+Aluno.instituicao);
System.out.println("Nome:"+Q.nome+"\tInstituição: "+Aluno.instituicao);
}
}
Utilizando essa sintaxe, evita-se a confusão!!
Ricardo Sant'Ana
Programação Java
Slide 5
Métodos Estáticos
• Métodos Estáticos ou Métodos de Classe
– Os métodos de classe devem ser acessados
utilizando o nome da classe – de forma similar ao que
foi visto anteriormente com os atributos estáticos.
– Não é necessário instanciar um objeto da classe para
acessar o método estático da mesma.
– Métodos de classe somente podem acessar
métodos/atributos estáticos daquela classe.
– Classe Math do Java.
– Tipicamente utilizados quando a classe não possui
estado (portanto não possui atributos e, assim,
somente tem métodos). Ex: classe utilitária.
Ricardo Sant'Ana
Programação Java
Slide 6
Métodos Estáticos
import java.util.LinkedList;
import java.util.Random;
public class Utils {
public static String Anagrama(String s){
LinkedList P = new LinkedList();
for(int i=0; i<s.length(); i++)
P.add(new Character(s.charAt(i)));
Random Q = new Random();
String res="";
while(P.size()>0){
res=res+P.remove(Q.nextInt(P.size()));
}
return res;
}
}
Note que a Classe Utils é uma classe sem estado (não
definiu atributos). O método Anagrama recebe uma String
qualquer e devolve um Anagrama dessa String.
Ricardo Sant'Ana
Programação Java
Slide 7
Métodos Estáticos
public class ExUtils {
public static void main(String[] args){
System.out.println(Utils.Anagrama(“ricardo”));
}
}
Método estático :
não precisa
instanciar classe
Exemplo do uso de métodos static
Observe que não é necessário criar um objeto da classe
Utils. para utilizar o método Anagrama.
Métodos estáticos são interessantes quando desejamos criar
uma
biblioteca
de
funções
ou
utilidades
(classe
utilitária)
Ricardo Sant'Ana
Programação Java
Slide 8
Interfaces
• Conceitos:
– As interfaces em Java são similares às classes
• Possuem hierarquia de forma similar às classes
– As interfaces definem comportamentos
• Definem o que uma classe deve implementar e não como
essa classe irá implementar.
– Se uma classe implementa uma interface, ela deverá
implementar todos os métodos/comportamentos
desta interface.
– De certa forma, interface é a solução Java para
herança composta.
Ricardo Sant'Ana
Programação Java
Slide 9
Interfaces
public interface Imprimivel{
COMPORTAMENTOS
public void imprime();
public String getConfiguracoesImpressora();
public void setConfiguracao(String chave, String valor);
}
• Acima temos um aspecto geral de como é a
definição de uma interface
– Observe que a sintaxe utilizada é similar ao da classe
– mas ao invés de utilizar class utilizamos interface.
Ricardo Sant'Ana
Programação Java
Slide 10
Interfaces
• Exemplo do uso de Interfaces:
– Supomos que devemos implementar uma classe que
envie para a impressora informações de uma etiqueta
a fim de gerar uma folha de etiquetas (Pimaco)
– Essa classe Impressora não possui estado e,
portanto, somente terá métodos estáticos.
• Rever métodos e atributos estáticos
– Um dos métodos estáticos é o enviarImpressora()
que recebe como parâmetro um objeto da classe
Etiqueta.
• Este é apenas um exemplo: o código fonte apresentado não
gera etiquetas na forma da filha de etiquetas pimaco
Ricardo Sant'Ana
Programação Java
Slide 11
Interfaces
import java.util.StringTokenizer;
public class Impressora {
public static void preparaImpressora(){
// implementacao
}
public static void enviaImpressora(Etiqueta P){
StringTokenizer Q = new StringTokenizer(P.geraInfo(),"-");
while(Q.hasMoreElements()){
System.out.println("::\t"+Q.nextElement());
}
}
}
Método enviaImpressora é estático (método de classe).
O método enviaImpressora recebe como parâmetro um objeto da classe Etiqueta.
O método enviaImpressora utiliza o método geraInfo() do objeto da classe Etiqueta.
Ricardo Sant'Ana
Programação Java
Slide 12
Interfaces
public class Etiqueta {
private String campo1;
private String campo2;
private String campo3;
public Etiqueta(String campo1, String campo2, String campo3){
this.campo1=campo1;
this.campo2=campo2;
this.campo3=campo3;
}
public String geraInfo(){
return campo1+"-"+campo2+"-"+campo3;
}
public void carregaBanco(){
// implementacao
}
public void salvaBanco(){
// implementação
}
}
Ricardo Sant'Ana
Programação Java
Slide 13
Interfaces
public class Executavel {
public static void main(String[] args) {
Etiqueta W = new Etiqueta("PEGASUS","10.67.122.71","NESOL");
Impressora.enviaImpressora(W);
}
}
O código funciona normalmente, mas o que aconteceria se
desejássemos enviar para a impressora os atributos da classe
ALUNO ?
O projeto apresentado funciona, mas não é genérico o suficiente para
anteder às novas demandas.
Ricardo Sant'Ana
Programação Java
Slide 14
Interfaces
• Para resolver esse problema, precisamos que o método
enviaImpressora() se torne mais GENÉRICO, ou seja, que aceite
não somente objetos da classe Etiqueta, mas também objetos de
outras classes.
• SOLUÇÃO 1: Uma primeira idéia seria fazer com que o método
enviaImpressora() recebesse um objeto da classe Object
– por causa da Herança, todos as classes em Java são
filhas/netas da Object)
• O problema dessa abordagem é que o método enviaImpressora()
utiliza o comportamento gerainfo() e a classe Object não possui
este método.
• RESULTADO: solução inviável !
Ricardo Sant'Ana
Programação Java
Slide 15
Interfaces
•
O que precisamos, realmente, é que o objeto a ser passado para o
método enviaImpressora() seja o mais genérico possível MAS que
possua determinados comportamentos.
– Neste caso, devemos implementar um método geraInfo() nesta
classe genérica.
– AS INTERFACES NOS AJUDAM A SOLUCIONAR ESTE TIPO
DE PROBLEMA.
Ricardo Sant'Ana
Programação Java
Slide 16
Fim
Ricardo Sant'Ana
Programação Java
Slide 17
Download

Programação Java