SlideShare uma empresa Scribd logo
1 de 142
Baixar para ler offline
Aula 20 – Especificadores de acesso e
Pacotes
Norton Trevisan Roman
12 de maio de 2020
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 1 / 32
Private
class Casa {
private double valorM2 = 1500;
Casa() {}
Casa(double valorM2) {
this.valorM2 = valorM2;
}
...
}
O que acontece quando
compilamos CasaQuad?
class CasaQuad extends Casa {
double lateral = 10;
CasaQuad() {}
CasaQuad(double valorM2) {
super(valorM2);
}
CasaQuad(double lateral,double valorM2)
{
super(valorM2);
this.lateral = lateral;
}
double area() {
return(this.lateral>=0 ?
this.lateral*this.lateral : -1);
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 2 / 32
Private
class Casa {
private double valorM2 = 1500;
Casa() {}
Casa(double valorM2) {
this.valorM2 = valorM2;
}
...
}
O que acontece quando
compilamos CasaQuad?
Linha de Comando
$ javac CasaQuad.java
class CasaQuad extends Casa {
double lateral = 10;
CasaQuad() {}
CasaQuad(double valorM2) {
super(valorM2);
}
CasaQuad(double lateral,double valorM2)
{
super(valorM2);
this.lateral = lateral;
}
double area() {
return(this.lateral>=0 ?
this.lateral*this.lateral : -1);
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 2 / 32
Private
class Casa {
private double valorM2 = 1500;
Casa() {}
Casa(double valorM2) {
this.valorM2 = valorM2;
}
...
}
O que acontece quando
compilamos CasaQuad?
Linha de Comando
$ javac CasaQuad.java
Compila. Nada impede.
class CasaQuad extends Casa {
double lateral = 10;
CasaQuad() {}
CasaQuad(double valorM2) {
super(valorM2);
}
CasaQuad(double lateral,double valorM2)
{
super(valorM2);
this.lateral = lateral;
}
double area() {
return(this.lateral>=0 ?
this.lateral*this.lateral : -1);
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 2 / 32
Private
class CasaRet extends Casa {
double cquarto = 10;
double lateral = 10;
CasaRet() {}
CasaRet(double valorM2) {
super(valorM2);
}
CasaRet(double lateral, double cquarto)
{
this.lateral = lateral;
this.cquarto = cquarto;
}
CasaRet(double lateral, double cquarto,
double valorM2) {
this(lateral, cquarto);
this.valorM2 = valorM2;
}
double area() {
double areat=-1;
if (this.lateral>=0 &&
this.cquarto>=0) {
areat = this.lateral*this.lateral;
areat += this.cquarto*this.lateral;
}
return(areat);
}
}
E quando compilamos
CasaRet?
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 3 / 32
Private
class CasaRet extends Casa {
double cquarto = 10;
double lateral = 10;
CasaRet() {}
CasaRet(double valorM2) {
super(valorM2);
}
CasaRet(double lateral, double cquarto)
{
this.lateral = lateral;
this.cquarto = cquarto;
}
CasaRet(double lateral, double cquarto,
double valorM2) {
this(lateral, cquarto);
this.valorM2 = valorM2;
}
double area() {
double areat=-1;
if (this.lateral>=0 &&
this.cquarto>=0) {
areat = this.lateral*this.lateral;
areat += this.cquarto*this.lateral;
}
return(areat);
}
}
E quando compilamos
CasaRet?
Linha de Comando
$ javac CasaRet.java
CasaRet.java:35: valorM2 has
private access in Casa
this.valorM2 = valorM2;
^
1 error
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 3 / 32
Private
class CasaRet extends Casa {
double cquarto = 10;
double lateral = 10;
CasaRet() {}
CasaRet(double valorM2) {
super(valorM2);
}
CasaRet(double lateral, double cquarto)
{
this.lateral = lateral;
this.cquarto = cquarto;
}
CasaRet(double lateral, double cquarto,
double valorM2) {
this(lateral, cquarto);
this.valorM2 = valorM2;
}
double area() {
double areat=-1;
if (this.lateral>=0 &&
this.cquarto>=0) {
areat = this.lateral*this.lateral;
areat += this.cquarto*this.lateral;
}
return(areat);
}
}
N˜ao temos acesso ao
valor do m2
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 4 / 32
Private
class CasaRet extends Casa {
double cquarto = 10;
double lateral = 10;
CasaRet() {}
CasaRet(double valorM2) {
super(valorM2);
}
CasaRet(double lateral, double cquarto)
{
this.lateral = lateral;
this.cquarto = cquarto;
}
CasaRet(double lateral, double cquarto,
double valorM2) {
this(lateral, cquarto);
this.valorM2 = valorM2;
}
double area() {
double areat=-1;
if (this.lateral>=0 &&
this.cquarto>=0) {
areat = this.lateral*this.lateral;
areat += this.cquarto*this.lateral;
}
return(areat);
}
}
N˜ao temos acesso ao
valor do m2
Muito embora ele
esteja na mem´oria do
objeto!
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 4 / 32
Private
class CasaRet extends Casa {
double cquarto = 10;
double lateral = 10;
CasaRet() {}
CasaRet(double valorM2) {
super(valorM2);
}
CasaRet(double lateral, double cquarto)
{
this.lateral = lateral;
this.cquarto = cquarto;
}
CasaRet(double lateral, double cquarto,
double valorM2) {
this(lateral, cquarto);
this.valorM2 = valorM2;
}
double area() {
double areat=-1;
if (this.lateral>=0 &&
this.cquarto>=0) {
areat = this.lateral*this.lateral;
areat += this.cquarto*this.lateral;
}
return(areat);
}
}
Que fazer?
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 5 / 32
Private
class CasaRet extends Casa {
double cquarto = 10;
double lateral = 10;
CasaRet() {}
CasaRet(double valorM2) {
super(valorM2);
}
CasaRet(double lateral, double cquarto)
{
this.lateral = lateral;
this.cquarto = cquarto;
}
CasaRet(double lateral, double cquarto,
double valorM2) {
super(valorM2);
this.lateral = lateral;
this.cquarto = cquarto;
}
double area() {
double areat=-1;
if (this.lateral>=0 &&
this.cquarto>=0) {
areat = this.lateral*this.lateral;
areat += this.cquarto*this.lateral;
}
return(areat);
}
}
Que fazer?
Refatorar a classe
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 5 / 32
Heran¸ca
E n˜ao poder´ıamos ter this e super juntas?
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 6 / 32
Heran¸ca
E n˜ao poder´ıamos ter this e super juntas?
class CasaRet extends Casa {
...
CasaRet(double lateral, double cquarto,
double valorM2) {
super(valorM2);
this(lateral,cquarto);
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 6 / 32
Heran¸ca
E n˜ao poder´ıamos ter this e super juntas?
class CasaRet extends Casa {
...
CasaRet(double lateral, double cquarto,
double valorM2) {
super(valorM2);
this(lateral,cquarto);
}
}
Linha de Comando
$ javac CasaRet.java
CasaRet.java:35: call to this must be first
statement in constructor
this(lateral,cquarto);
^
1 error
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 6 / 32
Heran¸ca
E n˜ao poder´ıamos ter this e super juntas?
class CasaRet extends Casa {
...
CasaRet(double lateral, double cquarto,
double valorM2) {
super(valorM2);
this(lateral,cquarto);
}
}
Linha de Comando
$ javac CasaRet.java
CasaRet.java:35: call to this must be first
statement in constructor
this(lateral,cquarto);
^
1 error
class CasaRet extends Casa {
...
CasaRet(double lateral, double cquarto,
double valorM2) {
this(lateral,cquarto);
super(valorM2);
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 6 / 32
Heran¸ca
E n˜ao poder´ıamos ter this e super juntas?
class CasaRet extends Casa {
...
CasaRet(double lateral, double cquarto,
double valorM2) {
super(valorM2);
this(lateral,cquarto);
}
}
Linha de Comando
$ javac CasaRet.java
CasaRet.java:35: call to this must be first
statement in constructor
this(lateral,cquarto);
^
1 error
class CasaRet extends Casa {
...
CasaRet(double lateral, double cquarto,
double valorM2) {
this(lateral,cquarto);
super(valorM2);
}
}
Linha de Comando
$ javac CasaRet.java
CasaRet.java:35: call to super must be first
statement in constructor
super(valorM2);
^
1 error
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 6 / 32
Heran¸ca
E n˜ao poder´ıamos ter this e super juntas?
class CasaRet extends Casa {
...
CasaRet(double lateral, double cquarto,
double valorM2) {
super(valorM2);
this(lateral,cquarto);
}
}
Linha de Comando
$ javac CasaRet.java
CasaRet.java:35: call to this must be first
statement in constructor
this(lateral,cquarto);
^
1 error
class CasaRet extends Casa {
...
CasaRet(double lateral, double cquarto,
double valorM2) {
this(lateral,cquarto);
super(valorM2);
}
}
Linha de Comando
$ javac CasaRet.java
CasaRet.java:35: call to super must be first
statement in constructor
super(valorM2);
^
1 error
Como, se ambas devem ser o primeiro comando?
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 6 / 32
Heran¸ca
E n˜ao poder´ıamos ter this e super juntas?
class CasaRet extends Casa {
...
CasaRet(double lateral, double cquarto,
double valorM2) {
super(valorM2);
this(lateral,cquarto);
}
}
Linha de Comando
$ javac CasaRet.java
CasaRet.java:35: call to this must be first
statement in constructor
this(lateral,cquarto);
^
1 error
class CasaRet extends Casa {
...
CasaRet(double lateral, double cquarto,
double valorM2) {
this(lateral,cquarto);
super(valorM2);
}
}
Linha de Comando
$ javac CasaRet.java
CasaRet.java:35: call to super must be first
statement in constructor
super(valorM2);
^
1 error
Como, se ambas devem ser o primeiro comando?
Teremos que optar
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 6 / 32
Especificadores (Modificadores) de Acesso
Determinam quem ter´a permiss˜ao para acessar ou
modificar os componentes (atributos e m´etodos)
das classes.
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 7 / 32
Especificadores (Modificadores) de Acesso
Determinam quem ter´a permiss˜ao para acessar ou
modificar os componentes (atributos e m´etodos)
das classes.
Private:
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 7 / 32
Especificadores (Modificadores) de Acesso
Determinam quem ter´a permiss˜ao para acessar ou
modificar os componentes (atributos e m´etodos)
das classes.
Private:
private construtor, atributo ou m´etodo: Somente elementos de
dentro da classe tˆem acesso
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 7 / 32
Especificadores (Modificadores) de Acesso
Determinam quem ter´a permiss˜ao para acessar ou
modificar os componentes (atributos e m´etodos)
das classes.
Private:
private construtor, atributo ou m´etodo: Somente elementos de
dentro da classe tˆem acesso
Public:
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 7 / 32
Especificadores (Modificadores) de Acesso
Determinam quem ter´a permiss˜ao para acessar ou
modificar os componentes (atributos e m´etodos)
das classes.
Private:
private construtor, atributo ou m´etodo: Somente elementos de
dentro da classe tˆem acesso
Public:
public classe, construtor, atributo ou m´etodo: Acesso irrestrito
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 7 / 32
Especificadores (Modificadores) de Acesso
Determinam quem ter´a permiss˜ao para acessar ou
modificar os componentes (atributos e m´etodos)
das classes.
Private:
private construtor, atributo ou m´etodo: Somente elementos de
dentro da classe tˆem acesso
Public:
public classe, construtor, atributo ou m´etodo: Acesso irrestrito
Protected:
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 7 / 32
Especificadores (Modificadores) de Acesso
Determinam quem ter´a permiss˜ao para acessar ou
modificar os componentes (atributos e m´etodos)
das classes.
Private:
private construtor, atributo ou m´etodo: Somente elementos de
dentro da classe tˆem acesso
Public:
public classe, construtor, atributo ou m´etodo: Acesso irrestrito
Protected:
protected construtor, atributo ou m´etodo: Somente elementos
pertencentes a classes do mesmo pacote, ou subclasse (independente
do pacote) tˆem acesso
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 7 / 32
Especificadores (Modificadores) de Acesso
Determinam quem ter´a permiss˜ao para acessar ou
modificar os componentes (atributos e m´etodos)
das classes.
Private:
private construtor, atributo ou m´etodo: Somente elementos de
dentro da classe tˆem acesso
Public:
public classe, construtor, atributo ou m´etodo: Acesso irrestrito
Protected:
protected construtor, atributo ou m´etodo: Somente elementos
pertencentes a classes do mesmo pacote, ou subclasse (independente
do pacote) tˆem acesso
Nada (“friendly”)
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 7 / 32
Especificadores (Modificadores) de Acesso
Determinam quem ter´a permiss˜ao para acessar ou
modificar os componentes (atributos e m´etodos)
das classes.
Private:
private construtor, atributo ou m´etodo: Somente elementos de
dentro da classe tˆem acesso
Public:
public classe, construtor, atributo ou m´etodo: Acesso irrestrito
Protected:
protected construtor, atributo ou m´etodo: Somente elementos
pertencentes a classes do mesmo pacote, ou subclasse (independente
do pacote) tˆem acesso
Nada (“friendly”)
classe, construtor, atributo ou m´etodo: Somente elementos
pertencentes a classes do mesmo pacote tˆem acesso
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 7 / 32
Pacotes
Pacote?
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 8 / 32
Pacotes
Pacote?
Corresponde ao modo como organizamos os arquivos .java
em diferentes diret´orios
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 8 / 32
Pacotes
Pacote?
Corresponde ao modo como organizamos os arquivos .java
em diferentes diret´orios
´E o diret´orio
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 8 / 32
Pacotes
Pacote?
Corresponde ao modo como organizamos os arquivos .java
em diferentes diret´orios
´E o diret´orio
Podem ser declarados explicitamente, com a palavra
package
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 8 / 32
Pacotes
Pacote?
Corresponde ao modo como organizamos os arquivos .java
em diferentes diret´orios
´E o diret´orio
Podem ser declarados explicitamente, com a palavra
package
´Util quando temos duas classes com o mesmo nome, mas
fun¸c˜oes diferentes.
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 8 / 32
Pacotes
Pacote?
Corresponde ao modo como organizamos os arquivos .java
em diferentes diret´orios
´E o diret´orio
Podem ser declarados explicitamente, com a palavra
package
´Util quando temos duas classes com o mesmo nome, mas
fun¸c˜oes diferentes.
Ex: normal.Matematica e complexo.Matematica, que tratariam
de fun¸c˜oes matem´aticas para n´umeros complexos e os demais
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 8 / 32
Pacotes
Pacote?
Corresponde ao modo como organizamos os arquivos .java
em diferentes diret´orios
´E o diret´orio
Podem ser declarados explicitamente, com a palavra
package
´Util quando temos duas classes com o mesmo nome, mas
fun¸c˜oes diferentes.
Ex: normal.Matematica e complexo.Matematica, que tratariam
de fun¸c˜oes matem´aticas para n´umeros complexos e os demais
Nesse caso, a primeira seria normal/Matematica.class e a
segunda em complexo/Matematica.class
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 8 / 32
Pacotes
Que agrupamento (pacotes)
podemos fazer em nossas
classes?
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 9 / 32
Pacotes
Que agrupamento (pacotes)
podemos fazer em nossas
classes?
Poder´ıamos separar as coisas
relativas `a casa das relativas
`a piscina
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 9 / 32
Pacotes
Que agrupamento (pacotes)
podemos fazer em nossas
classes?
Poder´ıamos separar as coisas
relativas `a casa das relativas
`a piscina
2 pacotes: casa e piscina
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 9 / 32
Pacotes
Que agrupamento (pacotes)
podemos fazer em nossas
classes?
Poder´ıamos separar as coisas
relativas `a casa das relativas
`a piscina
2 pacotes: casa e piscina
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 9 / 32
Pacotes
Casa.java:
package casa;
class Casa { ... }
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 10 / 32
Pacotes
Casa.java:
package casa;
class Casa { ... }
CasaQuad.java:
package casa;
class CasaQuad extends Casa { .. }
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 10 / 32
Pacotes
Casa.java:
package casa;
class Casa { ... }
CasaQuad.java:
package casa;
class CasaQuad extends Casa { .. }
CasaRet.java:
package casa;
class CasaRet extends Casa { ... }
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 10 / 32
Pacotes
Casa.java:
package casa;
class Casa { ... }
CasaQuad.java:
package casa;
class CasaQuad extends Casa { .. }
CasaRet.java:
package casa;
class CasaRet extends Casa { ... }
AreaPiscina.java:
package piscina;
class AreaPiscina { ... }
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 10 / 32
Pacotes
E como compilamos
isso?
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 11 / 32
Pacotes
E como compilamos
isso?
Do diret´orio pai, onde
est˜ao os diret´orios casa e
piscina
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 11 / 32
Pacotes
E como compilamos
isso?
Do diret´orio pai, onde
est˜ao os diret´orios casa e
piscina
$ javac casa/Casa.java
$ javac casa/CasaRet.java
$ javac casa/CasaQuad.java
$ javac piscina/AreaPiscina.java
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 11 / 32
Pacotes
E como compilamos
isso?
Do diret´orio pai, onde
est˜ao os diret´orios casa e
piscina
$ javac casa/Casa.java
$ javac casa/CasaRet.java
$ javac casa/CasaQuad.java
$ javac piscina/AreaPiscina.java
E o diret´orio conter´a
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 11 / 32
Pacotes
E como compilamos
isso?
Do diret´orio pai, onde
est˜ao os diret´orios casa e
piscina
$ javac casa/Casa.java
$ javac casa/CasaRet.java
$ javac casa/CasaQuad.java
$ javac piscina/AreaPiscina.java
E o diret´orio conter´a
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 11 / 32
Pacotes
E como compilamos
isso?
Do diret´orio pai, onde
est˜ao os diret´orios casa e
piscina
$ javac casa/Casa.java
$ javac casa/CasaRet.java
$ javac casa/CasaQuad.java
$ javac piscina/AreaPiscina.java
E o diret´orio conter´a
Note os .class
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 11 / 32
Pacotes
E o que acontece ao
compilarmos
Residencia?
class Residencia {
Casa casa;
AreaPiscina piscina;
Residencia(Casa casa,
AreaPiscina piscina) {
this.casa = casa;
this.piscina = piscina;
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 12 / 32
Pacotes
E o que acontece ao
compilarmos
Residencia?
class Residencia {
Casa casa;
AreaPiscina piscina;
Residencia(Casa casa,
AreaPiscina piscina) {
this.casa = casa;
this.piscina = piscina;
}
}
Linha de Comando
$ javac Residencia.java
Residencia.java:6: cannot find symbol
symbol : class Casa
location: class Residencia
Casa casa;
^
Residencia.java:8: cannot find symbol
symbol : class AreaPiscina
location: class Residencia
AreaPiscina piscina;
^
Residencia.java:13: cannot find symbol
symbol : class Casa
location: class Residencia
Residencia(Casa casa, AreaPiscina
piscina) {
^
Residencia.java:13: cannot find symbol
symbol : class AreaPiscina
location: class Residencia
Residencia(Casa casa, AreaPiscina
piscina) {
^
4 errors
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 12 / 32
Pacotes
O compilador n˜ao sabe
onde est´a nem Casa
nem AreaPiscina
Linha de Comando
$ javac Residencia.java
Residencia.java:6: cannot find symbol
symbol : class Casa
location: class Residencia
Casa casa;
^
Residencia.java:8: cannot find symbol
symbol : class AreaPiscina
location: class Residencia
AreaPiscina piscina;
^
Residencia.java:13: cannot find symbol
symbol : class Casa
location: class Residencia
Residencia(Casa casa, AreaPiscina
piscina) {
^
Residencia.java:13: cannot find symbol
symbol : class AreaPiscina
location: class Residencia
Residencia(Casa casa, AreaPiscina
piscina) {
^
4 errors
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 13 / 32
Pacotes
O compilador n˜ao sabe
onde est´a nem Casa
nem AreaPiscina
Ir´a buscar sempre no
mesmo diret´orio do
arquivo compilado.
Linha de Comando
$ javac Residencia.java
Residencia.java:6: cannot find symbol
symbol : class Casa
location: class Residencia
Casa casa;
^
Residencia.java:8: cannot find symbol
symbol : class AreaPiscina
location: class Residencia
AreaPiscina piscina;
^
Residencia.java:13: cannot find symbol
symbol : class Casa
location: class Residencia
Residencia(Casa casa, AreaPiscina
piscina) {
^
Residencia.java:13: cannot find symbol
symbol : class AreaPiscina
location: class Residencia
Residencia(Casa casa, AreaPiscina
piscina) {
^
4 errors
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 13 / 32
Pacotes
O compilador n˜ao sabe
onde est´a nem Casa
nem AreaPiscina
Ir´a buscar sempre no
mesmo diret´orio do
arquivo compilado.
Se n˜ao estiver l´a, dar´a
erro
Linha de Comando
$ javac Residencia.java
Residencia.java:6: cannot find symbol
symbol : class Casa
location: class Residencia
Casa casa;
^
Residencia.java:8: cannot find symbol
symbol : class AreaPiscina
location: class Residencia
AreaPiscina piscina;
^
Residencia.java:13: cannot find symbol
symbol : class Casa
location: class Residencia
Residencia(Casa casa, AreaPiscina
piscina) {
^
Residencia.java:13: cannot find symbol
symbol : class AreaPiscina
location: class Residencia
Residencia(Casa casa, AreaPiscina
piscina) {
^
4 errors
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 13 / 32
Pacotes
E como dizemos a ele
onde est´a?
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 14 / 32
Pacotes
E como dizemos a ele
onde est´a?
Novamente, com import
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 14 / 32
Pacotes
E como dizemos a ele
onde est´a?
Novamente, com import
import casa.Casa;
import piscina.AreaPiscina;
class Residencia {
Casa casa;
AreaPiscina piscina;
Residencia(Casa casa,
AreaPiscina piscina) {
this.casa = casa;
this.piscina = piscina;
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 14 / 32
Pacotes
E como dizemos a ele
onde est´a?
Novamente, com import
import casa.Casa;
import piscina.AreaPiscina;
class Residencia {
Casa casa;
AreaPiscina piscina;
Residencia(Casa casa,
AreaPiscina piscina) {
this.casa = casa;
this.piscina = piscina;
}
}
Linha de Comando
$ javac Residencia.java
Residencia.java:1: casa.Casa is not
public in casa; cannot be accessed from
outside package
import casa.Casa;
^
Residencia.java:2: piscina.AreaPiscina
is not public in piscina; cannot be
accessed from outside package
import piscina.AreaPiscina;
^
...
6 errors
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 14 / 32
Pacotes
Se n˜ao especificamos o
modificador, ele ´e
“friendly”
Linha de Comando
$ javac Residencia.java
Residencia.java:1: casa.Casa is not
public in casa; cannot be accessed from
outside package
import casa.Casa;
^
Residencia.java:2: piscina.AreaPiscina
is not public in piscina; cannot be
accessed from outside package
import piscina.AreaPiscina;
^
...
6 errors
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 15 / 32
Pacotes
Se n˜ao especificamos o
modificador, ele ´e
“friendly”
Acesso somente interno
ao pacote
Linha de Comando
$ javac Residencia.java
Residencia.java:1: casa.Casa is not
public in casa; cannot be accessed from
outside package
import casa.Casa;
^
Residencia.java:2: piscina.AreaPiscina
is not public in piscina; cannot be
accessed from outside package
import piscina.AreaPiscina;
^
...
6 errors
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 15 / 32
Pacotes
Se n˜ao especificamos o
modificador, ele ´e
“friendly”
Acesso somente interno
ao pacote
Que fazer?
Linha de Comando
$ javac Residencia.java
Residencia.java:1: casa.Casa is not
public in casa; cannot be accessed from
outside package
import casa.Casa;
^
Residencia.java:2: piscina.AreaPiscina
is not public in piscina; cannot be
accessed from outside package
import piscina.AreaPiscina;
^
...
6 errors
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 15 / 32
Pacotes
Tornar p´ublico o acesso
Linha de Comando
$ javac Residencia.java
Residencia.java:1: casa.Casa is not
public in casa; cannot be accessed from
outside package
import casa.Casa;
^
Residencia.java:2: piscina.AreaPiscina
is not public in piscina; cannot be
accessed from outside package
import piscina.AreaPiscina;
^
...
6 errors
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 16 / 32
Pacotes
Tornar p´ublico o acesso
package piscina;
public class AreaPiscina
{... }
Linha de Comando
$ javac Residencia.java
Residencia.java:1: casa.Casa is not
public in casa; cannot be accessed from
outside package
import casa.Casa;
^
Residencia.java:2: piscina.AreaPiscina
is not public in piscina; cannot be
accessed from outside package
import piscina.AreaPiscina;
^
...
6 errors
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 16 / 32
Pacotes
Tornar p´ublico o acesso
package piscina;
public class AreaPiscina
{... }
e
package casa;
public class Casa {... }
Linha de Comando
$ javac Residencia.java
Residencia.java:1: casa.Casa is not
public in casa; cannot be accessed from
outside package
import casa.Casa;
^
Residencia.java:2: piscina.AreaPiscina
is not public in piscina; cannot be
accessed from outside package
import piscina.AreaPiscina;
^
...
6 errors
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 16 / 32
Pacotes
O mesmo deve ser
feito com projeto:
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 17 / 32
Pacotes
O mesmo deve ser
feito com projeto:
import java.util.Scanner;
import casa.CasaRet;
import casa.CasaQuad;
import casa.Casa;
import piscina.AreaPiscina;
class Projeto {
Residencia[] condominio;
int ultimo = -1;
...
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
Residencia r1 = new Residencia(cr, null);
Residencia r2 = new Residencia(cq, null);
System.out.println("´Area (r1): "+
r1.casa.area());
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 17 / 32
Pacotes
O mesmo deve ser
feito com projeto:
Contudo, para que o
main possa criar os
objetos, teremos
tamb´em que tornar
p´ublicas
import java.util.Scanner;
import casa.CasaRet;
import casa.CasaQuad;
import casa.Casa;
import piscina.AreaPiscina;
class Projeto {
Residencia[] condominio;
int ultimo = -1;
...
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
Residencia r1 = new Residencia(cr, null);
Residencia r2 = new Residencia(cq, null);
System.out.println("´Area (r1): "+
r1.casa.area());
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 17 / 32
Pacotes
O mesmo deve ser
feito com projeto:
Contudo, para que o
main possa criar os
objetos, teremos
tamb´em que tornar
p´ublicas
CasaRet
import java.util.Scanner;
import casa.CasaRet;
import casa.CasaQuad;
import casa.Casa;
import piscina.AreaPiscina;
class Projeto {
Residencia[] condominio;
int ultimo = -1;
...
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
Residencia r1 = new Residencia(cr, null);
Residencia r2 = new Residencia(cq, null);
System.out.println("´Area (r1): "+
r1.casa.area());
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 17 / 32
Pacotes
O mesmo deve ser
feito com projeto:
Contudo, para que o
main possa criar os
objetos, teremos
tamb´em que tornar
p´ublicas
CasaRet
CasaQuad
import java.util.Scanner;
import casa.CasaRet;
import casa.CasaQuad;
import casa.Casa;
import piscina.AreaPiscina;
class Projeto {
Residencia[] condominio;
int ultimo = -1;
...
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
Residencia r1 = new Residencia(cr, null);
Residencia r2 = new Residencia(cq, null);
System.out.println("´Area (r1): "+
r1.casa.area());
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 17 / 32
Pacotes
Bem como
import java.util.Scanner;
import casa.CasaRet;
import casa.CasaQuad;
import casa.Casa;
import piscina.AreaPiscina;
class Projeto {
Residencia[] condominio;
int ultimo = -1;
...
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
Residencia r1 = new Residencia(cr, null);
Residencia r2 = new Residencia(cq, null);
System.out.println("´Area (r1): "+
r1.casa.area());
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 18 / 32
Pacotes
Bem como
O construtor CasaRet
import java.util.Scanner;
import casa.CasaRet;
import casa.CasaQuad;
import casa.Casa;
import piscina.AreaPiscina;
class Projeto {
Residencia[] condominio;
int ultimo = -1;
...
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
Residencia r1 = new Residencia(cr, null);
Residencia r2 = new Residencia(cq, null);
System.out.println("´Area (r1): "+
r1.casa.area());
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 18 / 32
Pacotes
Bem como
O construtor CasaRet
O construtor
CasaQuad
import java.util.Scanner;
import casa.CasaRet;
import casa.CasaQuad;
import casa.Casa;
import piscina.AreaPiscina;
class Projeto {
Residencia[] condominio;
int ultimo = -1;
...
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
Residencia r1 = new Residencia(cr, null);
Residencia r2 = new Residencia(cq, null);
System.out.println("´Area (r1): "+
r1.casa.area());
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 18 / 32
Pacotes
Bem como
O construtor CasaRet
O construtor
CasaQuad
Os m´etodos area (nas
3 classes do diret´orio
casa)
import java.util.Scanner;
import casa.CasaRet;
import casa.CasaQuad;
import casa.Casa;
import piscina.AreaPiscina;
class Projeto {
Residencia[] condominio;
int ultimo = -1;
...
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
Residencia r1 = new Residencia(cr, null);
Residencia r2 = new Residencia(cq, null);
System.out.println("´Area (r1): "+
r1.casa.area());
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 18 / 32
Pacotes
Agora temos todo o
projeto pronto.
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 19 / 32
Pacotes
Agora temos todo o
projeto pronto.
Como fazemos para
rodar Projeto?
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 19 / 32
Pacotes
Agora temos todo o
projeto pronto.
Como fazemos para
rodar Projeto?
Linha de Comando
$ java Projeto
´Area (r1): 150.0
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 19 / 32
Pacotes
Agora temos todo o
projeto pronto.
Como fazemos para
rodar Projeto?
Linha de Comando
$ java Projeto
´Area (r1): 150.0
Funciona porque estamos no mesmo diret´orio dele
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 19 / 32
Pacotes
E se quisermos rodar
CasaQuad, por
exemplo, que est´a
dentro do diret´orio
casa?
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 20 / 32
Pacotes
E se quisermos rodar
CasaQuad, por
exemplo, que est´a
dentro do diret´orio
casa?
java casa.CasaQuad ou
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 20 / 32
Pacotes
E se quisermos rodar
CasaQuad, por
exemplo, que est´a
dentro do diret´orio
casa?
java casa.CasaQuad ou
java casa/CasaQuad
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 20 / 32
Pacotes
E se quisermos rodar
CasaQuad, por
exemplo, que est´a
dentro do diret´orio
casa?
java casa.CasaQuad ou
java casa/CasaQuad
Linha de Comando
$ java casa/CasaQuad
CasaQuad
$ java casa.CasaQuad
CasaQuad
(em seu main h´a somente
um println com o nome
da classe)
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 20 / 32
Pacotes
E se quisermos rodar
CasaQuad, por
exemplo, que est´a
dentro do diret´orio
casa?
java casa.CasaQuad ou
java casa/CasaQuad
Repare que ´e / e n˜ao 
Linha de Comando
$ java casa/CasaQuad
CasaQuad
$ java casa.CasaQuad
CasaQuad
(em seu main h´a somente
um println com o nome
da classe)
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 20 / 32
Pacotes
Finalmente, e se a
classe estiver em um
subdiret´orio dentro de
um subdiret´orio?
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 21 / 32
Pacotes
Finalmente, e se a
classe estiver em um
subdiret´orio dentro de
um subdiret´orio?
Colocamos todo o
caminho na declara¸c˜ao
package
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 21 / 32
Pacotes
Finalmente, e se a
classe estiver em um
subdiret´orio dentro de
um subdiret´orio?
Colocamos todo o
caminho na declara¸c˜ao
package
package subdir1.subdir2;
public class X {
...
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 21 / 32
Pacotes
Finalmente, e se a
classe estiver em um
subdiret´orio dentro de
um subdiret´orio?
Colocamos todo o
caminho na declara¸c˜ao
package
package subdir1.subdir2;
public class X {
...
}
Todo o caminho a partir da raiz do projeto → onde est´a a
classe principal e a partir de onde todas ser˜ao compiladas.
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 21 / 32
Pacotes
E para compilar?
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 22 / 32
Pacotes
E para compilar? Linha de Comando
$ javac subdir1/subdir2/X.java
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 22 / 32
Pacotes
E para compilar? Linha de Comando
$ javac subdir1/subdir2/X.java
E para rodar?
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 22 / 32
Pacotes
E para compilar? Linha de Comando
$ javac subdir1/subdir2/X.java
E para rodar?
Linha de Comando
$ java subdir1/subdir2/X
$ java subdir1.subdir2.X
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 22 / 32
Pacotes
Repare que Java
sempre pressup˜oe uma
hierarquia de pacotes
package subdir1.subdir2;
public class X {
....
}
Linha de Comando
$ javac subdir1/subdir2/X.java
Linha de Comando
$ java subdir1/subdir2/X
$ java subdir1.subdir2.X
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 23 / 32
Pacotes
Repare que Java
sempre pressup˜oe uma
hierarquia de pacotes
Tudo deve ser planejado
de modo que haja uma
raiz
package subdir1.subdir2;
public class X {
....
}
Linha de Comando
$ javac subdir1/subdir2/X.java
Linha de Comando
$ java subdir1/subdir2/X
$ java subdir1.subdir2.X
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 23 / 32
Pacotes
Repare que Java
sempre pressup˜oe uma
hierarquia de pacotes
Tudo deve ser planejado
de modo que haja uma
raiz
Tudo deve ser
compilado/rodado a partir
dessa raiz
package subdir1.subdir2;
public class X {
....
}
Linha de Comando
$ javac subdir1/subdir2/X.java
Linha de Comando
$ java subdir1/subdir2/X
$ java subdir1.subdir2.X
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 23 / 32
Pacotes
Repare que Java
sempre pressup˜oe uma
hierarquia de pacotes
Tudo deve ser planejado
de modo que haja uma
raiz
Tudo deve ser
compilado/rodado a partir
dessa raiz
N˜ao h´a um ../
package subdir1.subdir2;
public class X {
....
}
Linha de Comando
$ javac subdir1/subdir2/X.java
Linha de Comando
$ java subdir1/subdir2/X
$ java subdir1.subdir2.X
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 23 / 32
Getters e Setters
E se desej´assemos permitir
o acesso indireto a um
atributo privado, a partir
de outra classe?
public class X {
private int y = 2;
}
public class Y {
public void f() {
X obj = new X();
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 24 / 32
Getters e Setters
E se desej´assemos permitir
o acesso indireto a um
atributo privado, a partir
de outra classe?
N˜ao poder´ıamos fazer:
public class X {
private int y = 2;
}
public class Y {
public void f() {
X obj = new X();
System.out.println(obj.y);
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 24 / 32
Getters e Setters
E se desej´assemos permitir
o acesso indireto a um
atributo privado, a partir
de outra classe?
N˜ao poder´ıamos fazer:
Que fazer?
public class X {
private int y = 2;
}
public class Y {
public void f() {
X obj = new X();
System.out.println(obj.y);
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 24 / 32
Getters e Setters
E se desej´assemos permitir
o acesso indireto a um
atributo privado, a partir
de outra classe?
N˜ao poder´ıamos fazer:
Que fazer?
Dar acesso a ele via um
m´etodo p´ublico: um getter
public class X {
private int y = 2;
public int getY() {
return(y);
}
}
public class Y {
public void f() {
X obj = new X();
System.out.println(obj.y);
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 24 / 32
Getters e Setters
E se desej´assemos permitir
o acesso indireto a um
atributo privado, a partir
de outra classe?
N˜ao poder´ıamos fazer:
Que fazer?
Dar acesso a ele via um
m´etodo p´ublico: um getter
E ent˜ao fazer uma chamada a
esse m´etodo
public class X {
private int y = 2;
public int getY() {
return(y);
}
}
public class Y {
public void f() {
X obj = new X();
System.out.println(obj.getY());
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 24 / 32
Getters e Setters
Da mesma forma, seu
valor pode ser mudado por
outro m´etodo p´ublico
public class X {
private int y = 2;
public int getY() {
return(y);
}
public void setY(int v) {
y = v;
}
}
public class Y {
public void f() {
X obj = new X();
System.out.println(obj.getY());
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 25 / 32
Getters e Setters
Da mesma forma, seu
valor pode ser mudado por
outro m´etodo p´ublico
Um setter
public class X {
private int y = 2;
public int getY() {
return(y);
}
public void setY(int v) {
y = v;
}
}
public class Y {
public void f() {
X obj = new X();
System.out.println(obj.getY());
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 25 / 32
Getters e Setters
Da mesma forma, seu
valor pode ser mudado por
outro m´etodo p´ublico
Um setter
Usado da mesma forma
public class X {
private int y = 2;
public int getY() {
return(y);
}
public void setY(int v) {
y = v;
}
}
public class Y {
public void f() {
X obj = new X();
System.out.println(obj.getY());
obj.setY(3);
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 25 / 32
Getters e Setters
Poss´ıveis usos: public class X {
private int y = 2;
public int getY() {
return(y);
}
public void setY(int v) {
y = v;
}
}
public class Y {
public void f() {
X obj = new X();
System.out.println(obj.getY());
obj.setY(3);
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 26 / 32
Getters e Setters
Poss´ıveis usos:
Permitir acesso apenas
para escrita (remove-se o
getter)
public class X {
private int y = 2;
public int getY() {
return(y);
}
public void setY(int v) {
y = v;
}
}
public class Y {
public void f() {
X obj = new X();
System.out.println(obj.getY());
obj.setY(3);
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 26 / 32
Getters e Setters
Poss´ıveis usos:
Permitir acesso apenas
para escrita (remove-se o
getter)
Permitir acesso apenas
para leitura (remove-se o
setter)
public class X {
private int y = 2;
public int getY() {
return(y);
}
public void setY(int v) {
y = v;
}
}
public class Y {
public void f() {
X obj = new X();
System.out.println(obj.getY());
obj.setY(3);
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 26 / 32
Getters e Setters
Poss´ıveis usos:
Permitir acesso apenas
para escrita (remove-se o
getter)
Permitir acesso apenas
para leitura (remove-se o
setter)
Testar parˆametro antes de
abastecer atributo (dentro
do setter)
public class X {
private int y = 2;
public int getY() {
return(y);
}
public void setY(int v) {
y = v;
}
}
public class Y {
public void f() {
X obj = new X();
System.out.println(obj.getY());
obj.setY(3);
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 26 / 32
Getters e Setters
Poss´ıveis usos:
Mudar o formato de um
atributo antes de retornar
(dentro do getter)
public class X {
private int y = 2;
public int getY() {
return(y);
}
public void setY(int v) {
y = v;
}
}
public class Y {
public void f() {
X obj = new X();
System.out.println(obj.getY());
obj.setY(3);
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 27 / 32
Getters e Setters
Poss´ıveis usos:
Mudar o formato de um
atributo antes de retornar
(dentro do getter)
Ex: Um double 323 que vira
o String “R$ 323,00”
public class X {
private int y = 2;
public int getY() {
return(y);
}
public void setY(int v) {
y = v;
}
}
public class Y {
public void f() {
X obj = new X();
System.out.println(obj.getY());
obj.setY(3);
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 27 / 32
Modificadores
Quanto ao acesso:
Modificador Mesma Mesmo Subclasse Outros
Classe Pacote Pacotes
public
protected
nada
private
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
Modificadores
Quanto ao acesso:
Modificador Mesma Mesmo Subclasse Outros
Classe Pacote Pacotes
public S
protected
nada
private
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
Modificadores
Quanto ao acesso:
Modificador Mesma Mesmo Subclasse Outros
Classe Pacote Pacotes
public S S
protected
nada
private
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
Modificadores
Quanto ao acesso:
Modificador Mesma Mesmo Subclasse Outros
Classe Pacote Pacotes
public S S S
protected
nada
private
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
Modificadores
Quanto ao acesso:
Modificador Mesma Mesmo Subclasse Outros
Classe Pacote Pacotes
public S S S S
protected
nada
private
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
Modificadores
Quanto ao acesso:
Modificador Mesma Mesmo Subclasse Outros
Classe Pacote Pacotes
public S S S S
protected S
nada
private
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
Modificadores
Quanto ao acesso:
Modificador Mesma Mesmo Subclasse Outros
Classe Pacote Pacotes
public S S S S
protected S S
nada
private
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
Modificadores
Quanto ao acesso:
Modificador Mesma Mesmo Subclasse Outros
Classe Pacote Pacotes
public S S S S
protected S S S
nada
private
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
Modificadores
Quanto ao acesso:
Modificador Mesma Mesmo Subclasse Outros
Classe Pacote Pacotes
public S S S S
protected S S S N
nada
private
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
Modificadores
Quanto ao acesso:
Modificador Mesma Mesmo Subclasse Outros
Classe Pacote Pacotes
public S S S S
protected S S S N
nada S
private
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
Modificadores
Quanto ao acesso:
Modificador Mesma Mesmo Subclasse Outros
Classe Pacote Pacotes
public S S S S
protected S S S N
nada S S
private
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
Modificadores
Quanto ao acesso:
Modificador Mesma Mesmo Subclasse Outros
Classe Pacote Pacotes
public S S S S
protected S S S N
nada S S N
private
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
Modificadores
Quanto ao acesso:
Modificador Mesma Mesmo Subclasse Outros
Classe Pacote Pacotes
public S S S S
protected S S S N
nada S S N N
private
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
Modificadores
Quanto ao acesso:
Modificador Mesma Mesmo Subclasse Outros
Classe Pacote Pacotes
public S S S S
protected S S S N
nada S S N N
private S
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
Modificadores
Quanto ao acesso:
Modificador Mesma Mesmo Subclasse Outros
Classe Pacote Pacotes
public S S S S
protected S S S N
nada S S N N
private S N
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
Modificadores
Quanto ao acesso:
Modificador Mesma Mesmo Subclasse Outros
Classe Pacote Pacotes
public S S S S
protected S S S N
nada S S N N
private S N N
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
Modificadores
Quanto ao acesso:
Modificador Mesma Mesmo Subclasse Outros
Classe Pacote Pacotes
public S S S S
protected S S S N
nada S S N N
private S N N N
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
Modificadores
Outros modificadores:
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 29 / 32
Modificadores
Outros modificadores:
final atributo, m´etodo ou classe:
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 29 / 32
Modificadores
Outros modificadores:
final atributo, m´etodo ou classe:
Atributo: seu valor n˜ao pode ser mudado (´e constante)
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 29 / 32
Modificadores
Outros modificadores:
final atributo, m´etodo ou classe:
Atributo: seu valor n˜ao pode ser mudado (´e constante)
M´etodo: n˜ao pode ser sobrescrito
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 29 / 32
Modificadores
Outros modificadores:
final atributo, m´etodo ou classe:
Atributo: seu valor n˜ao pode ser mudado (´e constante)
M´etodo: n˜ao pode ser sobrescrito
Classe: a classe n˜ao aceita subclasses
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 29 / 32
Modificadores
Outros modificadores:
final atributo, m´etodo ou classe:
Atributo: seu valor n˜ao pode ser mudado (´e constante)
M´etodo: n˜ao pode ser sobrescrito
Classe: a classe n˜ao aceita subclasses
static atributo ou m´etodo: c´opia ´unica na
mem´oria
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 29 / 32
Modificadores
Outros modificadores:
final atributo, m´etodo ou classe:
Atributo: seu valor n˜ao pode ser mudado (´e constante)
M´etodo: n˜ao pode ser sobrescrito
Classe: a classe n˜ao aceita subclasses
static atributo ou m´etodo: c´opia ´unica na
mem´oria
Se usados em classes internas, as torna externas
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 29 / 32
Modificadores
Outros modificadores:
final atributo, m´etodo ou classe:
Atributo: seu valor n˜ao pode ser mudado (´e constante)
M´etodo: n˜ao pode ser sobrescrito
Classe: a classe n˜ao aceita subclasses
static atributo ou m´etodo: c´opia ´unica na
mem´oria
Se usados em classes internas, as torna externas
Indica quais atributos/m´etodos devem ser considerados
pertencentes `a classe e n˜ao espec´ıficos a cada objeto
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 29 / 32
Modificadores
Outros modificadores:
abstract: veremos mais adiante
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 30 / 32
Modificadores
Outros modificadores:
abstract: veremos mais adiante
native, strictfp, synchronized, trasient,
volatile: n˜ao veremos
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 30 / 32
Modificadores
Outros modificadores:
abstract: veremos mais adiante
native, strictfp, synchronized, trasient,
volatile: n˜ao veremos
Podemos tamb´em misturar alguns. Ex:
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 30 / 32
Modificadores
Outros modificadores:
abstract: veremos mais adiante
native, strictfp, synchronized, trasient,
volatile: n˜ao veremos
Podemos tamb´em misturar alguns. Ex:
public static final
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 30 / 32
Modificadores
Outros modificadores:
abstract: veremos mais adiante
native, strictfp, synchronized, trasient,
volatile: n˜ao veremos
Podemos tamb´em misturar alguns. Ex:
public static final
static abstract final
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 30 / 32
Modificadores
Outros modificadores:
abstract: veremos mais adiante
native, strictfp, synchronized, trasient,
volatile: n˜ao veremos
Podemos tamb´em misturar alguns. Ex:
public static final
static abstract final
etc.
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 30 / 32
Construtores Private
Poss´ıvel uso: Singleton
public class Singleton {
private static Singleton
copia = new Singleton();
private Singleton() {}
public static Singleton copia()
{
return copia;
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 31 / 32
Construtores Private
Poss´ıvel uso: Singleton
Garante a existˆencia de
c´opia ´unica do objeto
public class Singleton {
private static Singleton
copia = new Singleton();
private Singleton() {}
public static Singleton copia()
{
return copia;
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 31 / 32
Construtores Private
Poss´ıvel uso: Singleton
Garante a existˆencia de
c´opia ´unica do objeto
Ningu´em consegue criar
objeto da classe
public class Singleton {
private static Singleton
copia = new Singleton();
private Singleton() {}
public static Singleton copia()
{
return copia;
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 31 / 32
Construtores Private
Poss´ıvel uso: Singleton
Garante a existˆencia de
c´opia ´unica do objeto
Ningu´em consegue criar
objeto da classe
No m´aximo, pedir a
referˆencia `a ´unica c´opia
existente
public class Singleton {
private static Singleton
copia = new Singleton();
private Singleton() {}
public static Singleton copia()
{
return copia;
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 31 / 32
Videoaula
N˜ao h´a.
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 32 / 32

Mais conteúdo relacionado

Mais de Norton Trevisan Roman

Mais de Norton Trevisan Roman (20)

(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24
 
(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23
 
(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22
 
(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21
 
(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20
 
(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19
 
(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18
 
(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17
 
(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16
 
(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15
 
(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14
 
(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13
 
(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12
 
(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11
 
(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10
 
(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09
 
(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08
 
(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07
 
(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06
 
(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05
 

Último

O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
azulassessoria9
 
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf
marlene54545
 
Sistema articular aula 4 (1).pdf articulações e junturas
Sistema articular aula 4 (1).pdf articulações e junturasSistema articular aula 4 (1).pdf articulações e junturas
Sistema articular aula 4 (1).pdf articulações e junturas
rfmbrandao
 
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
azulassessoria9
 
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
PatriciaCaetano18
 
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
azulassessoria9
 

Último (20)

6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx
 
Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!
Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!
Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!
 
Cartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptxCartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptx
 
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
 
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
 
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf
 
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM  POLÍGON...Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM  POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...
 
aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.ppt
 
Sistema articular aula 4 (1).pdf articulações e junturas
Sistema articular aula 4 (1).pdf articulações e junturasSistema articular aula 4 (1).pdf articulações e junturas
Sistema articular aula 4 (1).pdf articulações e junturas
 
aprendizagem significatica, teórico David Ausubel
aprendizagem significatica, teórico David Ausubelaprendizagem significatica, teórico David Ausubel
aprendizagem significatica, teórico David Ausubel
 
3 2 - termos-integrantes-da-oracao-.pptx
3 2 - termos-integrantes-da-oracao-.pptx3 2 - termos-integrantes-da-oracao-.pptx
3 2 - termos-integrantes-da-oracao-.pptx
 
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdfApresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
 
Quiz | Dia da Europa 2024 (comemoração)
Quiz | Dia da Europa 2024  (comemoração)Quiz | Dia da Europa 2024  (comemoração)
Quiz | Dia da Europa 2024 (comemoração)
 
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
 
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
 
Sopa de letras | Dia da Europa 2024 (nível 1)
Sopa de letras | Dia da Europa 2024 (nível 1)Sopa de letras | Dia da Europa 2024 (nível 1)
Sopa de letras | Dia da Europa 2024 (nível 1)
 
Pesquisa Ação René Barbier Livro acadêmico
Pesquisa Ação René Barbier Livro  acadêmicoPesquisa Ação René Barbier Livro  acadêmico
Pesquisa Ação René Barbier Livro acadêmico
 
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
 
Sistema de Bibliotecas UCS - Cantos do fim do século
Sistema de Bibliotecas UCS  - Cantos do fim do séculoSistema de Bibliotecas UCS  - Cantos do fim do século
Sistema de Bibliotecas UCS - Cantos do fim do século
 
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxSlides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
 

(ACH2001) Introdução à Programação - Aula 20

  • 1. Aula 20 – Especificadores de acesso e Pacotes Norton Trevisan Roman 12 de maio de 2020 Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 1 / 32
  • 2. Private class Casa { private double valorM2 = 1500; Casa() {} Casa(double valorM2) { this.valorM2 = valorM2; } ... } O que acontece quando compilamos CasaQuad? class CasaQuad extends Casa { double lateral = 10; CasaQuad() {} CasaQuad(double valorM2) { super(valorM2); } CasaQuad(double lateral,double valorM2) { super(valorM2); this.lateral = lateral; } double area() { return(this.lateral>=0 ? this.lateral*this.lateral : -1); } } Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 2 / 32
  • 3. Private class Casa { private double valorM2 = 1500; Casa() {} Casa(double valorM2) { this.valorM2 = valorM2; } ... } O que acontece quando compilamos CasaQuad? Linha de Comando $ javac CasaQuad.java class CasaQuad extends Casa { double lateral = 10; CasaQuad() {} CasaQuad(double valorM2) { super(valorM2); } CasaQuad(double lateral,double valorM2) { super(valorM2); this.lateral = lateral; } double area() { return(this.lateral>=0 ? this.lateral*this.lateral : -1); } } Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 2 / 32
  • 4. Private class Casa { private double valorM2 = 1500; Casa() {} Casa(double valorM2) { this.valorM2 = valorM2; } ... } O que acontece quando compilamos CasaQuad? Linha de Comando $ javac CasaQuad.java Compila. Nada impede. class CasaQuad extends Casa { double lateral = 10; CasaQuad() {} CasaQuad(double valorM2) { super(valorM2); } CasaQuad(double lateral,double valorM2) { super(valorM2); this.lateral = lateral; } double area() { return(this.lateral>=0 ? this.lateral*this.lateral : -1); } } Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 2 / 32
  • 5. Private class CasaRet extends Casa { double cquarto = 10; double lateral = 10; CasaRet() {} CasaRet(double valorM2) { super(valorM2); } CasaRet(double lateral, double cquarto) { this.lateral = lateral; this.cquarto = cquarto; } CasaRet(double lateral, double cquarto, double valorM2) { this(lateral, cquarto); this.valorM2 = valorM2; } double area() { double areat=-1; if (this.lateral>=0 && this.cquarto>=0) { areat = this.lateral*this.lateral; areat += this.cquarto*this.lateral; } return(areat); } } E quando compilamos CasaRet? Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 3 / 32
  • 6. Private class CasaRet extends Casa { double cquarto = 10; double lateral = 10; CasaRet() {} CasaRet(double valorM2) { super(valorM2); } CasaRet(double lateral, double cquarto) { this.lateral = lateral; this.cquarto = cquarto; } CasaRet(double lateral, double cquarto, double valorM2) { this(lateral, cquarto); this.valorM2 = valorM2; } double area() { double areat=-1; if (this.lateral>=0 && this.cquarto>=0) { areat = this.lateral*this.lateral; areat += this.cquarto*this.lateral; } return(areat); } } E quando compilamos CasaRet? Linha de Comando $ javac CasaRet.java CasaRet.java:35: valorM2 has private access in Casa this.valorM2 = valorM2; ^ 1 error Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 3 / 32
  • 7. Private class CasaRet extends Casa { double cquarto = 10; double lateral = 10; CasaRet() {} CasaRet(double valorM2) { super(valorM2); } CasaRet(double lateral, double cquarto) { this.lateral = lateral; this.cquarto = cquarto; } CasaRet(double lateral, double cquarto, double valorM2) { this(lateral, cquarto); this.valorM2 = valorM2; } double area() { double areat=-1; if (this.lateral>=0 && this.cquarto>=0) { areat = this.lateral*this.lateral; areat += this.cquarto*this.lateral; } return(areat); } } N˜ao temos acesso ao valor do m2 Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 4 / 32
  • 8. Private class CasaRet extends Casa { double cquarto = 10; double lateral = 10; CasaRet() {} CasaRet(double valorM2) { super(valorM2); } CasaRet(double lateral, double cquarto) { this.lateral = lateral; this.cquarto = cquarto; } CasaRet(double lateral, double cquarto, double valorM2) { this(lateral, cquarto); this.valorM2 = valorM2; } double area() { double areat=-1; if (this.lateral>=0 && this.cquarto>=0) { areat = this.lateral*this.lateral; areat += this.cquarto*this.lateral; } return(areat); } } N˜ao temos acesso ao valor do m2 Muito embora ele esteja na mem´oria do objeto! Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 4 / 32
  • 9. Private class CasaRet extends Casa { double cquarto = 10; double lateral = 10; CasaRet() {} CasaRet(double valorM2) { super(valorM2); } CasaRet(double lateral, double cquarto) { this.lateral = lateral; this.cquarto = cquarto; } CasaRet(double lateral, double cquarto, double valorM2) { this(lateral, cquarto); this.valorM2 = valorM2; } double area() { double areat=-1; if (this.lateral>=0 && this.cquarto>=0) { areat = this.lateral*this.lateral; areat += this.cquarto*this.lateral; } return(areat); } } Que fazer? Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 5 / 32
  • 10. Private class CasaRet extends Casa { double cquarto = 10; double lateral = 10; CasaRet() {} CasaRet(double valorM2) { super(valorM2); } CasaRet(double lateral, double cquarto) { this.lateral = lateral; this.cquarto = cquarto; } CasaRet(double lateral, double cquarto, double valorM2) { super(valorM2); this.lateral = lateral; this.cquarto = cquarto; } double area() { double areat=-1; if (this.lateral>=0 && this.cquarto>=0) { areat = this.lateral*this.lateral; areat += this.cquarto*this.lateral; } return(areat); } } Que fazer? Refatorar a classe Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 5 / 32
  • 11. Heran¸ca E n˜ao poder´ıamos ter this e super juntas? Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 6 / 32
  • 12. Heran¸ca E n˜ao poder´ıamos ter this e super juntas? class CasaRet extends Casa { ... CasaRet(double lateral, double cquarto, double valorM2) { super(valorM2); this(lateral,cquarto); } } Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 6 / 32
  • 13. Heran¸ca E n˜ao poder´ıamos ter this e super juntas? class CasaRet extends Casa { ... CasaRet(double lateral, double cquarto, double valorM2) { super(valorM2); this(lateral,cquarto); } } Linha de Comando $ javac CasaRet.java CasaRet.java:35: call to this must be first statement in constructor this(lateral,cquarto); ^ 1 error Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 6 / 32
  • 14. Heran¸ca E n˜ao poder´ıamos ter this e super juntas? class CasaRet extends Casa { ... CasaRet(double lateral, double cquarto, double valorM2) { super(valorM2); this(lateral,cquarto); } } Linha de Comando $ javac CasaRet.java CasaRet.java:35: call to this must be first statement in constructor this(lateral,cquarto); ^ 1 error class CasaRet extends Casa { ... CasaRet(double lateral, double cquarto, double valorM2) { this(lateral,cquarto); super(valorM2); } } Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 6 / 32
  • 15. Heran¸ca E n˜ao poder´ıamos ter this e super juntas? class CasaRet extends Casa { ... CasaRet(double lateral, double cquarto, double valorM2) { super(valorM2); this(lateral,cquarto); } } Linha de Comando $ javac CasaRet.java CasaRet.java:35: call to this must be first statement in constructor this(lateral,cquarto); ^ 1 error class CasaRet extends Casa { ... CasaRet(double lateral, double cquarto, double valorM2) { this(lateral,cquarto); super(valorM2); } } Linha de Comando $ javac CasaRet.java CasaRet.java:35: call to super must be first statement in constructor super(valorM2); ^ 1 error Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 6 / 32
  • 16. Heran¸ca E n˜ao poder´ıamos ter this e super juntas? class CasaRet extends Casa { ... CasaRet(double lateral, double cquarto, double valorM2) { super(valorM2); this(lateral,cquarto); } } Linha de Comando $ javac CasaRet.java CasaRet.java:35: call to this must be first statement in constructor this(lateral,cquarto); ^ 1 error class CasaRet extends Casa { ... CasaRet(double lateral, double cquarto, double valorM2) { this(lateral,cquarto); super(valorM2); } } Linha de Comando $ javac CasaRet.java CasaRet.java:35: call to super must be first statement in constructor super(valorM2); ^ 1 error Como, se ambas devem ser o primeiro comando? Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 6 / 32
  • 17. Heran¸ca E n˜ao poder´ıamos ter this e super juntas? class CasaRet extends Casa { ... CasaRet(double lateral, double cquarto, double valorM2) { super(valorM2); this(lateral,cquarto); } } Linha de Comando $ javac CasaRet.java CasaRet.java:35: call to this must be first statement in constructor this(lateral,cquarto); ^ 1 error class CasaRet extends Casa { ... CasaRet(double lateral, double cquarto, double valorM2) { this(lateral,cquarto); super(valorM2); } } Linha de Comando $ javac CasaRet.java CasaRet.java:35: call to super must be first statement in constructor super(valorM2); ^ 1 error Como, se ambas devem ser o primeiro comando? Teremos que optar Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 6 / 32
  • 18. Especificadores (Modificadores) de Acesso Determinam quem ter´a permiss˜ao para acessar ou modificar os componentes (atributos e m´etodos) das classes. Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 7 / 32
  • 19. Especificadores (Modificadores) de Acesso Determinam quem ter´a permiss˜ao para acessar ou modificar os componentes (atributos e m´etodos) das classes. Private: Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 7 / 32
  • 20. Especificadores (Modificadores) de Acesso Determinam quem ter´a permiss˜ao para acessar ou modificar os componentes (atributos e m´etodos) das classes. Private: private construtor, atributo ou m´etodo: Somente elementos de dentro da classe tˆem acesso Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 7 / 32
  • 21. Especificadores (Modificadores) de Acesso Determinam quem ter´a permiss˜ao para acessar ou modificar os componentes (atributos e m´etodos) das classes. Private: private construtor, atributo ou m´etodo: Somente elementos de dentro da classe tˆem acesso Public: Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 7 / 32
  • 22. Especificadores (Modificadores) de Acesso Determinam quem ter´a permiss˜ao para acessar ou modificar os componentes (atributos e m´etodos) das classes. Private: private construtor, atributo ou m´etodo: Somente elementos de dentro da classe tˆem acesso Public: public classe, construtor, atributo ou m´etodo: Acesso irrestrito Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 7 / 32
  • 23. Especificadores (Modificadores) de Acesso Determinam quem ter´a permiss˜ao para acessar ou modificar os componentes (atributos e m´etodos) das classes. Private: private construtor, atributo ou m´etodo: Somente elementos de dentro da classe tˆem acesso Public: public classe, construtor, atributo ou m´etodo: Acesso irrestrito Protected: Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 7 / 32
  • 24. Especificadores (Modificadores) de Acesso Determinam quem ter´a permiss˜ao para acessar ou modificar os componentes (atributos e m´etodos) das classes. Private: private construtor, atributo ou m´etodo: Somente elementos de dentro da classe tˆem acesso Public: public classe, construtor, atributo ou m´etodo: Acesso irrestrito Protected: protected construtor, atributo ou m´etodo: Somente elementos pertencentes a classes do mesmo pacote, ou subclasse (independente do pacote) tˆem acesso Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 7 / 32
  • 25. Especificadores (Modificadores) de Acesso Determinam quem ter´a permiss˜ao para acessar ou modificar os componentes (atributos e m´etodos) das classes. Private: private construtor, atributo ou m´etodo: Somente elementos de dentro da classe tˆem acesso Public: public classe, construtor, atributo ou m´etodo: Acesso irrestrito Protected: protected construtor, atributo ou m´etodo: Somente elementos pertencentes a classes do mesmo pacote, ou subclasse (independente do pacote) tˆem acesso Nada (“friendly”) Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 7 / 32
  • 26. Especificadores (Modificadores) de Acesso Determinam quem ter´a permiss˜ao para acessar ou modificar os componentes (atributos e m´etodos) das classes. Private: private construtor, atributo ou m´etodo: Somente elementos de dentro da classe tˆem acesso Public: public classe, construtor, atributo ou m´etodo: Acesso irrestrito Protected: protected construtor, atributo ou m´etodo: Somente elementos pertencentes a classes do mesmo pacote, ou subclasse (independente do pacote) tˆem acesso Nada (“friendly”) classe, construtor, atributo ou m´etodo: Somente elementos pertencentes a classes do mesmo pacote tˆem acesso Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 7 / 32
  • 27. Pacotes Pacote? Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 8 / 32
  • 28. Pacotes Pacote? Corresponde ao modo como organizamos os arquivos .java em diferentes diret´orios Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 8 / 32
  • 29. Pacotes Pacote? Corresponde ao modo como organizamos os arquivos .java em diferentes diret´orios ´E o diret´orio Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 8 / 32
  • 30. Pacotes Pacote? Corresponde ao modo como organizamos os arquivos .java em diferentes diret´orios ´E o diret´orio Podem ser declarados explicitamente, com a palavra package Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 8 / 32
  • 31. Pacotes Pacote? Corresponde ao modo como organizamos os arquivos .java em diferentes diret´orios ´E o diret´orio Podem ser declarados explicitamente, com a palavra package ´Util quando temos duas classes com o mesmo nome, mas fun¸c˜oes diferentes. Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 8 / 32
  • 32. Pacotes Pacote? Corresponde ao modo como organizamos os arquivos .java em diferentes diret´orios ´E o diret´orio Podem ser declarados explicitamente, com a palavra package ´Util quando temos duas classes com o mesmo nome, mas fun¸c˜oes diferentes. Ex: normal.Matematica e complexo.Matematica, que tratariam de fun¸c˜oes matem´aticas para n´umeros complexos e os demais Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 8 / 32
  • 33. Pacotes Pacote? Corresponde ao modo como organizamos os arquivos .java em diferentes diret´orios ´E o diret´orio Podem ser declarados explicitamente, com a palavra package ´Util quando temos duas classes com o mesmo nome, mas fun¸c˜oes diferentes. Ex: normal.Matematica e complexo.Matematica, que tratariam de fun¸c˜oes matem´aticas para n´umeros complexos e os demais Nesse caso, a primeira seria normal/Matematica.class e a segunda em complexo/Matematica.class Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 8 / 32
  • 34. Pacotes Que agrupamento (pacotes) podemos fazer em nossas classes? Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 9 / 32
  • 35. Pacotes Que agrupamento (pacotes) podemos fazer em nossas classes? Poder´ıamos separar as coisas relativas `a casa das relativas `a piscina Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 9 / 32
  • 36. Pacotes Que agrupamento (pacotes) podemos fazer em nossas classes? Poder´ıamos separar as coisas relativas `a casa das relativas `a piscina 2 pacotes: casa e piscina Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 9 / 32
  • 37. Pacotes Que agrupamento (pacotes) podemos fazer em nossas classes? Poder´ıamos separar as coisas relativas `a casa das relativas `a piscina 2 pacotes: casa e piscina Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 9 / 32
  • 38. Pacotes Casa.java: package casa; class Casa { ... } Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 10 / 32
  • 39. Pacotes Casa.java: package casa; class Casa { ... } CasaQuad.java: package casa; class CasaQuad extends Casa { .. } Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 10 / 32
  • 40. Pacotes Casa.java: package casa; class Casa { ... } CasaQuad.java: package casa; class CasaQuad extends Casa { .. } CasaRet.java: package casa; class CasaRet extends Casa { ... } Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 10 / 32
  • 41. Pacotes Casa.java: package casa; class Casa { ... } CasaQuad.java: package casa; class CasaQuad extends Casa { .. } CasaRet.java: package casa; class CasaRet extends Casa { ... } AreaPiscina.java: package piscina; class AreaPiscina { ... } Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 10 / 32
  • 42. Pacotes E como compilamos isso? Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 11 / 32
  • 43. Pacotes E como compilamos isso? Do diret´orio pai, onde est˜ao os diret´orios casa e piscina Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 11 / 32
  • 44. Pacotes E como compilamos isso? Do diret´orio pai, onde est˜ao os diret´orios casa e piscina $ javac casa/Casa.java $ javac casa/CasaRet.java $ javac casa/CasaQuad.java $ javac piscina/AreaPiscina.java Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 11 / 32
  • 45. Pacotes E como compilamos isso? Do diret´orio pai, onde est˜ao os diret´orios casa e piscina $ javac casa/Casa.java $ javac casa/CasaRet.java $ javac casa/CasaQuad.java $ javac piscina/AreaPiscina.java E o diret´orio conter´a Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 11 / 32
  • 46. Pacotes E como compilamos isso? Do diret´orio pai, onde est˜ao os diret´orios casa e piscina $ javac casa/Casa.java $ javac casa/CasaRet.java $ javac casa/CasaQuad.java $ javac piscina/AreaPiscina.java E o diret´orio conter´a Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 11 / 32
  • 47. Pacotes E como compilamos isso? Do diret´orio pai, onde est˜ao os diret´orios casa e piscina $ javac casa/Casa.java $ javac casa/CasaRet.java $ javac casa/CasaQuad.java $ javac piscina/AreaPiscina.java E o diret´orio conter´a Note os .class Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 11 / 32
  • 48. Pacotes E o que acontece ao compilarmos Residencia? class Residencia { Casa casa; AreaPiscina piscina; Residencia(Casa casa, AreaPiscina piscina) { this.casa = casa; this.piscina = piscina; } } Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 12 / 32
  • 49. Pacotes E o que acontece ao compilarmos Residencia? class Residencia { Casa casa; AreaPiscina piscina; Residencia(Casa casa, AreaPiscina piscina) { this.casa = casa; this.piscina = piscina; } } Linha de Comando $ javac Residencia.java Residencia.java:6: cannot find symbol symbol : class Casa location: class Residencia Casa casa; ^ Residencia.java:8: cannot find symbol symbol : class AreaPiscina location: class Residencia AreaPiscina piscina; ^ Residencia.java:13: cannot find symbol symbol : class Casa location: class Residencia Residencia(Casa casa, AreaPiscina piscina) { ^ Residencia.java:13: cannot find symbol symbol : class AreaPiscina location: class Residencia Residencia(Casa casa, AreaPiscina piscina) { ^ 4 errors Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 12 / 32
  • 50. Pacotes O compilador n˜ao sabe onde est´a nem Casa nem AreaPiscina Linha de Comando $ javac Residencia.java Residencia.java:6: cannot find symbol symbol : class Casa location: class Residencia Casa casa; ^ Residencia.java:8: cannot find symbol symbol : class AreaPiscina location: class Residencia AreaPiscina piscina; ^ Residencia.java:13: cannot find symbol symbol : class Casa location: class Residencia Residencia(Casa casa, AreaPiscina piscina) { ^ Residencia.java:13: cannot find symbol symbol : class AreaPiscina location: class Residencia Residencia(Casa casa, AreaPiscina piscina) { ^ 4 errors Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 13 / 32
  • 51. Pacotes O compilador n˜ao sabe onde est´a nem Casa nem AreaPiscina Ir´a buscar sempre no mesmo diret´orio do arquivo compilado. Linha de Comando $ javac Residencia.java Residencia.java:6: cannot find symbol symbol : class Casa location: class Residencia Casa casa; ^ Residencia.java:8: cannot find symbol symbol : class AreaPiscina location: class Residencia AreaPiscina piscina; ^ Residencia.java:13: cannot find symbol symbol : class Casa location: class Residencia Residencia(Casa casa, AreaPiscina piscina) { ^ Residencia.java:13: cannot find symbol symbol : class AreaPiscina location: class Residencia Residencia(Casa casa, AreaPiscina piscina) { ^ 4 errors Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 13 / 32
  • 52. Pacotes O compilador n˜ao sabe onde est´a nem Casa nem AreaPiscina Ir´a buscar sempre no mesmo diret´orio do arquivo compilado. Se n˜ao estiver l´a, dar´a erro Linha de Comando $ javac Residencia.java Residencia.java:6: cannot find symbol symbol : class Casa location: class Residencia Casa casa; ^ Residencia.java:8: cannot find symbol symbol : class AreaPiscina location: class Residencia AreaPiscina piscina; ^ Residencia.java:13: cannot find symbol symbol : class Casa location: class Residencia Residencia(Casa casa, AreaPiscina piscina) { ^ Residencia.java:13: cannot find symbol symbol : class AreaPiscina location: class Residencia Residencia(Casa casa, AreaPiscina piscina) { ^ 4 errors Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 13 / 32
  • 53. Pacotes E como dizemos a ele onde est´a? Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 14 / 32
  • 54. Pacotes E como dizemos a ele onde est´a? Novamente, com import Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 14 / 32
  • 55. Pacotes E como dizemos a ele onde est´a? Novamente, com import import casa.Casa; import piscina.AreaPiscina; class Residencia { Casa casa; AreaPiscina piscina; Residencia(Casa casa, AreaPiscina piscina) { this.casa = casa; this.piscina = piscina; } } Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 14 / 32
  • 56. Pacotes E como dizemos a ele onde est´a? Novamente, com import import casa.Casa; import piscina.AreaPiscina; class Residencia { Casa casa; AreaPiscina piscina; Residencia(Casa casa, AreaPiscina piscina) { this.casa = casa; this.piscina = piscina; } } Linha de Comando $ javac Residencia.java Residencia.java:1: casa.Casa is not public in casa; cannot be accessed from outside package import casa.Casa; ^ Residencia.java:2: piscina.AreaPiscina is not public in piscina; cannot be accessed from outside package import piscina.AreaPiscina; ^ ... 6 errors Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 14 / 32
  • 57. Pacotes Se n˜ao especificamos o modificador, ele ´e “friendly” Linha de Comando $ javac Residencia.java Residencia.java:1: casa.Casa is not public in casa; cannot be accessed from outside package import casa.Casa; ^ Residencia.java:2: piscina.AreaPiscina is not public in piscina; cannot be accessed from outside package import piscina.AreaPiscina; ^ ... 6 errors Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 15 / 32
  • 58. Pacotes Se n˜ao especificamos o modificador, ele ´e “friendly” Acesso somente interno ao pacote Linha de Comando $ javac Residencia.java Residencia.java:1: casa.Casa is not public in casa; cannot be accessed from outside package import casa.Casa; ^ Residencia.java:2: piscina.AreaPiscina is not public in piscina; cannot be accessed from outside package import piscina.AreaPiscina; ^ ... 6 errors Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 15 / 32
  • 59. Pacotes Se n˜ao especificamos o modificador, ele ´e “friendly” Acesso somente interno ao pacote Que fazer? Linha de Comando $ javac Residencia.java Residencia.java:1: casa.Casa is not public in casa; cannot be accessed from outside package import casa.Casa; ^ Residencia.java:2: piscina.AreaPiscina is not public in piscina; cannot be accessed from outside package import piscina.AreaPiscina; ^ ... 6 errors Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 15 / 32
  • 60. Pacotes Tornar p´ublico o acesso Linha de Comando $ javac Residencia.java Residencia.java:1: casa.Casa is not public in casa; cannot be accessed from outside package import casa.Casa; ^ Residencia.java:2: piscina.AreaPiscina is not public in piscina; cannot be accessed from outside package import piscina.AreaPiscina; ^ ... 6 errors Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 16 / 32
  • 61. Pacotes Tornar p´ublico o acesso package piscina; public class AreaPiscina {... } Linha de Comando $ javac Residencia.java Residencia.java:1: casa.Casa is not public in casa; cannot be accessed from outside package import casa.Casa; ^ Residencia.java:2: piscina.AreaPiscina is not public in piscina; cannot be accessed from outside package import piscina.AreaPiscina; ^ ... 6 errors Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 16 / 32
  • 62. Pacotes Tornar p´ublico o acesso package piscina; public class AreaPiscina {... } e package casa; public class Casa {... } Linha de Comando $ javac Residencia.java Residencia.java:1: casa.Casa is not public in casa; cannot be accessed from outside package import casa.Casa; ^ Residencia.java:2: piscina.AreaPiscina is not public in piscina; cannot be accessed from outside package import piscina.AreaPiscina; ^ ... 6 errors Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 16 / 32
  • 63. Pacotes O mesmo deve ser feito com projeto: Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 17 / 32
  • 64. Pacotes O mesmo deve ser feito com projeto: import java.util.Scanner; import casa.CasaRet; import casa.CasaQuad; import casa.Casa; import piscina.AreaPiscina; class Projeto { Residencia[] condominio; int ultimo = -1; ... public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); Residencia r1 = new Residencia(cr, null); Residencia r2 = new Residencia(cq, null); System.out.println("´Area (r1): "+ r1.casa.area()); } } Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 17 / 32
  • 65. Pacotes O mesmo deve ser feito com projeto: Contudo, para que o main possa criar os objetos, teremos tamb´em que tornar p´ublicas import java.util.Scanner; import casa.CasaRet; import casa.CasaQuad; import casa.Casa; import piscina.AreaPiscina; class Projeto { Residencia[] condominio; int ultimo = -1; ... public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); Residencia r1 = new Residencia(cr, null); Residencia r2 = new Residencia(cq, null); System.out.println("´Area (r1): "+ r1.casa.area()); } } Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 17 / 32
  • 66. Pacotes O mesmo deve ser feito com projeto: Contudo, para que o main possa criar os objetos, teremos tamb´em que tornar p´ublicas CasaRet import java.util.Scanner; import casa.CasaRet; import casa.CasaQuad; import casa.Casa; import piscina.AreaPiscina; class Projeto { Residencia[] condominio; int ultimo = -1; ... public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); Residencia r1 = new Residencia(cr, null); Residencia r2 = new Residencia(cq, null); System.out.println("´Area (r1): "+ r1.casa.area()); } } Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 17 / 32
  • 67. Pacotes O mesmo deve ser feito com projeto: Contudo, para que o main possa criar os objetos, teremos tamb´em que tornar p´ublicas CasaRet CasaQuad import java.util.Scanner; import casa.CasaRet; import casa.CasaQuad; import casa.Casa; import piscina.AreaPiscina; class Projeto { Residencia[] condominio; int ultimo = -1; ... public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); Residencia r1 = new Residencia(cr, null); Residencia r2 = new Residencia(cq, null); System.out.println("´Area (r1): "+ r1.casa.area()); } } Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 17 / 32
  • 68. Pacotes Bem como import java.util.Scanner; import casa.CasaRet; import casa.CasaQuad; import casa.Casa; import piscina.AreaPiscina; class Projeto { Residencia[] condominio; int ultimo = -1; ... public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); Residencia r1 = new Residencia(cr, null); Residencia r2 = new Residencia(cq, null); System.out.println("´Area (r1): "+ r1.casa.area()); } } Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 18 / 32
  • 69. Pacotes Bem como O construtor CasaRet import java.util.Scanner; import casa.CasaRet; import casa.CasaQuad; import casa.Casa; import piscina.AreaPiscina; class Projeto { Residencia[] condominio; int ultimo = -1; ... public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); Residencia r1 = new Residencia(cr, null); Residencia r2 = new Residencia(cq, null); System.out.println("´Area (r1): "+ r1.casa.area()); } } Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 18 / 32
  • 70. Pacotes Bem como O construtor CasaRet O construtor CasaQuad import java.util.Scanner; import casa.CasaRet; import casa.CasaQuad; import casa.Casa; import piscina.AreaPiscina; class Projeto { Residencia[] condominio; int ultimo = -1; ... public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); Residencia r1 = new Residencia(cr, null); Residencia r2 = new Residencia(cq, null); System.out.println("´Area (r1): "+ r1.casa.area()); } } Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 18 / 32
  • 71. Pacotes Bem como O construtor CasaRet O construtor CasaQuad Os m´etodos area (nas 3 classes do diret´orio casa) import java.util.Scanner; import casa.CasaRet; import casa.CasaQuad; import casa.Casa; import piscina.AreaPiscina; class Projeto { Residencia[] condominio; int ultimo = -1; ... public static void main(String[] args) { CasaRet cr = new CasaRet(10,5,1320); CasaQuad cq = new CasaQuad(10,1523); Residencia r1 = new Residencia(cr, null); Residencia r2 = new Residencia(cq, null); System.out.println("´Area (r1): "+ r1.casa.area()); } } Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 18 / 32
  • 72. Pacotes Agora temos todo o projeto pronto. Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 19 / 32
  • 73. Pacotes Agora temos todo o projeto pronto. Como fazemos para rodar Projeto? Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 19 / 32
  • 74. Pacotes Agora temos todo o projeto pronto. Como fazemos para rodar Projeto? Linha de Comando $ java Projeto ´Area (r1): 150.0 Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 19 / 32
  • 75. Pacotes Agora temos todo o projeto pronto. Como fazemos para rodar Projeto? Linha de Comando $ java Projeto ´Area (r1): 150.0 Funciona porque estamos no mesmo diret´orio dele Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 19 / 32
  • 76. Pacotes E se quisermos rodar CasaQuad, por exemplo, que est´a dentro do diret´orio casa? Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 20 / 32
  • 77. Pacotes E se quisermos rodar CasaQuad, por exemplo, que est´a dentro do diret´orio casa? java casa.CasaQuad ou Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 20 / 32
  • 78. Pacotes E se quisermos rodar CasaQuad, por exemplo, que est´a dentro do diret´orio casa? java casa.CasaQuad ou java casa/CasaQuad Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 20 / 32
  • 79. Pacotes E se quisermos rodar CasaQuad, por exemplo, que est´a dentro do diret´orio casa? java casa.CasaQuad ou java casa/CasaQuad Linha de Comando $ java casa/CasaQuad CasaQuad $ java casa.CasaQuad CasaQuad (em seu main h´a somente um println com o nome da classe) Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 20 / 32
  • 80. Pacotes E se quisermos rodar CasaQuad, por exemplo, que est´a dentro do diret´orio casa? java casa.CasaQuad ou java casa/CasaQuad Repare que ´e / e n˜ao Linha de Comando $ java casa/CasaQuad CasaQuad $ java casa.CasaQuad CasaQuad (em seu main h´a somente um println com o nome da classe) Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 20 / 32
  • 81. Pacotes Finalmente, e se a classe estiver em um subdiret´orio dentro de um subdiret´orio? Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 21 / 32
  • 82. Pacotes Finalmente, e se a classe estiver em um subdiret´orio dentro de um subdiret´orio? Colocamos todo o caminho na declara¸c˜ao package Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 21 / 32
  • 83. Pacotes Finalmente, e se a classe estiver em um subdiret´orio dentro de um subdiret´orio? Colocamos todo o caminho na declara¸c˜ao package package subdir1.subdir2; public class X { ... } Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 21 / 32
  • 84. Pacotes Finalmente, e se a classe estiver em um subdiret´orio dentro de um subdiret´orio? Colocamos todo o caminho na declara¸c˜ao package package subdir1.subdir2; public class X { ... } Todo o caminho a partir da raiz do projeto → onde est´a a classe principal e a partir de onde todas ser˜ao compiladas. Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 21 / 32
  • 85. Pacotes E para compilar? Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 22 / 32
  • 86. Pacotes E para compilar? Linha de Comando $ javac subdir1/subdir2/X.java Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 22 / 32
  • 87. Pacotes E para compilar? Linha de Comando $ javac subdir1/subdir2/X.java E para rodar? Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 22 / 32
  • 88. Pacotes E para compilar? Linha de Comando $ javac subdir1/subdir2/X.java E para rodar? Linha de Comando $ java subdir1/subdir2/X $ java subdir1.subdir2.X Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 22 / 32
  • 89. Pacotes Repare que Java sempre pressup˜oe uma hierarquia de pacotes package subdir1.subdir2; public class X { .... } Linha de Comando $ javac subdir1/subdir2/X.java Linha de Comando $ java subdir1/subdir2/X $ java subdir1.subdir2.X Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 23 / 32
  • 90. Pacotes Repare que Java sempre pressup˜oe uma hierarquia de pacotes Tudo deve ser planejado de modo que haja uma raiz package subdir1.subdir2; public class X { .... } Linha de Comando $ javac subdir1/subdir2/X.java Linha de Comando $ java subdir1/subdir2/X $ java subdir1.subdir2.X Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 23 / 32
  • 91. Pacotes Repare que Java sempre pressup˜oe uma hierarquia de pacotes Tudo deve ser planejado de modo que haja uma raiz Tudo deve ser compilado/rodado a partir dessa raiz package subdir1.subdir2; public class X { .... } Linha de Comando $ javac subdir1/subdir2/X.java Linha de Comando $ java subdir1/subdir2/X $ java subdir1.subdir2.X Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 23 / 32
  • 92. Pacotes Repare que Java sempre pressup˜oe uma hierarquia de pacotes Tudo deve ser planejado de modo que haja uma raiz Tudo deve ser compilado/rodado a partir dessa raiz N˜ao h´a um ../ package subdir1.subdir2; public class X { .... } Linha de Comando $ javac subdir1/subdir2/X.java Linha de Comando $ java subdir1/subdir2/X $ java subdir1.subdir2.X Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 23 / 32
  • 93. Getters e Setters E se desej´assemos permitir o acesso indireto a um atributo privado, a partir de outra classe? public class X { private int y = 2; } public class Y { public void f() { X obj = new X(); } } Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 24 / 32
  • 94. Getters e Setters E se desej´assemos permitir o acesso indireto a um atributo privado, a partir de outra classe? N˜ao poder´ıamos fazer: public class X { private int y = 2; } public class Y { public void f() { X obj = new X(); System.out.println(obj.y); } } Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 24 / 32
  • 95. Getters e Setters E se desej´assemos permitir o acesso indireto a um atributo privado, a partir de outra classe? N˜ao poder´ıamos fazer: Que fazer? public class X { private int y = 2; } public class Y { public void f() { X obj = new X(); System.out.println(obj.y); } } Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 24 / 32
  • 96. Getters e Setters E se desej´assemos permitir o acesso indireto a um atributo privado, a partir de outra classe? N˜ao poder´ıamos fazer: Que fazer? Dar acesso a ele via um m´etodo p´ublico: um getter public class X { private int y = 2; public int getY() { return(y); } } public class Y { public void f() { X obj = new X(); System.out.println(obj.y); } } Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 24 / 32
  • 97. Getters e Setters E se desej´assemos permitir o acesso indireto a um atributo privado, a partir de outra classe? N˜ao poder´ıamos fazer: Que fazer? Dar acesso a ele via um m´etodo p´ublico: um getter E ent˜ao fazer uma chamada a esse m´etodo public class X { private int y = 2; public int getY() { return(y); } } public class Y { public void f() { X obj = new X(); System.out.println(obj.getY()); } } Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 24 / 32
  • 98. Getters e Setters Da mesma forma, seu valor pode ser mudado por outro m´etodo p´ublico public class X { private int y = 2; public int getY() { return(y); } public void setY(int v) { y = v; } } public class Y { public void f() { X obj = new X(); System.out.println(obj.getY()); } } Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 25 / 32
  • 99. Getters e Setters Da mesma forma, seu valor pode ser mudado por outro m´etodo p´ublico Um setter public class X { private int y = 2; public int getY() { return(y); } public void setY(int v) { y = v; } } public class Y { public void f() { X obj = new X(); System.out.println(obj.getY()); } } Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 25 / 32
  • 100. Getters e Setters Da mesma forma, seu valor pode ser mudado por outro m´etodo p´ublico Um setter Usado da mesma forma public class X { private int y = 2; public int getY() { return(y); } public void setY(int v) { y = v; } } public class Y { public void f() { X obj = new X(); System.out.println(obj.getY()); obj.setY(3); } } Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 25 / 32
  • 101. Getters e Setters Poss´ıveis usos: public class X { private int y = 2; public int getY() { return(y); } public void setY(int v) { y = v; } } public class Y { public void f() { X obj = new X(); System.out.println(obj.getY()); obj.setY(3); } } Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 26 / 32
  • 102. Getters e Setters Poss´ıveis usos: Permitir acesso apenas para escrita (remove-se o getter) public class X { private int y = 2; public int getY() { return(y); } public void setY(int v) { y = v; } } public class Y { public void f() { X obj = new X(); System.out.println(obj.getY()); obj.setY(3); } } Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 26 / 32
  • 103. Getters e Setters Poss´ıveis usos: Permitir acesso apenas para escrita (remove-se o getter) Permitir acesso apenas para leitura (remove-se o setter) public class X { private int y = 2; public int getY() { return(y); } public void setY(int v) { y = v; } } public class Y { public void f() { X obj = new X(); System.out.println(obj.getY()); obj.setY(3); } } Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 26 / 32
  • 104. Getters e Setters Poss´ıveis usos: Permitir acesso apenas para escrita (remove-se o getter) Permitir acesso apenas para leitura (remove-se o setter) Testar parˆametro antes de abastecer atributo (dentro do setter) public class X { private int y = 2; public int getY() { return(y); } public void setY(int v) { y = v; } } public class Y { public void f() { X obj = new X(); System.out.println(obj.getY()); obj.setY(3); } } Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 26 / 32
  • 105. Getters e Setters Poss´ıveis usos: Mudar o formato de um atributo antes de retornar (dentro do getter) public class X { private int y = 2; public int getY() { return(y); } public void setY(int v) { y = v; } } public class Y { public void f() { X obj = new X(); System.out.println(obj.getY()); obj.setY(3); } } Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 27 / 32
  • 106. Getters e Setters Poss´ıveis usos: Mudar o formato de um atributo antes de retornar (dentro do getter) Ex: Um double 323 que vira o String “R$ 323,00” public class X { private int y = 2; public int getY() { return(y); } public void setY(int v) { y = v; } } public class Y { public void f() { X obj = new X(); System.out.println(obj.getY()); obj.setY(3); } } Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 27 / 32
  • 107. Modificadores Quanto ao acesso: Modificador Mesma Mesmo Subclasse Outros Classe Pacote Pacotes public protected nada private Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
  • 108. Modificadores Quanto ao acesso: Modificador Mesma Mesmo Subclasse Outros Classe Pacote Pacotes public S protected nada private Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
  • 109. Modificadores Quanto ao acesso: Modificador Mesma Mesmo Subclasse Outros Classe Pacote Pacotes public S S protected nada private Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
  • 110. Modificadores Quanto ao acesso: Modificador Mesma Mesmo Subclasse Outros Classe Pacote Pacotes public S S S protected nada private Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
  • 111. Modificadores Quanto ao acesso: Modificador Mesma Mesmo Subclasse Outros Classe Pacote Pacotes public S S S S protected nada private Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
  • 112. Modificadores Quanto ao acesso: Modificador Mesma Mesmo Subclasse Outros Classe Pacote Pacotes public S S S S protected S nada private Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
  • 113. Modificadores Quanto ao acesso: Modificador Mesma Mesmo Subclasse Outros Classe Pacote Pacotes public S S S S protected S S nada private Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
  • 114. Modificadores Quanto ao acesso: Modificador Mesma Mesmo Subclasse Outros Classe Pacote Pacotes public S S S S protected S S S nada private Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
  • 115. Modificadores Quanto ao acesso: Modificador Mesma Mesmo Subclasse Outros Classe Pacote Pacotes public S S S S protected S S S N nada private Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
  • 116. Modificadores Quanto ao acesso: Modificador Mesma Mesmo Subclasse Outros Classe Pacote Pacotes public S S S S protected S S S N nada S private Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
  • 117. Modificadores Quanto ao acesso: Modificador Mesma Mesmo Subclasse Outros Classe Pacote Pacotes public S S S S protected S S S N nada S S private Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
  • 118. Modificadores Quanto ao acesso: Modificador Mesma Mesmo Subclasse Outros Classe Pacote Pacotes public S S S S protected S S S N nada S S N private Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
  • 119. Modificadores Quanto ao acesso: Modificador Mesma Mesmo Subclasse Outros Classe Pacote Pacotes public S S S S protected S S S N nada S S N N private Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
  • 120. Modificadores Quanto ao acesso: Modificador Mesma Mesmo Subclasse Outros Classe Pacote Pacotes public S S S S protected S S S N nada S S N N private S Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
  • 121. Modificadores Quanto ao acesso: Modificador Mesma Mesmo Subclasse Outros Classe Pacote Pacotes public S S S S protected S S S N nada S S N N private S N Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
  • 122. Modificadores Quanto ao acesso: Modificador Mesma Mesmo Subclasse Outros Classe Pacote Pacotes public S S S S protected S S S N nada S S N N private S N N Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
  • 123. Modificadores Quanto ao acesso: Modificador Mesma Mesmo Subclasse Outros Classe Pacote Pacotes public S S S S protected S S S N nada S S N N private S N N N Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
  • 124. Modificadores Outros modificadores: Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 29 / 32
  • 125. Modificadores Outros modificadores: final atributo, m´etodo ou classe: Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 29 / 32
  • 126. Modificadores Outros modificadores: final atributo, m´etodo ou classe: Atributo: seu valor n˜ao pode ser mudado (´e constante) Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 29 / 32
  • 127. Modificadores Outros modificadores: final atributo, m´etodo ou classe: Atributo: seu valor n˜ao pode ser mudado (´e constante) M´etodo: n˜ao pode ser sobrescrito Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 29 / 32
  • 128. Modificadores Outros modificadores: final atributo, m´etodo ou classe: Atributo: seu valor n˜ao pode ser mudado (´e constante) M´etodo: n˜ao pode ser sobrescrito Classe: a classe n˜ao aceita subclasses Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 29 / 32
  • 129. Modificadores Outros modificadores: final atributo, m´etodo ou classe: Atributo: seu valor n˜ao pode ser mudado (´e constante) M´etodo: n˜ao pode ser sobrescrito Classe: a classe n˜ao aceita subclasses static atributo ou m´etodo: c´opia ´unica na mem´oria Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 29 / 32
  • 130. Modificadores Outros modificadores: final atributo, m´etodo ou classe: Atributo: seu valor n˜ao pode ser mudado (´e constante) M´etodo: n˜ao pode ser sobrescrito Classe: a classe n˜ao aceita subclasses static atributo ou m´etodo: c´opia ´unica na mem´oria Se usados em classes internas, as torna externas Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 29 / 32
  • 131. Modificadores Outros modificadores: final atributo, m´etodo ou classe: Atributo: seu valor n˜ao pode ser mudado (´e constante) M´etodo: n˜ao pode ser sobrescrito Classe: a classe n˜ao aceita subclasses static atributo ou m´etodo: c´opia ´unica na mem´oria Se usados em classes internas, as torna externas Indica quais atributos/m´etodos devem ser considerados pertencentes `a classe e n˜ao espec´ıficos a cada objeto Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 29 / 32
  • 132. Modificadores Outros modificadores: abstract: veremos mais adiante Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 30 / 32
  • 133. Modificadores Outros modificadores: abstract: veremos mais adiante native, strictfp, synchronized, trasient, volatile: n˜ao veremos Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 30 / 32
  • 134. Modificadores Outros modificadores: abstract: veremos mais adiante native, strictfp, synchronized, trasient, volatile: n˜ao veremos Podemos tamb´em misturar alguns. Ex: Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 30 / 32
  • 135. Modificadores Outros modificadores: abstract: veremos mais adiante native, strictfp, synchronized, trasient, volatile: n˜ao veremos Podemos tamb´em misturar alguns. Ex: public static final Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 30 / 32
  • 136. Modificadores Outros modificadores: abstract: veremos mais adiante native, strictfp, synchronized, trasient, volatile: n˜ao veremos Podemos tamb´em misturar alguns. Ex: public static final static abstract final Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 30 / 32
  • 137. Modificadores Outros modificadores: abstract: veremos mais adiante native, strictfp, synchronized, trasient, volatile: n˜ao veremos Podemos tamb´em misturar alguns. Ex: public static final static abstract final etc. Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 30 / 32
  • 138. Construtores Private Poss´ıvel uso: Singleton public class Singleton { private static Singleton copia = new Singleton(); private Singleton() {} public static Singleton copia() { return copia; } } Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 31 / 32
  • 139. Construtores Private Poss´ıvel uso: Singleton Garante a existˆencia de c´opia ´unica do objeto public class Singleton { private static Singleton copia = new Singleton(); private Singleton() {} public static Singleton copia() { return copia; } } Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 31 / 32
  • 140. Construtores Private Poss´ıvel uso: Singleton Garante a existˆencia de c´opia ´unica do objeto Ningu´em consegue criar objeto da classe public class Singleton { private static Singleton copia = new Singleton(); private Singleton() {} public static Singleton copia() { return copia; } } Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 31 / 32
  • 141. Construtores Private Poss´ıvel uso: Singleton Garante a existˆencia de c´opia ´unica do objeto Ningu´em consegue criar objeto da classe No m´aximo, pedir a referˆencia `a ´unica c´opia existente public class Singleton { private static Singleton copia = new Singleton(); private Singleton() {} public static Singleton copia() { return copia; } } Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 31 / 32
  • 142. Videoaula N˜ao h´a. Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 32 / 32