Vous êtes sur la page 1sur 28

1

Prof. Jos Antonio Gonalves

Artefatos
e
Conceitos

Classe: Tipo de dados criado pelo usurio;


Atributo: varivel interna de uma classe. Com
relao ao escopo podemos comparar a uma
varivel global da classe;

Mtodo: Funo interna de uma classe;

Objeto: Instncia de uma classe;

Encapsulamento: Definio da visibilidade de


uma classe ou dos seus membros;
Herana: Mecanismo que permite a criao de
uma classe baseando-se em outra prexistente;
Polimorfismo: Possibilidade de ser ter mtodos
com o mesmo nome porm com aplicaes
distintas. Podem ser:
Sobrecarregado (assinaturas diferentes): dentro da mesma classe; nome
iguais porm argumentos diferentes;
Sobrescrito (assinaturas iguais): se encontram em classes diferentes e tm a
mesma assinatura.

Construindo Classes e declarando Objetos

O esteretipo que define a anatomia de uma classe :


+ Nome da classe
- atributo 1;
- atributo 2;
- atributo n;
+ mtodos 1( )
+ mtodos 2( )
+ mtodos n( )
Nota: Visibilidade (encapsulamento):
+ Pblico (public);
- Privado (private)

# Protegido (protected)

Classe (implementao)

public class Pessoa { // inicio da declarao da classe


:
: //caractersticas e funcionalidades da classe
:
}

//fim da declarao da classe

Onde:

public: Modificador de acesso. Neste caso est dizendo que a classe visvel a todos;
class: definio do tipo de estrutura. No caso uma classe.
Pessoa: identificador. Nome dado pelo usurio classe. Por conveno
letra deve ser maiscula.

sua primeira

public class Pessoa{


private int rg; //atributo
private String nome; //atributo
}

Onde:
private: Neste caso no h visibilidade (acesso) deste atributo por mtodos que se
encontram em outras classes. Por conveno todos atributos de uma classe devem ser
privados.
Int, String: tipos do qual ser o atributo. Podendo ser de um tipo primitivo (int) ou ainda
de tipo abstrato (String)
rg, nome: Identificador (nome) do atributo. Por conveno nomes de atributos e variveis
devem iniciar com letras minsculas.

public class Pessoa{


private int rg;
private String nome;

public void mostraDados(){ // inicio da declarao do mtodo


System.out.println(\nEstou na classe pessoa); // instruo
} // fim da declarao do mtodo
}
Onde:

public void mensagem(): assinatura do mtodo

public: Neste caso a visibilidade (acesso) deste mtodo total


void: Este mtodo no tem retorno
mostraDados: Identificador (nome) do mtodo. Por conveno nomes de mtodos devem iniciar com letras
minsculas.
Nota: Uma classe pode conter vrios mtodos

10

public class Pessoa{


public static void main(String args[]){ // inicio da declarao do mtodo
principal

:
:
} // fim da declarao do mtodo principal
}

11

Assinatura:

public static void main(String args[ ])

Onde:
public: Modificador de acesso. Por conveno os mtodos de uma classe devem ser
pblicos;
static: Modificador de acesso. Para mtodos dos quais haver apenas uma instncia
durante a execuo da aplicao, deve-se determin-lo como static (esttico);
void: Tipo de retorno do mtodo. A saber poderia ser de qualquer tipo como int, char,
String, etc (devendo o seu retorno (return) ser do tipo definido - o tipo void no
retorna nada (nem valor, nem objeto));
main(): Identificador(nome) do Mtodo. Tambm por conveno, em letras minsculas;
String args[]: Argumento do mtodo. possvel que um mtodo receba parmetros
externos.

12

No exemplo anterior, sobre mtodos, cabe ressaltar que para


executar uma classe temos que ter um mtodo que a
inicialize. O mtodo responsvel por esta tarefa o Mtodo
Principal (main). Descrito aqui como:

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


A assinatura do mtodo main obrigatoriamente na forma
descrita acima;

Nota: uma classe pode conter vrios mtodos.

13

1.
2.
3.

public class Pessoa {


int rg;
String nome;

4.

public void insereDados(){


int rg = 1;
String nome ="Jesus";
this.rg=rg;
this.nome=nome;
}

5.
6.
7.
8.
9.
10.

public void mostraDados(){


System.out.println("\n RG: "+rg);
System.out.println("\n Nome: "+nome);
}

11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.

public static void main(String arg[]){


Pessoa p = new Pessoa();
p.insereDados();
p.mostraDados();
}

14

O objeto this faz uma referncia a um membro (atributo ou mtodo) da classe. No caso,
aos atributos rg e nome.
No cdigo anterior foramos a utilizao deste objeto criando duas variveis , dentro do
mtodo insereDados linhas 6 e 7, com os mesmos nomes que os atributos da classe e
fazendo com que o atributos recebessem o contedo das variveis linhas 8 e 9:
5.

6.
7.
8.
9.
10.

public void insereDados(){


int rg = 1; //declarao de uma varivel do mtodo
String nome ="Jesus"; //declarao de uma varivel do mtodo
this.rg=rg; //atributo da classe recebe contedo da varivel do mtodo
this.nome=nome; //atributo da classe recebe contedo da varivel do mtodo
}

Exemplificando: na linha 8, se retirarmos o objeto this, teremos:


8.

rg=rg;

estaremos dizendo que a varivel rg (criada dentro do mtodo-linha 6) receber o


contedo dela mesma. Ao colocarmos o objeto this, estamos dizendo que o atributo
da classe rg (this.rg) recebe o contedo da varivel rg declarada dentro do mtodo,
como no cdigo original linha 8.
Importante: se os nomes do atributo e da varivel da classe fossem diferentes, no seria
necessrio utilizar o this.

15

Faa o exerccio na seqncia proposta a seguir:


1)_ Retire o this das linhas 8 e 9. Recompile e execute a aplicao. Observe o resultado.

2)_ Vamos diferenciar os nomes de atributos e variveis. Poderia tanto alterar os nomes
dos atributos quanto das variveis. Optemos pelas variveis. Mude as variveis: rg para
id e nome para apelido linhas 6,7,8,9. Assim:
5.
6.
7.
8.
9.
10.

public void insereDados(){


int id = 1;
String apelido ="Jesus";
rg = id;
nome = apelido;
}

Recompile e execute a aplicao. Observe o resultado. Como os nomes de atributos e


variveis so diferentes no precisamos do objeto this.

16

Revisando as definies:
Classe: um tipo abstrato de dados criado por um usurio (programador).
Objeto: uma varivel de um tipo de classe ou uma instncia de uma classe.

Vejamos nosso cdigo:


linha 3: String nome;
em Java o tipo String no primitivo e sim uma classe, logo o atributo nome da classe
Pessoa um objeto do tipo String.
linha 17 : Pessoa p = new Pessoa();
a varivel p do tipo Pessoa (que uma classe), logo p um objeto do tipo Pessoa.

17

Construtor: tipo especial de Mtodo:

Constroem os Objetos aps sua declarao;


Eles existem mesmo na forma implcita , isto , mesmo
que o programador no o declare na construo da classe
ele existir;
Em uma anlise prtica tm a funo de informar as
caractersticas do objeto ao Sistema Operacional para que
este faa sua alocao (do objeto) na memria principal.

18

Como e porque declaramos Variveis?


Tipos Primitivos de dados (int, char, double, etc.):
Alocao de memria para tipos primitivo;
Tamanho do tipo utilizado na memria;
Declarao de Variveis vs. Endereamento Hexadecimal;
A declarao de uma varivel, entre outras coisas, faz a nomeao de um
endereo de memria (que est em Hexadecimal) para um nome (identificador)
que nos seja mais familiar e prtico de usar. Quer dizer que uma varivel, na
verdade, uma referncia a um endereo de memria. Seguindo esta linha de
raciocnio e observando o desenho abaixo podemos afirmar que x indica o
endereo 000001432e x 210

Qual forma seria mais prtica de usar numa codificao? A ou B?


B

A
000001432e x

210

= 0;

int x = 0;
RAM
0

19

Uma classe, um tipo abstrato de dados:


Como o S.O. far a alocao de um espao de memria para armazenar um
tipo que acabou de ser criado se ele (o S.O.) no sabe qual o tamanho deste
tipo?
Mtodo Construtor - no caso Pessoa(): Na maioria das vezes tem o mesmo nome da
classe que determinar o tipo do objeto. Sua funo passar informaes sobre as
caractersticas do Objeto ao S.O. Em posse dessas informaes o S.O. ter condies de
alocar um espao de memria vazio (atravs do operador new) no qual caiba o objeto.
Exemplo linha 17: Pessoa

p = new Pessoa();

Onde:
Pessoa: tipo de dados abstrato (classe)
p: objeto do tipo Pessoa
new: operador que solicita um espao vazio de memria
Pessoa(): mtodo construtor

20

tipo de dados

objeto

mtodo construtor

Exemplo (linha 17): Pessoa p = new Pessoa();

P
rg

Jesus

nome

insereDados()

insereDados()

Objeto

mostraDados()

mostraDados()

21

Durante a construo da classe Pessoa, poderamos ter definido, de maneira explcita o


mtodo construtor;
Antes devemos atentar para que o nome deste mtodo exatamente igual ao nome da
classe, inclusive as definies de letras maisculas e minsculas, logo nosso mtodo
construtor ter por identificador (nome) Pessoa;
Lembrando que ele ser executado ao instanciarmos um objeto (vide linha 17).
Coloque o cdigo a seguir, de preferncia, logo aps as definies dos atributos no
cdigo fonte da classe Pessoa:

Pessoa(){
rg = 100;
nome=Paz;
}

Nota: Ao ser invocado (na linha 17) este cdigo criar um objeto inserindo, durante sua
criao, os valores 100 para o atributo rg e Paz para nome. Para testarmos retiraremos
do mtodo main a chamda ao mtodo insereDados().

22

1. public class Pessoa {


2.
int rg;
3.
String nome;
4.
5.
Pessoa(){
6.
rg = 100;
7.
nome=Paz;
8.
}
9.
10. public void insereDados(){
11.
int rg = 1;
12.
String nome ="Jesus";
13.
this.rg=rg;
14.
this.nome=nome;
15.
}
16.
public void mostraDados(){
17.
System.out.println("\n RG: "+rg);
18.
System.out.println("\n Nome: "+nome);
19.
}
20.
21. public static void main(String arg[]){
22.
Pessoa p = new Pessoa(); //invocando o mtodo construtor
23.
//p.insereDados(); //comentada invocao do mtodo para no ser compilado
24.
p.mostraDados();
25. }
26. }

23

Polimorfismo com
Sobrecarga

24

Definio: Mtodos da mesma classe que tm o mesmo nome porm


assinaturas diferentes.
Imagine que, em uma classe, tenha um mtodo sobrecarregado chamado
calcularIdade():

a)_
public void calcIdade(){
System.out.println(anos/10);
}
b)_
public void calcIdade(int dias){
System.out.println(anos/dias);
}
Observe:
Nomes (identificadores - iguais):
a)_calcIdade
b)_ calcIdade

Assinaturas (diferentes):
a)_ public void calcIdade()
b)_ public void calcIdade(int dias){

25

Podemos ter mais de um mtodo construtor na mesma classe.


Veja o cdigo de um possvel segundo mtodo construtor:
Pessoa(int rg, String nome){
this.rg = rg;
this.nome=nome;
}
Notas:
a)_ Perceba que este mtodo construtor se diferencia do outro. Este recebe parmetros e
instancia o objeto com os parmetros recebidos durante a sua criao. Porm
devemos ficar atentos ao invoc-lo, e no esquecermos de passar os parmetros. Veja
o exemplo na linha de cdigo a seguir:
Pessoa p1 = new Pessoa(101, verdade);
b)_Observe o objeto this sendo utilizado. Isto porque definimos os argumentos do
mtodo com o mesmo nome que os atributos da classe.
c)_ Agora vamos alterar o cdigo da classe Pessoa novamente, aproveitando para retirar o
mtodo insereDados() questo de falta de espao no slide e ele no ser mais
necessrio como exemplo.

26

1. public class Pessoa {


2.
int rg;
3.
String nome;
4.
5.
Pessoa(){
6.
rg = 100;
7.
nome=Paz;
8.
}
9.
10.
Pessoa(int rg, String nome){
11.
this.rg = rg;
12.
this.nome=nome;
13.
}
14.
15.
public void mostraDados(){
16.
System.out.println("\n RG: "+rg);
17.
System.out.println("\n Nome: "+nome);
18.
}
19.
20. public static void main(String arg[]){
21.
Pessoa p = new Pessoa(); //invocando o mtodo construtor default
22.
Pessoa p1 = new Pessoa(101, verdade); //invocando o mtodo construtor sobrecarregado
23.
p.mostraDados();
24.
p1.mostraDados();
25. }
26. }

27

Perceba que temos, na mesma classe, dois mtodos com os mesmos identificadores (nomes):
Pessoa. Porm com assinaturas diferentes e cada um fazem coisas diferentes:

Pessoa(){
rg = 100;
nome=Paz;
}

Pessoa(int rg, String nome){


this.rg = rg;
this.nome=nome;
}
A esta situao chamamos de Polimorfismo de sobrecarga. Neste caso dizemos que o mtodo
construtor est sobrecarregado.
Mas ATENO: este tipo de polimorfismo pode ocorrer com qualquer mtodo da classe. NO SE
TRATA DE UMA EXCLUSIVIDADE DO MTODO CONSTRUTOR!

28

Vous aimerez peut-être aussi