Escolar Documentos
Profissional Documentos
Cultura Documentos
ORIENTADA A OBJETOS
ESPECIALIZAÇÃO DE ENGENHARIA DE SOFTWARE
Construtores
2
Construtores
• Além de métodos e atributos, o corpo de uma
classe pode conter construtores, definindo como os
atributos de um objeto devem ser inicializados,
quando a classe é criada.
3
Construtores
• A chamada do construtor é indicada pelo nome da classe seguida de
parênteses
• O construtor deve ter o mesmo nome da classe;
• Não retorna nada e não possui tipo.
Conta() {
saldo = 0;
senha = 0;
}
4
Construtores
• Caso não seja definido um construtor, um
construtor implícito default, equivalente a
<nome da classe>(){}
• É fornecido, inicializando os atributos com seus
valores default.
• Tipos primitivos são zerados;
• O construtor de objetos internos são chamados
automaticamente
• Quando um construtor é criado, o default é
descartado e não poderá ser usado.
5
Construtores
Valores default para atributos
• 0 para int, double, etc.
• False para boolean
• null para tipos referência
• null denota uma referência nula, não existente, para um
objeto de qualquer tipo.
6
Criação de Objetos
7
Criação de Objetos
• Um objeto é criado através do operador new
Conta c;...
8
Criação de Objetos
9
Referências
• Objetos são manipulados através de referências.
Criação de Objetos
11
Aliasing
• O Aliasing ocorre quando mais de uma variável
armazena a mesma referência para um dado objeto.
12
Aliasing
• Caso o new seja dado em b, o Aliasing não ocorre e
a atribuição é feita apenas pelo valor.
13
Remoção de objetos
• Não existe mecanismo de remoção explícita de
objetos da memória em Java (como o free()de C++)
• O Garbage Collector de Java elimina estes objetos
da memória quando não são mais referenciados.
• É possível liberar recursos quando o objeto está na
iminência de ser destruído, com o método finalize
14
Remoção de objetos
• O Garbage Collector é um processos automático em
Java, que é totalmente transparente ao
programador.
15
Membros static
16
Membros static
• O modificador static define membros que serão
instanciados uma única vez.
• Ou seja, não haverá uma cópia para cada objeto;
• Todos os objetos compartilham uma única cópia.
• É a mesma ideia de um elemento global para todos os
objetos.
17
Membros static
• Neste exemplo, foi criada uma variável/atributo
static para guardar o total de contas no sistema.
18
Membros static
• Se um atributo static não for inicializado, o
compilador atribui um valor padrão;
19
Membros static
• Da mesma forma que há variáveis estáticas (de
classe) e variáveis de instância (atributos), há
métodos estáticos (de classe) e métodos de
instância.
• um método estático só tem acesso as variáveis de classe
(estáticas);
• um método estático pode ser acrescentado à
classeContaComGerador para retornar o valor corrente
de prox_num
20
Membros static
• Um método static não pode acessar membros não static
• Um método static pode ser chamado mesmo quando não
houver um objeto instanciado;
• Pelo mesmo motivo, o ponteiro this não pode ser utilizado
em um método static.
21
Membros static
22
Classe Math
23
Classe Math
• A classe Math está definida no pacote java.lang
• Fornece uma coleção de métodos static que realizam
cálculos matemáticos comuns;
• Não é necessário instanciar um objeto da classe para
poder utilizar seus métodos;
• Por exemplo:
Math.sqrt(900.00);
24
Classe Math
Método Descrição Exemplo
abs( 23.7 ) é 23.7
abs(x) Valor absoluto de x abs( 0.0 ) é 0.0
abs( -23.7 ) é 23.7
Arredonda x para o menor inteiro maior ceil( 9.2 ) é 10.0
ceil(x)
que x ceil( -9.8 ) é -9.0
cos(x) Cosseno de x (x em radianos) cos( 0.0 ) é 1.0
exp( 1.0 ) é 2.71828
exp(x) Exponencial ex
exp( 2.0 ) é 7.38906
Arredonda x para o menor inteiro não floor( 9.2 ) é 9.0
floor(x)
maior que x floor( -9.8 ) é -10.0
log(x) Logaritmo natural de x (base e) log( Math.E ) é 1.0
log( Math.E * Math.E ) é 2.0
25
Classe Math
26
Classe Math
• Declaradas public final static
• Todas as classes podem utilizar;
• São constantes (final);
• Podem ser acessadas pelo nome da classe;
• Somente uma cópia.
Constante Valor
Math.PI 3.14159265358979323846
Math.E 2.7182818284590452354
27
Promoção de Argumentos
28
Promoção de Argumentos
• A promoção de argumentos consistem em
converter o tipo de um argumento
• Por exemplo, o método Math.sqrt espera um double,
mas pode ser invocado passando-se um int como
argumento;
• A promoção é realizada automaticamente, desde que se
respeite as regras de promoção
• Especifica quais conversões podem ser realizadas sem a perda
de dados.
• Em uma expressão com dois ou mais tipos primitivos
diferentes, cada valor é promovido ao tipo “mais
abrangente”.
29
Promoção de Argumentos
30
cast
• Considerando a tabela anterior, não é possível
realizar a promoção de argumentos de tipos “mais
altos” para tipos “mais baixos”;
• No entanto, é possível realizar o cast explícito
• Assumindo o alto risco de erros de truncamento.
• Suponha que o método abaixo só aceita valores
inteiros:
raizQuadrada((int) valorDouble);
31
Sobrecarga de Métodos
32
Sobrecarga de Métodos
• Métodos com o mesmo nome podem ser declarados
dentro de uma mesma classe
• Desde que possuam um conjunto diferente de parâmetros;
• Isto é a Sobrecarga de métodos.
• Quando um método sobrecarregado é invocado, o
compilador Java seleciona o método apropriado
• De acordo com o número, tipo e ordem dos argumentos
passados para o método.
• Desta forma, podemos ter um conjunto de métodos
com o mesmo nome que realizam o mesmo tipo de
operação sobre argumentos diferentes.
33
Sobrecarga de Métodos
• Por exemplo, os métodos abs(), min() e max() da
classe Math são sobrecarregados, cada um com
quatro versões:
• Uma com dois argumentos double;
• Uma com dois argumentos float;
• Uma com dois argumentos int;
• Uma com dois argumentos long.
• Vejamos um exemplo de métodos que calculam o
quadrado de um número int ou double.
34
Sobrecarga de Métodos
public class Sobrecarga
{
int quadrado(int num)
{
return num*num;
}
double quadrado(double num)
{
return num*num;
}
public void print()
{
System.out.printf("Quadrado de 7.5 e: %f", quadrado(7.5));
System.out.printf("\nQuadrado de 7 e: %d", quadrado(7));
}
}
35
Sobrecarga de Métodos
public class TesteSobrecarga
{
public static void main(String args[])
{
Sobrecarga teste = new Sobrecarga();
teste.print();
}
}
36
Erro Comum
• Note que somente o tipo de retorno de um método não é
suficiente para que o compilador o diferencie de outro
com assinatura parecida
• Erro de compilação.
• Exemplo:
int quadrado(int num)
long quadrado(int num)
37
Sobrecarga de Construtores
• Java permite que objetos de uma mesma classe
sejam inicializados de formas diferentes
• Através da sobrecarga de construtores;
• Basta definir múltiplos construtores com assinaturas
diferentes
• Número e tipo de argumentos.
38
public class Tempo
{ public Tempo(int hora, int minuto, int segundo)
{
private int h, m, s;
h = hora;
public Tempo()
m = minuto;
{ s = segundo;
h = m = s = 0; }
}
public Tempo(int hora) public static void main(String args[])
{
{
Tempo t = new Tempo();
h = hora;
Tempo t2 = new Tempo(12);
m = s = 0;
Tempo t3 = new Tempo(12, 30);
} Tempo t4 = new Tempo(12, 30, 00);
}
public Tempo(int hora, int minuto) }
{
h = hora;
m = minuto;
s = 0;
}
39
Observação sobre Construtores
em Java
• Java permite que outros métodos possuam o
mesmo nome que a classe
• Embora não se tratem de construtores;
• Não são chamados quando um objeto da classe é criado;
• Possuem tipo de retorno.
40
Observação sobre Construtores
em Java
public class ConstrutorFalso
{
public int ConstrutorFalso()
{
System.out.println("Um objeto foi criado?");
return 1;
}
public ConstrutorFalso()
{
System.out.println("Um objeto foi criado!");
}
public static void main(String args[])
{
ConstrutorFalso obj = new ConstrutorFalso();
}
}
41
Associação
42
Associação
Como já vimos, uma associação é um
relacionamento estrutural entre duas classes,
significando que os objetos de uma classe
instanciam objetos de outra classe.
43
Associação
Exemplo:
44
Associação
São tipos comuns de Associação:
Composição
Agregação
45
Composição e Agregação
46
Composição
• Uma classe Java pode ter referências a objetos de
outras classes como membros
• Composição, ou relacionamento tem-um.
47
Composição
public class Hora public void setH(int valor)
{ { h = valor; }
private int h, m, s;
public void setM(int valor)
public int getH() { m = valor; }
{ return h; }
public void setS(int valor)
public int getM() { s = valor; }
{ return m; } }
48
Composição
public class Despertador
{
public void setHorarioAtual
boolean ligado;
Hora despertador, horarioAtual; (int h, int m, int s)
{
public void setDespertador
(int h, int m, int s, boolean valor)
horarioAtual.setH(h);
{
despertador.setH(h); horarioAtual.setM(m);
despertador.setM(m); horarioAtual.setS(s);
despertador.setS(s);
ligado = valor; }
}
}
49
Composição
public class TesteDespertador
{
public static void main(String args[])
{
Despertador d = new Despertador();
50
Composição
• Neste exemplo, não é possível existir a classe
despertador, sem que exista a classe hora. Temos
uma Composição. A instanciação da classe Hora é
obrigatória na classe Despertador.
51
Agregação
• Em uma Agregação a classe que agregou pode
existir sem a classe agregada.
• Exemplo:
• Imagine uma classe ArCondicionado e uma classe
itensCarro, não existe pedido sem itens.
• Não é obrigado instanciar a classe agregada.
52
Enumerações
53
Enumerações
• Uma enumeração, em sua forma mais simples,
declara um conjunto de constantes representadas
por um identificador
• É um tipo especial de classe, definida pela palavra enum
e um identificador;
• Como em classes, { e } delimitam o corpo de uma
declaração;
• Entre as chaves, fica uma lista de constantes de
enumeração, separadas por vírgula
• Cada uma representando um valor único.
54
Enumerações
public void sorteiaCarta()
{
import java.util.Random; //pode conter COPAS, PAUS, OUROS ou ESPADAS
Naipe cartaNaipe;
public class Baralho //pode conter uma das constantes do enum Valor
{ Valor cartaValor;
55
Enumerações
int temp = 1+aleatorio.nextInt(13);
switch (temp)
{
case 1: cartaValor = Valor.A; break;
case 2: cartaValor = Valor.DOIS; break;
case 3: cartaValor = Valor.TRES; break;
case 4: cartaValor = Valor.QUATRO; break;
case 5: cartaValor = Valor.CINCO; break;
case 6: cartaValor = Valor.SEIS; break;
case 7: cartaValor = Valor.SETE; break;
case 8: cartaValor = Valor.OITO; break;
case 9: cartaValor = Valor.NOVE; break;
case 10: cartaValor = Valor.DEZ; break;
case 11: cartaValor = Valor.J; break;
case 12: cartaValor = Valor.Q; break;
case 13: cartaValor = Valor.K; break;
}
}
}
56
Enumerações
• Variáveis do tipo Naipe só podem receber valores
definidos na enumeração
• Caso contrário, ocorrerá erro de compilação.
57
Enumerações
• Por padrão, utiliza-se apenas letras maiúsculas para
denotar as constantes de uma enumeração;
58
Enumerações
• Um enum é implicitamente declarado como final
• Também são implicitamente declarados como static;
• Qualquer tentativa de criar um objeto de um enum com
o operador new resulta em erro de compilação.
59
static import
60
static import
• Uma declaração static import permite que
referenciemos membros static importados como se
fossem declarados na classe em que os usa
• O nome da classe e o operador . não são necessários.
• Existem duas sintaxes para um static import
• Uma que importa apenas um membro static em
particular (single static import);
• Uma que importa todos os membros static de uma
classe (static import on demand).
61
static import
• Single static import
62
static import
//static import on demand
import static java.lang.Math.*;
public class StaticImportTest
{
public static void main( String args[] )
{
System.out.printf( "sqrt( 900.0 ) = %.1f\n", sqrt(900.0));
System.out.printf( "ceil( -9.8 ) = %.1f\n", ceil(-9.8));
System.out.printf( "log( E ) = %.1f\n", log(E));
System.out.printf( "cos( 0.0 ) = %.1f\n", cos(0));
}
}
63
static import
• Note que não é necessário utilizar o nome da classe
Math para invocar os métodos sqrt, ceil, log e cos.
64
DÚVIDAS