Sunteți pe pagina 1din 89

Preparatrio EsFCEx

TCNICAS DE PROGRAMAO
Programao Orie!ta"a a O#$etos
Pro%& Ri'ar"o Sa!t(A!a

S)m*rio
ntroduo
+
Conceitos
,
Concluso
-

I!tro")o

Lista de Assuntos
2. TCNCAS DE PROGRAMAO:
a. Lgica aplicada: algoritmos, tcnicas de construo de
algoritmos, resoluo de problemas.
b. Estrutura de dados: vetores, matrizes, cadeia de caracteres,
listas lineares, pilhas, filas, rvores, grafos, pesquisa de dados,
classificao de dados, estruturas e tipos abstratos de dados,
recursividade, eficincia e complexidade.
c. Programao estruturada: refinamentos sucessivos, estruturas
em blocos, estruturas de controle de fluxo, programao modular,
rotinas, sub-rotinas, procedimentos e funes (Linguagem C).
d. Programao orientada a objetos: classes e objetos,
polimorfismo, herana, interface, linguagens orientadas a objetos
(Linguagens C++ e Java).
e. Linguagens de programao para a internet: JAVA, PHP e JSP.

I!tro")o

Bibliografia
COSTA, Daniel G. JAVA em Rede: Recursos Avanados. Rio de Janeiro:
Brasport, 2008.
DEITE./ 0& M& 1A2A Como Programar& 3& e"& 4S&5&67 E"itora 8oo9ma!/ ,::3&
GAMMA, Erich et al. Padres de Projeto: Solues Reutilizveis de Software
Orientado a Objetos. [S.l.]: Bookman, 2005.
GUMARES, 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
Cincia Moderna, 2001.
MUTO, Claudio Adonai. PHP & MYSQL Guia Completo. [S.l.]: Brasport, 2004.
TENENBAUM, Aaron M.; LANGSAM, Yedidyah; AUGENSTEN, Moshe J.
Estruturas de Dados Usando C. [S.l.]: Makron Books, 1995.
VELOSO, Paulo et al. Estrutura de Dados. [S.l.]: Editora Campus, 1983.
;IRT0/ Ni95a)s& A5gor<tmos e Estr)t)ra"os "e Da"os& 4S&5&67 E"itora P08/
+=>=.

I!tro")o

Foco (baseado em questes)

Primeira percepo:

Programao Orientada a Objetos em Java

Ponteiros em C

rvores e Pilhas (Estrutura da Dados)

Teoria e !erc"cios

Conhecimento prvio!

Co!'eitos

#as o que $ %a&a '



Co!'eitos

Plataforma %a&a

A classe MyProgram.java compilada


utilizando o javac e, o resultado, executado
numa mquina virtual java (JVM).

Co!'eitos

Funcionamento (eral

Texto comum com extenso .java


javac MyProgram.java MyProgram.class

Bytecodes

Java Virtual Machine (JVM)


java MyProgram

Co!'eitos

Funcionamento (eral

Multiplataforma

Co!'eitos

Principais struturas

Tipos da Dados Primitivos:


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

Operadores:
Aritmticos, Relacionais e Lgicos;

Estruturas Condicionais:
f, switch-case, ternrio

Estruturas de repetio
For, while, do-while

Co!'eitos

)bser&aes

Ternrio
Observar que %5oat !ota?@&AB daria um erro, pois
Java consideraria 7.5 como double.
public class Exemplo {
public static void main(String[] args) {
float float nota = 7.5F; nota = 7.5F;
char situacao = nota > 7 ? ! " #;
S$stem.out.println(%Situacao" % & situacao);
'
'

Co!'eitos

)bser&aes

Ternrio
Sintaxe do ternrio: (condio) C C resultado se V 7 7 resultado se F
public class Exemplo {
public static void main(String[] args) {
float float nota = 7.5F; nota = 7.5F;
char situacao = nota > 7 ? ! " #;
S$stem.out.println(%Situacao" % & situacao);
'
'

Co!'eitos

)bser&aes

Ternrio

Resultado:
Situacao: A
public class Exemplo {
public static void main(String[] args) {
float float nota = 7.5F; nota = 7.5F;
char situacao = nota > 7 ? ! " #;
S$stem.out.println(%Situacao" % & situacao);
'
'

Co!'eitos

Brea* no s+itc,-case
public class Exemplo {
public static void main(String[] args) {
int resposta = (;
switch (resposta) {
case )"
S$stem.out.println(%*n+ormatica%);
break;
case ("
S$stem.out.println(%En+ermagem%);
break;
case ,"
S$stem.out.println(%-sicologia%);
break;
case ."
S$stem.out.println(%-e/agogia%);
break;
default"
S$stem.out.println(%0ao encontra/o%);
'
'
'

Co!'eitos

Brea* no s+itc,-case
nfermagem
public class Exemplo {
public static void main(String[] args) {
int resposta = (;
switch (resposta) {
case )"
S$stem.out.println(%*n+ormatica%);
break;
case ("
S$stem.out.println(%En+ermagem%);
break;
case ,"
S$stem.out.println(%-sicologia%);
break;
case ."
S$stem.out.println(%-e/agogia%);
break;
default"
S$stem.out.println(%0ao encontra/o%);
'
'
'

Co!'eitos

Brea* no s+itc,-case
nfermagem
Psicologia
Pedagogia
.ao encontrado
public class Exemplo {
public static void main(String[] args) {
int resposta = (;
switch (resposta) {
case )"
S$stem.out.println(%*n+ormatica%);
case ("
S$stem.out.println(%En+ermagem%);
case ,"
S$stem.out.println(%-sicologia%);
case ."
S$stem.out.println(%-e/agogia%);
default"
S$stem.out.println(%0ao encontra/o%);
'
'
'

Co!'eitos

Brea* no s+itc,-case

nfermagem
Psicologia
.ao encontrado
public class Exemplo {
public static void main(String[] args) {
int resposta = (;
switch (resposta) {
case )"
S$stem.out.println(%*n+ormatica%);
case ."
S$stem.out.println(%-e/agogia%);
case ("
S$stem.out.println(%En+ermagem%);
case ,"
S$stem.out.println(%-sicologia%);
default"
S$stem.out.println(%0ao encontra/o%);
'
'
'

Co!'eitos

/tili0ao b1sica lao for

2esultado
0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -
public class Exemplo {
public static void main(String[] args) {
for (int i = 1; i 2 )1; i&&) {
S$stem.out.print(i & % 3 %);
'
'
'

Co!'eitos

/tili0ao do continue

2esultado
0 - 1 - 2 - 3 - 4 - 5 - 6 - 8 - 9 -
O sete no aparece !!
public class Exemplo {
public static void main(String[] args) {
for (int i = 1; i 2 )1; i&&) {
if (i==7) continue;
S$stem.out.print(i & % 3 %);
'
'
'

Co!'eitos

/tili0ao do brea*

2esultado
0 - 1 - 2 - 3 - 4 - 5 - 6 -
A partir do sete no aparece mais nada !!
public class Exemplo {
public static void main(String[] args) {
for (int i = 1; i 2 )1; i&&) {
if (i==7) break;
S$stem.out.print(i & % 3 %);
'
'
'

Co!'eitos

/tili0ao do lao for

2esultado
0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10
public class Exemplo {
public static void main(String[] args) {
int i=1;
for (i = 1; i 2 )1; i&&) {
S$stem.out.print(i & % 3 %);
'
S$stem.out.println(i);
'
'

Co!'eitos

/tili0ao do lao for

2esultado
Daria erro, pois a varivel i foi declarada dentro do escopo do lao e,
portanto, no existe for do lao !
public class Exemplo {
public static void main(String[] args) {

for (int i=1; i 2 )1; i&&) {
S$stem.out.print(i & % 3 %);
'
S$stem.out.println(i);
'
'

Co!'eitos

P)) 3 parte 4

Classes e Objetos

Atributos e Mtodos

Construtor e Destrutor

Co!'eitos

5lasses e )b6etos
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 cdigo que cria um objeto da classe
Solicitacao:
public class Solicitacao {
String nome;
long cp+;
int protocolo;
'
Solicitacao 4 = new Solicitacao();

Co!'eitos

Atributos e #$todos
Atri#)tos7
modelam o estado que a classe pode ter. So os atributos
que diferenciam um objeto de outro da mesma classe.
MDto"os7
modelam as aes que os objetos podero executar. Todos
os objetos da mesma classe possuem os mesmos mtodos.
Atributos e Mtodos so os MEMBROS da classe.

Co!'eitos

!emplo
A classe Carro abaixo definida possui os atributos modelo,
marca, cor, ano, proprietario e autorizados; possui o mtodo
imprime();
class 5arro {
String mo/elo;
String marca;
char cor;
int ano;
String proprietario;
boolean autori6a/o;
void imprime() {
S$stem.out.println(%7a/os /o 8e9culo%);
S$stem.out.println(%:arca" % & marca & %;t:o/elo"% & mo/elo);
S$stem.out.println(%7ono" % & proprietario & %;t!no" % & ano);
'
'

Co!'eitos

!emplo
public class Executa8el {
public static void main(String[] args) {
5arro ! = new 5arro();
!.mo/elo=%siena%;
!.autori6a/o=false;
!.cor=<;
!.marca=%+iat%;
!.ano=(11=;
!.proprietario=%Elias%;
5arro < = new 5arro();
<.mo/elo=%palio%;
<.autori6a/o=true;
<.cor=0;
<.marca=%+iat%;
<.ano=(1)(;
<.proprietario=%#a+ael%;
!.imprime();
<.imprime();
'
'

Co!'eitos

!emplo
Dados do veculo
Marca: fiat Modelo:siena
Dono: Elias Ano: 2009
Dados do veculo
Marca: fiat Modelo:palio
Dono: Rafael Ano: 2012

Co!'eitos

5onstrutor

O construtor um "mDto"oE da classe que


chamado sempre que instanciamos um objeto
desta;

O construtor no tem retorno (nem void) ;

O construtor sempre tem o mesmo nome da


classe;

Se no for definido pelo programador,


adicionado automaticamente pelo compilador
Java.

O operador new exige , como parmetro, um


construtor.

Co!'eitos

5onstrutor

Em Java, construtor mtodo ?


Para a JVM um mtodo esttico especial, cujo nome
interno "<init>", e tratado de modo um pouco diferente
dos mtodos normais.
O construtor no herdado, mesmo sendo public. O
construtor no pode usar alguns modificadores que se
aplicam a mtodos - como final. O construtor no 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 1aFa/ 'o!str)tor !o D mDto"o

Co!'eitos

!emplo
class -onto(7 {
double x;
double $;
String la>el;
-onto(7(){
x=1;$=1;la>el=%nen?um%;
'
void imprime(){
S$stem.out.println(%x= %&x&%;t $=%&$&%;t%&la>el);
'
'

Co!'eitos

!emplo (continuao)
public class Ex-onto1) {
public static void main(String[] args) {
-onto(7 @ = new -onto(7();
@.x = )1;
@.$ = )1;
@.la>el = %marco1)%;
@.imprime();
-.imprime();
'
'
Chamando
o construtor

Co!'eitos

7estrutor

Em outras linguagens de programao, o destrutor


um mtodo utilizado para liberar o espao de
memria do objeto;
O Java no possui destrutor.

O Java possui o Gar#age Co55e'tor:

Todos os objetos que perdem todas as suas


referncias num programa so CANDDATOS a
serem descartados pelo Garbage Collector

O mtodo finalize() do Java torna o objeto candidato


a ser descartado pelo Garbage Collector.

Co!'eitos

P)) 3 parte 8

Visibilidade

Mtodos Acessores e Modificadores


Encapsulamento

Sobrecarga de Mtodos

Co!'eitos

9isibilidade

A visibilidade permite que o programador defina


quais atributos e mtodos podero ser acessados
por outras classes.

Tipos de 9isibilidade
private: somente a classe atual pode acessar
public: todas as outras classes podem acessar
protected: somente classes do mesmo pacote ou
classes filhas tero acesso.
default: somente as classes do mesmo pacote
tem acesso.

Co!'eitos

!emplo
package app.sistema;
public class -onto(78 {
private double x;
public double $;
String la>el;
public -onto(78(double xA double $A String la>el) {
this.x = x;
this.$ = $;
this.la>el = la>el;
'
'

Co!'eitos

!emplo(cont:)
package app.sistema;
public class Ex-onto(78 {
public static void main(String[] args) {
-onto(78 @ = new -onto(78()A)ABponto inicialB);
@.x=1; CC erro
@.$=); CC oD
@.la>el=BtesteB; CC oD E :esmo pacoteE
'
'

Co!'eitos

#$todos Acessores e #odificadores

Mtodo Acessor: m$todo; geralmente


p<blico; que d1 acesso de leitura a um
atributo da classe:

Mtodo Modificador (Mutante):


m$todo; geralmente p<blico; que d1
acesso de escrita a um atributo da classe:

Co!'eitos

!emplo
public class !luno {
private String nome;
private int matricula;
public int get:atricula() {
return matricula;
'
public void set:atricula(int matricula) {
this.matricula = matricula;
'
public String get0ome() {
return nome;
'
public void set0ome(String nome) {
this.nome = nome;
'

'

Co!'eitos

!emplo
Modificadores:
setMatricula
setNome
public class Exemplo!luno {
public static void main(String[] args) {
!luno @ = new !luno();
@.set:atricula(711);
@.set0ome(%#o>erto 5aio%);
S$stem.out.println(@.get:atricula()&% 3 %&@.get0ome());
'
'

Co!'eitos

!emplo
Acessores:
getMatricula
getNome
public class Exemplo!luno {
public static void main(String[] args) {
!luno @ = new !luno();
@.set:atricula(711);
@.set0ome(%#o>erto 5aio%);
S$stem.out.println(@.get:atricula()&% 3 %&@.get0ome());
'
'

Co!'eitos

#$todos Acessores e #odificadores

Mtodo Acessor:tamb$m so con,ecidos


como getters

Mtodo Modificador (Mutante):


tamb$m so con,ecidos como setters:

Co!'eitos

ncapsulamento:

encapsular significa "esconder/proteger a


implementao do usurio da classe.

na prtica, isso significa, principalmente,


deixar os atributos (dados) private/protected.
Atri#)tos
E!'aps)5a"os
MDto"o
Mo"i%i'a"or
MDto"o
A'essor

Co!'eitos

=obrecarga de #$todos:

Sobrecarga de mtodos permite que dentro


de uma mesma classe, mtodos que tenham
o mesmo nome mas que tenham diferentes
parmetros.
em outras palavras, dizemos que podemos criar
mtodos com o mesmo nome.
da mesma forma que existe sobrecarga de
mtodos, existem a sobrecarga de construtor.

mtodo sobrecarregado
overload

Co!'eitos

!emplo:

Dois mtodos imprime adicionados na classe


Auno:
public void imprime(){
S$stem.out.println(matricula&% 3 %&nome);
'
public void imprime(int n){
for(int i=1; i2n; i&&){
this.imprime();
'


Co!'eitos

P)) 3 parte >

Herana
Sobrescrita

nterfaces

Co!'eitos

?erana:

mecanismo da P)) que permite que uma


classe se6a definida a partir de uma outra pr$-
e!istente:

A no&a classe (classe fil,a) ,erda todos os


atributos e m$todos da classe me (progenitora):

)bser&ao: de&emos considerar a &isibilidade

?erana =imples ! ?erana 5omposta

=inta!e (%a&a):

class 5lasseFil,a e!tends 5lassePai



Co!'eitos

=obrescrita (o&erride)

Na classe filha possvel re-escrever um


mtodo existente na classe pai
Mesma assinatura da classe Pai
A visibilidade pode ser MENOS restritiva
private (mais restritiva)
default
protected
public (menos restritiva)

Co!'eitos

!emplo
public class -onto(7 {
protected double x;
protected double $;
protected String la>el;
-onto(7(){
x=1;$=1;la>el=%nen?um%;
'
void imprime(){
S$stem.out.println(%x= %&x&%;t $=%&$&%;t%&la>el);
'
'

Co!'eitos

!emplo(cont:)
public class -onto,7 extends -onto(7 {
protected double 6;
-onto,7() {
super();
6 = 1;
'
public void imprime() {
super.imprime();
S$stem.out.println(%6=% & 6);
'
'

Co!'eitos

!emplo(cont:)
public class -onto,7 extends -onto(7 {
protected double 6;
-onto,7() {
super();
6 = 1;
'
public void imprime() {
super.imprime();
S$stem.out.println(%6=% & 6);
'
'
A classe herda os atributos
x, y e label da classe pai
O mtodo imprime() da classe
Ponto3D sobreescreve o mtodo
imprime da classe Ponto2D.

Co!'eitos

!emplo(cont:)
public class -onto,7 extends -onto(7 {
protected double 6;
-onto,7() {
super();
6 = 1;
'
public void imprime() {
super.imprime();
S$stem.out.println(%6=% & 6);
'
'
O contrutor tem visibilidade
default. Portanto, onde
poderemos instanciar objetos
da classe Ponto3D ?

Co!'eitos

Aspectos particulares da ?erana no


%a&a:

Toda classe filha da classe O#$e't

Java somente permite Herana Simples

Utilizao de Herana:
Relacionamento " UM
PESSOA
A.GNO
UM (A)

Co!'eitos

7iagrama de 5lasses


Co!'eitos

@nterfaces

As interfaces em %a&a so similares As classes

Possuem ,ierarquia de forma similar As classes


B poss"&el utili0ar e!tends entre interfaces

As interfaces definem comportamentos

.a forma de uma lista de m$todos p<blicos

7efinem o que uma classe de&e implementar e no


como essa classe ir1 implementar:

Se uma classe implementa uma interface, ela


dever implementar todos os
mtodos/comportamentos desta interface.

Co!'eitos

!emplo:

Acima temos um aspecto geral de como $


definida de uma interface

)bser&e que a sinta!e utili0ada $ similar ao da


classe 3 mas ao in&$s de utili0ar class utili0amos
interface:

)s m$todos da interface no possuem


implementao
public interface *mprimi8el{
public void imprime();
public :ap get5on+iguracoes*mpressora();
public void set5on+iguracao(String c?a8eA String 8alor);
'

Co!'eitos

!emplo (cont:)
public class !luno implements *mprimi8el{
private String nome;
private int matricula;
public void imprime(){
S$stem.out.println(matricula&% 3 %&nome);
'
public :ap get5on+iguracoes*mpressora() {
CC co/igo
return null;
'
public void set5on+iguracao(String c?a8eA String 8alor) {
CC co/igo
'
'

Co!'eitos

5lasses Abstratas

No so instanciadas.

Podem definir mtodos sem implementao


Esses mtodos tambm utilizam o modificador
abstract
Neste caso, se uma classe (concreta) extender
(extends) essa classe abstrata, ela DEVER
implementar esses mtodos.

Co!'eitos

!emplo de classe Abstrata:


public abstract class !luno {
private String nome;
private int matricula;
public !luno(String nomeA int matricula) {
this.nome = nome;
this.matricula = matricula;
'
public abstract void imprime();
'
'

Co!'eitos

)utros conceitos

Atributos e Mtodos estticos

Classe Final

Wrappers e AutoBoxing (*)

Tratamento de Excees (*)



Co!'eitos

P)) 3 Parte C

Polimorfismo

Co!'eitos

Polimorfismo

Pilares da Programao Orientada a Objetos:


Encapsulamento
Herana
Polimorfismo

Co!'eitos

Polimorfismo

o mecanismos da POO que permite que


um servio apresente diversos
comportamentos.

Tipos de Polimorfismo em Java:


Polimorfismo de ncluso
Sobrecarga
Sobreposio ou sobrescrita

Co!'eitos

A sobrecarga $ a possibilidade de
implementao de m$todos que possuam
a mesma assinatura de m$todo mas que
diferem nos parDmetros passados para o
m$todo:

Esses mtodos podem estar em classe pai e


filha.

A sobreposio $ a possibilidade de re-


escre&ermos um m$todo de uma ancestral
utili0ando a mesma assinatura:

Co!'eitos

Polimorfismo de @ncluso

O polimorfismo de incluso permite a criao


de variveis polimrficas, isto , variveis (ou
objetos) de determinada classe que
apresentam comportamentos distintos de
acordo com o objeto que recebe.

Co!'eitos

!emplo
package app.polimor+ismo;
public class -essoa {
public String nome;
public void imprime() {
S$stem.out.println(%0ome"% & nome);
'
'
package app.polimor+ismo;
public class !luno extends -essoa {
public int matricula;
public void imprime() {
super.imprime();
S$stem.out.println(%:atricula"% & matricula);
'
'

Co!'eitos

!emplo (cont:)
package app.polimor+ismo;
public class Ex {
public static void main(String[] args) {
-essoa ! = new -essoa();
!.nome = %#icar/o%;
-essoa < = new -essoa();
<.nome = %!na%;
!luno 5 = new !luno();
5.nome = %4alesDa%;
5.matricula = )(,;
!luno 7 = new !luno();
7.nome = %Fui6%;
7.matricula = ))(;
-essoa E = new -essoa();
E.nome = %Fean/ro%;

Co!'eitos

!emplo(cont:)

public class Ex {
public static void main(String[] args) {
.
.
.
-essoa[] 8etor = { !A <A 5A 7A E ';
for (int i = 1; i 2 8etor.lengt?; i&&) {
8etor[i].imprime();
'
'
'

Co!'eitos

!emplo(cont:)

Eual o resultado '


.ome:2icardo
.ome:Ana
.ome:Fales*a
#atricula:48>
.ome:Lui0
#atricula:448
.ome:Leandro

Co!'eitos

!emplo (cont:)
package app.polimor+ismo;
public class Ex {
public static void main(String[] args) {
-essoa ! = new -essoa();
!.nome = %#icar/o%;
-essoa < = new -essoa();
<.nome = %!na%;
!luno 5 = new !luno();
5.nome = %4alesDa%;
5.matricula = )(,;
!luno 7 = new !luno();
7.nome = %Fui6%;
7.matricula = ))(;
-essoa E = new Aluno();
E.nome = %Fean/ro%;
E agora ??

Co!'eitos

!emplo(cont:)

Eual o resultado '


.ome:2icardo
.ome:Ana
.ome:Fales*a
#atricula:48>
.ome:Lui0
#atricula:448
Nome:Leandro

Matricula:0

Co!'eitos

7esafio Final
public class ! {
public int getGalor() {
return );
'
'
public class < extends ! {
public int getGalor() {
return (;
'
'

Co!'eitos

7esafio Final
public class 5o/igo {
public static void main(String[] args) {
! p) = new !();
< p( = new <();
! p, = new <();
S$stem.out.println(p).getGalor());
S$stem.out.println(p(.getGalor());
S$stem.out.println(p,.getGalor());
'
'

Co!'eitos

2esultado do 7esafio Final


1
2
2

Co!'eitos

P))

Atributos Estticos

Mtodos Estticos
Observao: no estava claro na ementa que esse
assunto seria abordado no entanto, para resolver a
questo de 2010, tal conhecimento foi necessrio.
Lembram do que comentei sobre Deitel ?

Co!'eitos

Atributos st1ticos ou Atributos de 5lasse

So atributos vlidos para todos objetos da classe da 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 no
obrigatrio!

Co!'eitos

Atributos st1ticos

sso torna o cdigo mais claro do que se


utilizssemos o:
nomeDanstncia.nomeDoAtributo.

O espao de memria dos atributos estticos


compartilhado entre os objetos daquela
classe.
Atributos estticos somente podem ser acessados
internamente classe por mtodos estticos.

Co!'eitos

Atributos st1ticosG
public class !luno {
public String nome;
public static String instituicao;
'
public class Ex!luno {
public static void main(String[] args) {
!luno - = new !luno();
-.nome = %FH>io%;
-.instituicao = %57S%;
S$stem.out.println(%0ome" % & -.nome & %;t*nstituiIJo" % & -.instituicao);
!luno @ = new !luno();
@.nome = %!line%;
@.instituicao = %E:E%;
S$stem.out.println(%0ome" % & -.nome & %;t*nstituiIJo" % & -.instituicao);
S$stem.out.println(%0ome" % & @.nome & %;t*nstituiIJo" % & @.instituicao);
'
'

Co!'eitos

Atributos st1ticos

Sada:
Nome: Fbio nstituio: CDS
Nome: Fbio Nome: Fbio nstituio: EME nstituio: EME
Nome: Aline nstituio: EME
Para evitar confuso, portanto, utilizamos a notao com
o nome da classe (e no da instncia)
Observe o cdigo a seguir que produz o MESMO
resultado.

Co!'eitos

Atributos st1ticos
public class Ex!luno( {
public static void main(String[] args) {
!luno - = new !luno();
-.nome=%FH>io%;
!luno.instituicao=%57S%;
S$stem.out.println(%0ome"%&-.nome&%;t*nstituiIJo"
%&!luno.instituicao);
!luno @ = new !luno();
@.nome=%!line%;
!luno.instituicao=%E:E%;
S$stem.out.println(%0ome"%&-.nome&%;t*nstituiIJo"
%&!luno.instituicao);
S$stem.out.println(%0ome"%&@.nome&%;t*nstituiIJo"
%&!luno.instituicao);
'
'

Co!'eitos

Atributos st1ticos

Sada a mesma !!:


Nome: Fbio nstituio: CDS
Nome: Fbio nstituio: EME
Nome: Aline nstituio: EME
sso significa que voc deve conhecer as duas sintaxes
do ponto de vista de programao, a segunda ideal. Do
ponto de vista de prova, voc deve conhecer o resultado
de ambas.

Co!'eitos

#$todos st1ticos

Os mtodos de classe devem ser acessados


utilizando o nome da classe de forma similar ao
que foi visto anteriormente com os atributos
estticos.

No necessrio instanciar um objeto da classe para


acessar o mtodo esttico da mesma.

Mtodos de classe somente podem acessar


mtodos/atributos estticos daquela classe.
Exemplo: Classe Math do Java.
Tipicamente utilizados quando a classe no possui
estado (portanto no possui atributos e, assim,
somente tem mtodos). Ex: classes utilitrias.

Co!'eitos

#$todos st1ticos
import Ka8a.util.FinDe/Fist;
import Ka8a.util.#an/om;
public class Ltils {
public static String !nagrama(String s) {
FinDe/Fist - = new FinDe/Fist();
for (int i = 1; i 2 s.lengt?(); i&&)
-.a//(new 5?aracter(s.c?ar!t(i)));
#an/om @ = new #an/om();
String res = %%;
while (-.si6e() > 1) {
res = res & -.remo8e(@.next*nt(-.si6e()));
'
return res;
'
'

Co!'eitos

#$todos st1ticos

Exemplo de como utilizar o mtodo anagrama


da classe do slide anterior:
Exemplo do uso de mtodos static. Observe que no necessrio criar
um objeto da classe Utils para utilizar o mtodo Anagrama.
Mtodos estticos so interessantes quando desejamos criar uma
biblioteca de funes ou utilidades (classe utilitria)
public class ExLtils {
public static void main(String[] args) {
S$stem.out.println(Ltils.Anagrama(%ricar/o%));
'
'

Co!'eitos

#$todos st1ticos

Da mesma forma que os atributos estticos,


mtodos estticos podem ser acessados por
meio das instncias:
public class Ex( {
public static void main(String[] args) {
Ltils 4 = new Ltils();
S$stem.out.println(4.Anagrama(%ricar/o%));
'
'

Co!'eitos

#$todos st1ticos

Observao mportante:
Mtodos estticos podem chamar outros mtodos
estticos e/ou atributos estticos.
No possvel fazer um acesso a instncia de
dentro de um mtodo esttico
Ou seja, no possvel utilizar o "this dentro de um
mtodo esttico !

Co!'5)so

5,egamos aqui '



FIM
5@7A7 @7@)#A= H 5/2=)=
P2PA2ATI2@)=
5L. 44> - Bloco 5 - =ala 8JK a 84J
Asa .orte - Bras"lia - 7F - 5P KJ:KL>-MJ>
Tel: (L4) >>CJ-JC>> N OOKM-CCLC N P4KM-CMJO
-mail: cursocidadeQiic:pro:br
=ite: +++:iic:pro:br
=*Rpe: lui0cidade
Pro%& Ri'ar"o Sa!t(A!a

S-ar putea să vă placă și