Top Banner
Preparatório EsFCEx TÉCNICAS DE PROGRAMAÇÃO Programação Orientada a Objetos Prof. Ricardo Sant'Ana
89

Aula01_POO_Java.pdf

Jul 22, 2016

Download

Documents

Angel Angel
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Aula01_POO_Java.pdf

Preparatório EsFCExTÉCNICAS DE PROGRAMAÇÃO

Programação Orientada a ObjetosProf. Ricardo Sant'Ana

Page 2: Aula01_POO_Java.pdf

Sumário

Introdução1

Conceitos2

Conclusão3

Page 3: Aula01_POO_Java.pdf

Introdução

Lista de Assuntos 2. TÉCNICAS DE PROGRAMAÇÃO:

• a. Lógica aplicada: algoritmos, técnicas de construção de algoritmos, resolução de problemas.

• b. Estrutura de dados: vetores, matrizes, cadeia de caracteres, listas lineares, pilhas, filas, árvores, grafos, pesquisa de dados, classificação de dados, estruturas e tipos abstratos de dados, recursividade, eficiência e complexidade.

• c. Programação estruturada: refinamentos sucessivos, estruturas em blocos, estruturas de controle de fluxo, programação modular, rotinas, sub-rotinas, procedimentos e funções (Linguagem C).

• d. Programação orientada a objetos: classes e objetos, polimorfismo, herança, interface, linguagens orientadas a objetos (Linguagens C++ e Java).

• e. Linguagens de programação para a internet: JAVA, PHP e JSP.

Page 4: Aula01_POO_Java.pdf

Introdução

Bibliografia COSTA, Daniel G. JAVA em Rede: Recursos Avançados. Rio de Janeiro:

Brasport, 2008.

DEITEL, H. M. JAVA Como Programar. 6. ed. [S.l.]: Editora Bookman, 2006.

GAMMA, Erich et al. Padrões de Projeto: Soluções Reutilizáveis de Software Orientado a Objetos. [S.l.]: Bookman, 2005.

GUIMARÃES, Ângelo de Moura; LAGES, Newton de Castilho. Algoritmos Estruturados de Dados. [S.l.]: Editora LTC, 1994.

MORGAN, Michael. JAVA 2 para Programadores Profissionais. [S.l.]: Editora Ciência Moderna, 2001.

MUTO, Claudio Adonai. PHP & MYSQL Guia Completo. [S.l.]: Brasport, 2004.

TENENBAUM, Aaron M.; LANGSAM, Yedidyah; AUGENSTEIN, Moshe J. Estruturas de Dados Usando C. [S.l.]: Makron Books, 1995.

VELOSO, Paulo et al. Estrutura de Dados. [S.l.]: Editora Campus, 1983.

WIRTH, Niklaus. Algorítmos e Estruturados de Dados. [S.l.]: Editora PHB, 1989.

Page 5: Aula01_POO_Java.pdf

Introdução

Foco (baseado em questões)Primeira percepção:

Programação Orientada a Objetos em Java Ponteiros em C Árvores e Pilhas (Estrutura da Dados)

Teoria e Exercícios Conhecimento prévio!

Page 6: Aula01_POO_Java.pdf

Conceitos

Mas o que é Java ?

Page 7: Aula01_POO_Java.pdf

Conceitos

Plataforma Java A classe MyProgram.java é compilada

utilizando o javac e, o resultado, é executado numa máquina virtual java (JVM).

Page 8: Aula01_POO_Java.pdf

Conceitos

Funcionamento Geral Texto comum com extensão .java

• javac MyProgram.java → MyProgram.class

Bytecodes Java Virtual Machine (JVM)

• java MyProgram

Page 9: Aula01_POO_Java.pdf

Conceitos

Funcionamento Geral Multiplataforma

Page 10: Aula01_POO_Java.pdf

Conceitos

Principais Estruturas Tipos da Dados Primitivos:

• boolean, char, byte, int, long, float, double;

Operadores:• Aritméticos, Relacionais e Lógicos;

Estruturas Condicionais:• If, switch-case, ternário

Estruturas de repetição• For, while, do-while

Page 11: Aula01_POO_Java.pdf

Conceitos

Observações Ternário

• Observar que float nota=7.5; daria um erro, pois Java consideraria 7.5 como double.

public class Exemplo { public static void main(String[] args) { floatfloat nota = 7.5F; nota = 7.5F; char situacao = nota > 7 ? 'A' : 'R'; System.out.println("Situacao: " + situacao); }}

Page 12: Aula01_POO_Java.pdf

Conceitos

Observações Ternário

Sintaxe do ternário: (condição) ?? resultado se V : : resultado se F

public class Exemplo { public static void main(String[] args) { floatfloat nota = 7.5F; nota = 7.5F; char situacao = nota > 7 ? 'A' : 'R'; System.out.println("Situacao: " + situacao); }}

Page 13: Aula01_POO_Java.pdf

Conceitos

Observações Ternário

Resultado:Situacao: A

public class Exemplo { public static void main(String[] args) { floatfloat nota = 7.5F; nota = 7.5F; char situacao = nota > 7 ? 'A' : 'R'; System.out.println("Situacao: " + situacao); }}

Page 14: Aula01_POO_Java.pdf

Conceitos

Break no switch-casepublic class Exemplo { public static void main(String[] args) { int resposta = 2; switch (resposta) { case 1: System.out.println("Informatica"); break; case 2: System.out.println("Enfermagem"); break; case 3: System.out.println("Psicologia"); break; case 4: System.out.println("Pedagogia"); break; default: System.out.println("Nao encontrado"); } }}

Page 15: Aula01_POO_Java.pdf

Conceitos

Break no switch-case

Enfermagem

public class Exemplo { public static void main(String[] args) { int resposta = 2; switch (resposta) { case 1: System.out.println("Informatica"); break; case 2: System.out.println("Enfermagem"); break; case 3: System.out.println("Psicologia"); break; case 4: System.out.println("Pedagogia"); break; default: System.out.println("Nao encontrado"); } }}

Page 16: Aula01_POO_Java.pdf

ConceitosBreak no switch-case

Enfermagem

Psicologia

Pedagogia

Nao encontrado

public class Exemplo { public static void main(String[] args) { int resposta = 2; switch (resposta) { case 1: System.out.println("Informatica"); case 2: System.out.println("Enfermagem"); case 3: System.out.println("Psicologia"); case 4: System.out.println("Pedagogia"); default: System.out.println("Nao encontrado"); } }}

Page 17: Aula01_POO_Java.pdf

Conceitos

Break no switch-case

Enfermagem

Psicologia

Nao encontrado

public class Exemplo { public static void main(String[] args) { int resposta = 2; switch (resposta) { case 1: System.out.println("Informatica"); case 4: System.out.println("Pedagogia"); case 2: System.out.println("Enfermagem"); case 3: System.out.println("Psicologia"); default: System.out.println("Nao encontrado"); } }}

Page 18: Aula01_POO_Java.pdf

Conceitos

Utilização básica laço for

Resultado0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -

public class Exemplo { public static void main(String[] args) { for (int i = 0; i < 10; i++) { System.out.print(i + " - "); } }}

Page 19: Aula01_POO_Java.pdf

Conceitos

Utilização do continue

Resultado0 - 1 - 2 - 3 - 4 - 5 - 6 - 8 - 9 -

O sete não aparece !!

public class Exemplo { public static void main(String[] args) { for (int i = 0; i < 10; i++) { if (i==7) continue; System.out.print(i + " - "); } }}

Page 20: Aula01_POO_Java.pdf

Conceitos

Utilização do break

Resultado0 - 1 - 2 - 3 - 4 - 5 - 6 -

A partir do sete não aparece mais nada !!

public class Exemplo { public static void main(String[] args) { for (int i = 0; i < 10; i++) { if (i==7) break; System.out.print(i + " - "); } }}

Page 21: Aula01_POO_Java.pdf

Conceitos

Utilização do laço for

Resultado0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10

public class Exemplo { public static void main(String[] args) { int i=0; for (i = 0; i < 10; i++) { System.out.print(i + " - "); } System.out.println(i); }}

Page 22: Aula01_POO_Java.pdf

Conceitos

Utilização do laço for

ResultadoDaria erro, pois a variável i foi declarada dentro do escopo do laço e, portanto, não existe for do laço !

public class Exemplo { public static void main(String[] args) { for (int i=0; i < 10; i++) { System.out.print(i + " - "); } System.out.println(i); }}

Page 23: Aula01_POO_Java.pdf

Conceitos

POO – parte 1 Classes e Objetos Atributos e Métodos Construtor e Destrutor

Page 24: Aula01_POO_Java.pdf

Conceitos

Classes e Objetos Dada uma entidade qualquer que desejamos modelar, a classe

é o projeto dessa entidade. Um objeto dessa classe representa a entidade em si.

Exemplo1:

Exemplo de um trecho de código que cria um objeto da classe Solicitacao:

public class Solicitacao { String nome; long cpf; int protocolo;}

Solicitacao W = new Solicitacao();

Page 25: Aula01_POO_Java.pdf

Conceitos

Atributos e Métodos Atributos:

• modelam o estado que a classe pode ter. São os atributos que diferenciam um objeto de outro da mesma classe.

Métodos:

• modelam as ações que os objetos poderão executar. Todos os objetos da mesma classe possuem os mesmos métodos.

Atributos e Métodos são os MEMBROS da classe.

Page 26: Aula01_POO_Java.pdf

Conceitos

Exemplo A classe Carro abaixo definida possui os atributos modelo,

marca, cor, ano, proprietario e autorizados; possui o método imprime();

class Carro { String modelo; String marca; char cor; int ano; String proprietario; boolean autorizado;

void imprime() { System.out.println("Dados do veículo"); System.out.println("Marca: " + marca + "\tModelo:" + modelo); System.out.println("Dono: " + proprietario + "\tAno: " + ano); }}

Page 27: Aula01_POO_Java.pdf

Conceitos

Exemplopublic class Executavel { public static void main(String[] args) { Carro A = new Carro(); A.modelo="siena"; A.autorizado=false; A.cor='B'; A.marca="fiat"; A.ano=2009; A.proprietario="Elias";

Carro B = new Carro(); B.modelo="palio"; B.autorizado=true; B.cor='N'; B.marca="fiat"; B.ano=2012; B.proprietario="Rafael";

A.imprime(); B.imprime(); }}

Page 28: Aula01_POO_Java.pdf

Conceitos

ExemploDados do veículo

Marca: fiat Modelo:siena

Dono: Elias Ano: 2009

Dados do veículo

Marca: fiat Modelo:palio

Dono: Rafael Ano: 2012

Page 29: Aula01_POO_Java.pdf

Conceitos

Construtor O construtor é um “método” da classe que é

chamado sempre que instanciamos um objeto desta;

O construtor não tem retorno (nem void) ; O construtor sempre tem o mesmo nome da

classe; Se não for definido pelo programador, é

adicionado automaticamente pelo compilador Java.

O operador new exige , como parâmetro, um construtor.

Page 30: Aula01_POO_Java.pdf

Conceitos

Construtor Em Java, construtor é método ?

• Para a JVM é um método estático especial, cujo nome interno é "<init>", e é tratado de modo um pouco diferente dos métodos normais.

• O construtor não é herdado, mesmo sendo public. O construtor não pode usar alguns modificadores que se aplicam a métodos - como final. O construtor não possui retorno.

• Constructor declarations are not members.

The body of a class declares members (fields and methods and nested classes and interfaces), instance and static initializers, and constructors

Em Java, construtor não é método

Page 31: Aula01_POO_Java.pdf

Conceitos

Exemploclass Ponto2D { double x; double y; String label;

Ponto2D(){ x=0;y=0;label="nenhum"; }

void imprime(){ System.out.println("x= "+x+"\t y="+y+"\t"+label); }}

Page 32: Aula01_POO_Java.pdf

Conceitos

Exemplo (continuação)

public class ExPonto01 { public static void main(String[] args) { Ponto2D Q = new Ponto2D(); Q.x = 10; Q.y = 10; Q.label = "marco01"; Q.imprime();

P.imprime(); }}

Chamando o construtor

Page 33: Aula01_POO_Java.pdf

Conceitos

Destrutor Em outras linguagens de programação, o destrutor é

um método utilizado para liberar o espaço de memória do objeto;

O Java não possui destrutor. O Java possui o Garbage Collector: Todos os objetos que perdem todas as suas

referências num programa são CANDIDATOS a serem descartados pelo Garbage Collector

O método finalize() do Java torna o objeto candidato a ser descartado pelo Garbage Collector.

Page 34: Aula01_POO_Java.pdf

Conceitos

POO – parte 2 Visibilidade Métodos Acessores e Modificadores

• Encapsulamento Sobrecarga de Métodos

Page 35: Aula01_POO_Java.pdf

Conceitos

Visibilidade A visibilidade permite que o programador defina

quais atributos e métodos poderão ser acessados por outras classes.

Tipos de Visibilidade• private: somente a classe atual pode acessar• public: todas as outras classes podem acessar• protected: somente classes do mesmo pacote ou

classes filhas terão acesso.• default: somente as classes do mesmo pacote

tem acesso.

Page 36: Aula01_POO_Java.pdf

Conceitos

Exemplopackage app.sistema;

public class Ponto2Dv { private double x; public double y; String label;

public Ponto2Dv(double x, double y, String label) { this.x = x; this.y = y; this.label = label; }}

Page 37: Aula01_POO_Java.pdf

Conceitos

Exemplo(cont.)package app.sistema;

public class ExPonto2Dv {

public static void main(String[] args) { Ponto2Dv Q = new Ponto2Dv(1,1,”ponto inicial”); Q.x=0; // erro Q.y=1; // ok Q.label=”teste”; // ok ! Mesmo pacote!

}

}

Page 38: Aula01_POO_Java.pdf

Conceitos

Métodos Acessores e Modificadores Método Acessor: método, geralmente

público, que dá acesso de leitura a um atributo da classe.

Método Modificador (Mutante): método, geralmente público, que dá acesso de escrita a um atributo da classe.

Page 39: Aula01_POO_Java.pdf

Conceitos

Exemplopublic class Aluno { private String nome; private int matricula;

public int getMatricula() { return matricula; } public void setMatricula(int matricula) { this.matricula = matricula; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } }

Page 40: Aula01_POO_Java.pdf

Conceitos

Exemplo

Modificadores:setMatricula

setNome

public class ExemploAluno {

public static void main(String[] args) { Aluno Q = new Aluno(); Q.setMatricula(700); Q.setNome("Roberto Caio"); System.out.println(Q.getMatricula()+" - "+Q.getNome());

}

}

Page 41: Aula01_POO_Java.pdf

Conceitos

Exemplo

Acessores:getMatricula

getNome

public class ExemploAluno {

public static void main(String[] args) { Aluno Q = new Aluno(); Q.setMatricula(700); Q.setNome("Roberto Caio"); System.out.println(Q.getMatricula()+" - "+Q.getNome());

}

}

Page 42: Aula01_POO_Java.pdf

Conceitos

Métodos Acessores e Modificadores Método Acessor:também são conhecidos

como getters Método Modificador (Mutante):

também são conhecidos como setters.

Page 43: Aula01_POO_Java.pdf

Conceitos

Encapsulamento: encapsular significa “esconder/proteger a

implementação” do usuário da classe. na prática, isso significa, principalmente,

deixar os atributos (dados) private/protected.

AtributosEncapsulados

MétodoModificador

MétodoAcessor

Page 44: Aula01_POO_Java.pdf

Conceitos

Sobrecarga de Métodos: Sobrecarga de métodos permite que dentro

de uma mesma classe, métodos que tenham o mesmo nome mas que tenham diferentes parâmetros.

• em outras palavras, dizemos que podemos criar métodos com o mesmo nome.

• da mesma forma que existe sobrecarga de métodos, existem a sobrecarga de construtor.

método sobrecarregado • overload

Page 45: Aula01_POO_Java.pdf

Conceitos

Exemplo: Dois métodos imprime adicionados na classe

Auno:

public void imprime(){ System.out.println(matricula+" - "+nome); } public void imprime(int n){ for(int i=0; i<n; i++){ this.imprime(); }

Page 46: Aula01_POO_Java.pdf

Conceitos

POO – parte 3 Herança

• Sobrescrita Interfaces

Page 47: Aula01_POO_Java.pdf

Conceitos

Herança: mecanismo da POO que permite que uma

classe seja definida a partir de uma outra pré-existente.

A nova classe (classe filha) herda todos os

atributos e métodos da classe mãe (progenitora). Observação: devemos considerar a visibilidade

Herança Simples x Herança Composta Sintaxe (Java):

class ClasseFilha extends ClassePai

Page 48: Aula01_POO_Java.pdf

Conceitos

Sobrescrita (override) Na classe filha é possível re-escrever um

método existente na classe pai• Mesma assinatura da classe Pai

• A visibilidade pode ser MENOS restritiva– private (mais restritiva)– default– protected– public (menos restritiva)

Page 49: Aula01_POO_Java.pdf

Conceitos

Exemplopublic class Ponto2D { protected double x; protected double y; protected String label;

Ponto2D(){ x=0;y=0;label="nenhum"; }

void imprime(){ System.out.println("x= "+x+"\t y="+y+"\t"+label); }

}

Page 50: Aula01_POO_Java.pdf

Conceitos

Exemplo(cont.)public class Ponto3D extends Ponto2D { protected double z;

Ponto3D() { super(); z = 0; }

public void imprime() { super.imprime(); System.out.println("z=" + z); }}

Page 51: Aula01_POO_Java.pdf

Conceitos

Exemplo(cont.)public class Ponto3D extends Ponto2D { protected double z;

Ponto3D() { super(); z = 0; }

public void imprime() { super.imprime(); System.out.println("z=" + z); }}

A classe herda os atributos x, y e label da classe pai

O método imprime() da classePonto3D sobreescreve o método

imprime da classe Ponto2D.

Page 52: Aula01_POO_Java.pdf

Conceitos

Exemplo(cont.)public class Ponto3D extends Ponto2D { protected double z;

Ponto3D() { super(); z = 0; }

public void imprime() { super.imprime(); System.out.println("z=" + z); }}

O contrutor tem visibilidadedefault. Portanto, onde

poderemos instanciar objetos da classe Ponto3D ?

Page 53: Aula01_POO_Java.pdf

Conceitos

Aspectos particulares da Herança no Java: Toda classe é filha da classe Object Java somente permite Herança Simples Utilização de Herança:

• Relacionamento “É UM”PESSOA

ALUNO

É UM (A)

Page 54: Aula01_POO_Java.pdf

Conceitos

Diagrama de Classes

Page 55: Aula01_POO_Java.pdf

Conceitos

Interfaces As interfaces em Java são similares às classes Possuem hierarquia de forma similar às classes

• É possível utilizar extends entre interfaces As interfaces definem comportamentos

• Na forma de uma lista de métodos públicos 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.

Page 56: Aula01_POO_Java.pdf

Conceitos

Exemplo:

Acima temos um aspecto geral de como é definida de uma interface

Observe que a sintaxe utilizada é similar ao da classe – mas ao invés de utilizar class utilizamos interface.

Os métodos da interface não possuem implementação

public interface Imprimivel{ public void imprime(); public Map getConfiguracoesImpressora(); public void setConfiguracao(String chave, String valor);}

Page 57: Aula01_POO_Java.pdf

Conceitos

Exemplo (cont.)public class Aluno implements Imprimivel{ private String nome; private int matricula;

public void imprime(){ System.out.println(matricula+" - "+nome); } public Map getConfiguracoesImpressora() { // codigo return null; } public void setConfiguracao(String chave, String valor) { // codigo }}

Page 58: Aula01_POO_Java.pdf

Conceitos

Classes Abstratas Não são instanciadas. Podem definir métodos sem implementação

• Esses métodos também utilizam o modificador abstract

• Neste caso, se uma classe (concreta) extender (extends) essa classe abstrata, ela DEVERÁ implementar esses métodos.

Page 59: Aula01_POO_Java.pdf

Conceitos

Exemplo de classe Abstrata:

public abstract class Aluno { private String nome; private int matricula;

public Aluno(String nome, int matricula) { this.nome = nome; this.matricula = matricula; }

public abstract void imprime(); }}

Page 60: Aula01_POO_Java.pdf

Conceitos

Outros conceitos Atributos e Métodos estáticos Classe Final Wrappers e AutoBoxing (*) Tratamento de Exceções (*)

Page 61: Aula01_POO_Java.pdf

Conceitos

POO – Parte 4 Polimorfismo

Page 62: Aula01_POO_Java.pdf

Conceitos

Polimorfismo Pilares da Programação Orientada a Objetos:

• Encapsulamento• Herança• Polimorfismo

Page 63: Aula01_POO_Java.pdf

Conceitos

Polimorfismo É o mecanismos da POO que permite que

um serviço apresente diversos comportamentos.

Tipos de Polimorfismo em Java:• Polimorfismo de Inclusão• Sobrecarga• Sobreposição ou sobrescrita

Page 64: Aula01_POO_Java.pdf

Conceitos

A sobrecarga é a possibilidade de implementação de métodos que possuam a mesma assinatura de método mas que diferem nos parâmetros passados para o método. Esses métodos podem estar em classe pai e

filha.

A sobreposição é a possibilidade de re-escrevermos um método de uma ancestral utilizando a mesma assinatura.

Page 65: Aula01_POO_Java.pdf

Conceitos

Polimorfismo de Inclusão O polimorfismo de inclusão permite a criação

de variáveis polimórficas, isto é, variáveis (ou objetos) de determinada classe que apresentam comportamentos distintos de acordo com o objeto que recebe.

Page 66: Aula01_POO_Java.pdf

Conceitos

Exemplo

package app.polimorfismo;

public class Pessoa { public String nome;

public void imprime() { System.out.println("Nome:" + nome); }}

package app.polimorfismo;

public class Aluno extends Pessoa { public int matricula;

public void imprime() { super.imprime(); System.out.println("Matricula:" + matricula); }}

Page 67: Aula01_POO_Java.pdf

Conceitos

Exemplo (cont.)package app.polimorfismo;

public class Ex { public static void main(String[] args) { Pessoa A = new Pessoa(); A.nome = "Ricardo"; Pessoa B = new Pessoa(); B.nome = "Ana"; Aluno C = new Aluno(); C.nome = "Waleska"; C.matricula = 123; Aluno D = new Aluno(); D.nome = "Luiz"; D.matricula = 112; Pessoa E = new Pessoa(); E.nome = "Leandro";

Page 68: Aula01_POO_Java.pdf

Conceitos

Exemplo(cont.)

public class Ex {

public static void main(String[] args) { . . .

Pessoa[] vetor = { A, B, C, D, E }; for (int i = 0; i < vetor.length; i++) { vetor[i].imprime(); }

}

}

Page 69: Aula01_POO_Java.pdf

Conceitos

Exemplo(cont.)

Qual o resultado ?Nome:RicardoNome:AnaNome:WaleskaMatricula:123Nome:LuizMatricula:112Nome:Leandro

Page 70: Aula01_POO_Java.pdf

Conceitos

Exemplo (cont.)package app.polimorfismo;

public class Ex { public static void main(String[] args) { Pessoa A = new Pessoa(); A.nome = "Ricardo"; Pessoa B = new Pessoa(); B.nome = "Ana"; Aluno C = new Aluno(); C.nome = "Waleska"; C.matricula = 123; Aluno D = new Aluno(); D.nome = "Luiz"; D.matricula = 112; Pessoa E = new Aluno(); E.nome = "Leandro";

E agora ??

Page 71: Aula01_POO_Java.pdf

Conceitos

Exemplo(cont.)

Qual o resultado ?Nome:RicardoNome:AnaNome:WaleskaMatricula:123Nome:LuizMatricula:112Nome:Leandro

Matricula:0

Page 72: Aula01_POO_Java.pdf

Conceitos

Desafio Finalpublic class A { public int getValor() { return 1; }}

public class B extends A { public int getValor() { return 2; }}

Page 73: Aula01_POO_Java.pdf

Conceitos

Desafio Final

public class Codigo { public static void main(String[] args) { A p1 = new A(); B p2 = new B(); A p3 = new B(); System.out.println(p1.getValor()); System.out.println(p2.getValor()); System.out.println(p3.getValor());

}}

Page 74: Aula01_POO_Java.pdf

Conceitos

Resultado do Desafio Final122

Page 75: Aula01_POO_Java.pdf

Conceitos

POO Atributos Estáticos Métodos Estáticos

Observação: não estava claro na ementa que esse assunto seria abordado – no entanto, para resolver a questão de 2010, tal conhecimento foi necessário.

Lembram do que comentei sobre Deitel ?

Page 76: Aula01_POO_Java.pdf

Conceitos

Atributos Estáticos ou Atributos de Classe São atributos válidos para todos objetos da classeda classe,

ou seja, se você trocar o valor de um atributo de classe, você estará trocando o valor do atributo de TODOS os objetos daquela classe.

• É como se houvesse um único atributo para a classe toda.

Atributos de classe DEVEM ser acessados utilizando o nome da classe seguido pelo atributo

• nomeDaClasse.nomeDoAtributo• Mas, como veremos adiante, isso não é

obrigatório!

Page 77: Aula01_POO_Java.pdf

Conceitos

Atributos Estáticos 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.

• Atributos estáticos somente podem ser acessados internamente à classe – por métodos estáticos.

Page 78: Aula01_POO_Java.pdf

Conceitos

Atributos Estáticos}

public class Aluno { public String nome; public static String instituicao;}

public class ExAluno { 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); }}

Page 79: Aula01_POO_Java.pdf

Conceitos

Atributos Estáticos Saída:

Nome: Fábio Instituição: CDS

Nome: FábioNome: Fábio Instituição: EMEInstituição: EME

Nome: Aline Instituição: EME

Para evitar confusão, portanto, utilizamos a notação com o nome da classe (e não da instância)

• Observe o código a seguir que produz o MESMO resultado.

Page 80: Aula01_POO_Java.pdf

Conceitos

Atributos Estáticospublic 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); }

}

Page 81: Aula01_POO_Java.pdf

Conceitos

Atributos Estáticos Saída é a mesma !!:

Nome: Fábio Instituição: CDS

Nome: Fábio Instituição: EME

Nome: Aline Instituição: EME

Isso significa que você deve conhecer as duas sintaxes → do ponto de vista de programação, a segunda é ideal. Do ponto de vista de prova, você deve conhecer o resultado de ambas.

Page 82: Aula01_POO_Java.pdf

Conceitos

Métodos Estáticos 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.

• Exemplo: 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: classes utilitárias.

Page 83: Aula01_POO_Java.pdf

Conceitos

Métodos Estáticosimport 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; }}

Page 84: Aula01_POO_Java.pdf

Conceitos

Métodos Estáticos Exemplo de como utilizar o método anagrama

da classe do slide anterior:

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)

public class ExUtils {

public static void main(String[] args) { System.out.println(Utils.Anagrama("ricardo")); }

}

Page 85: Aula01_POO_Java.pdf

Conceitos

Métodos Estáticos Da mesma forma que os atributos estáticos,

métodos estáticos podem ser acessados por meio das instâncias:

public class Ex2 { public static void main(String[] args) { Utils W = new Utils(); System.out.println(W.Anagrama("ricardo")); }}

Page 86: Aula01_POO_Java.pdf

Conceitos

Métodos Estáticos Observação Importante:

• Métodos estáticos podem chamar outros métodos estáticos e/ou atributos estáticos.

• Não é possível fazer um acesso a instância de dentro de um método estático

– Ou seja, não é possível utilizar o “this” dentro de um método estático !

Page 87: Aula01_POO_Java.pdf

Conclusão

Chegamos aqui ?

Page 88: Aula01_POO_Java.pdf

FIM

CIDADE IDIOMAS & CURSOS PREPARATÓRIOS

CLN 113 - Bloco C - Sala 207 a 210 Asa Norte - Brasília - DF - CEP 70.763-503

Tel: (61) 3340-0433 / 9975-4464 / 8175-4509E-mail: [email protected]

Site: www.iic.pro.brSkype: luizcidade

Page 89: Aula01_POO_Java.pdf

Prof. Ricardo Sant'Ana