SISTEMAS DEINFORMAÇÃO
1
1
1
1SISTEMAS DEINFORMAÇÃO
1
1
1
1SISTEMAS DEINFORMAÇÃO
1
1SISTEMAS DEINFORMAÇÃO
1
1
1
1SISTEMAS DEINFORMAÇÃO
1
1
1
1SISTEMAS DEINFORMAÇÃO
1
1SISTEMAS DEINFORMAÇÃO
1
1
1
SISTEMAS DEINFORMAÇÃO
1
1
11 1
SISTEMAS DEINFORMAÇÃO
1
1
1
1SISTEMAS DEINFORMAÇÃO
1
1SISTEMAS DEINFORMAÇÃO
1
1
1
1SISTEMAS DEINFORMAÇÃO
1
1
1
1SISTEMAS DEINFORMAÇÃO
1
1SISTEMAS DEINFORMAÇÃO
1
1
1
1SISTEMAS DEINFORMAÇÃO
11
Professora:
Fátima L. S. Nunes
Construtores
e
Especificadores de Acesso
SISTEMAS DEINFORMAÇÃO
2
2
2
2SISTEMAS DEINFORMAÇÃO
2
2
2
2SISTEMAS DEINFORMAÇÃO
2
2SISTEMAS DEINFORMAÇÃO
2
2
2
2SISTEMAS DEINFORMAÇÃO
2
2
2
2SISTEMAS DEINFORMAÇÃO
2
2SISTEMAS DEINFORMAÇÃO
2
2
2
SISTEMAS DEINFORMAÇÃO
2
2
22 2
SISTEMAS DEINFORMAÇÃO
2
2
2
2SISTEMAS DEINFORMAÇÃO
2
2SISTEMAS DEINFORMAÇÃO
2
2
2
2SISTEMAS DEINFORMAÇÃO
2
2
2
2SISTEMAS DEINFORMAÇÃO
2
2SISTEMAS DEINFORMAÇÃO
2
2
2
2SISTEMAS DEINFORMAÇÃO
22
Orientação a Objetos• Conceitos do Paradigma de Orientação a Objetos já
vistos:
– Classes – atributos e métodos
– Objetos – instanciação de classes
– Programas com vários objetos
– Variáveis e Memória
• Novos conceitos:
– Construtores
– Especificadores de acesso
SISTEMAS DEINFORMAÇÃO
3
3
3
3SISTEMAS DEINFORMAÇÃO
3
3
3
3SISTEMAS DEINFORMAÇÃO
3
3SISTEMAS DEINFORMAÇÃO
3
3
3
3SISTEMAS DEINFORMAÇÃO
3
3
3
3SISTEMAS DEINFORMAÇÃO
3
3SISTEMAS DEINFORMAÇÃO
3
3
3
SISTEMAS DEINFORMAÇÃO
3
3
33 3
SISTEMAS DEINFORMAÇÃO
3
3
3
3SISTEMAS DEINFORMAÇÃO
3
3SISTEMAS DEINFORMAÇÃO
3
3
3
3SISTEMAS DEINFORMAÇÃO
3
3
3
3SISTEMAS DEINFORMAÇÃO
3
3SISTEMAS DEINFORMAÇÃO
3
3
3
3SISTEMAS DEINFORMAÇÃO
33
Construtores
SISTEMAS DEINFORMAÇÃO
4
4
4
4SISTEMAS DEINFORMAÇÃO
4
4
4
4SISTEMAS DEINFORMAÇÃO
4
4SISTEMAS DEINFORMAÇÃO
4
4
4
4SISTEMAS DEINFORMAÇÃO
4
4
4
4SISTEMAS DEINFORMAÇÃO
4
4SISTEMAS DEINFORMAÇÃO
4
4
4
SISTEMAS DEINFORMAÇÃO
4
4
44 4
SISTEMAS DEINFORMAÇÃO
4
4
4
4SISTEMAS DEINFORMAÇÃO
4
4SISTEMAS DEINFORMAÇÃO
4
4
4
4SISTEMAS DEINFORMAÇÃO
4
4
4
4SISTEMAS DEINFORMAÇÃO
4
4SISTEMAS DEINFORMAÇÃO
4
4
4
4SISTEMAS DEINFORMAÇÃO
44
Construtores• O que é um objeto?
SISTEMAS DEINFORMAÇÃO
5
5
5
5SISTEMAS DEINFORMAÇÃO
5
5
5
5SISTEMAS DEINFORMAÇÃO
5
5SISTEMAS DEINFORMAÇÃO
5
5
5
5SISTEMAS DEINFORMAÇÃO
5
5
5
5SISTEMAS DEINFORMAÇÃO
5
5SISTEMAS DEINFORMAÇÃO
5
5
5
SISTEMAS DEINFORMAÇÃO
5
5
55 5
SISTEMAS DEINFORMAÇÃO
5
5
5
5SISTEMAS DEINFORMAÇÃO
5
5SISTEMAS DEINFORMAÇÃO
5
5
5
5SISTEMAS DEINFORMAÇÃO
5
5
5
5SISTEMAS DEINFORMAÇÃO
5
5SISTEMAS DEINFORMAÇÃO
5
5
5
5SISTEMAS DEINFORMAÇÃO
55
Construtores• O que é um objeto?
• Instanciação de uma classe
SISTEMAS DEINFORMAÇÃO
6
6
6
6SISTEMAS DEINFORMAÇÃO
6
6
6
6SISTEMAS DEINFORMAÇÃO
6
6SISTEMAS DEINFORMAÇÃO
6
6
6
6SISTEMAS DEINFORMAÇÃO
6
6
6
6SISTEMAS DEINFORMAÇÃO
6
6SISTEMAS DEINFORMAÇÃO
6
6
6
SISTEMAS DEINFORMAÇÃO
6
6
66 6
SISTEMAS DEINFORMAÇÃO
6
6
6
6SISTEMAS DEINFORMAÇÃO
6
6SISTEMAS DEINFORMAÇÃO
6
6
6
6SISTEMAS DEINFORMAÇÃO
6
6
6
6SISTEMAS DEINFORMAÇÃO
6
6SISTEMAS DEINFORMAÇÃO
6
6
6
6SISTEMAS DEINFORMAÇÃO
66
Construtores• O que é um objeto?
• Instanciação de uma classe
• Diferentes tipos de objetos…
• Para criá-los: ???
SISTEMAS DEINFORMAÇÃO
7
7
7
7SISTEMAS DEINFORMAÇÃO
7
7
7
7SISTEMAS DEINFORMAÇÃO
7
7SISTEMAS DEINFORMAÇÃO
7
7
7
7SISTEMAS DEINFORMAÇÃO
7
7
7
7SISTEMAS DEINFORMAÇÃO
7
7SISTEMAS DEINFORMAÇÃO
7
7
7
SISTEMAS DEINFORMAÇÃO
7
7
77 7
SISTEMAS DEINFORMAÇÃO
7
7
7
7SISTEMAS DEINFORMAÇÃO
7
7SISTEMAS DEINFORMAÇÃO
7
7
7
7SISTEMAS DEINFORMAÇÃO
7
7
7
7SISTEMAS DEINFORMAÇÃO
7
7SISTEMAS DEINFORMAÇÃO
7
7
7
7SISTEMAS DEINFORMAÇÃO
77
Construtores• O que é um objeto?
• Instanciação de uma classe
• Diferentes tipos de objetos…
• Para criá-los:
ClasseDefinida cd = new ClasseDefinida()
Variável cd - referência a um novo objeto da ClasseDefinida
SISTEMAS DEINFORMAÇÃO
8
8
8
8SISTEMAS DEINFORMAÇÃO
8
8
8
8SISTEMAS DEINFORMAÇÃO
8
8SISTEMAS DEINFORMAÇÃO
8
8
8
8SISTEMAS DEINFORMAÇÃO
8
8
8
8SISTEMAS DEINFORMAÇÃO
8
8SISTEMAS DEINFORMAÇÃO
8
8
8
SISTEMAS DEINFORMAÇÃO
8
8
88 8
SISTEMAS DEINFORMAÇÃO
8
8
8
8SISTEMAS DEINFORMAÇÃO
8
8SISTEMAS DEINFORMAÇÃO
8
8
8
8SISTEMAS DEINFORMAÇÃO
8
8
8
8SISTEMAS DEINFORMAÇÃO
8
8SISTEMAS DEINFORMAÇÃO
8
8
8
8SISTEMAS DEINFORMAÇÃO
88
• A classe pode não ter atributos (ex: ConversorDeTemperaturas) – Quando é interessante ter atributos?
• Se a classe tem atributos, escrevemos métodos obtém/altera para cada atributo
• Portanto, após criarmos um objeto, precisamos inicializar seus atributos
SISTEMAS DEINFORMAÇÃO
9
9
9
9SISTEMAS DEINFORMAÇÃO
9
9
9
9SISTEMAS DEINFORMAÇÃO
9
9SISTEMAS DEINFORMAÇÃO
9
9
9
9SISTEMAS DEINFORMAÇÃO
9
9
9
9SISTEMAS DEINFORMAÇÃO
9
9SISTEMAS DEINFORMAÇÃO
9
9
9
SISTEMAS DEINFORMAÇÃO
9
9
99 9
SISTEMAS DEINFORMAÇÃO
9
9
9
9SISTEMAS DEINFORMAÇÃO
9
9SISTEMAS DEINFORMAÇÃO
9
9
9
9SISTEMAS DEINFORMAÇÃO
9
9
9
9SISTEMAS DEINFORMAÇÃO
9
9SISTEMAS DEINFORMAÇÃO
9
9
9
9SISTEMAS DEINFORMAÇÃO
99
• A classe pode não ter atributos (ex: ConversorDeTemperaturas) – Quando é interessante ter atributos?– Quando queremos armazenar valores para uso futuro
• Se a classe tem atributos, escrevemos métodos obtém/altera para cada atributo
• Portanto, após criarmos um objeto, precisamos inicializar seus atributos
SISTEMAS DEINFORMAÇÃO
10
10
10
10SISTEMAS DEINFORMAÇÃO
10
10
10
10SISTEMAS DEINFORMAÇÃO
10
10SISTEMAS DEINFORMAÇÃO
10
10
10
10SISTEMAS DEINFORMAÇÃO
10
10
10
10SISTEMAS DEINFORMAÇÃO
10
10SISTEMAS DEINFORMAÇÃO
10
10
10
SISTEMAS DEINFORMAÇÃO
10
10
1010 10
SISTEMAS DEINFORMAÇÃO
10
10
10
10SISTEMAS DEINFORMAÇÃO
10
10SISTEMAS DEINFORMAÇÃO
10
10
10
10SISTEMAS DEINFORMAÇÃO
10
10
10
10SISTEMAS DEINFORMAÇÃO
10
10SISTEMAS DEINFORMAÇÃO
10
10
10
10SISTEMAS DEINFORMAÇÃO
1010
class ClasseDefinida{
tipo1 _atributo1;...tipoN _atributoN;
void alteraAtributo1 (tipo1 valor1) { _atributo1 = valor1; }
tipo1 obtemAtributo1 () { return _atributo1; }
...
void alteraAtributoN (tipoN valorN) { _atributoN = valorN; }
tipoN obtemAtributoN() { return _atributoN; }}
SISTEMAS DEINFORMAÇÃO
11
11
11
11SISTEMAS DEINFORMAÇÃO
11
11
11
11SISTEMAS DEINFORMAÇÃO
11
11SISTEMAS DEINFORMAÇÃO
11
11
11
11SISTEMAS DEINFORMAÇÃO
11
11
11
11SISTEMAS DEINFORMAÇÃO
11
11SISTEMAS DEINFORMAÇÃO
11
11
11
SISTEMAS DEINFORMAÇÃO
11
11
1111 11
SISTEMAS DEINFORMAÇÃO
11
11
11
11SISTEMAS DEINFORMAÇÃO
11
11SISTEMAS DEINFORMAÇÃO
11
11
11
11SISTEMAS DEINFORMAÇÃO
11
11
11
11SISTEMAS DEINFORMAÇÃO
11
11SISTEMAS DEINFORMAÇÃO
11
11
11
11SISTEMAS DEINFORMAÇÃO
1111
class ClasseDefinida{
tipo1 _atributo1;...tipoN _atributoN;
void alteraAtributo1 (tipo1 valor1) { _atributo1 = valor1; }
tipo1 obtemAtributo1 () { return _atributo1; }
...
void alteraAtributoN (tipoN valorN) { _atributoN = valorN; }
tipoN obtemAtributoN() { return _atributoN; }}
ClasseDefinida cd = new ClasseDefinida();
cd.alteraAtributo1(v1);
...
cd.alteraAtributoN(vn);
SISTEMAS DEINFORMAÇÃO
12
12
12
12SISTEMAS DEINFORMAÇÃO
12
12
12
12SISTEMAS DEINFORMAÇÃO
12
12SISTEMAS DEINFORMAÇÃO
12
12
12
12SISTEMAS DEINFORMAÇÃO
12
12
12
12SISTEMAS DEINFORMAÇÃO
12
12SISTEMAS DEINFORMAÇÃO
12
12
12
SISTEMAS DEINFORMAÇÃO
12
12
1212 12
SISTEMAS DEINFORMAÇÃO
12
12
12
12SISTEMAS DEINFORMAÇÃO
12
12SISTEMAS DEINFORMAÇÃO
12
12
12
12SISTEMAS DEINFORMAÇÃO
12
12
12
12SISTEMAS DEINFORMAÇÃO
12
12SISTEMAS DEINFORMAÇÃO
12
12
12
12SISTEMAS DEINFORMAÇÃO
1212
class ClasseDefinida{
tipo1 _atributo1;...tipoN _atributoN;
void alteraAtributo1 (tipo1 valor1) { _atributo1 = valor1; }
tipo1 obtemAtributo1 () { return _atributo1; }
...
void alteraAtributoN (tipoN valorN) { _atributoN = valorN; }
tipoN obtemAtributoN() { return _atributoN; }}
ClasseDefinida cd = new ClasseDefinida();
cd.alteraAtributo1(v1);
...
cd.alteraAtributoN(vn);
Não precisa ser sempre assim!
Podemos usar
CONSTRUTORES!
SISTEMAS DEINFORMAÇÃO
13
13
13
13SISTEMAS DEINFORMAÇÃO
13
13
13
13SISTEMAS DEINFORMAÇÃO
13
13SISTEMAS DEINFORMAÇÃO
13
13
13
13SISTEMAS DEINFORMAÇÃO
13
13
13
13SISTEMAS DEINFORMAÇÃO
13
13SISTEMAS DEINFORMAÇÃO
13
13
13
SISTEMAS DEINFORMAÇÃO
13
13
1313 13
SISTEMAS DEINFORMAÇÃO
13
13
13
13SISTEMAS DEINFORMAÇÃO
13
13SISTEMAS DEINFORMAÇÃO
13
13
13
13SISTEMAS DEINFORMAÇÃO
13
13
13
13SISTEMAS DEINFORMAÇÃO
13
13SISTEMAS DEINFORMAÇÃO
13
13
13
13SISTEMAS DEINFORMAÇÃO
1313
Construtores• Em Java:
• quando não especificamos como um objeto
será criado, a linguagem fornece um construtor
padrão.
SISTEMAS DEINFORMAÇÃO
14
14
14
14SISTEMAS DEINFORMAÇÃO
14
14
14
14SISTEMAS DEINFORMAÇÃO
14
14SISTEMAS DEINFORMAÇÃO
14
14
14
14SISTEMAS DEINFORMAÇÃO
14
14
14
14SISTEMAS DEINFORMAÇÃO
14
14SISTEMAS DEINFORMAÇÃO
14
14
14
SISTEMAS DEINFORMAÇÃO
14
14
1414 14
SISTEMAS DEINFORMAÇÃO
14
14
14
14SISTEMAS DEINFORMAÇÃO
14
14SISTEMAS DEINFORMAÇÃO
14
14
14
14SISTEMAS DEINFORMAÇÃO
14
14
14
14SISTEMAS DEINFORMAÇÃO
14
14SISTEMAS DEINFORMAÇÃO
14
14
14
14SISTEMAS DEINFORMAÇÃO
1414
Construtores• Em Java:
• quando não especificamos como um objeto
será criado, a linguagem fornece um construtor
padrão.
• Inicializa atributos com...
SISTEMAS DEINFORMAÇÃO
15
15
15
15SISTEMAS DEINFORMAÇÃO
15
15
15
15SISTEMAS DEINFORMAÇÃO
15
15SISTEMAS DEINFORMAÇÃO
15
15
15
15SISTEMAS DEINFORMAÇÃO
15
15
15
15SISTEMAS DEINFORMAÇÃO
15
15SISTEMAS DEINFORMAÇÃO
15
15
15
SISTEMAS DEINFORMAÇÃO
15
15
1515 15
SISTEMAS DEINFORMAÇÃO
15
15
15
15SISTEMAS DEINFORMAÇÃO
15
15SISTEMAS DEINFORMAÇÃO
15
15
15
15SISTEMAS DEINFORMAÇÃO
15
15
15
15SISTEMAS DEINFORMAÇÃO
15
15SISTEMAS DEINFORMAÇÃO
15
15
15
15SISTEMAS DEINFORMAÇÃO
1515
Construtores• Em Java:
• quando não especificamos como um objeto
será criado, a linguagem fornece um construtor
padrão.
• Inicializa atributos com... valores default de
cada tipo
SISTEMAS DEINFORMAÇÃO
16
16
16
16SISTEMAS DEINFORMAÇÃO
16
16
16
16SISTEMAS DEINFORMAÇÃO
16
16SISTEMAS DEINFORMAÇÃO
16
16
16
16SISTEMAS DEINFORMAÇÃO
16
16
16
16SISTEMAS DEINFORMAÇÃO
16
16SISTEMAS DEINFORMAÇÃO
16
16
16
SISTEMAS DEINFORMAÇÃO
16
16
1616 16
SISTEMAS DEINFORMAÇÃO
16
16
16
16SISTEMAS DEINFORMAÇÃO
16
16SISTEMAS DEINFORMAÇÃO
16
16
16
16SISTEMAS DEINFORMAÇÃO
16
16
16
16SISTEMAS DEINFORMAÇÃO
16
16SISTEMAS DEINFORMAÇÃO
16
16
16
16SISTEMAS DEINFORMAÇÃO
1616
Construtoresclass Produto{double _preco;int _codigo;
void imprimeDados() {System.out.println("Preço = " + _preco);System.out.println("Código = " + _codigo);
}
}
Instanciação:
Produto p = new Produto();p.imprimeDados();
SISTEMAS DEINFORMAÇÃO
17
17
17
17SISTEMAS DEINFORMAÇÃO
17
17
17
17SISTEMAS DEINFORMAÇÃO
17
17SISTEMAS DEINFORMAÇÃO
17
17
17
17SISTEMAS DEINFORMAÇÃO
17
17
17
17SISTEMAS DEINFORMAÇÃO
17
17SISTEMAS DEINFORMAÇÃO
17
17
17
SISTEMAS DEINFORMAÇÃO
17
17
1717 17
SISTEMAS DEINFORMAÇÃO
17
17
17
17SISTEMAS DEINFORMAÇÃO
17
17SISTEMAS DEINFORMAÇÃO
17
17
17
17SISTEMAS DEINFORMAÇÃO
17
17
17
17SISTEMAS DEINFORMAÇÃO
17
17SISTEMAS DEINFORMAÇÃO
17
17
17
17SISTEMAS DEINFORMAÇÃO
1717
ConstrutoresInstanciação:
Produto p = new Produto();p.imprimeDados();
Preço = 0Código = 0
class Produto{double _preco;int _codigo;
void imprimeDados() {System.out.println("Preço = " + _preco);System.out.println("Código = " + _codigo);
}
}
SISTEMAS DEINFORMAÇÃO
18
18
18
18SISTEMAS DEINFORMAÇÃO
18
18
18
18SISTEMAS DEINFORMAÇÃO
18
18SISTEMAS DEINFORMAÇÃO
18
18
18
18SISTEMAS DEINFORMAÇÃO
18
18
18
18SISTEMAS DEINFORMAÇÃO
18
18SISTEMAS DEINFORMAÇÃO
18
18
18
SISTEMAS DEINFORMAÇÃO
18
18
1818 18
SISTEMAS DEINFORMAÇÃO
18
18
18
18SISTEMAS DEINFORMAÇÃO
18
18SISTEMAS DEINFORMAÇÃO
18
18
18
18SISTEMAS DEINFORMAÇÃO
18
18
18
18SISTEMAS DEINFORMAÇÃO
18
18SISTEMAS DEINFORMAÇÃO
18
18
18
18SISTEMAS DEINFORMAÇÃO
1818
ConstrutoresInstanciação:
Produto p = new Produto();p.imprimeDados();
Preço = 0Código = 0
Como definir valores prévios para variáveis? Ou como definir valores durante a instanciação objeto ?
class Produto{double _preco;int _codigo;
void imprimeDados() {System.out.println("Preço = " + _preco);System.out.println("Código = " + _codigo);
}
}
SISTEMAS DEINFORMAÇÃO
19
19
19
19SISTEMAS DEINFORMAÇÃO
19
19
19
19SISTEMAS DEINFORMAÇÃO
19
19SISTEMAS DEINFORMAÇÃO
19
19
19
19SISTEMAS DEINFORMAÇÃO
19
19
19
19SISTEMAS DEINFORMAÇÃO
19
19SISTEMAS DEINFORMAÇÃO
19
19
19
SISTEMAS DEINFORMAÇÃO
19
19
1919 19
SISTEMAS DEINFORMAÇÃO
19
19
19
19SISTEMAS DEINFORMAÇÃO
19
19SISTEMAS DEINFORMAÇÃO
19
19
19
19SISTEMAS DEINFORMAÇÃO
19
19
19
19SISTEMAS DEINFORMAÇÃO
19
19SISTEMAS DEINFORMAÇÃO
19
19
19
19SISTEMAS DEINFORMAÇÃO
1919
ConstrutoresComo definir valores prévios
para variáveis? Ou como definir valores durante a instanciação
objeto ?
Conceito de construtor
class Produto{double _preco;int _codigo;
Produto (double preco, int cod) {_preco = preco;_codigo = cod;
}
void imprimeDados() {System.out.println("Preço = " + _preco);System.out.println("Código = " + _codigo);
}
}
SISTEMAS DEINFORMAÇÃO
20
20
20
20SISTEMAS DEINFORMAÇÃO
20
20
20
20SISTEMAS DEINFORMAÇÃO
20
20SISTEMAS DEINFORMAÇÃO
20
20
20
20SISTEMAS DEINFORMAÇÃO
20
20
20
20SISTEMAS DEINFORMAÇÃO
20
20SISTEMAS DEINFORMAÇÃO
20
20
20
SISTEMAS DEINFORMAÇÃO
20
20
2020 20
SISTEMAS DEINFORMAÇÃO
20
20
20
20SISTEMAS DEINFORMAÇÃO
20
20SISTEMAS DEINFORMAÇÃO
20
20
20
20SISTEMAS DEINFORMAÇÃO
20
20
20
20SISTEMAS DEINFORMAÇÃO
20
20SISTEMAS DEINFORMAÇÃO
20
20
20
20SISTEMAS DEINFORMAÇÃO
2020
Construtores
class Produto{double _preco;int _codigo;
Produto (double preco, int cod) {_preco = preco;_codigo = cod;
}
void imprimeDados() {System.out.println("Preço = " + _preco);System.out.println("Código = " + _codigo);
}
}
Instanciação:
Produto prod = new Produto(78.3,50);prod.imprimeDados();
SISTEMAS DEINFORMAÇÃO
21
21
21
21SISTEMAS DEINFORMAÇÃO
21
21
21
21SISTEMAS DEINFORMAÇÃO
21
21SISTEMAS DEINFORMAÇÃO
21
21
21
21SISTEMAS DEINFORMAÇÃO
21
21
21
21SISTEMAS DEINFORMAÇÃO
21
21SISTEMAS DEINFORMAÇÃO
21
21
21
SISTEMAS DEINFORMAÇÃO
21
21
2121 21
SISTEMAS DEINFORMAÇÃO
21
21
21
21SISTEMAS DEINFORMAÇÃO
21
21SISTEMAS DEINFORMAÇÃO
21
21
21
21SISTEMAS DEINFORMAÇÃO
21
21
21
21SISTEMAS DEINFORMAÇÃO
21
21SISTEMAS DEINFORMAÇÃO
21
21
21
21SISTEMAS DEINFORMAÇÃO
2121
Construtores
class Produto{double _preco;int _codigo;
Produto (double preco, int cod) {_preco = preco;_codigo = cod;
}
void imprimeDados() {System.out.println("Preço = " + _preco);System.out.println("Código = " + _codigo);
}
}
Instanciação:
Produto prod = new Produto(78.3,50);prod.imprimeDados();
Preço = 78.3Código = 50
SISTEMAS DEINFORMAÇÃO
22
22
22
22SISTEMAS DEINFORMAÇÃO
22
22
22
22SISTEMAS DEINFORMAÇÃO
22
22SISTEMAS DEINFORMAÇÃO
22
22
22
22SISTEMAS DEINFORMAÇÃO
22
22
22
22SISTEMAS DEINFORMAÇÃO
22
22SISTEMAS DEINFORMAÇÃO
22
22
22
SISTEMAS DEINFORMAÇÃO
22
22
2222 22
SISTEMAS DEINFORMAÇÃO
22
22
22
22SISTEMAS DEINFORMAÇÃO
22
22SISTEMAS DEINFORMAÇÃO
22
22
22
22SISTEMAS DEINFORMAÇÃO
22
22
22
22SISTEMAS DEINFORMAÇÃO
22
22SISTEMAS DEINFORMAÇÃO
22
22
22
22SISTEMAS DEINFORMAÇÃO
2222
Construtoresclass Produto{double _preco;int _codigo;
Produto (double preco, int cod) {_preco = preco;_codigo = cod;
}
void imprimeDados() {System.out.println("Preço = " + _preco);System.out.println("Código = " + _codigo);
}
}
Instanciação:
Produto prod = new Produto(78.3,50);prod.imprimeDados();
Preço = 78.3Código = 50
O que acontece se fizermos:
Produto prod = new Produto();
???????
SISTEMAS DEINFORMAÇÃO
23
23
23
23SISTEMAS DEINFORMAÇÃO
23
23
23
23SISTEMAS DEINFORMAÇÃO
23
23SISTEMAS DEINFORMAÇÃO
23
23
23
23SISTEMAS DEINFORMAÇÃO
23
23
23
23SISTEMAS DEINFORMAÇÃO
23
23SISTEMAS DEINFORMAÇÃO
23
23
23
SISTEMAS DEINFORMAÇÃO
23
23
2323 23
SISTEMAS DEINFORMAÇÃO
23
23
23
23SISTEMAS DEINFORMAÇÃO
23
23SISTEMAS DEINFORMAÇÃO
23
23
23
23SISTEMAS DEINFORMAÇÃO
23
23
23
23SISTEMAS DEINFORMAÇÃO
23
23SISTEMAS DEINFORMAÇÃO
23
23
23
23SISTEMAS DEINFORMAÇÃO
2323
Construtoresclass Produto{double _preco;int _codigo;
Produto (double preco, int cod) {_preco = preco;_codigo = cod;
}
void imprimeDados() {System.out.println("Preço = " + _preco);System.out.println("Código = " + _codigo);
}
}
Instanciação:
Produto prod = new Produto(78.3,50);prod.imprimeDados();
Preço = 78.3Código = 50
O que acontece se fizermos:
Produto prod = new Produto();
Static Error: No constructor in Produto accepts arguments ()
SISTEMAS DEINFORMAÇÃO
24
24
24
24SISTEMAS DEINFORMAÇÃO
24
24
24
24SISTEMAS DEINFORMAÇÃO
24
24SISTEMAS DEINFORMAÇÃO
24
24
24
24SISTEMAS DEINFORMAÇÃO
24
24
24
24SISTEMAS DEINFORMAÇÃO
24
24SISTEMAS DEINFORMAÇÃO
24
24
24
SISTEMAS DEINFORMAÇÃO
24
24
2424 24
SISTEMAS DEINFORMAÇÃO
24
24
24
24SISTEMAS DEINFORMAÇÃO
24
24SISTEMAS DEINFORMAÇÃO
24
24
24
24SISTEMAS DEINFORMAÇÃO
24
24
24
24SISTEMAS DEINFORMAÇÃO
24
24SISTEMAS DEINFORMAÇÃO
24
24
24
24SISTEMAS DEINFORMAÇÃO
2424
Construtores
• Algumas observações:
• Quando é definido um construtor, não é mais
possível usar o construtor padrão (não é
possível criar objeto sem obedecer as regras do
construtor que a classe disponibiliza) ...
• ... a não ser que você implemente um
equivalente
• Podemos ter vários construtores em uma classe
SISTEMAS DEINFORMAÇÃO
25
25
25
25SISTEMAS DEINFORMAÇÃO
25
25
25
25SISTEMAS DEINFORMAÇÃO
25
25SISTEMAS DEINFORMAÇÃO
25
25
25
25SISTEMAS DEINFORMAÇÃO
25
25
25
25SISTEMAS DEINFORMAÇÃO
25
25SISTEMAS DEINFORMAÇÃO
25
25
25
SISTEMAS DEINFORMAÇÃO
25
25
2525 25
SISTEMAS DEINFORMAÇÃO
25
25
25
25SISTEMAS DEINFORMAÇÃO
25
25SISTEMAS DEINFORMAÇÃO
25
25
25
25SISTEMAS DEINFORMAÇÃO
25
25
25
25SISTEMAS DEINFORMAÇÃO
25
25SISTEMAS DEINFORMAÇÃO
25
25
25
25SISTEMAS DEINFORMAÇÃO
2525
Mais de um Construtor na mesma classe
class Produto{double _preco;int _codigo;int _quantidade;
Produto (double preco, int cod, int qtd) {_preco = preco;_codigo = cod;_quantidade = qtd;
}
Produto (int cod, int qtd) {_codigo =cod;_quantidade = qtd;
}
Produto (int cod) {this (10,cod,100);
}
void imprimeDados() {System.out.println("Preço = " + _preco);System.out.println("Código = " + _codigo);System.out.println("Quantidade = " + _quantidade);
}
}
Instanciações possíveis:
> Produto prod1 = new Produto(43.20, 54, 200);> prod1.imprimeDados();
SISTEMAS DEINFORMAÇÃO
26
26
26
26SISTEMAS DEINFORMAÇÃO
26
26
26
26SISTEMAS DEINFORMAÇÃO
26
26SISTEMAS DEINFORMAÇÃO
26
26
26
26SISTEMAS DEINFORMAÇÃO
26
26
26
26SISTEMAS DEINFORMAÇÃO
26
26SISTEMAS DEINFORMAÇÃO
26
26
26
SISTEMAS DEINFORMAÇÃO
26
26
2626 26
SISTEMAS DEINFORMAÇÃO
26
26
26
26SISTEMAS DEINFORMAÇÃO
26
26SISTEMAS DEINFORMAÇÃO
26
26
26
26SISTEMAS DEINFORMAÇÃO
26
26
26
26SISTEMAS DEINFORMAÇÃO
26
26SISTEMAS DEINFORMAÇÃO
26
26
26
26SISTEMAS DEINFORMAÇÃO
2626
Mais de um Construtor na mesma classe
class Produto{double _preco;int _codigo;int _quantidade;
Produto (double preco, int cod, int qtd) {_preco = preco;_codigo = cod;_quantidade = qtd;
}
Produto (int cod, int qtd) {_codigo =cod;_quantidade = qtd;
}
Produto (int cod) {this (10,cod,100);
}
void imprimeDados() {System.out.println("Preço = " + _preco);System.out.println("Código = " + _codigo);System.out.println("Quantidade = " + _quantidade);
}
}
Instanciações possíveis:
> Produto prod1 = new Produto(43.20, 54, 200);> prod1.imprimeDados();Preço = 43.2Código = 54Quantidade = 200
SISTEMAS DEINFORMAÇÃO
27
27
27
27SISTEMAS DEINFORMAÇÃO
27
27
27
27SISTEMAS DEINFORMAÇÃO
27
27SISTEMAS DEINFORMAÇÃO
27
27
27
27SISTEMAS DEINFORMAÇÃO
27
27
27
27SISTEMAS DEINFORMAÇÃO
27
27SISTEMAS DEINFORMAÇÃO
27
27
27
SISTEMAS DEINFORMAÇÃO
27
27
2727 27
SISTEMAS DEINFORMAÇÃO
27
27
27
27SISTEMAS DEINFORMAÇÃO
27
27SISTEMAS DEINFORMAÇÃO
27
27
27
27SISTEMAS DEINFORMAÇÃO
27
27
27
27SISTEMAS DEINFORMAÇÃO
27
27SISTEMAS DEINFORMAÇÃO
27
27
27
27SISTEMAS DEINFORMAÇÃO
2727
Mais de um Construtor na mesma classe
class Produto{double _preco;int _codigo;int _quantidade;
Produto (double preco, int cod, int qtd) {_preco = preco;_codigo = cod;_quantidade = qtd;
}
Produto (int cod, int qtd) {_codigo =cod;_quantidade = qtd;
}
Produto (int cod) {this (10,cod,100);
}
void imprimeDados() {System.out.println("Preço = " + _preco);System.out.println("Código = " + _codigo);System.out.println("Quantidade = " + _quantidade);
}
}
Instanciações possíveis:
> Produto prod1 = new Produto(43.20, 54, 200);> prod1.imprimeDados();Preço = 43.2Código = 54Quantidade = 200> Produto prod2 = new Produto(300,195);> prod2.imprimeDados();Preço = 0.0Código = 300Quantidade = 195
SISTEMAS DEINFORMAÇÃO
28
28
28
28SISTEMAS DEINFORMAÇÃO
28
28
28
28SISTEMAS DEINFORMAÇÃO
28
28SISTEMAS DEINFORMAÇÃO
28
28
28
28SISTEMAS DEINFORMAÇÃO
28
28
28
28SISTEMAS DEINFORMAÇÃO
28
28SISTEMAS DEINFORMAÇÃO
28
28
28
SISTEMAS DEINFORMAÇÃO
28
28
2828 28
SISTEMAS DEINFORMAÇÃO
28
28
28
28SISTEMAS DEINFORMAÇÃO
28
28SISTEMAS DEINFORMAÇÃO
28
28
28
28SISTEMAS DEINFORMAÇÃO
28
28
28
28SISTEMAS DEINFORMAÇÃO
28
28SISTEMAS DEINFORMAÇÃO
28
28
28
28SISTEMAS DEINFORMAÇÃO
2828
Palavra reservada thisclass Produto{double _preco;int _codigo;int _quantidade;
Produto (double preco, int cod, int qtd) {_preco = preco;_codigo = cod;_quantidade = qtd;
}
Produto (int cod, int qtd) {_codigo =cod;_quantidade = qtd;
}
Produto (int cod) {this (10,cod,100);
}
void imprimeDados() {System.out.println("Preço = " + _preco);System.out.println("Código = " + _codigo);System.out.println("Quantidade = " + _quantidade);
}
}
SISTEMAS DEINFORMAÇÃO
29
29
29
29SISTEMAS DEINFORMAÇÃO
29
29
29
29SISTEMAS DEINFORMAÇÃO
29
29SISTEMAS DEINFORMAÇÃO
29
29
29
29SISTEMAS DEINFORMAÇÃO
29
29
29
29SISTEMAS DEINFORMAÇÃO
29
29SISTEMAS DEINFORMAÇÃO
29
29
29
SISTEMAS DEINFORMAÇÃO
29
29
2929 29
SISTEMAS DEINFORMAÇÃO
29
29
29
29SISTEMAS DEINFORMAÇÃO
29
29SISTEMAS DEINFORMAÇÃO
29
29
29
29SISTEMAS DEINFORMAÇÃO
29
29
29
29SISTEMAS DEINFORMAÇÃO
29
29SISTEMAS DEINFORMAÇÃO
29
29
29
29SISTEMAS DEINFORMAÇÃO
2929
Palavra reservada thisclass Produto{double _preco;int _codigo;int _quantidade;
Produto (double preco, int cod, int qtd) {_preco = preco;_codigo = cod;_quantidade = qtd;
}
Produto (int cod, int qtd) {_codigo =cod;_quantidade = qtd;
}
Produto (int cod) {this (10,cod,100);
}
void imprimeDados() {System.out.println("Preço = " + _preco);System.out.println("Código = " + _codigo);System.out.println("Quantidade = " + _quantidade);
}
}
• É somente uma referência ao próprio objeto.
• Ou seja, se tivermos a chamada
Produto p = new Produto(50);
• O construtor ...
• … repassa o trabalho para o outro construtor
da mesma classe.
Produto (int c) {
this (10,c,100);}
Produto (double preco, int cod, int qtd) {_preco = preco;_codigo = cod;_quantidade = qtd;
}
SISTEMAS DEINFORMAÇÃO
30
30
30
30SISTEMAS DEINFORMAÇÃO
30
30
30
30SISTEMAS DEINFORMAÇÃO
30
30SISTEMAS DEINFORMAÇÃO
30
30
30
30SISTEMAS DEINFORMAÇÃO
30
30
30
30SISTEMAS DEINFORMAÇÃO
30
30SISTEMAS DEINFORMAÇÃO
30
30
30
SISTEMAS DEINFORMAÇÃO
30
30
3030 30
SISTEMAS DEINFORMAÇÃO
30
30
30
30SISTEMAS DEINFORMAÇÃO
30
30SISTEMAS DEINFORMAÇÃO
30
30
30
30SISTEMAS DEINFORMAÇÃO
30
30
30
30SISTEMAS DEINFORMAÇÃO
30
30SISTEMAS DEINFORMAÇÃO
30
30
30
30SISTEMAS DEINFORMAÇÃO
3030
Construtor com thisclass Produto{double _preco;int _codigo;int _quantidade;
Produto (double preco, int cod, int qtd) {_preco = preco;_codigo = cod;_quantidade = qtd;
}
Produto (int cod, int qtd) {_codigo =cod;_quantidade = qtd;
}
Produto (int cod) {this (10,cod,100);
}
void imprimeDados() {System.out.println("Preço = " + _preco);System.out.println("Código = " + _codigo);System.out.println("Quantidade = " + _quantidade);
}
}
> Produto prod3 = new Produto(400);> prod3.imprimeDados();
SISTEMAS DEINFORMAÇÃO
31
31
31
31SISTEMAS DEINFORMAÇÃO
31
31
31
31SISTEMAS DEINFORMAÇÃO
31
31SISTEMAS DEINFORMAÇÃO
31
31
31
31SISTEMAS DEINFORMAÇÃO
31
31
31
31SISTEMAS DEINFORMAÇÃO
31
31SISTEMAS DEINFORMAÇÃO
31
31
31
SISTEMAS DEINFORMAÇÃO
31
31
3131 31
SISTEMAS DEINFORMAÇÃO
31
31
31
31SISTEMAS DEINFORMAÇÃO
31
31SISTEMAS DEINFORMAÇÃO
31
31
31
31SISTEMAS DEINFORMAÇÃO
31
31
31
31SISTEMAS DEINFORMAÇÃO
31
31SISTEMAS DEINFORMAÇÃO
31
31
31
31SISTEMAS DEINFORMAÇÃO
3131
Construtor com thisclass Produto{double _preco;int _codigo;int _quantidade;
Produto (double preco, int cod, int qtd) {_preco = preco;_codigo = cod;_quantidade = qtd;
}
Produto (int cod, int qtd) {_codigo =cod;_quantidade = qtd;
}
Produto (int cod) {this (10,cod,100);
}
void imprimeDados() {System.out.println("Preço = " + _preco);System.out.println("Código = " + _codigo);System.out.println("Quantidade = " + _quantidade);
}
}
> Produto prod3 = new Produto(400);> prod3.imprimeDados();Preço = 10.0Código = 400Quantidade = 100
SISTEMAS DEINFORMAÇÃO
32
32
32
32SISTEMAS DEINFORMAÇÃO
32
32
32
32SISTEMAS DEINFORMAÇÃO
32
32SISTEMAS DEINFORMAÇÃO
32
32
32
32SISTEMAS DEINFORMAÇÃO
32
32
32
32SISTEMAS DEINFORMAÇÃO
32
32SISTEMAS DEINFORMAÇÃO
32
32
32
SISTEMAS DEINFORMAÇÃO
32
32
3232 32
SISTEMAS DEINFORMAÇÃO
32
32
32
32SISTEMAS DEINFORMAÇÃO
32
32SISTEMAS DEINFORMAÇÃO
32
32
32
32SISTEMAS DEINFORMAÇÃO
32
32
32
32SISTEMAS DEINFORMAÇÃO
32
32SISTEMAS DEINFORMAÇÃO
32
32
32
32SISTEMAS DEINFORMAÇÃO
3232
• Parâmetro com mesmo nome que atributo do objeto
Palavra reservada this – outro uso
class Produto{double preco;int codigo;int quantidade;
Produto (int cod, double pr, int quantidade ) {
preco = pr;codigo = cod;this.quantidade = quantidade;
}}
SISTEMAS DEINFORMAÇÃO
33
33
33
33SISTEMAS DEINFORMAÇÃO
33
33
33
33SISTEMAS DEINFORMAÇÃO
33
33SISTEMAS DEINFORMAÇÃO
33
33
33
33SISTEMAS DEINFORMAÇÃO
33
33
33
33SISTEMAS DEINFORMAÇÃO
33
33SISTEMAS DEINFORMAÇÃO
33
33
33
SISTEMAS DEINFORMAÇÃO
33
33
3333 33
SISTEMAS DEINFORMAÇÃO
33
33
33
33SISTEMAS DEINFORMAÇÃO
33
33SISTEMAS DEINFORMAÇÃO
33
33
33
33SISTEMAS DEINFORMAÇÃO
33
33
33
33SISTEMAS DEINFORMAÇÃO
33
33SISTEMAS DEINFORMAÇÃO
33
33
33
33SISTEMAS DEINFORMAÇÃO
3333
• Parâmetro com mesmo nome que atributo do objeto
Palavra reservada this – outro uso
Deixa claro que se trata de um atributo do
objeto, pois o parâmetro recebido tem o
mesmo nome. Precisa diferenciar.
class Produto{double preco;int codigo;int quantidade;
Produto (int cod, double pr, int quantidade ) {
preco = pr;codigo = cod;this.quantidade = quantidade;
}}
SISTEMAS DEINFORMAÇÃO
34
34
34
34SISTEMAS DEINFORMAÇÃO
34
34
34
34SISTEMAS DEINFORMAÇÃO
34
34SISTEMAS DEINFORMAÇÃO
34
34
34
34SISTEMAS DEINFORMAÇÃO
34
34
34
34SISTEMAS DEINFORMAÇÃO
34
34SISTEMAS DEINFORMAÇÃO
34
34
34
SISTEMAS DEINFORMAÇÃO
34
34
3434 34
SISTEMAS DEINFORMAÇÃO
34
34
34
34SISTEMAS DEINFORMAÇÃO
34
34SISTEMAS DEINFORMAÇÃO
34
34
34
34SISTEMAS DEINFORMAÇÃO
34
34
34
34SISTEMAS DEINFORMAÇÃO
34
34SISTEMAS DEINFORMAÇÃO
34
34
34
34SISTEMAS DEINFORMAÇÃO
3434
Construtores
• Quando há mais de um construtor na classe:
• Têm o mesmo nome – diferem apenas nos
parâmetros.
• Quando invocado, o compilador Java escolhe o
construtor correto conforme a assinatura (tipos dos
parâmetros e sua ordem) .
• Esta técnica também pode ser usada para métodos
com mesmo nome e que recebem parâmetros
diferentes: polimorfismo de nome.
SISTEMAS DEINFORMAÇÃO
35
35
35
35SISTEMAS DEINFORMAÇÃO
35
35
35
35SISTEMAS DEINFORMAÇÃO
35
35SISTEMAS DEINFORMAÇÃO
35
35
35
35SISTEMAS DEINFORMAÇÃO
35
35
35
35SISTEMAS DEINFORMAÇÃO
35
35SISTEMAS DEINFORMAÇÃO
35
35
35
SISTEMAS DEINFORMAÇÃO
35
35
3535 35
SISTEMAS DEINFORMAÇÃO
35
35
35
35SISTEMAS DEINFORMAÇÃO
35
35SISTEMAS DEINFORMAÇÃO
35
35
35
35SISTEMAS DEINFORMAÇÃO
35
35
35
35SISTEMAS DEINFORMAÇÃO
35
35SISTEMAS DEINFORMAÇÃO
35
35
35
35SISTEMAS DEINFORMAÇÃO
3535
Exercício• Crie uma classe Aluno com os atributos: numeroUSP, ano
de matrícula (inteiros) e média ponderada (double). Implemente os seguintes métodos para esta classe:
• imprimeAluno: imprime atributos
• construtores:
a) recebe número e ano de matrícula e atualizaatributos correspondentes;
b) recebe e atualiza somente média ponderada;
c) recebe somente número (neste caso, deveassumir que o ano de matrícula é o ano correntee chamar o construtor correspondente).
SISTEMAS DEINFORMAÇÃO
36
36
36
36SISTEMAS DEINFORMAÇÃO
36
36
36
36SISTEMAS DEINFORMAÇÃO
36
36SISTEMAS DEINFORMAÇÃO
36
36
36
36SISTEMAS DEINFORMAÇÃO
36
36
36
36SISTEMAS DEINFORMAÇÃO
36
36SISTEMAS DEINFORMAÇÃO
36
36
36
SISTEMAS DEINFORMAÇÃO
36
36
3636 36
SISTEMAS DEINFORMAÇÃO
36
36
36
36SISTEMAS DEINFORMAÇÃO
36
36SISTEMAS DEINFORMAÇÃO
36
36
36
36SISTEMAS DEINFORMAÇÃO
36
36
36
36SISTEMAS DEINFORMAÇÃO
36
36SISTEMAS DEINFORMAÇÃO
36
36
36
36SISTEMAS DEINFORMAÇÃO
3636
• E o método adicionaEstoque ???
Especificadores de acesso
void adicionaEstoque(int qtde) {qteEstoque = qteEstoque + qtde;imprimeDados();
}
SISTEMAS DEINFORMAÇÃO
37
37
37
37SISTEMAS DEINFORMAÇÃO
37
37
37
37SISTEMAS DEINFORMAÇÃO
37
37SISTEMAS DEINFORMAÇÃO
37
37
37
37SISTEMAS DEINFORMAÇÃO
37
37
37
37SISTEMAS DEINFORMAÇÃO
37
37SISTEMAS DEINFORMAÇÃO
37
37
37
SISTEMAS DEINFORMAÇÃO
37
37
3737 37
SISTEMAS DEINFORMAÇÃO
37
37
37
37SISTEMAS DEINFORMAÇÃO
37
37SISTEMAS DEINFORMAÇÃO
37
37
37
37SISTEMAS DEINFORMAÇÃO
37
37
37
37SISTEMAS DEINFORMAÇÃO
37
37SISTEMAS DEINFORMAÇÃO
37
37
37
37SISTEMAS DEINFORMAÇÃO
3737
• Com os métodos construídos, usamos a proteção explícita, definindo o atributo com palavra chave private
Especificadores de acesso - private
class Produto2
{private double preco;private int codigo;
private String nome; private boolean temEstoque;private int qteEstoque;
....
SISTEMAS DEINFORMAÇÃO
38
38
38
38SISTEMAS DEINFORMAÇÃO
38
38
38
38SISTEMAS DEINFORMAÇÃO
38
38SISTEMAS DEINFORMAÇÃO
38
38
38
38SISTEMAS DEINFORMAÇÃO
38
38
38
38SISTEMAS DEINFORMAÇÃO
38
38SISTEMAS DEINFORMAÇÃO
38
38
38
SISTEMAS DEINFORMAÇÃO
38
38
3838 38
SISTEMAS DEINFORMAÇÃO
38
38
38
38SISTEMAS DEINFORMAÇÃO
38
38SISTEMAS DEINFORMAÇÃO
38
38
38
38SISTEMAS DEINFORMAÇÃO
38
38
38
38SISTEMAS DEINFORMAÇÃO
38
38SISTEMAS DEINFORMAÇÃO
38
38
38
38SISTEMAS DEINFORMAÇÃO
3838
• Contrário de private = public• A palavra chave public permite acesso irrestrito aos atributos.
Especificadores de acesso - public
class Produto2
{public double preco;public int codigo;
public String nome; public boolean temEstoque;public int qteEstoque;
....
SISTEMAS DEINFORMAÇÃO
39
39
39
39SISTEMAS DEINFORMAÇÃO
39
39
39
39SISTEMAS DEINFORMAÇÃO
39
39SISTEMAS DEINFORMAÇÃO
39
39
39
39SISTEMAS DEINFORMAÇÃO
39
39
39
39SISTEMAS DEINFORMAÇÃO
39
39SISTEMAS DEINFORMAÇÃO
39
39
39
SISTEMAS DEINFORMAÇÃO
39
39
3939 39
SISTEMAS DEINFORMAÇÃO
39
39
39
39SISTEMAS DEINFORMAÇÃO
39
39SISTEMAS DEINFORMAÇÃO
39
39
39
39SISTEMAS DEINFORMAÇÃO
39
39
39
39SISTEMAS DEINFORMAÇÃO
39
39SISTEMAS DEINFORMAÇÃO
39
39
39
39SISTEMAS DEINFORMAÇÃO
3939
• Para exemplificar os especificadores de
acesso, vamos abordar um problema de
segurança…
• Suponhamos que um usuário crie um
objeto de Produto.
• O que acontece após a execução deste
código?
Especificadores de acesso
Produto prod = new Produto(23.4, 45, 900)
prod.imprimeDados();
prod._quantidade = prod._quantidade - 100;
prod.imprimeDados();
class Produto{
double _preco;int _codigo;
int _quantidade;
Produto (double preco, int cod, int qtd) {_preco = preco;
_codigo = cod;_quantidade = qtd;
}
void imprimeDados() {
System.out.println("Preço = " + _preco);System.out.println("Código = " +
_codigo);
System.out.println("Quantidade = " + _quantidade);
}}
SISTEMAS DEINFORMAÇÃO
40
40
40
40SISTEMAS DEINFORMAÇÃO
40
40
40
40SISTEMAS DEINFORMAÇÃO
40
40SISTEMAS DEINFORMAÇÃO
40
40
40
40SISTEMAS DEINFORMAÇÃO
40
40
40
40SISTEMAS DEINFORMAÇÃO
40
40SISTEMAS DEINFORMAÇÃO
40
40
40
SISTEMAS DEINFORMAÇÃO
40
40
4040 40
SISTEMAS DEINFORMAÇÃO
40
40
40
40SISTEMAS DEINFORMAÇÃO
40
40SISTEMAS DEINFORMAÇÃO
40
40
40
40SISTEMAS DEINFORMAÇÃO
40
40
40
40SISTEMAS DEINFORMAÇÃO
40
40SISTEMAS DEINFORMAÇÃO
40
40
40
40SISTEMAS DEINFORMAÇÃO
4040
• Temos um problema de segurança!
• Não podemos permitir que qualquer usuário altere a quantidade de
mercadorias em estoque !!! (E se não tiver produto suficiente???? →
sistema em estado inconsistente)
• Como resolver ???
Especificadores de acesso
Produto prod = new Produto(23.4, 45, 900) prod.imprimeDados();prod._quantidade = prod._quantidade - 100;prod.imprimeDados();
SISTEMAS DEINFORMAÇÃO
41
41
41
41SISTEMAS DEINFORMAÇÃO
41
41
41
41SISTEMAS DEINFORMAÇÃO
41
41SISTEMAS DEINFORMAÇÃO
41
41
41
41SISTEMAS DEINFORMAÇÃO
41
41
41
41SISTEMAS DEINFORMAÇÃO
41
41SISTEMAS DEINFORMAÇÃO
41
41
41
SISTEMAS DEINFORMAÇÃO
41
41
4141 41
SISTEMAS DEINFORMAÇÃO
41
41
41
41SISTEMAS DEINFORMAÇÃO
41
41SISTEMAS DEINFORMAÇÃO
41
41
41
41SISTEMAS DEINFORMAÇÃO
41
41
41
41SISTEMAS DEINFORMAÇÃO
41
41SISTEMAS DEINFORMAÇÃO
41
41
41
41SISTEMAS DEINFORMAÇÃO
4141
• Para evitar problemas como este, podemos usar proteções explícitas, indicando que somente métodos do próprio objeto alterem os seus atributos.
Especificadores de acesso
SISTEMAS DEINFORMAÇÃO
42
42
42
42SISTEMAS DEINFORMAÇÃO
42
42
42
42SISTEMAS DEINFORMAÇÃO
42
42SISTEMAS DEINFORMAÇÃO
42
42
42
42SISTEMAS DEINFORMAÇÃO
42
42
42
42SISTEMAS DEINFORMAÇÃO
42
42SISTEMAS DEINFORMAÇÃO
42
42
42
SISTEMAS DEINFORMAÇÃO
42
42
4242 42
SISTEMAS DEINFORMAÇÃO
42
42
42
42SISTEMAS DEINFORMAÇÃO
42
42SISTEMAS DEINFORMAÇÃO
42
42
42
42SISTEMAS DEINFORMAÇÃO
42
42
42
42SISTEMAS DEINFORMAÇÃO
42
42SISTEMAS DEINFORMAÇÃO
42
42
42
42SISTEMAS DEINFORMAÇÃO
4242
• Então, vamos incluir os métodos subtraiEstoque e adicionaEstoque
na classe Produto, responsáveis por alterar a quantidade existente
do produto nos estoques da empresa.
• Como seria o método subtraiEstoque ???
Especificadores de acesso
SISTEMAS DEINFORMAÇÃO
43
43
43
43SISTEMAS DEINFORMAÇÃO
43
43
43
43SISTEMAS DEINFORMAÇÃO
43
43SISTEMAS DEINFORMAÇÃO
43
43
43
43SISTEMAS DEINFORMAÇÃO
43
43
43
43SISTEMAS DEINFORMAÇÃO
43
43SISTEMAS DEINFORMAÇÃO
43
43
43
SISTEMAS DEINFORMAÇÃO
43
43
4343 43
SISTEMAS DEINFORMAÇÃO
43
43
43
43SISTEMAS DEINFORMAÇÃO
43
43SISTEMAS DEINFORMAÇÃO
43
43
43
43SISTEMAS DEINFORMAÇÃO
43
43
43
43SISTEMAS DEINFORMAÇÃO
43
43SISTEMAS DEINFORMAÇÃO
43
43
43
43SISTEMAS DEINFORMAÇÃO
4343
void subtraiEstoque(int qtde) {if (qtde < 0) {System.out.println("Não é permitido quantidade negativa.");return;
}if (qtde > _quantidade) {System.out.println("Quantidade em estoque insuficiente.");imprimeDados();
}else{_quantidade = _quantidade - qtde;System.out.println("Atualização realizada");
}}
Especificadores de acesso
SISTEMAS DEINFORMAÇÃO
44
44
44
44SISTEMAS DEINFORMAÇÃO
44
44
44
44SISTEMAS DEINFORMAÇÃO
44
44SISTEMAS DEINFORMAÇÃO
44
44
44
44SISTEMAS DEINFORMAÇÃO
44
44
44
44SISTEMAS DEINFORMAÇÃO
44
44SISTEMAS DEINFORMAÇÃO
44
44
44
SISTEMAS DEINFORMAÇÃO
44
44
4444 44
SISTEMAS DEINFORMAÇÃO
44
44
44
44SISTEMAS DEINFORMAÇÃO
44
44SISTEMAS DEINFORMAÇÃO
44
44
44
44SISTEMAS DEINFORMAÇÃO
44
44
44
44SISTEMAS DEINFORMAÇÃO
44
44SISTEMAS DEINFORMAÇÃO
44
44
44
44SISTEMAS DEINFORMAÇÃO
4444
• E o método adicionaEstoque ???
Especificadores de acesso
SISTEMAS DEINFORMAÇÃO
45
45
45
45SISTEMAS DEINFORMAÇÃO
45
45
45
45SISTEMAS DEINFORMAÇÃO
45
45SISTEMAS DEINFORMAÇÃO
45
45
45
45SISTEMAS DEINFORMAÇÃO
45
45
45
45SISTEMAS DEINFORMAÇÃO
45
45SISTEMAS DEINFORMAÇÃO
45
45
45
SISTEMAS DEINFORMAÇÃO
45
45
4545 45
SISTEMAS DEINFORMAÇÃO
45
45
45
45SISTEMAS DEINFORMAÇÃO
45
45SISTEMAS DEINFORMAÇÃO
45
45
45
45SISTEMAS DEINFORMAÇÃO
45
45
45
45SISTEMAS DEINFORMAÇÃO
45
45SISTEMAS DEINFORMAÇÃO
45
45
45
45SISTEMAS DEINFORMAÇÃO
4545
• E o método adicionaEstoque ???
Especificadores de acesso
void adicionaEstoque(int qtde) {
if (qtde < 0) System.out.println("Não é permitido quantidade negativa.");
else{
_quantidade = _quantidade + qtde;System.out.println("Atualização realizada.");
}}
SISTEMAS DEINFORMAÇÃO
46
46
46
46SISTEMAS DEINFORMAÇÃO
46
46
46
46SISTEMAS DEINFORMAÇÃO
46
46SISTEMAS DEINFORMAÇÃO
46
46
46
46SISTEMAS DEINFORMAÇÃO
46
46
46
46SISTEMAS DEINFORMAÇÃO
46
46SISTEMAS DEINFORMAÇÃO
46
46
46
SISTEMAS DEINFORMAÇÃO
46
46
4646 46
SISTEMAS DEINFORMAÇÃO
46
46
46
46SISTEMAS DEINFORMAÇÃO
46
46SISTEMAS DEINFORMAÇÃO
46
46
46
46SISTEMAS DEINFORMAÇÃO
46
46
46
46SISTEMAS DEINFORMAÇÃO
46
46SISTEMAS DEINFORMAÇÃO
46
46
46
46SISTEMAS DEINFORMAÇÃO
4646
• Com os métodos construídos, usamos a proteção explícita, definindo o atributo com palavra chave private
Especificadores de acesso - private
class Produto
{private double _preco;private int _codigo;
private int _quantidade;
....
SISTEMAS DEINFORMAÇÃO
47
47
47
47SISTEMAS DEINFORMAÇÃO
47
47
47
47SISTEMAS DEINFORMAÇÃO
47
47SISTEMAS DEINFORMAÇÃO
47
47
47
47SISTEMAS DEINFORMAÇÃO
47
47
47
47SISTEMAS DEINFORMAÇÃO
47
47SISTEMAS DEINFORMAÇÃO
47
47
47
SISTEMAS DEINFORMAÇÃO
47
47
4747 47
SISTEMAS DEINFORMAÇÃO
47
47
47
47SISTEMAS DEINFORMAÇÃO
47
47SISTEMAS DEINFORMAÇÃO
47
47
47
47SISTEMAS DEINFORMAÇÃO
47
47
47
47SISTEMAS DEINFORMAÇÃO
47
47SISTEMAS DEINFORMAÇÃO
47
47
47
47SISTEMAS DEINFORMAÇÃO
4747
• Com os métodos construídos, usamos a proteção explícita, definindo o atributo com palavra chave private
Especificadores de acesso - private
class Produto
{private double _preco;private int _codigo;
private int _quantidade;
....
Somente métodos pertencentes à
mesma classe poderão alterar os
atributos.
SISTEMAS DEINFORMAÇÃO
48
48
48
48SISTEMAS DEINFORMAÇÃO
48
48
48
48SISTEMAS DEINFORMAÇÃO
48
48SISTEMAS DEINFORMAÇÃO
48
48
48
48SISTEMAS DEINFORMAÇÃO
48
48
48
48SISTEMAS DEINFORMAÇÃO
48
48SISTEMAS DEINFORMAÇÃO
48
48
48
SISTEMAS DEINFORMAÇÃO
48
48
4848 48
SISTEMAS DEINFORMAÇÃO
48
48
48
48SISTEMAS DEINFORMAÇÃO
48
48SISTEMAS DEINFORMAÇÃO
48
48
48
48SISTEMAS DEINFORMAÇÃO
48
48
48
48SISTEMAS DEINFORMAÇÃO
48
48SISTEMAS DEINFORMAÇÃO
48
48
48
48SISTEMAS DEINFORMAÇÃO
4848
Especificadores de acesso - private
Método subtraiEstoque pertence à
mesma classe. Pode alterar o atributo
private.
class Produto
{private double _preco;
private int _codigo;
private int _quantidade;
....
void subtraiEstoque(int qtde) {
if (qtde > _quantidade) {
System.out.println("Quantidade em estoque insuficiente.");
imprimeDados();}
else {
_quantidade = _quantidade - qtde;
System.out.println("Atualização realizada");
}}
void adicionaEstoque(int qtde)
{
if (qtde < 0)
System.out.println("Não é permitido quantidade negativa.");
else {_quantidade = _quantidade + qtde;
System.out.println("Atualização realizada.");}
}
}
Método adicionaEstoque pertence à
mesma classe. Pode alterar o atributo
private.
SISTEMAS DEINFORMAÇÃO
49
49
49
49SISTEMAS DEINFORMAÇÃO
49
49
49
49SISTEMAS DEINFORMAÇÃO
49
49SISTEMAS DEINFORMAÇÃO
49
49
49
49SISTEMAS DEINFORMAÇÃO
49
49
49
49SISTEMAS DEINFORMAÇÃO
49
49SISTEMAS DEINFORMAÇÃO
49
49
49
SISTEMAS DEINFORMAÇÃO
49
49
4949 49
SISTEMAS DEINFORMAÇÃO
49
49
49
49SISTEMAS DEINFORMAÇÃO
49
49SISTEMAS DEINFORMAÇÃO
49
49
49
49SISTEMAS DEINFORMAÇÃO
49
49
49
49SISTEMAS DEINFORMAÇÃO
49
49SISTEMAS DEINFORMAÇÃO
49
49
49
49SISTEMAS DEINFORMAÇÃO
4949
Especificadores de acesso - private
O que acontece?
class AlteracaoProduto
{void alteraProduto() {
Produto prod = new Produto(67.9,34, 900);prod._quantidade = prod._quantidade - 800;
}
}
SISTEMAS DEINFORMAÇÃO
50
50
50
50SISTEMAS DEINFORMAÇÃO
50
50
50
50SISTEMAS DEINFORMAÇÃO
50
50SISTEMAS DEINFORMAÇÃO
50
50
50
50SISTEMAS DEINFORMAÇÃO
50
50
50
50SISTEMAS DEINFORMAÇÃO
50
50SISTEMAS DEINFORMAÇÃO
50
50
50
SISTEMAS DEINFORMAÇÃO
50
50
5050 50
SISTEMAS DEINFORMAÇÃO
50
50
50
50SISTEMAS DEINFORMAÇÃO
50
50SISTEMAS DEINFORMAÇÃO
50
50
50
50SISTEMAS DEINFORMAÇÃO
50
50
50
50SISTEMAS DEINFORMAÇÃO
50
50SISTEMAS DEINFORMAÇÃO
50
50
50
50SISTEMAS DEINFORMAÇÃO
5050
Especificadores de acesso - private
File: AlteraProduto.java [line: 6]Error: AlteraProduto.java:6: _quantidade has private access in Produto
class AlteracaoProduto
{
void alteraProduto() {
Produto prod = new Produto(67.9,34, 900);
prod._quantidade = prod._quantidade - 800;}
}
ERRO DE COMPILAÇÃO !!!!
SISTEMAS DEINFORMAÇÃO
51
51
51
51SISTEMAS DEINFORMAÇÃO
51
51
51
51SISTEMAS DEINFORMAÇÃO
51
51SISTEMAS DEINFORMAÇÃO
51
51
51
51SISTEMAS DEINFORMAÇÃO
51
51
51
51SISTEMAS DEINFORMAÇÃO
51
51SISTEMAS DEINFORMAÇÃO
51
51
51
SISTEMAS DEINFORMAÇÃO
51
51
5151 51
SISTEMAS DEINFORMAÇÃO
51
51
51
51SISTEMAS DEINFORMAÇÃO
51
51SISTEMAS DEINFORMAÇÃO
51
51
51
51SISTEMAS DEINFORMAÇÃO
51
51
51
51SISTEMAS DEINFORMAÇÃO
51
51SISTEMAS DEINFORMAÇÃO
51
51
51
51SISTEMAS DEINFORMAÇÃO
5151
Especificadores de acesso - privateclass AlteracaoProdutoCorreta
{
void alteraProduto() {
Produto prod = new Produto(67.9,34, 900);
prod.subtraiEstoque(800);prod.imprimeDados();
prod.adicionaEstoque(153);
prod.imprimeDados();
}}
Instanciação:
> AlteracaoProdutoCorreta apc = new
AlteracaoProdutoCorreta() ;> apc.alteraProduto() Atualização realizadaPreço = 67.9Código = 34Quantidade = 100Atualização realizadaPreço = 67.9Código = 34Quantidade = 253
SISTEMAS DEINFORMAÇÃO
52
52
52
52SISTEMAS DEINFORMAÇÃO
52
52
52
52SISTEMAS DEINFORMAÇÃO
52
52SISTEMAS DEINFORMAÇÃO
52
52
52
52SISTEMAS DEINFORMAÇÃO
52
52
52
52SISTEMAS DEINFORMAÇÃO
52
52SISTEMAS DEINFORMAÇÃO
52
52
52
SISTEMAS DEINFORMAÇÃO
52
52
5252 52
SISTEMAS DEINFORMAÇÃO
52
52
52
52SISTEMAS DEINFORMAÇÃO
52
52SISTEMAS DEINFORMAÇÃO
52
52
52
52SISTEMAS DEINFORMAÇÃO
52
52
52
52SISTEMAS DEINFORMAÇÃO
52
52SISTEMAS DEINFORMAÇÃO
52
52
52
52SISTEMAS DEINFORMAÇÃO
5252
• Contrário de private = public• A palavra chave public permite acesso irrestrito aos atributos.
Especificadores de acesso - public
class Produto
{public double _preco;public int _codigo;
public int _quantidade;
....
SISTEMAS DEINFORMAÇÃO
53
53
53
53SISTEMAS DEINFORMAÇÃO
53
53
53
53SISTEMAS DEINFORMAÇÃO
53
53SISTEMAS DEINFORMAÇÃO
53
53
53
53SISTEMAS DEINFORMAÇÃO
53
53
53
53SISTEMAS DEINFORMAÇÃO
53
53SISTEMAS DEINFORMAÇÃO
53
53
53
SISTEMAS DEINFORMAÇÃO
53
53
5353 53
SISTEMAS DEINFORMAÇÃO
53
53
53
53SISTEMAS DEINFORMAÇÃO
53
53SISTEMAS DEINFORMAÇÃO
53
53
53
53SISTEMAS DEINFORMAÇÃO
53
53
53
53SISTEMAS DEINFORMAÇÃO
53
53SISTEMAS DEINFORMAÇÃO
53
53
53
53SISTEMAS DEINFORMAÇÃO
5353
• Os especificadores de acesso também podem ser usados com os métodos:
• Exemplo:private imprimeDados() – somente métodos daquele objeto podem invocar este método
• Quando nenhum especificador é usado:• Java usa o acesso friendly = permite a visibilidade somente dentro do mesmo pacote (pacote M diretório)
Especificadores de acesso
SISTEMAS DEINFORMAÇÃO
54
54
54
54SISTEMAS DEINFORMAÇÃO
54
54
54
54SISTEMAS DEINFORMAÇÃO
54
54SISTEMAS DEINFORMAÇÃO
54
54
54
54SISTEMAS DEINFORMAÇÃO
54
54
54
54SISTEMAS DEINFORMAÇÃO
54
54SISTEMAS DEINFORMAÇÃO
54
54
54
SISTEMAS DEINFORMAÇÃO
54
54
5454 54
SISTEMAS DEINFORMAÇÃO
54
54
54
54SISTEMAS DEINFORMAÇÃO
54
54SISTEMAS DEINFORMAÇÃO
54
54
54
54SISTEMAS DEINFORMAÇÃO
54
54
54
54SISTEMAS DEINFORMAÇÃO
54
54SISTEMAS DEINFORMAÇÃO
54
54
54
54SISTEMAS DEINFORMAÇÃO
5454
• Exemplos no DrJava
• Classes: Produto, Especificadores
Especificadores de acesso
SISTEMAS DEINFORMAÇÃO
55
55
55
55SISTEMAS DEINFORMAÇÃO
55
55
55
55SISTEMAS DEINFORMAÇÃO
55
55SISTEMAS DEINFORMAÇÃO
55
55
55
55SISTEMAS DEINFORMAÇÃO
55
55
55
55SISTEMAS DEINFORMAÇÃO
55
55SISTEMAS DEINFORMAÇÃO
55
55
55
SISTEMAS DEINFORMAÇÃO
55
55
5555 55
SISTEMAS DEINFORMAÇÃO
55
55
55
55SISTEMAS DEINFORMAÇÃO
55
55SISTEMAS DEINFORMAÇÃO
55
55
55
55SISTEMAS DEINFORMAÇÃO
55
55
55
55SISTEMAS DEINFORMAÇÃO
55
55SISTEMAS DEINFORMAÇÃO
55
55
55
55SISTEMAS DEINFORMAÇÃO
5555
Boa prática de programação
• Normalmente usamos– private em cada atributo– métodos public de acesso a esses atributos
• Ex:class X{
private tipo _atributoY;public tipo obtemAtributoY() { return _atributoY; }public void alteraAtributoY(tipo atr) { _atributoY = atr; }
}
SISTEMAS DEINFORMAÇÃO
56
56
56
56SISTEMAS DEINFORMAÇÃO
56
56
56
56SISTEMAS DEINFORMAÇÃO
56
56SISTEMAS DEINFORMAÇÃO
56
56
56
56SISTEMAS DEINFORMAÇÃO
56
56
56
56SISTEMAS DEINFORMAÇÃO
56
56SISTEMAS DEINFORMAÇÃO
56
56
56
SISTEMAS DEINFORMAÇÃO
56
56
5656 56
SISTEMAS DEINFORMAÇÃO
56
56
56
56SISTEMAS DEINFORMAÇÃO
56
56SISTEMAS DEINFORMAÇÃO
56
56
56
56SISTEMAS DEINFORMAÇÃO
56
56
56
56SISTEMAS DEINFORMAÇÃO
56
56SISTEMAS DEINFORMAÇÃO
56
56
56
56SISTEMAS DEINFORMAÇÃO
5656
Exemplo de aplicabilidade• Você escreveu uma classe Estoque
– vetor de Produtos (public) – número de produtos cadastrados– Suponha que você confia plenamente que os seus usuários (da classe Estoque) vão manter consistentes o vetor e o número de produtos cadastrados (Hahá – bad idea...)
– Eles sabem que podem inserir novos produtos sequencialmente, pois a busca será sequencial
– Vo percebe que, com o crescimento do estoque a busca está ficando lenta, e resolve usar busca binária → manter o vetor ordenadoodos os programas que usam a classe Estoque devem ser analisados para alterar a estratégia de inserção dos produtos
Você deve confiar que os produtos sempre são inseridos de forma ordenada
SISTEMAS DEINFORMAÇÃO
57
57
57
57SISTEMAS DEINFORMAÇÃO
57
57
57
57SISTEMAS DEINFORMAÇÃO
57
57SISTEMAS DEINFORMAÇÃO
57
57
57
57SISTEMAS DEINFORMAÇÃO
57
57
57
57SISTEMAS DEINFORMAÇÃO
57
57SISTEMAS DEINFORMAÇÃO
57
57
57
SISTEMAS DEINFORMAÇÃO
57
57
5757 57
SISTEMAS DEINFORMAÇÃO
57
57
57
57SISTEMAS DEINFORMAÇÃO
57
57SISTEMAS DEINFORMAÇÃO
57
57
57
57SISTEMAS DEINFORMAÇÃO
57
57
57
57SISTEMAS DEINFORMAÇÃO
57
57SISTEMAS DEINFORMAÇÃO
57
57
57
57SISTEMAS DEINFORMAÇÃO
5757
Exemplo de aplicabilidade• Você escreveu uma classe Estoque
– vetor de Produtos (public) – nr de produtos cadastrados– Suponha que você confia plenamente que os seus usuários (da classe Estoque) vão manter o vetor e o nr de produtos cadastrados consistente (Hahá – bad idea...)
– Eles sabem que podem inserir novos produtos sequencialmente, pois a busca será sequencial
– Você percebe que, com o crescimento do estoque a busca está ficando lenta, e resolve usar busca binária → manter o vetor ordenadoTodos os programas que usam a classe Estoque devem ser analisados para alterar a estratégia de inserção dos produtos
Você deve confiar que os produtos sempre são inseridos de forma ordenada
SISTEMAS DEINFORMAÇÃO
58
58
58
58SISTEMAS DEINFORMAÇÃO
58
58
58
58SISTEMAS DEINFORMAÇÃO
58
58SISTEMAS DEINFORMAÇÃO
58
58
58
58SISTEMAS DEINFORMAÇÃO
58
58
58
58SISTEMAS DEINFORMAÇÃO
58
58SISTEMAS DEINFORMAÇÃO
58
58
58
SISTEMAS DEINFORMAÇÃO
58
58
5858 58
SISTEMAS DEINFORMAÇÃO
58
58
58
58SISTEMAS DEINFORMAÇÃO
58
58SISTEMAS DEINFORMAÇÃO
58
58
58
58SISTEMAS DEINFORMAÇÃO
58
58
58
58SISTEMAS DEINFORMAÇÃO
58
58SISTEMAS DEINFORMAÇÃO
58
58
58
58SISTEMAS DEINFORMAÇÃO
5858
Exemplo de aplicabilidade• Você escreveu uma classe Estoque
– vetor de Produtos (public) – nr de produtos cadastrados– Suponha que você confia plenamente que os seus usuários (da classe Estoque) vão manter o vetor e o nr de produtos cadastrados consistente (Hahá – bad idea...)
– Eles sabem que podem inserir novos produtos sequencialmente, pois a busca será sequencial
– Você percebe que, com o crescimento do estoque a busca está ficando lenta, e resolve usar busca binária → manter o vetor ordenadoodos os programas que usam a classe Estoque devem ser analisados para alterar a estratégia de inserção dos produtos
Você deve confiar que os produtos sempre são inseridos de forma ordenada
SISTEMAS DEINFORMAÇÃO
59
59
59
59SISTEMAS DEINFORMAÇÃO
59
59
59
59SISTEMAS DEINFORMAÇÃO
59
59SISTEMAS DEINFORMAÇÃO
59
59
59
59SISTEMAS DEINFORMAÇÃO
59
59
59
59SISTEMAS DEINFORMAÇÃO
59
59SISTEMAS DEINFORMAÇÃO
59
59
59
SISTEMAS DEINFORMAÇÃO
59
59
5959 59
SISTEMAS DEINFORMAÇÃO
59
59
59
59SISTEMAS DEINFORMAÇÃO
59
59SISTEMAS DEINFORMAÇÃO
59
59
59
59SISTEMAS DEINFORMAÇÃO
59
59
59
59SISTEMAS DEINFORMAÇÃO
59
59SISTEMAS DEINFORMAÇÃO
59
59
59
59SISTEMAS DEINFORMAÇÃO
5959
Exemplo de aplicabilidade• Você escreveu uma classe Estoque
– vetor de Produtos (public) – nr de produtos cadastrados– Suponha que você confia plenamente que os seus usuários (da classe Estoque) vão manter o vetor e o nr de produtos cadastrados consistente (Hahá – bad idea...)
– Eles sabem que podem inserir novos produtos sequencialmente, pois a busca será sequencial
– Você percebe que, com o crescimento do estoque a busca está ficando lenta, e resolve usar busca binária → manter o vetor ordenado
• Todos os programas que usam a classe Estoque devem ser analisados para alterar a estratégia de inserção dos produtos
• Você deve confiar que os produtos sempre são inseridos de forma ordenada
SISTEMAS DEINFORMAÇÃO
60
60
60
60SISTEMAS DEINFORMAÇÃO
60
60
60
60SISTEMAS DEINFORMAÇÃO
60
60SISTEMAS DEINFORMAÇÃO
60
60
60
60SISTEMAS DEINFORMAÇÃO
60
60
60
60SISTEMAS DEINFORMAÇÃO
60
60SISTEMAS DEINFORMAÇÃO
60
60
60
SISTEMAS DEINFORMAÇÃO
60
60
6060 60
SISTEMAS DEINFORMAÇÃO
60
60
60
60SISTEMAS DEINFORMAÇÃO
60
60SISTEMAS DEINFORMAÇÃO
60
60
60
60SISTEMAS DEINFORMAÇÃO
60
60
60
60SISTEMAS DEINFORMAÇÃO
60
60SISTEMAS DEINFORMAÇÃO
60
60
60
60SISTEMAS DEINFORMAÇÃO
6060
Boa prática de programação• ENCAPSULAMENTO!!!• Exemplo:
– Classe Estoque– Tem um conjunto de produtos
• Vetor? Não preciso saber– Métodos fornecem uma interface para a aplicação (API)
• Método para consultar um produto– Busca binária? Busca sequencial? Não importa!
• Métodos para inserir e remover um produto– Mantém os produtos ordenados? Não sei!
• Se o desenvolvedor quiser mudar a implementação não afeta os usuários da API (nem mesmo você!!!), pois estes não dependem da implementação interna
SISTEMAS DEINFORMAÇÃO
61
61
61
61SISTEMAS DEINFORMAÇÃO
61
61
61
61SISTEMAS DEINFORMAÇÃO
61
61SISTEMAS DEINFORMAÇÃO
61
61
61
61SISTEMAS DEINFORMAÇÃO
61
61
61
61SISTEMAS DEINFORMAÇÃO
61
61SISTEMAS DEINFORMAÇÃO
61
61
61
SISTEMAS DEINFORMAÇÃO
61
61
6161 61
SISTEMAS DEINFORMAÇÃO
61
61
61
61SISTEMAS DEINFORMAÇÃO
61
61SISTEMAS DEINFORMAÇÃO
61
61
61
61SISTEMAS DEINFORMAÇÃO
61
61
61
61SISTEMAS DEINFORMAÇÃO
61
61SISTEMAS DEINFORMAÇÃO
61
61
61
61SISTEMAS DEINFORMAÇÃO
6161
• Especificador static indica quais atributos
devem ser considerados pertencentes à classe
e não específicos a cada objeto
Especificadores de acesso - static
class TesteStatic
{static int _quantidade = 0; //atributo de classeTesteStatic()
{System.out.println("Criando um objeto do tipo TesteStatic");_quantidade++;
System.out.println("Quantidade de objetos do tipo TesteStatic criados até agora:" + _quantidade);
}
}
SISTEMAS DEINFORMAÇÃO
62
62
62
62SISTEMAS DEINFORMAÇÃO
62
62
62
62SISTEMAS DEINFORMAÇÃO
62
62SISTEMAS DEINFORMAÇÃO
62
62
62
62SISTEMAS DEINFORMAÇÃO
62
62
62
62SISTEMAS DEINFORMAÇÃO
62
62SISTEMAS DEINFORMAÇÃO
62
62
62
SISTEMAS DEINFORMAÇÃO
62
62
6262 62
SISTEMAS DEINFORMAÇÃO
62
62
62
62SISTEMAS DEINFORMAÇÃO
62
62SISTEMAS DEINFORMAÇÃO
62
62
62
62SISTEMAS DEINFORMAÇÃO
62
62
62
62SISTEMAS DEINFORMAÇÃO
62
62SISTEMAS DEINFORMAÇÃO
62
62
62
62SISTEMAS DEINFORMAÇÃO
6262
• Exemplos no DrJava
• Classe: TesteStatic
Especificadores de acesso
> TesteStatic ts = new TesteStatic()
Criando um objeto do tipo TesteStatic
Quantidade de objetos do tipo TesteStatic criados até agora:1
> TesteStatic ts = new TesteStatic()
Criando um objeto do tipo TesteStatic
Quantidade de objetos do tipo TesteStatic criados até agora:2
> TesteStatic ts = new TesteStatic()
Criando um objeto do tipo TesteStatic
Quantidade de objetos do tipo TesteStatic criados até agora:3
class TesteStatic{
static int _quantidade = 0;TesteStatic() {System.out.println("Criando um
objeto do tipo TesteStatic");_quantidade++;System.out.println("Quantidade de
objetos do tipo TesteStatic criados até agora:" + _quantidade);
}}
SISTEMAS DEINFORMAÇÃO
63
63
63
63SISTEMAS DEINFORMAÇÃO
63
63
63
63SISTEMAS DEINFORMAÇÃO
63
63SISTEMAS DEINFORMAÇÃO
63
63
63
63SISTEMAS DEINFORMAÇÃO
63
63
63
63SISTEMAS DEINFORMAÇÃO
63
63SISTEMAS DEINFORMAÇÃO
63
63
63
SISTEMAS DEINFORMAÇÃO
63
63
6363 63
SISTEMAS DEINFORMAÇÃO
63
63
63
63SISTEMAS DEINFORMAÇÃO
63
63SISTEMAS DEINFORMAÇÃO
63
63
63
63SISTEMAS DEINFORMAÇÃO
63
63
63
63SISTEMAS DEINFORMAÇÃO
63
63SISTEMAS DEINFORMAÇÃO
63
63
63
63SISTEMAS DEINFORMAÇÃO
6363
• Exemplos no DrJava
• Classe: TesteSemStatic
Especificadores de acesso
> TesteSemStatic tss= new TesteSemStatic()
Criando um objeto do tipo TesteStatic
Quantidade de objetos do tipo TesteSemStatic criados até
agora:1
> TesteSemStatic tss= new TesteSemStatic()
Criando um objeto do tipo TesteStatic
Quantidade de objetos do tipo TesteSemStatic criados até
agora:1
> TesteSemStatic tss= new TesteSemStatic()
Criando um objeto do tipo TesteStatic
Quantidade de objetos do tipo TesteSemStatic criados até
agora:1
class TesteSemStatic{
int _quantidade = 0;TesteSemStatic() {System.out.println("Criando um
objeto do tipo TesteStatic");_quantidade++;System.out.println("Quantidade
de objetos do tipo TesteSemStatic criados até agora:" + _quantidade);
}}
SISTEMAS DEINFORMAÇÃO
64
64
64
64SISTEMAS DEINFORMAÇÃO
64
64
64
64SISTEMAS DEINFORMAÇÃO
64
64SISTEMAS DEINFORMAÇÃO
64
64
64
64SISTEMAS DEINFORMAÇÃO
64
64
64
64SISTEMAS DEINFORMAÇÃO
64
64SISTEMAS DEINFORMAÇÃO
64
64
64
SISTEMAS DEINFORMAÇÃO
64
64
6464 64
SISTEMAS DEINFORMAÇÃO
64
64
64
64SISTEMAS DEINFORMAÇÃO
64
64SISTEMAS DEINFORMAÇÃO
64
64
64
64SISTEMAS DEINFORMAÇÃO
64
64
64
64SISTEMAS DEINFORMAÇÃO
64
64SISTEMAS DEINFORMAÇÃO
64
64
64
64SISTEMAS DEINFORMAÇÃO
6464
• Métodos static também são métodos da classe
• podem ser chamados mesmo se não houver
objetos da classe criadosão podem manipular
atributos de instância nem chamar métodos de
instância (por quê?)
• Exemplo: métodos da classe Math
• podemos executar Math.sin(double x), mesmo
sem ter instanciado a classe Math.ue outro
método vocês conhecem que é static?
Especificadores de acesso - static
SISTEMAS DEINFORMAÇÃO
65
65
65
65SISTEMAS DEINFORMAÇÃO
65
65
65
65SISTEMAS DEINFORMAÇÃO
65
65SISTEMAS DEINFORMAÇÃO
65
65
65
65SISTEMAS DEINFORMAÇÃO
65
65
65
65SISTEMAS DEINFORMAÇÃO
65
65SISTEMAS DEINFORMAÇÃO
65
65
65
SISTEMAS DEINFORMAÇÃO
65
65
6565 65
SISTEMAS DEINFORMAÇÃO
65
65
65
65SISTEMAS DEINFORMAÇÃO
65
65SISTEMAS DEINFORMAÇÃO
65
65
65
65SISTEMAS DEINFORMAÇÃO
65
65
65
65SISTEMAS DEINFORMAÇÃO
65
65SISTEMAS DEINFORMAÇÃO
65
65
65
65SISTEMAS DEINFORMAÇÃO
6565
• Exemplos no DrJava
• Classe: ExemploMetodoStatic
Especificadores de acesso
> ExemploMetodoStatic.imprimeValor()
Valor do atributo _quantidade:768
class ExemploMetodoStatic
{
static int _quantidade = 768;
static void imprimeValor()
{
System.out.println("Valor do atributo
_quantidade:" + _quantidade);
}
}
SISTEMAS DEINFORMAÇÃO
66
66
66
66SISTEMAS DEINFORMAÇÃO
66
66
66
66SISTEMAS DEINFORMAÇÃO
66
66SISTEMAS DEINFORMAÇÃO
66
66
66
66SISTEMAS DEINFORMAÇÃO
66
66
66
66SISTEMAS DEINFORMAÇÃO
66
66SISTEMAS DEINFORMAÇÃO
66
66
66
SISTEMAS DEINFORMAÇÃO
66
66
6666 66
SISTEMAS DEINFORMAÇÃO
66
66
66
66SISTEMAS DEINFORMAÇÃO
66
66SISTEMAS DEINFORMAÇÃO
66
66
66
66SISTEMAS DEINFORMAÇÃO
66
66
66
66SISTEMAS DEINFORMAÇÃO
66
66SISTEMAS DEINFORMAÇÃO
66
66
66
66SISTEMAS DEINFORMAÇÃO
6666
• Métodos static também são métodos da classe
• podem ser chamados mesmo se não houver
objetos da classe criados
• Não podem manipular atributos de instância
nem chamar métodos de instância (por quê?)
• Exemplo: métodos da classe Math
• podemos executar Math.sin(double x), mesmo
sem ter instanciado a classe Math.
Especificadores de acesso - static
SISTEMAS DEINFORMAÇÃO
67
67
67
67SISTEMAS DEINFORMAÇÃO
67
67
67
67SISTEMAS DEINFORMAÇÃO
67
67SISTEMAS DEINFORMAÇÃO
67
67
67
67SISTEMAS DEINFORMAÇÃO
67
67
67
67SISTEMAS DEINFORMAÇÃO
67
67SISTEMAS DEINFORMAÇÃO
67
67
67
SISTEMAS DEINFORMAÇÃO
67
67
6767 67
SISTEMAS DEINFORMAÇÃO
67
67
67
67SISTEMAS DEINFORMAÇÃO
67
67SISTEMAS DEINFORMAÇÃO
67
67
67
67SISTEMAS DEINFORMAÇÃO
67
67
67
67SISTEMAS DEINFORMAÇÃO
67
67SISTEMAS DEINFORMAÇÃO
67
67
67
67SISTEMAS DEINFORMAÇÃO
6767
• Especificador final
• permite definir variáveis que não podem mais
ter o seu valor modificado (constantes)
• Exemplo:
final double PI = 3.1416;
• Pode misturar especificadores:
static final double PI = 3.1416;
Especificadores de acesso - final
SISTEMAS DEINFORMAÇÃO
68
68
68
68SISTEMAS DEINFORMAÇÃO
68
68
68
68SISTEMAS DEINFORMAÇÃO
68
68SISTEMAS DEINFORMAÇÃO
68
68
68
68SISTEMAS DEINFORMAÇÃO
68
68
68
68SISTEMAS DEINFORMAÇÃO
68
68SISTEMAS DEINFORMAÇÃO
68
68
68
SISTEMAS DEINFORMAÇÃO
68
68
6868 68
SISTEMAS DEINFORMAÇÃO
68
68
68
68SISTEMAS DEINFORMAÇÃO
68
68SISTEMAS DEINFORMAÇÃO
68
68
68
68SISTEMAS DEINFORMAÇÃO
68
68
68
68SISTEMAS DEINFORMAÇÃO
68
68SISTEMAS DEINFORMAÇÃO
68
68
68
68SISTEMAS DEINFORMAÇÃO
6868
• Exemplos no DrJava
• Classe: ExemploFinal
Especificadores de acesso
> ExemploFinal.imprimeValor()
Valor de PI:3.1416
class ExemploFinal
{
static final double PI = 3.1416;
static void imprimeValor()
{
System.out.println("Valor de PI:" + PI);
}
}
SISTEMAS DEINFORMAÇÃO
69
69
69
69SISTEMAS DEINFORMAÇÃO
69
69
69
69SISTEMAS DEINFORMAÇÃO
69
69SISTEMAS DEINFORMAÇÃO
69
69
69
69SISTEMAS DEINFORMAÇÃO
69
69
69
69SISTEMAS DEINFORMAÇÃO
69
69SISTEMAS DEINFORMAÇÃO
69
69
69
SISTEMAS DEINFORMAÇÃO
69
69
6969 69
SISTEMAS DEINFORMAÇÃO
69
69
69
69SISTEMAS DEINFORMAÇÃO
69
69SISTEMAS DEINFORMAÇÃO
69
69
69
69SISTEMAS DEINFORMAÇÃO
69
69
69
69SISTEMAS DEINFORMAÇÃO
69
69SISTEMAS DEINFORMAÇÃO
69
69
69
69SISTEMAS DEINFORMAÇÃO
6969
Especificadores de acesso - final
• Estilo: constantes são escritas com letras maiúsculas, usando hifens para separar as palavras se necessário:– final int NR_LINHAS = 30;
SISTEMAS DEINFORMAÇÃO
70
70
70
70SISTEMAS DEINFORMAÇÃO
70
70
70
70SISTEMAS DEINFORMAÇÃO
70
70SISTEMAS DEINFORMAÇÃO
70
70
70
70SISTEMAS DEINFORMAÇÃO
70
70
70
70SISTEMAS DEINFORMAÇÃO
70
70SISTEMAS DEINFORMAÇÃO
70
70
70
SISTEMAS DEINFORMAÇÃO
70
70
7070 70
SISTEMAS DEINFORMAÇÃO
70
70
70
70SISTEMAS DEINFORMAÇÃO
70
70SISTEMAS DEINFORMAÇÃO
70
70
70
70SISTEMAS DEINFORMAÇÃO
70
70
70
70SISTEMAS DEINFORMAÇÃO
70
70SISTEMAS DEINFORMAÇÃO
70
70
70
70SISTEMAS DEINFORMAÇÃO
7070
Escreva uma classe Funcionario que tenha os atributos número funcional, nome, salário, porcentagemComissao, aliquotaImpostoRenda e qtdeFuncionariosCriados, com as seguintes especificações:• os dados pessoais (número, nome e salário) devem ser fornecidos no momento dacriação do objeto da classe;
• a alíquota do Imposto de renda é uma variável que não pode ser mudada apósinicializada;
• o salário não pode ser alterado pelo usuário por meio de acesso direto;• qtdeFuncionariosCriados é um atributo da classe e não específico de cada objeto;• Crie os seguintesmétodos (faça as considerações necessárias sobre tipos de atributos, métodos e especificadores de acesso):
• alteraComissao (porcentagem) – altera porcentagem da comissão para o funcionário• calculaComissao() – calcula a Comissão – salário multiplicado pela porcentagem• calculaImpostoRenda() – calcula o IR: (salario + comissao) * alíquota• imprimeDados - imprime dados do funcionário.• main - cria três funcionários diferentes, inclui a porcentagem de comissão e
calcula a comissão e IR de cada um deles, imprime todos os dados do funcionário e imprime a quantidade total de funcionário incluídos.
Exercício
SISTEMAS DEINFORMAÇÃO
71
71
71
71SISTEMAS DEINFORMAÇÃO
71
71
71
71SISTEMAS DEINFORMAÇÃO
71
71SISTEMAS DEINFORMAÇÃO
71
71
71
71SISTEMAS DEINFORMAÇÃO
71
71
71
71SISTEMAS DEINFORMAÇÃO
71
71SISTEMAS DEINFORMAÇÃO
71
71
71
SISTEMAS DEINFORMAÇÃO
71
71
7171 71
SISTEMAS DEINFORMAÇÃO
71
71
71
71SISTEMAS DEINFORMAÇÃO
71
71SISTEMAS DEINFORMAÇÃO
71
71
71
71SISTEMAS DEINFORMAÇÃO
71
71
71
71SISTEMAS DEINFORMAÇÃO
71
71SISTEMAS DEINFORMAÇÃO
71
71
71
71SISTEMAS DEINFORMAÇÃO
7171
Professoras:
Fátima L. S. Nunes
Construtores
e
Especificadores de Acesso
Top Related