Java Aula04

  • Upload
    ronald

  • View
    222

  • Download
    0

Embed Size (px)

Citation preview

  • 8/17/2019 Java Aula04

    1/46

    Métodos da Linguagem Java

    Prof. Ricardo Linden

  • 8/17/2019 Java Aula04

    2/46

    FunçõesFun

    ções Existem várias situações na vida em que um número é

    completamente dependente de outro.

    Por exemplo: valor da mensalidade que um aluno pa!a é dependente do número de

    créditos que ele cursa. "o!o# di$emos que a mensalidade é %unç&o do número de créditos.

    'uando um valor de entrada !eraum valor de sa(da único# c)amamoseste relacionamento de %unç&o.

  • 8/17/2019 Java Aula04

    3/46

    FunçõesFun

    ções

    +ma %unç&o é uma correspond,ncia entre um con-unto devalores de entrada /denominado dom(nio0 e um con-unto devalores de sa(da /denominado ima!em0 onde extamente umúnico valor da ima!em corresponde a cada valor do dom(nio.

    sto quer di$er que em uma %unç&o# cada valor de entradanunca pode corresponder a mais de um valor de sa(da

    Mas ns n&o di$emos nada a um valor de sa(da corresponder amais de um valor de entrada3

  • 8/17/2019 Java Aula04

    4/46

    FunçõesFun

    ções

    x

    5

     6&o é %unç&o3

    x

    5

    7 %unç&o3

    x

     6&o é %unç&o3

    x

    7 %unç&o3

  • 8/17/2019 Java Aula04

    5/46

    Terminologia e Notação de FunçõesTerminolo

    gia e Notação de Funções

    y é uma função de x ou y depende de xfunção (somente um valor de y corresponde a cada valor de x)

     Mas ninguém falou nada sobre para cada y corresponderapenas um x

     !x " se para x#$% y#& e para x#&% y#&% temos dois valoresde x para o mesmo y% mas nem por isto% deixamos de teruma função

    vari'vel independente (o valor de entrada x)

    domnio (o conunto de valores assumidos por x)vari'vel dependente (a vari'vel de sada y)imagem (o conunto de valores assumidos por y)

  • 8/17/2019 Java Aula04

    6/46

    notaç&o 5 ; f /x0 ado que 5 e  f /x0 representam exatamente a mesma quantidade#

     podemos ver que 5 ; ?x @ * tamAém pode ser escrito como f /x0 ; ?x @ * sto si!ni%ica que o valor de 5 é dependente do valor de x.

    Be o valor de x tamAém pode ser univocamente determinado a partir do valor de 5# di$emos que a %unç&o é invers(vel.

    Terminologia e Notação de FunçõesTerminolo

    gia e Notação de Funções

  • 8/17/2019 Java Aula04

    7/46

    *valiando funções*valiando funções +ea f (x) # ,x - . /ual é o valor de f (-&)0

    +ubstitua -& onde encontrar x" ,(-&) - . # -$$ 1ogo f (-&) # -$$

    +ea f (x) # x, -,x !ncontre f (&) e f (-$)  f (&) # (&), -,(&) # -$2  f (-$) # (-$), -,(-$) # &

  • 8/17/2019 Java Aula04

    8/46

    'uando ol)ando para um !rá%ico# podemos determinar se o!rá%ico é uma %unç&o pelo

  • 8/17/2019 Java Aula04

    9/46

    Funções com m3ltiplas vari'veis de entradaFunções com m3ltiplas vari'veis de entrada No nosso dia a dia% muitas 4uantidades dependem de mais

    de uma vari'vel independente 5or exemplo"

    6 crescimento de uma planta depende da 4uantidade de lu7 do sol eda c8uva

    * velocidade depende da disnt9ncia viaada e do tempo da viagem * tensão depende da corrente e da resist:ncia

    5odemos então expandir nossoconceito de função di7endo 4ue

    uma função é uma regra 4uerelaciona uma 4uantidade com ;ou n outras 4uantidades

  • 8/17/2019 Java Aula04

    10/46

    !xemplos f(x)#. f(x)# &x

  • 8/17/2019 Java Aula04

    11/46

    Métodos em ?avaMétodos em ?ava métodos" @ma função definida dentro de uma classe

    Métodos de Alasse " métodos 4ue são invocados sem rfer:ncias a umobeto em particular (mais detal8es mais B frente) Métodos de classe afetam toda a classe% não uma inst9ncia especfica da

    classe Também são c8amados de métodos estáticos Métodos de inst9ncia" Todos os métodos 4ue são invocados dentro de uma

    inst9ncia especfica de uma classe +ão c8amados simplesmente demétodos

    * não ser 4ue especificado% um método não é est'tico *s vari'veis de entrada para um método são c8amados de

     Parâmetros * vari'vel de sada de um métodos é c8amada de seu valor de

    retorno (return value) +e um método não tiver valor de retorno em ?ava% declaramo-no

    como tendo tipo de retorno void  (ex" método main)

  • 8/17/2019 Java Aula04

    12/46

    Reduzem a complexidade

    Abstração

    Encapsulam a informação

    Minimizam o tamanho do código

    Aumentam a manutenibilidade e a correção

    Evitam duplicação do código

    Limitam o efeito das mudanças

    Promovem a reutilização do código

    Métodos em ?avaMétodos em ?ava

    umentam a %acilidade3

    >iminuem o custo3

  • 8/17/2019 Java Aula04

    13/46

    MétodosMétodos

    Métodos e programação orientada a obetos são fortementerelacionados

    5ara começar% vamos simplificarC

    1ogo% vamos nos limitar a métodos p3blicos e est'ticosMétodos p3blicos são vistos por todos% inclusive fora da classeMétodos est'ticos pertencem B classe% e não ao obeto !xemplo"

    DntegerparseDntC

  • 8/17/2019 Java Aula04

    14/46

    MétodosMétodos

    @m métodos é apenas um bloco de cEdigo nomeado 4ue tem7ero ou mais entradas e gera 7ero ou uma sada

    !xemplos"

    public static void main(String args[]);

    public static double sqrt(double pVal);

  • 8/17/2019 Java Aula04

    15/46

    *ssinatura de métodos*ssinatura de métodos

    * assinatura de um método é o 4ue o identificaunivocamente

    * assinatura consiste do nome do método e da lista de

    par9metros

    !xemplos"

    public static void main(String args[]);

    ssinatura

    public static double sqrt(double pVal);

  • 8/17/2019 Java Aula04

    16/46

    NEs podemos sobrecarregar um método% colocando duas

    definições diferentes para ele

    Dsto significa 4ue% dependendo dos par9metros 4ue ele receber%ele vai ter um comportamento diferente

    5ara tanto% é importante 4ue as assinaturas das duas ou maisdefinições seam $;; distinguveis pelo compilador

    !xemplo"

    *ssinatura de métodos*ssinatura de métodos

    public static double sqrt(double pVal);

    public static float sqrt(float pVal);

  • 8/17/2019 Java Aula04

    17/46

    1ogo% se dois métodos t:m o mesmo nome% o método corretosera c8amado com base nos argumentos 4ue l8e são passados

    5or exemplo% o cEdigo abaixo c8ama os diferentes métodos

    definidos anteriormentefloat hypotenuse = 1!f;

    double long"eg = #!;

    $y%lass!sqrt(hypotenuse);$y%lass!sqrt(long"eg);

    *ssinatura de métodos*ssinatura de métodos

  • 8/17/2019 Java Aula04

    18/46

    Gefinindo métodosGefinindo métodos

    5ara declarar métodos% usamos a seguinte sintaxe"

    public static &tipo'retorno &nome (&tipo arg1&tipo arg*+)

    ,  +c-digo do m.todo+!

     return &valor de retorno

    /

    Fixo# por enquanto

    Gipo válido do Java#incluindo oA-etos

    Halor do mesmo tipo da de%iniç&o do método

    denti%icador válido do Java

  • 8/17/2019 Java Aula04

    19/46

    A8amando métodosA8amando métodos

    Aomo nEs% por en4uanto% sE estamos usando métodosest'ticos% eles pertencem Bs classes

    1ogo% para c8am'-los% temos 4ue di7er Ho nome completoI

    do método% isto é% a classe a 4ue ele pertence e o nome dele%da seguinte forma"

    $y%lass!m.todos0ame(arg1 arg*+)

  • 8/17/2019 Java Aula04

    20/46

    Gocumentando métodosGocumentando métodos

    6 ?ava possui uma ferramenta de documentação semi-autom'tica c8amada ?avadoc

    6 ?avadoc pode ser usado para extrair informação de

    coment'rios especialmente formatados e gerar p'ginas dedocumentação no mesmo formato da documentação da+un

    Hoc, -á visitou o Bite da BunIEle tem manuais# dicas# textosinteressantes e muito mais3

  • 8/17/2019 Java Aula04

    21/46

    22

    2 3 primeira frase deve ser uma descri45o

    2 breve e sucinta do c-digo!

    2 6epois voc7 pode ser mais proli8o e

    2 discutir bem o que o m.todo fa9!05o .2 costumeiro e8plicar o que ele fa9! 6epois

    2 colocamos a lista de par:metros

    2

    2

  • 8/17/2019 Java Aula04

    22/46

    Gocumentando métodosGocumentando métodos puAlic class lass1 K

      L reates a neN instance o% lass L  puAlic lass1/0 K  O  LMétodo main  método main é o método onde o processamento começa

      Este método s imprime ello Qorld e n&o %a$ mais nada de útil  Rparam ar!s s&o as palavras passadas na lin)a de comando /vamos discuti@los depois0  Rreturn n&o retorna nen)um valor útil /é void0  L

     puAlic static void main /Btrin!ST ar!s0 t)roNs ExceptionK

    Btrin! nameUB5stem.out.println/Vello Qorld3V0U

      name;onsole.readBtrin!/VEnter 5our name:V0U  B5stem.out.println/Vello VWname0UO

    O

  • 8/17/2019 Java Aula04

    23/46

    Gocumentando métodosGocumentando métodos

    )amada padr&o

    Xera muita in%ormaç&o que s vamosaprender a apreciar inte!ralmente mais Y%rente neste curso

    Zesultado : )ttp:LL)ome.ismnet.com.ArL[rlindenL-avadoc

  • 8/17/2019 Java Aula04

    24/46

    MétodosMétodos Métodos são blocos de cEdigo nomeados e auto-contidos

    +ua 3nica preocupação é com suas entradas e sadas

    Todos os par9metros em ?ava são passados por valor Não

    existe passagem por refer:ncia

    !ntretanto% lembre-se 4ue um obeto na verdade é um ponteiroe% apesar do ponteiro ser passado por valor% modificações na

    'rea apontada por ele são efetivadas globalmente

  • 8/17/2019 Java Aula04

    25/46

    MétodosMétodos

    Jari'veis definidas dentro de métodos t:m escopo local%

    limitado B4uele método% e não são vistas em outros trec8os daclasse

    Joc: pode declarar vari'veis com o mesmo nome em métodos

    diferentes

    Nomenclatura usual" @se um verbo seguido de um obeto (no sentido gramatical)

    Não use nomes extremamente grandes * primeira letra é min3scula% mas outras palavras componentes do

    nome são iniciadas por mai3sculas !x " printKeport% update5osition% etc

  • 8/17/2019 Java Aula04

    26/46

    Luia para definir métodosLuia para definir métodos

    Métodos são funções @se-os com o mesmo senso deorgani7ação 4ue us'vamos funções nas linguagensimperativas

    Arie métodos para Encapsular complexidade e %a$er seu cdi!o mais le!(vel Evitar cdi!o duplicado. Exemplo: que é mais interessante:

    Promover reutili$aç&o de cdi!osolar operações e estruturas de dados complexas

    inches = centimeters *!#>;

    inches = $etric!centimeters?o@nches(centimeters);

  • 8/17/2019 Java Aula04

    27/46

    Métodos devem ter forte coesão" tudo dentro de um métododeve ser relacionado ao seu propEsito central +e 8' doispropEsitos% deve 8aver dois métodos

    6utro método de pensar em métodos é colocar dentro delespassos relacionados 4ue são executados em se4:ncia @maboa idéia é ter um método central 4ue c8ama v'rios outrosem se4:ncia

    Luia para definir métodosLuia para definir métodos

  • 8/17/2019 Java Aula04

    28/46

    M' coesão " 4uando temos v'rios camin8os alternativosdentro de métodos com v'rias operações distintaspossivelmente abusando do uso extensivo de flags Neste caso% a mel8or coisa a fa7er é ter um método cuo obetivo é

    selecionar 4ual dos métodos vai ser c8amado

    Falta de Aoesão" nen8uma relação entre as operações% 4uesão simplesmente Hembrul8adasI em um mesmo método

    Luia para não definir métodosLuia para não definir métodos

    +se métodos para de%inir operaçõesreali$adas pelas suas classes e oA-etos# mastamAém use@os para modulari$ar seu cdi!o#com o oA-etivo de simpli%icá@lo# nunca paradestru(@lo em pedacin)os aleatrios

  • 8/17/2019 Java Aula04

    29/46

    coplamento é um termo usado para descrever qu&o li!ados dois

    métodos s&o# isto é# quanto a execuç&o de um método estárrelacionada Y execuç&o de outro/s0 método/s0.

    ideal é ter acoplamento %rouxo /loose coupling 0 e n&o um

    acoplamento r(!ido /tight coupling 0 que torna di%(cil depurar cdi!o.

    Existe uma lon!a disputa soAre qual é o taman)o ideal para métodos:Muitos ac)am que devemos nos restrin!ir a uma única pá!ina# no máximo

    Muitos ac)am que vários pequenos métodos podem diminuir a le!iAilidade docdi!o.

    \s ve$es# métodos lon!os s&o Aons# desde que possuam uma unicidade l!ica.

    Luia para definir métodosLuia para definir métodos

  • 8/17/2019 Java Aula04

    30/46

    5assagem de 5ar9metros5assagem de 5ar9metros Parâmetros para métodos Java são passados sempre por valor.

    Isto significa que uma c ó pia do valor passado será usado pelos

    métodos, não a variável real.

    A passagem por referê ncia nunca é feita no Java.

    Qualé a vantagem de se passar um objetose não pudermos modificar seus atributos?

  • 8/17/2019 Java Aula04

    31/46

    Nós nunca passamos um objeto, mas sim uma  referê ncia

     para um objeto, e a referência é passada por valor.

    Na statement Java Button b = new Button(); a variável b

    não é um objeto, mas sim uma referência a um objeto (daí  o

    termo variável de referência, encontrável em muitos livros).

    5assagem de 5ar9metros5assagem de 5ar9metros

  • 8/17/2019 Java Aula04

    32/46

    Seja o método declarado por

    public void métodosX(Button y) {...}

    Se nós chamarmos este método passamos uma referência a

    um botão, o que acontece exatamente?

    Button b = new Button();

    métodosX(b);

    5assagem de 5ar9metros5assagem de 5ar9metros

  • 8/17/2019 Java Aula04

    33/46

    O valor de b é  passado por valor e a variável y dentro do

    método métodosX recebe uma cópia deste valor. As variáveis b e y agora têm o mesmo valor?

    Quando duas variáveis de referência têm o mesmo valor, isto

    quer dizer que elas se referenciam a um mesmo objeto.

    5assagem de 5ar9metros5assagem de 5ar9metros

     Logo, dentro de métodosX nós podemos atualizar o objeto através da

    variável de referência y.

  • 8/17/2019 Java Aula04

    34/46

    +m oA-eto pode ter múltiplas re%er,ncias a ele >a mesma maneira que uma área de memria pode ser apontada por vários

     ponteiros. >a mesma maneira que ns respondemos quando nos c)amam de várias

    maneiras di%erentes /por nomes# apelidos# psiu# etc.0 "o!o# neste exemplo existe apenas um oA-eto sendo re%erenciado por duas

    variáveis de re%er,ncia distintas Be mudarmos o valor da variável 5 dentro de métodos ela passará a re%erenciar@

    se a outro oA-eto:

    5 ; neN ]utton/Vanot)er AuttonV0U Mas# como A %oi passado por valor# ele permanecerá inalterado re%erenciando@se ao

    mesmo oA-eto de quando iniciamos o método.

    5assagem de 5ar9metros5assagem de 5ar9metros

  • 8/17/2019 Java Aula04

    35/46

    Jari'veis de AlasseJari'veis de Alasse

    *lgumas ve7es 4ueremos uma 3nica cEpia de uma vari'vel ?ava não permite 4ue usemos vari'veis globais (toda vari'vel

    deve existir dentro de uma classe) ?ava usa a palavra c8ave static para indicar uma variável de

    classe versus uma variável de instância * vari'vel de classe sempre pode ser usada% mesmo 4uando a

    classe nunca é instanciado 5ara acessar vari'vel de classe% use o nome da classe

    !x" public static final double PI = 3.14159;public static int numCircles;

  • 8/17/2019 Java Aula04

    36/46

    Jari'veis de AlasseJari'veis de Alasse

    +ea a classe Alasse$% 4ue tem a vari'vel static (de classe x)

    +upon8a 4ue existam dois obetos ob$ e ob& da classe Alasse$e nEs fa7emos"

    classe1.x=1;

    obj2.x=2;

    obj1.x=3;

    /uanto vale ob&x0

  • 8/17/2019 Java Aula04

    37/46

    Jari'veis de AlasseJari'veis de Alasse

    @m diagrama exato do 4ue acontece é"

    A-1 A-2

    12*

    Gepois de classe1.x=1;Gepois de obj2.x=2;

     

    Gepois de obj1.x=3;

     

    6 atributo alterado é sempre omesmo Não 8' dois atributos

    diferentes para os obetos ob$ e ob&C

     x x classe1classe1

  • 8/17/2019 Java Aula04

    38/46

    Métodos deMétodos de classeclasse !xemplo" Math.sqrt();

    Math  é o nome da classe e sqrt()  é o nome do método daclasse(ou método est'tico)

    +ão e4uivalentes a métodos HglobaisI% mas sem 8aver c8ancede conflitos com nomes F'cil de entender" pense no nome do método como o HnomeI e o nome

    da classe como o HsobrenomeI

    +ão similares Bs vari'veis de classe

    +E existe uma inst9ncia deles (dentro da classe) e não v'riasdiferentes implementações (uma dentro de cada obeto)

  • 8/17/2019 Java Aula04

    39/46

    Métodos deMétodos de classeclasseMétodos de classe s&o di%erentes dos métodos de inst^ncia pois

    nos métodos de classe n&o existe uma re%er,ncia ao oA-eto corrente/variável de re%er,ncia this0"o!o# métodos de classe n&o podem se re%erir a nen)umainst^ncia nem invocar métodos de inst^ncia.

    Math  e System  s&o classes que s de%inem métodos de classe pois n&o existe nen)um oA-eto conceitualmente apropriado.

    Hamos discutir a variável de re%er,ncia this com cuidado mais Y %rente neste curso3

  • 8/17/2019 Java Aula04

    40/46

    Dniciali7ador !st'ticoDniciali7ador !st'tico

    Tanto as vari'veis de classe 4uanto Bs de inst9ncia podem ter

    iniciali7adores associados Bs suas declarações s ve7es necessitamos iniciali7ações mais complexas em

    ?ava isto é feito através da utili7ação de métodos deiniciali7ação para vari'veis de classe c8amados inicializadores

    estáticos Gado 4ue o iniciali7ador est'tico é c8amado apenas uma ve7

    4uando a classe é carregada (antes de 4ual4uer execução)%não 8' necessidade de argumentos ou valores de retorno

    Um inicializador de instância é exatamente igual a uminiciali7ador est'tico% mas sem a palavra c8ave static !leroda 4uando uma inst9ncia é criada

  • 8/17/2019 Java Aula04

    41/46

    Dniciali7adoresDniciali7adores !xemplo"

    public class Alasse$ O

    int x#&P

    final int Q@FF!KR+DS!#.P

    static int y#,P

    static doubleU buffer#ne= doubleQ@FF!KR+DS!UP

      static O

    for (int i#;PiVQ@FF!KR+DS!Pi

  • 8/17/2019 Java Aula04

    42/46

    !scopo!scopo 6 escopo de uma vari'vel é a região do programa onde cada

    vari'vel pode ser referenciada apenas pelo seu nome 6 escopo também determina 4uando o sistema aloca e libera o

    espaço de memEria para a vari'vel 6 escopo é diferente do conceito de visibilidade de 66

    Jisibilidade aplica-se apenas a vair'veis membros (atributos) e determinase uma vari'vel pode ser usada fora da classe em 4ue foi declarada

    Jisibilidade é definida com um modificador de acesso

    Hamos ver o conceito de visiAilidadecom Aastante cuidado quandodiscutirmos a implementaç&o dosconceitos de

  • 8/17/2019 Java Aula04

    43/46

    !scopo!scopo local da declaraç&o da variável dentro do pro!rama estaAelece seu

    escopo# colocando@a em uma das se!uintes cate!orias: variável memAro /atriAuto0 variável local par^metro de método par^metro de tratador de exceç&o

  • 8/17/2019 Java Aula04

    44/46

    !scopo!scopo @ma vari'vel membro (atributo) é um membro de uma

    classe ou de um obeto" X declarada dentro da classe mas fora de 4ual4uer método * sua declaração tem 4ue aparecer antes do seu uso 4uando usada

    em uma expressão de iniciali7ação +eu escopo é toda a classe

    Jari'veis locais são declaradas dentro de blocos de cEdigo +eu escopo se estende da sua declaração até o fim do bloco de

    cEdigo ond eé definida (prExima c8ave)

    !

  • 8/17/2019 Java Aula04

    45/46

    !scopo!scopo 5ar9metros são argumentos formais de métodos ou

    construtores e são usados para passar valores para estes 6 escopo do par9metro é todo o método ou construtor para o 4ual ele é

    passado

    5ar9metros de tratadores de exceção são similares aos

    par9metros dos métodos 6 escopo de uma par9metro de um tratador de exceção é o bloco de

    cEdigo entre as c8aves 4ue seguem o catc8

    Hamos ver amAos com mais detal)esquando discutirmos métodos etratamento de erros.

    !

    l d !

  • 8/17/2019 Java Aula04

    46/46

    !xemplo de !scopo!xemplo de !scopo +ea o seguinte exemplo"

    if (...){

    int i = 17;

     ...

    }

    System.out.println("The value of i = " + i);

    * lin8a final não vai compilar pois a vari'vel local i est'fora do escopo

    6u move-se a declaração para fora do bloco do if ou ométodo println é movido para dentro deste bloco