Classes e Objetos POO - edisciplinas.usp.br
Transcript of Classes e Objetos POO - edisciplinas.usp.br
![Page 1: Classes e Objetos POO - edisciplinas.usp.br](https://reader036.fdocuments.us/reader036/viewer/2022071922/62d62b000f8ec3744b2f6464/html5/thumbnails/1.jpg)
Programação Orientada a Objetos – Prof Marcio Delamaro – ICMC/USP 1/40
Classes e Objetos
POO
Prof. Marcio Delamaro
![Page 2: Classes e Objetos POO - edisciplinas.usp.br](https://reader036.fdocuments.us/reader036/viewer/2022071922/62d62b000f8ec3744b2f6464/html5/thumbnails/2.jpg)
Programação Orientada a Objetos – Prof Marcio Delamaro – ICMC/USP 2/40
POO (wikipedia)
● Object-oriented programming (OOP) is a programming paradigm based on the concept of "objects", which are data structures that contain data, in the form of fields, often known as attributes; and code, in the form of procedures, often known as methods.
● A distinguishing feature of objects is that an object's procedures can access and often modify the data fields of the object with which they are associated
![Page 3: Classes e Objetos POO - edisciplinas.usp.br](https://reader036.fdocuments.us/reader036/viewer/2022071922/62d62b000f8ec3744b2f6464/html5/thumbnails/3.jpg)
Programação Orientada a Objetos – Prof Marcio Delamaro – ICMC/USP 3/40
Exemplo banalQuero representar os dados de uma pessoa
![Page 4: Classes e Objetos POO - edisciplinas.usp.br](https://reader036.fdocuments.us/reader036/viewer/2022071922/62d62b000f8ec3744b2f6464/html5/thumbnails/4.jpg)
Programação Orientada a Objetos – Prof Marcio Delamaro – ICMC/USP 4/40
Exemplo banalQuero representar os dados de uma pessoa
Data nascimento, peso, altura.
![Page 5: Classes e Objetos POO - edisciplinas.usp.br](https://reader036.fdocuments.us/reader036/viewer/2022071922/62d62b000f8ec3744b2f6464/html5/thumbnails/5.jpg)
Programação Orientada a Objetos – Prof Marcio Delamaro – ICMC/USP 5/40
Exemplo banalQuero representar os dados de uma pessoa
Data nascimento, sexo, peso, altura.
24/08/1963, M, 72, 172
Em cima desses dados, eu quero computar coisas que me interessam: idade, IMC, etc.
![Page 6: Classes e Objetos POO - edisciplinas.usp.br](https://reader036.fdocuments.us/reader036/viewer/2022071922/62d62b000f8ec3744b2f6464/html5/thumbnails/6.jpg)
Programação Orientada a Objetos – Prof Marcio Delamaro – ICMC/USP 6/40
Exemplo banalQuero representar os dados de uma pessoa
Data nascimento, sexo, peso, altura.
24/08/1963, M, 72, 172
Em cima desses dados, eu quero computar coisas que me interessam: idade, IMC, etc.
idade()imc()
![Page 7: Classes e Objetos POO - edisciplinas.usp.br](https://reader036.fdocuments.us/reader036/viewer/2022071922/62d62b000f8ec3744b2f6464/html5/thumbnails/7.jpg)
Programação Orientada a Objetos – Prof Marcio Delamaro – ICMC/USP 7/40
Exemplo banalQuero representar os dados de uma pessoa
Data nascimento, sexo, peso, altura.
24/08/1963, M, 72, 172
Em cima desses dados, eu quero computar coisas que me interessam: idade, IMC, etc.
idade()imc()
24/10/1980, F, 51, 165
idade()imc()
4/1/2000, F, 60, 155
idade()imc()
![Page 8: Classes e Objetos POO - edisciplinas.usp.br](https://reader036.fdocuments.us/reader036/viewer/2022071922/62d62b000f8ec3744b2f6464/html5/thumbnails/8.jpg)
Programação Orientada a Objetos – Prof Marcio Delamaro – ICMC/USP 8/40
Exemplo banalQuero representar os dados de uma pessoa
Data nascimento, sexo, peso, altura.
24/08/1963, M, 72, 172
Em cima desses dados, eu quero computar coisas que me interessam: idade, IMC, etc.
idade()imc()
24/10/1980, F, 51, 165
idade()imc()
4/1/2000, F, 60, 155
idade()imc()
53
36
17
Cada objeto possui os mesmos métodos (código) e dados diferentes.Ao invocar um método esse vai considerar os dados correspondentes ao seu objeto.Assim, os comportamentos (resultados) são diferentes para cada objeto.
![Page 9: Classes e Objetos POO - edisciplinas.usp.br](https://reader036.fdocuments.us/reader036/viewer/2022071922/62d62b000f8ec3744b2f6464/html5/thumbnails/9.jpg)
Programação Orientada a Objetos – Prof Marcio Delamaro – ICMC/USP 9/40
Classe
● Cada objeto possui os mesmos elementos● Atributos e métodos● Ao definirmos (programarmos) a estrutura de
um objeto, estamos definindo uma classe● Grosso modo, em uma classe definimos um
tipo de objetos, compostos por atributos (variáveis) e métodos (código).
![Page 10: Classes e Objetos POO - edisciplinas.usp.br](https://reader036.fdocuments.us/reader036/viewer/2022071922/62d62b000f8ec3744b2f6464/html5/thumbnails/10.jpg)
Programação Orientada a Objetos – Prof Marcio Delamaro – ICMC/USP 10/40
Exemplo não tão banal
● Vamos implementar um programa para selecionar números aleatórios para a mega-sena.
● Para isso vamos precisar de uma classes que gere números aleatórios.
● Vejamos como faremos.
![Page 11: Classes e Objetos POO - edisciplinas.usp.br](https://reader036.fdocuments.us/reader036/viewer/2022071922/62d62b000f8ec3744b2f6464/html5/thumbnails/11.jpg)
Programação Orientada a Objetos – Prof Marcio Delamaro – ICMC/USP 11/40
Geração de N.A.
● A geração começa com um inteiro x0 chamado de semente.
● Para calcular o próximo número aleatório, fazemos xi+1 = (a + m xi) mod p
● Vamos usar os seguintes valores: a = 453816693, m = 843314861 e p = 2147483648.
● Como semente usamos 1023.● Queremos implementar dois métodos: getRand() e getIntRand(int m)
![Page 12: Classes e Objetos POO - edisciplinas.usp.br](https://reader036.fdocuments.us/reader036/viewer/2022071922/62d62b000f8ec3744b2f6464/html5/thumbnails/12.jpg)
Programação Orientada a Objetos – Prof Marcio Delamaro – ICMC/USP 12/40
Atributos
● Quais seriam os atributos que compõem a minha classe?
![Page 13: Classes e Objetos POO - edisciplinas.usp.br](https://reader036.fdocuments.us/reader036/viewer/2022071922/62d62b000f8ec3744b2f6464/html5/thumbnails/13.jpg)
Programação Orientada a Objetos – Prof Marcio Delamaro – ICMC/USP 13/40
Atributos
● Quais seriam os atributos que compõem a minha classe?
● Justamente as variáveis que foram apresentadas no slide anterior
● Vamos criar uma classe Java e adicionar os atributos.
![Page 14: Classes e Objetos POO - edisciplinas.usp.br](https://reader036.fdocuments.us/reader036/viewer/2022071922/62d62b000f8ec3744b2f6464/html5/thumbnails/14.jpg)
Programação Orientada a Objetos – Prof Marcio Delamaro – ICMC/USP 14/40
Classe Random
public class Random {
}
![Page 15: Classes e Objetos POO - edisciplinas.usp.br](https://reader036.fdocuments.us/reader036/viewer/2022071922/62d62b000f8ec3744b2f6464/html5/thumbnails/15.jpg)
Programação Orientada a Objetos – Prof Marcio Delamaro – ICMC/USP 15/40
Classe Random
public class Random {
} Para que ele possa ser usada por outras classes. Métodos e atributos também podem ser públicos.
![Page 16: Classes e Objetos POO - edisciplinas.usp.br](https://reader036.fdocuments.us/reader036/viewer/2022071922/62d62b000f8ec3744b2f6464/html5/thumbnails/16.jpg)
Programação Orientada a Objetos – Prof Marcio Delamaro – ICMC/USP 16/40
Atributos da classe Random
public class Random {
// esses são os parametros para geracao
private long p = 2147483648l;
private long m = 843314861;
private long a = 453816693;
private long xi = 1023; // essa eh a semente
}
![Page 17: Classes e Objetos POO - edisciplinas.usp.br](https://reader036.fdocuments.us/reader036/viewer/2022071922/62d62b000f8ec3744b2f6464/html5/thumbnails/17.jpg)
Programação Orientada a Objetos – Prof Marcio Delamaro – ICMC/USP 17/40
Métodos da classe Random
public double getRand() {
// calcula o proximo valor xi
// calcula valor entre 0 e 1, dividindo por p
}
![Page 18: Classes e Objetos POO - edisciplinas.usp.br](https://reader036.fdocuments.us/reader036/viewer/2022071922/62d62b000f8ec3744b2f6464/html5/thumbnails/18.jpg)
Programação Orientada a Objetos – Prof Marcio Delamaro – ICMC/USP 18/40
Métodos da classe Random
public double getRand() {
xi = (a + m * xi) % p;
double d = xi; // promove p/ double
return d / p;
}
![Page 19: Classes e Objetos POO - edisciplinas.usp.br](https://reader036.fdocuments.us/reader036/viewer/2022071922/62d62b000f8ec3744b2f6464/html5/thumbnails/19.jpg)
Programação Orientada a Objetos – Prof Marcio Delamaro – ICMC/USP 19/40
Métodos da classe Random
public int getIntRand(int max)
{
// gera valor entre [0 , 1)
// multiplica por max
}
![Page 20: Classes e Objetos POO - edisciplinas.usp.br](https://reader036.fdocuments.us/reader036/viewer/2022071922/62d62b000f8ec3744b2f6464/html5/thumbnails/20.jpg)
Programação Orientada a Objetos – Prof Marcio Delamaro – ICMC/USP 20/40
Métodos da classe Random
public int getIntRand(int max)
{
double d = getRand() * max;
return (int) d;
}
![Page 21: Classes e Objetos POO - edisciplinas.usp.br](https://reader036.fdocuments.us/reader036/viewer/2022071922/62d62b000f8ec3744b2f6464/html5/thumbnails/21.jpg)
Programação Orientada a Objetos – Prof Marcio Delamaro – ICMC/USP 21/40
Usando a classe
● Vamos escrever um pequeno programa que gera números para a megasena
● Todo código está dentro de uma classe● Antes de usar o gerador de números aleatórios
é preciso “instanciar um objeto”
![Page 22: Classes e Objetos POO - edisciplinas.usp.br](https://reader036.fdocuments.us/reader036/viewer/2022071922/62d62b000f8ec3744b2f6464/html5/thumbnails/22.jpg)
Programação Orientada a Objetos – Prof Marcio Delamaro – ICMC/USP 22/40
Classe MegaSena
public class MegaSena {
public static void main(String[] args) {
// cria um objeto para gerar números aleatórios
for (int i = 0; i < 6; i++) {
// Pega um número aleatório entre 1 e 60
// mostra o número
}
}
}
![Page 23: Classes e Objetos POO - edisciplinas.usp.br](https://reader036.fdocuments.us/reader036/viewer/2022071922/62d62b000f8ec3744b2f6464/html5/thumbnails/23.jpg)
Programação Orientada a Objetos – Prof Marcio Delamaro – ICMC/USP 23/40
Classe MegaSena
public class MegaSena {
public static void main(String[] args) {
// cria um objeto para gerar números aleatórios
Random r = new Random();
for (int i = 0; i < 6; i++) {
// Pega um número aleatório entre 1 e 60
// mostra o número
}
}
}
![Page 24: Classes e Objetos POO - edisciplinas.usp.br](https://reader036.fdocuments.us/reader036/viewer/2022071922/62d62b000f8ec3744b2f6464/html5/thumbnails/24.jpg)
Programação Orientada a Objetos – Prof Marcio Delamaro – ICMC/USP 24/40
Classe MegaSena
public class MegaSena {
public static void main(String[] args) {
// cria um objeto para gerar números aleatórios
Random r = new Random();
for (int i = 0; i < 6; i++) {
// Pega um número aleatório entre 1 e 60
int k = r.getIntRand(60) + 1;
// mostra o número
System.out.println(i+1 + "o. Numero: " + k);=
}
}
}
![Page 25: Classes e Objetos POO - edisciplinas.usp.br](https://reader036.fdocuments.us/reader036/viewer/2022071922/62d62b000f8ec3744b2f6464/html5/thumbnails/25.jpg)
Programação Orientada a Objetos – Prof Marcio Delamaro – ICMC/USP 25/40
Executando MegaSena
● 1o. Numero: 572o. Numero: 293o. Numero: 284o. Numero: 145o. Numero: 226o. Numero: 11
● Qual o problema com esse programa?
![Page 26: Classes e Objetos POO - edisciplinas.usp.br](https://reader036.fdocuments.us/reader036/viewer/2022071922/62d62b000f8ec3744b2f6464/html5/thumbnails/26.jpg)
Programação Orientada a Objetos – Prof Marcio Delamaro – ICMC/USP 26/40
Executando MegaSena
● 1o. Numero: 572o. Numero: 293o. Numero: 284o. Numero: 145o. Numero: 226o. Numero: 11
● Qual o problema com esse programa?– Todas as vezes, a sequência é a mesma
● Como resolver isso?
![Page 27: Classes e Objetos POO - edisciplinas.usp.br](https://reader036.fdocuments.us/reader036/viewer/2022071922/62d62b000f8ec3744b2f6464/html5/thumbnails/27.jpg)
Programação Orientada a Objetos – Prof Marcio Delamaro – ICMC/USP 27/40
Solução 1
● Vamos permitir que a classe usuária modifique a semente a ser usada
● A semente pode, por exemplo, ser fornecida pelo próprio usuário
● Para isso vamos dar acesso ao atributo da semente
● public long xi = 1023;
![Page 28: Classes e Objetos POO - edisciplinas.usp.br](https://reader036.fdocuments.us/reader036/viewer/2022071922/62d62b000f8ec3744b2f6464/html5/thumbnails/28.jpg)
Programação Orientada a Objetos – Prof Marcio Delamaro – ICMC/USP 28/40
Problema com solução 1
● O problema com essa solução é que ela dá acesso aos atributos internos da classe Random
● Uma das características de POO é ocultamento de informação
● Imagine, por exemplo que alguém precise mudar o nome da variável
● Uma classe deve ser acessada por meio da sua interface pública
![Page 29: Classes e Objetos POO - edisciplinas.usp.br](https://reader036.fdocuments.us/reader036/viewer/2022071922/62d62b000f8ec3744b2f6464/html5/thumbnails/29.jpg)
Programação Orientada a Objetos – Prof Marcio Delamaro – ICMC/USP 29/40
Solução 2
● Vamos criar uma interface pública para alterar a semente
● Criamos um método setSemente(int k) ● Em vez de acessar diretamente a variável,
invocamos esse método
![Page 30: Classes e Objetos POO - edisciplinas.usp.br](https://reader036.fdocuments.us/reader036/viewer/2022071922/62d62b000f8ec3744b2f6464/html5/thumbnails/30.jpg)
Programação Orientada a Objetos – Prof Marcio Delamaro – ICMC/USP 30/40
Solução 2
private long xi = 1023;
public void setSemente(int semente) {
xi = semente;
}
![Page 31: Classes e Objetos POO - edisciplinas.usp.br](https://reader036.fdocuments.us/reader036/viewer/2022071922/62d62b000f8ec3744b2f6464/html5/thumbnails/31.jpg)
Programação Orientada a Objetos – Prof Marcio Delamaro – ICMC/USP 31/40
Solução 2 - MegaSena
public static void main(String[] args) throws Exception {
Random r = new Random();
System.out.print("Digite um número inteiro para semente: ");
int semente = EntradaTeclado.leInt();
r.setSemente(semente);
….......
![Page 32: Classes e Objetos POO - edisciplinas.usp.br](https://reader036.fdocuments.us/reader036/viewer/2022071922/62d62b000f8ec3744b2f6464/html5/thumbnails/32.jpg)
Programação Orientada a Objetos – Prof Marcio Delamaro – ICMC/USP 32/40
Construtor
● Quando criamos um objeto r = new Random();é chamado um método especial da classe
● Esse método serve para inicializar os atributos do objeto
● Como podemos usar isso na nossa classe Random?
![Page 33: Classes e Objetos POO - edisciplinas.usp.br](https://reader036.fdocuments.us/reader036/viewer/2022071922/62d62b000f8ec3744b2f6464/html5/thumbnails/33.jpg)
Programação Orientada a Objetos – Prof Marcio Delamaro – ICMC/USP 33/40
Construtor
● Quando criamos um objeto r = new Random();é chamado um método especial da classe
● Esse método serve para inicializar os atributos do objeto
● Como podemos usar isso na nossa classe Random?
● Podemos passar parâmetros para o construtor
![Page 34: Classes e Objetos POO - edisciplinas.usp.br](https://reader036.fdocuments.us/reader036/viewer/2022071922/62d62b000f8ec3744b2f6464/html5/thumbnails/34.jpg)
Programação Orientada a Objetos – Prof Marcio Delamaro – ICMC/USP 34/40
Construtor Random
public Random(int k)
{
xi = k;
}
![Page 35: Classes e Objetos POO - edisciplinas.usp.br](https://reader036.fdocuments.us/reader036/viewer/2022071922/62d62b000f8ec3744b2f6464/html5/thumbnails/35.jpg)
Programação Orientada a Objetos – Prof Marcio Delamaro – ICMC/USP 35/40
Construtor Random
public static void main(String[] args) throws Exception {
System.out.print("Digite um número inteiro para semente: ");
int semente = EntradaTeclado.leInt();
Random r = new Random(semente);
![Page 36: Classes e Objetos POO - edisciplinas.usp.br](https://reader036.fdocuments.us/reader036/viewer/2022071922/62d62b000f8ec3744b2f6464/html5/thumbnails/36.jpg)
Programação Orientada a Objetos – Prof Marcio Delamaro – ICMC/USP 36/40
Toda classe tem
● Toda classe tem um construtor● Se você não declarar, é criado um, que não faz
nada● Se vc declarar um, o que não faz nada, deixa
de existir● Você pode ter mais do que um
![Page 37: Classes e Objetos POO - edisciplinas.usp.br](https://reader036.fdocuments.us/reader036/viewer/2022071922/62d62b000f8ec3744b2f6464/html5/thumbnails/37.jpg)
Programação Orientada a Objetos – Prof Marcio Delamaro – ICMC/USP 37/40
Múltiplos construtores
public Random(int k)
{
xi = k;
}
public Random() {
}
![Page 38: Classes e Objetos POO - edisciplinas.usp.br](https://reader036.fdocuments.us/reader036/viewer/2022071922/62d62b000f8ec3744b2f6464/html5/thumbnails/38.jpg)
Programação Orientada a Objetos – Prof Marcio Delamaro – ICMC/USP 38/40
Múltiplos construtores
public Random(int k)
{
xi = k;
}
public Random() {
}
Random r = new Random(2048);
Random r = new Random();
![Page 39: Classes e Objetos POO - edisciplinas.usp.br](https://reader036.fdocuments.us/reader036/viewer/2022071922/62d62b000f8ec3744b2f6464/html5/thumbnails/39.jpg)
Programação Orientada a Objetos – Prof Marcio Delamaro – ICMC/USP 39/40
Exercícios
● Crie um programa que instancie dois objetos da classe Random, com duas sementes diferentes. Em seguida, vá gerando um número entre 0 e 500 com cada um deles, até que o número gerado seja o mesmo. Mostre qual é o número gerado e quantas iterações são necessárias.
● Modifique o construtor padrão da sua classe Random, de modo que se ele for usado para criar o objeto, então a semente vai ser inicializada com o valor aleatório dado por: Calendar.getInstance().getTimeInMillis();
Use essa nova versão em um dos objetos do programa anterior.
![Page 40: Classes e Objetos POO - edisciplinas.usp.br](https://reader036.fdocuments.us/reader036/viewer/2022071922/62d62b000f8ec3744b2f6464/html5/thumbnails/40.jpg)
Programação Orientada a Objetos – Prof Marcio Delamaro – ICMC/USP 40/40
Exercício
● Implemente uma classe ObesidadePessoa com:● atributos: peso e altura (ambos do tipo double)● métodos:
– setPeso: recebe peso por parâmetro e atualiza o atributo
– setAltura: recebe altura por parâmetro e atualiza o atributo
– getPeso: devolve peso
– getAltura: devolve altura
– calculaIMC: devolve Índice de Massa Corporal. IMC = peso/altura2
– defineObesidade = chama o método calculaIMC e exibe mensagem na tela, de acordo com a seguinte regra:
● se IMC > 25, exibe “Risco de obesidade”, senão exibe “Não há risco de obesidade”