Você está na página 1de 46

Mtodos da Linguagem Java

Prof. Ricardo Linden

Funes
Existem vrias situaes na vida em que um nmero
completamente dependente de outro.
Por exemplo:
O valor da mensalidade que um aluno paga dependente do nmero de
crditos que ele cursa.
Logo, dizemos que a mensalidade funo do nmero de crditos.

Quando um valor de entrada gera


um valor de sada nico, chamamos
este relacionamento de funo.

Funes

Uma funo uma correspondncia entre um conjunto de


valores de entrada X (denominado domnio) e um conjunto de
valores de sada (denominado imagem) onde extamente um
nico valor da imagem corresponde a cada valor do domnio.

Isto quer dizer que em uma funo, cada valor de entrada


nunca pode corresponder a mais de um valor de sada

Mas ns no dizemos nada a um valor de sada corresponder a


mais de um valor de entrada!

Funes
y

x
No funo!

x
funo!

x
No funo!

x
funo!

Terminologia e Notao de Funes


y uma funo de x ou y depende de x
funo (somente um valor de y corresponde a cada valor de x)
Mas ningum falou nada sobre para cada y corresponder
apenas um x.
Ex. : se para x=1, y=2 e para x=2, y=2, temos dois valores
de x para o mesmo y, mas nem por isto, deixamos de ter
uma funo.
varivel independente (o valor de entrada x)
domnio (o conjunto de valores assumidos por x)
varivel dependente (a varivel de sada y)
imagem (o conjunto de valores assumidos por y)

Terminologia e Notao de Funes

A notao y = f(x) y igual a f de x denota que a varivel y


uma funo de x.
Dado que y e f(x) representam exatamente a mesma quantidade,
podemos ver que y = 7x - 3 tambm pode ser escrito como f(x) = 7x - 3
Isto significa que o valor de y dependente do valor de x.

Se o valor de x tambm pode ser univocamente determinado a


partir do valor de y, dizemos que a funo inversvel.

Avaliando funes
Seja f(x) = 3x - 5. Qual o valor de f(-2)?
Substitua -2 onde encontrar x: 3(-2) - 5 = -11
Logo f(-2) = -11
Seja f(x) = x3 -3x. Encontre f(2) e f(-1)
f(2) = (2)3 -3(2) = -14
f(-1) = (-1)3 -3(-1) = 2

Avaliando funes

Quando olhando para um grfico, podemos determinar se o


grfico uma funo pelo teste da linha vertical.
Se a linha vertical passa por mais de um ponto, o grfico no
representa uma funo.

x
No funo!

funo, pois em nenhum


x
ponto h uma linha vertical
que cruze duas vezes o
grfico de f(x)

Funes com mltiplas variveis de entrada


No nosso dia a dia, muitas quantidades dependem de mais
de uma varivel independente
Por exemplo:
O crescimento de uma planta depende da quantidade de luz do sol e
da chuva.
A velocidade depende da disntncia viajada e do tempo da viagem
A tenso depende da corrente e da resistncia.

Podemos ento expandir nosso


conceito de funo dizendo que
uma funo uma regra que
relaciona uma quantidade com 0
ou n outras quantidades.

Funes com mltiplas variveis de entrada

Exemplos
f(x)=5
f(x)= 2x+5
f(x) = 2x4+x+3
f(w,z)= w/(z-1)
f(a,b) = 2a
f(x,y,z) = 2xy+z/2
f(x,y,z) = 2zcos(x+y)
etc.

Mtodos em Java
mtodos: Uma funo definida dentro de uma classe.
Mtodos de Classe : mtodos que so invocados sem rferncias a um
objeto em particular (mais detalhes mais frente).
Mtodos de classe afetam toda a classe, no uma instncia especfica da
classe. Tambm so chamados de mtodos estticos.
Mtodos de instncia: Todos os mtodos que so invocados dentro de uma
instncia especfica de uma classe. So chamados simplesmente de
mtodos.

A no ser que especificado, um mtodo no esttico.


As variveis de entrada para um mtodo so chamados de
Parmetros.
A varivel de sada de um mtodos chamada de seu valor de
retorno (return value).
Se um mtodo no tiver valor de retorno em Java, declaramo-no
como tendo tipo de retorno void (ex: mtodo main).

Mtodos em Java
Reduzemacomplexidade
Abstrao
Encapsulamainformao
Minimizamotamanhodocdigo

Aumentam a facilidade!

Aumentamamanutenibilidadeeacorreo
Evitamduplicaodocdigo
Limitamoefeitodasmudanas
Promovemareutilizaodocdigo
Diminuem o custo!

Mtodos

Mtodos e programao orientada a objetos so fortemente


relacionados.

Para comear, vamos simplificar!

Logo, vamos nos limitar a mtodos pblicos e estticos


Mtodos pblicos so vistos por todos, inclusive fora da classe.
Mtodos estticos pertencem classe, e no ao objeto. Exemplo:
Integer.parseInt!

Mtodos

Um mtodos apenas um bloco de cdigo nomeado que tem


zero ou mais entradas e gera zero ou uma sada.

Exemplos:
public static void main(String args[]);
public static double sqrt(double pVal);

Assinatura de mtodos

A assinatura de um mtodo o que o identifica


univocamente.

A assinatura consiste do nome do mtodo e da lista de


parmetros

Exemplos:
public static void main(String args[]);
Assinatura
public static double sqrt(double pVal);

Assinatura de mtodos

Ns podemos sobrecarregar um mtodo, colocando duas


definies diferentes para ele.

Isto significa que, dependendo dos parmetros que ele receber,


ele vai ter um comportamento diferente.

Para tanto, importante que as assinaturas das duas ou mais


definies sejam 100% distinguveis pelo compilador

Exemplo:
public static double sqrt(double pVal);
public static float sqrt(float pVal);

Assinatura de mtodos

Logo, se dois mtodos tm o mesmo nome, o mtodo correto


sera chamado com base nos argumentos que lhe so passados.

Por exemplo, o cdigo abaixo chama os diferentes mtodos


definidos anteriormente.
float hypotenuse = 10.0f;
double longLeg = 5.0;
MyClass.sqrt(hypotenuse);
MyClass.sqrt(longLeg);

Definindo mtodos

Para declarar mtodos, usamos a seguinte sintaxe:

Fixo, por enquanto

Tipo vlido do Java,


incluindo objetos

public static <tipo_retorno> <nome> (<tipo> arg1,<tipo> arg2,)


{
Identificador vlido do Java
cdigo do mtodo.
return <valor de retorno>
}
Valor do mesmo tipo da definio do mtodo

Chamando mtodos

Como ns, por enquanto, s estamos usando mtodos


estticos, eles pertencem s classes.

Logo, para cham-los, temos que dizer o nome completo


do mtodo, isto , a classe a que ele pertence e o nome dele,
da seguinte forma:
MyClass.mtodosName(arg1, arg2)

Documentando mtodos

O Java possui uma ferramenta de documentao semiautomtica chamada Javadoc.

O Javadoc pode ser usado para extrair informao de


comentrios especialmente formatados e gerar pginas de
documentao no mesmo formato da documentao da
Sun.

Voc j visitou o Site da Sun?


Ele tem manuais, dicas, textos
interessantes e muito mais!

Documentando mtodos
Simplesmente coloque o seguinte cdigo de documentao
imediatamente antes dos mtodos
/**
* A primeira frase deve ser uma descrio
* breve e sucinta do cdigo.
* Depois, voc pode ser mais prolixo e
* discutir bem o que o mtodo faz.No
* costumeiro explicar o que ele faz. Depois
* colocamos a lista de parmetros:
*
* @param paramName descrio do parmetro
* @param paramName2 descrio do 2 parmetro
* @return texto descrevendo o valor de retorno
*/
public static double sqrt(double pVal)

Documentando mtodos
public class Class1 {
/** Creates a new instance of Class */
public Class1() {
}
/**Mtodo main
*O mtodo main o mtodo onde o processamento comea
*Este mtodo s imprime Hello World e no faz mais nada de til
*@param args so as palavras passadas na linha de comando (vamos discuti-los depois)
*@return no retorna nenhum valor til ( void)
*/
public static void main (String[] args) throws Exception
{
String name;
System.out.println("Hello World!");
name=Console.readString("Enter your name:");
System.out.println("Hello "+name);
}
}

Documentando mtodos

Chamada padro

Gera muita informao que s vamos


aprender a apreciar integralmente mais
frente neste curso

Resultado : http://home.ismnet.com.br/~rlinden/javadoc

Mtodos

Mtodos so blocos de cdigo nomeados e auto-contidos.

Sua nica preocupao com suas entradas e sadas.

Todos os parmetros em Java so passados por valor. No


existe passagem por referncia.

Entretanto, lembre-se que um objeto na verdade um ponteiro


e, apesar do ponteiro ser passado por valor, modificaes na
rea apontada por ele so efetivadas globalmente.

Mtodos

Variveis definidas dentro de mtodos tm escopo local,


limitado quele mtodo, e no so vistas em outros trechos da
classe.

Voc pode declarar variveis com o mesmo nome em mtodos


diferentes.

Nomenclatura usual:
Use um verbo seguido de um objeto (no sentido gramatical)
No use nomes extremamente grandes.
A primeira letra minscula, mas outras palavras componentes do
nome so iniciadas por maisculas.
Ex. : printReport, updatePosition, etc

Guia para definir mtodos

Mtodos so funes Use-os com o mesmo senso de


organizao que usvamos funes nas linguagens
imperativas.

Crie mtodos para


Encapsular complexidade e fazer seu cdigo mais legvel
Evitar cdigo duplicado. Exemplo: O que mais interessante:
inches = centimeters / 2.54;
inches = Metric.centimetersToInches(centimeters);
Promover reutilizao de cdigo
Isolar operaes e estruturas de dados complexas

Guia para definir mtodos

Mtodos devem ter forte coeso: tudo dentro de um mtodo


deve ser relacionado ao seu propsito central. Se h dois
propsitos, deve haver dois mtodos.

Outro mtodo de pensar em mtodos colocar dentro deles


passos relacionados que so executados em seqncia. Uma
boa idia ter um mtodo central que chama vrios outros
em seqncia

Guia para no definir mtodos

M coeso : quando temos vrios caminhos alternativos


dentro de mtodos com vrias operaes distintas
possivelmente abusando do uso extensivo de flags
Neste caso, a melhor coisa a fazer ter um mtodo cujo objetivo
selecionar qual dos mtodos vai ser chamado.

Falta de Coeso: nenhuma relao entre as operaes, que


so simplesmente embrulhadas em um mesmo mtodo.
Use mtodos para definir operaes
realizadas pelas suas classes e objetos, mas
tambm use-os para modularizar seu cdigo,
com o objetivo de simplific-lo, nunca para
destru-lo em pedacinhos aleatrios

Guia para definir mtodos

Acoplamento um termo usado para descrever quo ligados dois


mtodos so, isto , quanto a execuo de um mtodo estr
relacionada execuo de outro(s) mtodo(s).

O ideal ter acoplamento frouxo (loose coupling) e no um


acoplamento rgido (tight coupling) que torna difcil depurar cdigo.

Existe uma longa disputa sobre qual o tamanho ideal para mtodos:
Muitos acham que devemos nos restringir a uma nica pgina, no mximo
Muitos acham que vrios pequenos mtodos podem diminuir a legibilidade do
cdigo.
s vezes, mtodos longos so bons, desde que possuam uma unicidade lgica.

Passagem de Parmetros
ParmetrosparamtodosJavasopassadossempreporvalor.
Istosignificaqueumacpiadovalorpassadoserusadopelos
mtodos,noavarivelreal.
ApassagemporreferncianuncafeitanoJava.

Qual a vantagem de se passar um objeto


senopudermosmodificarseusatributos?

Passagem de Parmetros
Ns nunca passamos um objeto, mas sim uma referncia
paraumobjeto,earefernciapassadaporvalor.
NastatementJavaButtonb=newButton();avarivelb
noumobjeto,massimumarefernciaaumobjeto(dao
termovariveldereferncia,encontrvelemmuitoslivros).

Passagem de Parmetros
Sejaomtododeclaradopor
publicvoidmtodosX(Buttony){...}

Senschamarmosestemtodopassamosumarefernciaa
umboto,oqueaconteceexatamente?
Buttonb=newButton();
mtodosX(b);

Passagem de Parmetros

O valor de b passado por valor e a varivel y dentro do


mtodomtodosXrecebeumacpiadestevalor.
Asvariveisbeyagoratmomesmovalor?
Quando duas variveis de referncia tm o mesmo valor, isto
querdizerqueelassereferenciamaummesmoobjeto.

Logo,dentrode mtodosXnspodemosatualizaroobjetoatravsda
varivelderefernciay.

Passagem de Parmetros
Um objeto pode ter mltiplas referncias a ele
Da mesma maneira que uma rea de memria pode ser apontada por vrios
ponteiros.
Da mesma maneira que ns respondemos quando nos chamam de vrias
maneiras diferentes (por nomes, apelidos, psiu, etc.)
Logo, neste exemplo existe apenas um objeto sendo referenciado por duas
variveis de referncia distintas
Se mudarmos o valor da varivel y dentro de mtodosX ela passar a referenciarse a outro objeto:
y = new Button("another button");
Mas, como b foi passado por valor, ele permanecer inalterado referenciando-se ao
mesmo objeto de quando iniciamos o mtodo.

Variveis de Classe

Algumas vezes queremos uma nica cpia de uma varivel.


Java no permite que usemos variveis globais (toda varivel
deve existir dentro de uma classe).
Java usa a palavra chave static para indicar uma varivel de
classe versus uma varivel de instncia.
A varivel de classe sempre pode ser usada, mesmo quando a
classe nunca instanciado
Para acessar varivel de classe, use o nome da classe
Ex:
publicstaticfinaldoublePI=3.14159;
publicstaticintnumCircles;

Variveis de Classe

Seja a classe Classe1, que tem a varivel static (de classe x).

Suponha que existam dois objetos obj1 e obj2 da classe Classe1


e ns fazemos:
classe1.x=1;
obj2.x=2;
obj1.x=3;

Quanto vale obj2.x?

Variveis de Classe

Um diagrama exato do que acontece :

123

Obj1
classe1.x=1;
Depois de obj1.x=3;
obj2.x=2;

Obj2
O atributo alterado sempre o
mesmo. No h dois atributos
diferentes para os objetos obj1 e obj2!
x classe1

Mtodos de classe

Exemplo: Math.sqrt();

Math

So equivalentes a mtodos globais, mas sem haver chance


de conflitos com nomes.

o nome da classe e sqrt() o nome do mtodo da


classe(ou mtodo esttico).

Fcil de entender: pense no nome do mtodo como o nome e o nome


da classe como o sobrenome.

So similares s variveis de classe.

S existe uma instncia deles (dentro da classe) e no vrias


diferentes implementaes (uma dentro de cada objeto).

Mtodos de classe
Mtodos de classe so diferentes dos mtodos de instncia pois
nos mtodos de classe no existe uma referncia ao objeto corrente
(varivel de referncia this)
Logo, mtodos de classe no podem se referir a nenhuma
instncia nem invocar mtodos de instncia.
Vamos discutir a varivel de referncia this
com cuidado mais frente neste curso!

e System so classes que s definem mtodos de classe


pois no existe nenhum objeto conceitualmente apropriado.
Math

Inicializador Esttico

Tanto as variveis de classe quanto s de instncia podem ter


inicializadores associados s suas declaraes.
s vezes necessitamos inicializaes mais complexas em
Java isto feito atravs da utilizao de mtodos de
inicializao para variveis de classe chamados inicializadores
estticos.
Dado que o inicializador esttico chamado apenas uma vez
quando a classe carregada (antes de qualquer execuo),
no h necessidade de argumentos ou valores de retorno.
Um inicializador de instncia exatamente igual a um
inicializador esttico, mas sem a palavra chave static. Ele
roda quando uma instncia criada.

Inicializadores

Exemplo:
public class Classe1 {
int x=2;
Inicializao de variveis de instncia
final int BUFFER_SIZE=5;
static int y=3;
Inicializao de variveis de classe
static double[] buffer=new double[BUFFER_SIZE];
static {
for (int i=0;i<BUFFER_SIZE;i++) {
buffer[i]=1/(i+1);
}
}
:
Inicializador esttico
public static void main(String[] args)
:
}

Escopo

O escopo de uma varivel a regio do programa onde cada


varivel pode ser referenciada apenas pelo seu nome.
O escopo tambm determina quando o sistema aloca e libera o
espao de memria para a varivel.
O escopo diferente do conceito de visibilidade de OO.
Visibilidade aplica-se apenas a vairveis membros (atributos) e determina
se uma varivel pode ser usada fora da classe em que foi declarada.
Visibilidade definida com um modificador de acesso.

Vamos ver o conceito de visibilidade


com bastante cuidado quando
discutirmos a implementao dos
conceitos de OO

Escopo

O local da declarao da varivel dentro do programa estabelece seu


escopo, colocando-a em uma das seguintes categorias:
varivel membro (atributo)
varivel local
parmetro de mtodo
parmetro de tratador de exceo

Escopo

Uma varivel membro (atributo) um membro de uma


classe ou de um objeto:
declarada dentro da classe mas fora de qualquer mtodo.
A sua declarao tem que aparecer antes do seu uso quando usada
em uma expresso de inicializao.
Seu escopo toda a classe.

Variveis locais so declaradas dentro de blocos de cdigo.


Seu escopo se estende da sua declarao at o fim do bloco de
cdigo ond e definida (prxima chave)

Escopo

Parmetros so argumentos formais de mtodos


construtores e so usados para passar valores para estes.

ou

O escopo do parmetro todo o mtodo ou construtor para o qual ele


passado.

Parmetros de tratadores de exceo so similares aos


parmetros dos mtodos.
O escopo de uma parmetro de um tratador de exceo o bloco de
cdigo entre as chaves que seguem o catch.

Vamos ver ambos com mais detalhes


quando discutirmos mtodos e
tratamento de erros.

Exemplo de Escopo

Seja o seguinte exemplo:

if(...)
{
inti=17;
...
}
System.out.println("Thevalueofi="+i);

A linha final no vai compilar pois a varivel local i est


fora do escopo.
Ou move-se a declarao para fora do bloco do if ou o
mtodo println movido para dentro deste bloco.

Você também pode gostar