Desenvolvimento OO com Java 2 – Tipos, Variáveis e...
Transcript of Desenvolvimento OO com Java 2 – Tipos, Variáveis e...
![Page 1: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/1.jpg)
Desenvolvimento OO com Java 2 – Tipos, Variáveis e
Operadores
Vítor E. Silva Souza
([email protected]) http://www.inf.ufes.br/~ vitorsouza
Departamento de Informática
Centro Tecnológico
Universidade Federal do Espírito Santo
Este obra foi licenciada sob uma Licença Creative Commons Atribuição 3.0 Não Adaptada.
![Page 2: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/2.jpg)
Obje%vos da parte 2 • Começaremos com os conceitos de Java que são similares à programação estruturada: – Tipos primi%vos, variáveis, constantes, operadores, expressões, comentários, etc.
– Veremos que são muito semelhantes à C e C++ e outras linguagens que conhecemos;
• Evoluiremos a discussão para %pos compostos e apresentaremos os conceitos de classe e objeto em Java;
• Estabeleceremos as diferenças de tratamento entre %pos primi%vos e objetos.
Maio 2013 O Paradigma Orientado a Objetos 2
![Page 3: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/3.jpg)
Tipos primi%vos • Existem 8 %pos de dados básicos para valores inteiros, reais, caracteres e lógicos;
• São chamados primi%vos porque: – Não são objetos; – São armazenados na pilha.
• Java não é OO pura por causa deles; • Existem por mo%vos de eficiência; • São completamente definidos na especificação Java (nome, tamanho, etc.).
Maio 2013 O Paradigma Orientado a Objetos 3
![Page 4: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/4.jpg)
Tipos primi%vos inteiros
Maio 2013 O Paradigma Orientado a Objetos 4
/* Cuidados com o alcance do tipo: */ byte b = 127; System.out.println("b = " + b); // b = 127 b++; System.out.println("b = " + b); // b = -128
Tipo Tamanho Alcance
byte 1 byte -128 a 127
short 2 bytes -32.768 a 32.767
int 4 bytes -2.147.483.648 a 2.147.483.647
long 8 bytes -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807
![Page 5: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/5.jpg)
Representação de valores literais
Maio 2013 O Paradigma Orientado a Objetos 5
// Especificando o tipo do literal. int i = 10; long l = 10l; float f = 10.0f; double d = 10.0; // Números longos (Java 7). int bilhao = 1_000_000_000; // Representação em diferentes bases (binário - Java 7). int binario = 0b0001_0000; int octal = 020; int decimal = 16; int hexa = 0x10; System.out.println(binario + ", " + octal + ", " + decimal + ", " + hexa); // 16, 16, 16, 16
![Page 6: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/6.jpg)
Tipos primi%vos reais • Também conhecido como “ponto flutuante”.
Maio 2013 O Paradigma Orientado a Objetos 6
// A separação decimal é feita com ”." float f = 1.0f / 3.0f; double d = 0.1e1 / 3.; // 0.1e1 = 0,1 x 101
// Note a diferença na precisão. System.out.println(f); // 0.33333334 System.out.println(d); // 0.3333333333333333
Tipo Tamanho Alcance
float 4 bytes aprox. ±3.402823 E+38F
double 8 bytes aprox. ±1.79769313486231 E+308
![Page 7: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/7.jpg)
Precisão de ponto flutuante • A precisão se refere ao número de casas decimais, não ao tamanho (ex.: 3.4 x 1038);
• Quando a precisão é fundamental, devemos usar a classe BigDecimal e não os %pos primi%vos.
Maio 2013 O Paradigma Orientado a Objetos 7
double d = 1.230000875E+2; System.out.println(d); // 123.0000875 // Converte de double para float. float f = (float)d; System.out.println(f); // 123.000084
![Page 8: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/8.jpg)
Tipo primi%vo caractere • Para caracteres, Java usa o %po char:
– Segue o padrão Unicode; – Ocupa 2 bytes; – Representa 32.768 caracteres diferentes; – Permite a construção de sohware internacionalizado;
– Depende também do suporte do SO. • Representação entre aspas simples:
– 'a', '5', '\t', '\u0061', etc.
Maio 2013 O Paradigma Orientado a Objetos 8
![Page 9: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/9.jpg)
Um caractere é um inteiro • Por sua representação interna ser um número inteiro (código Unicode), um char pode funcionar como um inteiro:
Maio 2013 O Paradigma Orientado a Objetos 9
char c = 'a'; System.out.println("c: " + c); // c: a c++; System.out.println("c: " + c); // c: b c = (char)(c * 100 / 80); System.out.println("c: " + c); // c: z int i = c; System.out.println("i: " + i); // i: 122
![Page 10: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/10.jpg)
Caracteres especiais
Maio 2013 O Paradigma Orientado a Objetos 10
Código Significado
\n Quebra de linha (newline ou linefeed)
\r Retorno de carro (carriage return)
\b Retrocesso (backspace)
\t Tabulação (horizontal tabulation)
\f Nova página (form feed)
\' Aspas simples (apóstrofo)
\" Aspas
\\ Barra invertida (“\”)
\u233d Caractere unicode de código 0x233d (hexadecimal)
![Page 11: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/11.jpg)
Cadeias de caractere • Algumas linguagens definem um %po primi%vo string para cadeias de caracteres;
• Java não possui um %po primi%vo string; • Em Java, strings são %pos compostos (objetos); • Veremos mais adiante...
Maio 2013 O Paradigma Orientado a Objetos 11
![Page 12: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/12.jpg)
Tipo primi%vo lógico (booleano) • Valores verdadeiro (true) ou falso (false); • Não existe equivalência entre valores lógicos e valores inteiros; – Em C, 0 é false e qualquer outro valor é true.
Maio 2013 O Paradigma Orientado a Objetos 12
boolean b = true; if (b) System.out.println("OK!"); // OK! int i = (int)b; // Erro de compilação! i = 1; if (i) System.out.println("??"); // Idem!
![Page 13: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/13.jpg)
Declaração de variáveis • Para declarar uma variável, é preciso dar-‐lhe um nome e determinar seu %po;
• Opcionalmente, pode atribuir-‐lhe um valor inicial; • Você pode declarar várias variáveis de mesmo %po na mesma linha, separando com vírgula.
Maio 2013 O Paradigma Orientado a Objetos 13
int i; float f = 3.141592f; char a = '\u0061', b = 'b', c, d = 'd'; boolean b1, b2 = true;
![Page 14: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/14.jpg)
Tipos de variáveis • Variáveis que pertencem à classe como um todo; • Variáveis que pertencem a objetos (instâncias) da classe (atributos definidos para a classe);
• Variáveis locais.
Maio 2013 O Paradigma Orientado a Objetos 14
public class Variavel { public static int c = 10; // De classe. public int i; // De instância. public int func() { int n = 5; // Local. i = 2 * n; return (i + c); } }
![Page 15: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/15.jpg)
Escopo de variável • Variáveis podem ser declaradas em qualquer ponto do programa;
• O escopo define onde a variável é visível (onde podemos ler/atribuir seu valor);
• O escopo de uma variável vai do “{“ anterior à sua declaração até o próximo “}”.
Maio 2013 O Paradigma Orientado a Objetos 15
int i = 10; if (i > 0) { int j = 15; System.out.println(i + j); // 25 } j = i + j; // Erro: variável fora de escopo!
![Page 16: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/16.jpg)
Nomes de variáveis • Deve ser iniciado por uma letra, _ ou $; • Seguido de letras, números, _ ou $; • Podem ter qualquer tamanho; • Não podem ser igual a uma palavra reservada; • Java é case sensi+ve.
Maio 2013 O Paradigma Orientado a Objetos 16
Nomes válidos Nomes inválidos
a1 total $_$$
_especial Preço
1a total geral
numero-minimo tico&teco
void
![Page 17: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/17.jpg)
Palavras reservadas
Maio 2013 O Paradigma Orientado a Objetos 17
abstract continue for new switch
assert default goto package synchronized
boolean do if private this
break double implements protected throw
byte else import public throws
case enum instanceof return transient
catch extends int short try
char final interface static void
class finally long strictfp volatile
const float native super while
![Page 18: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/18.jpg)
Conversões entre %pos numéricos • Tipos numéricos podem se misturar em operações, seguindo as seguintes regras: – Se um dos operandos for double e o outro não, será conver%do para double;
– Senão, se um dos operandos for float e o outro não, será conver%do para float;
– Senão, se um dos operandos for long e o outro não, será conver%do para long;
– Nos demais casos, os operandos serão sempre conver%dos para int, caso já não o sejam.
Maio 2013 O Paradigma Orientado a Objetos 18
![Page 19: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/19.jpg)
Conversões entre %pos numéricos
Maio 2013 O Paradigma Orientado a Objetos 19
byte b = 2; short s = 4; int i = 8; long l = 16; float f = 1.1f; double d = 9.9; d = s + l + d; // i + b resulta em int, convertido pra long; l = i + b; // Erro: b + s resulta em int! s = b + s;
double
long Float é o único que precisa especificar o tipo do valor literal.
![Page 20: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/20.jpg)
Conversões entre %pos numéricos • Conversões de um %po menor para um %po maior ocorrem automa%camente;
• Podemos forçar conversões no sen%do contrário, sabendo das possíveis perdas;
• U%lizamos o operador de coerção (cast):
Maio 2013 O Paradigma Orientado a Objetos 20
double x = 9.997; int nx = (int)x; System.out.println(nx); // 9 nx = (int)Math.round(x); System.out.println(nx); // 10
![Page 21: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/21.jpg)
Constantes • Para declarar constantes, basta usar a palavra-‐chave final:
Maio 2013 O Paradigma Orientado a Objetos 21
public class Constantes { public static void main(String[] args) { final double CM_POR_POLEGADA = 2.54; CM_POR_POLEGADA = 2.55; // Erro! double larguraPol = 13.94; double larguraCm = larguraPol * CM_POR_POLEGADA; System.out.println(larguraCm); } }
![Page 22: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/22.jpg)
Constantes • A convenção é que seu nome seja escrito com letras maiúsculas;
• É mais comum encontrar constantes como membros de classes ao invés de propriedades de instância ou variáveis locais.
Maio 2013 O Paradigma Orientado a Objetos 22
public class MinhaClasse { public static final int CONSTANTE = 100; private static final int CONST_INTERNA = 1; /* ... */ }
![Page 23: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/23.jpg)
Comentários • Ignorados pelo compilador; • Usados pelo programador para melhorar a legibilidade do código;
• Existem três %pos: – Comentários de uma linha: // ...; – Comentários de múl%plas linhas: /* ... */; – Comentários JavaDoc: /** ... */ – u%lizados pela ferramenta javadoc para criar uma documentação HTML das classes, atributos e métodos.
– A ferramenta javadoc vem com o JDK; – Mais informações na apos%la.
Maio 2013 O Paradigma Orientado a Objetos 23
![Page 24: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/24.jpg)
Comentários
Maio 2013 O Paradigma Orientado a Objetos 24
/** <i>Documentação da classe</i>. * @author Fulano da Silva * @see java.io.File */ public class FileData extends File { /** Documentação de atributo. */ private double tamanho; /* Comentário de múltiplas linhas. */ /** Documentação de método. */ public void excluir() { int x = 1; // Comentário de uma linha. } }
![Page 25: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/25.jpg)
Operadores • Símbolos especiais que recebem um ou mais argumentos e produzem um resultado;
• Os operadores Java trabalham somente com %pos primi%vos (e wrappers), exceto: ü =, == e != podem ser aplicados a objetos; ü + e += podem ser aplicados a strings.
Maio 2013 O Paradigma Orientado a Objetos 25
![Page 26: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/26.jpg)
Operadores aritmé%cos
Maio 2013 O Paradigma Orientado a Objetos 26
Símbolo Significado Exemplo + Adição a + b
- Subtração a - b
* Multiplicação a * b
/ Divisão a / b
% Resto da divisão inteira a % b
- (Unário) inversão de sinal -a
+ (Unário) manutenção de sinal +a
++ (Unário) Incremento ++a ou a++
-- (Unário) Decremento --a ou a--
![Page 27: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/27.jpg)
Precedência de operadores • Podemos combinar expressões:
ü x = a + b * 5 – c / 3 % 10; • Atenção à precedência de operadores!
1) b * 5; 2) c / 3; 3) (resultado de c / 3) % 10; 4) Da esquerda para a direita.
• Podemos usar parênteses para modificá-‐la: ü x = (a + b) * (5 – (c / 3)) % 10;
• Na dúvida, u%lize parênteses.
Maio 2013 O Paradigma Orientado a Objetos 27
![Page 28: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/28.jpg)
Operadores relacionais
• Observações: – Os parâmetros devem ser de %pos compa{veis; – Não confunda = (atribuição) com == (igualdade).
Maio 2013 O Paradigma Orientado a Objetos 28
Símbolo Significado Exemplo == Igual a == b
!= Diferente a != b
> Maior que a > b
>= Maior que ou igual a a >= b
< Menor que a < b
<= Menor que ou igual a a <= b
![Page 29: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/29.jpg)
Operadores lógicos
• Observações: – Só operam sobre valores lógicos; – Podem ser combinados em expressões grandes.
Maio 2013 O Paradigma Orientado a Objetos 29
Símbolo Significado Exemplo && AND (E) a && b
& AND sem curto-circuito a & b
|| OR (OU) a || b
| OR sem curto-circuito a | b
^ XOR (OU exclusivo) a ^ b
! NOT (NÃO, inversão de valor, unário) ! a
![Page 30: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/30.jpg)
Curto-‐circuito
Maio 2013 O Paradigma Orientado a Objetos 30
int x = 10, y = 15, z = 20; // (z > y) não é avaliado. if ((x > y) && (z > y)) { /* ... */ } // (z == y) não é avaliado. if ((x == 10) || (z == y)) { /* ... */ } // Ambos são avaliados. if ((x > y) & (z > y)) { /* ... */ } // Ambos são avaliados. if ((x == 10) | (z == y)) { /* ... */ }
![Page 31: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/31.jpg)
Operador de atribuição • Usado para alterar o valor de uma variável:
ü x = 10 * y + 4; • Várias atribuições podem ser feitas em conjunto:
ü x = y = z = 0; • O lado direito da atribuição é sempre calculado primeiro, seu resultado é armazenado na variável do lado esquerdo: ü int x = 5; ü x = x + 2;
Maio 2013 O Paradigma Orientado a Objetos 31
![Page 32: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/32.jpg)
Operadores bit a bit • Operam em variáveis inteiras, bit a bit:
Maio 2013 O Paradigma Orientado a Objetos 32
Símbolo Significado Exemplo & AND (E) a & b
| OR (OU) a | b
^ XOR (OU exclusivo) a ^ b
~ NOT (NÃO, unário) ~ a
>> Deslocamento de bits para a direita a >> b
<< Deslocamento de bits para a esquerda a << b
![Page 33: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/33.jpg)
Atribuição composta • Une-‐se um operador binário com o sinal de atribuição:
Maio 2013 O Paradigma Orientado a Objetos 33
Expresão Equivale a x += y x = x + y
x -= y x = x - y
x *= y x = x * y
x /= y x = x / y
x %= y x = x % y
Expresão Equivale a x &= y x = x & y
x |= y x = x | y
x ^= y x = x ^ y
x >>= y x = x >> y
x <<= y x = x << y
![Page 34: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/34.jpg)
Incremento e decremento • Somar / subtrair 1 de uma variável inteira é tão comum que ganhou um operador só para isso: ü ++x e x++ equivalem a x = x + 1; ü --x e x-- equivalem a x = x – 1.
• Quando parte de uma expressão maior, a forma prefixada é diferente da pós-‐fixada:
Maio 2013 O Paradigma Orientado a Objetos 34
int x = 7; int y = x++; // y = 7, x = 8. x = 7; y = ++x; // y = 8, x = 8.
![Page 35: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/35.jpg)
Operador ternário • Forma simplificada de uma estrutura if – else (que veremos no próximo capítulo);
• Produz um valor de acordo com uma expressão: ü <expressão> ? <valor 1> : <valor 2> ü Se <expressão> for true, o resultado é <valor 1>, do contrário o resultado é <valor 2>.
Maio 2013 O Paradigma Orientado a Objetos 35
int x = 7; int y = (x < 10) ? x * 2 : x / 2; System.out.println("y = " + y); // y = 14
![Page 36: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/36.jpg)
Precedência de operadores • As expressões são avaliadas segundo uma ordem de precedência dos operadores:
Maio 2013 O Paradigma Orientado a Objetos 36
Ordem Operadores 1 . [] ()
2 ++ -- ~ instanceof new – (unário)
3 * / %
4 + -
5 >> << >>>
6 > < >= <=
7 == !=
Ordem Operadores 8 &
9 ^
10 |
11 &&
12 ||
13 ?:
14 = += -= *= /= ...
15 ,
![Page 37: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/37.jpg)
Tipos compostos • Tipos primi%vos armazenam somente informações muito simples;
• Por exemplo, se quisermos armazenar informações sobre alunos: – nome, matrícula, idade, disciplinas cursadas, etc.
• É necessário criar estruturas compostas por %pos primi%vos e outras estruturas.
Maio 2013 O Paradigma Orientado a Objetos 37
![Page 38: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/38.jpg)
Registros e classes • Linguagens estruturadas usam o conceito de registro:
– Agregado de dados de %pos heterogêneos, que iden%fica seus elementos individuais por nome.
• Linguagens orientadas a objeto usam o conceito de classes e objetos: – Objetos são estruturas de dados compostas que contém dados e funções (métodos);
– Pode armazenar internamente dados de %pos primi%vos ou outros objetos;
– Objetos são instâncias de classes.
Maio 2013 O Paradigma Orientado a Objetos 38
![Page 39: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/39.jpg)
Objetos • Um objeto é uma en%dade que incorpora uma abstração relevante no contexto de uma aplicação;
• Podem ser coisas abstratas (ex.: uma reserva de passagem aérea, um pagamento) ou concretas (ex.: um documento, um produto);
• Possui três caracterís%cas principais: – Estado (estrutura de dados); – Comportamento (métodos); – Iden%dade (cada objeto é único).
Maio 2013 O Paradigma Orientado a Objetos 39
![Page 40: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/40.jpg)
Classes • Uma classe descreve um conjunto de objetos com as mesmas propriedades, o mesmo comportamento, os mesmos relacionamentos com outros objetos e a mesma semân%ca;
• Parecido com o conceito de %po.
Maio 2013 O Paradigma Orientado a Objetos 40
![Page 41: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/41.jpg)
Instâncias de classes • Objeto = Instância de classe; • Paradigma OO norteia o desenvolvimento por meio de classificação de objetos: – Modelamos classes, e não objetos; – Objetos são en%dades reais – executam algum papel no sistema;
– Classes são abstrações – capturam a estrutura e comportamento comum a um conjunto de objetos.
Maio 2013 O Paradigma Orientado a Objetos 41
![Page 42: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/42.jpg)
Tipos compostos em Java • Java é OO e, portanto, não possui registros, mas sim classes e objetos;
• Exceto os %pos primi%vos já estudados, tudo em Java é um objeto, inclusive vetores e strings;
• Primeiro escrevemos as classes, em seguida criamos objetos, instâncias das classes;
• Em Java, comparado com C++ por exemplo, tudo isso é bastante simplificado.
Maio 2013 O Paradigma Orientado a Objetos 42
![Page 43: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/43.jpg)
Uma classe Java
Maio 2013 O Paradigma Orientado a Objetos 43
public class Coordenadas { public int x; public int y; public int z; public static void main(String[] args) { Coordenadas coord = new Coordenadas(); coord.x = 10; coord.y = 15; coord.z = 18; } }
![Page 44: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/44.jpg)
Manipulação de objetos em Java • Em Java trabalhamos com referências para objetos, ao contrário de C++ (manipulação direta ou ponteiros);
• Analogia: – A TV é o objeto; – O controle é a referência; – Você só carrega a referência; – A referência pode exis%r sem o objeto.
Maio 2013 O Paradigma Orientado a Objetos 44
![Page 45: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/45.jpg)
Manipulação de objetos em Java • Uma string é uma classe já definida pela API; • Se quisermos usar uma string, precisamos de uma referência, ou seja, uma variável string:
• Agora possuímos uma referência. Não podemos usá-‐la até que o objeto real seja criado:
Maio 2013 O Paradigma Orientado a Objetos 45
String s;
// s = "Olá Mundo!"; s = new String("Olá Mundo!"); System.out.println(s); // Olá Mundo!
![Page 46: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/46.jpg)
Atribuição de valores • Quando realizamos uma atribuição:
• Java faz a cópia do valor da variável da direita para a variável da esquerda; – Para %pos primi%vos, isso significa que alterações em x não implicam alterações em y;
– Para objetos, como o que é copiado é a referência para o mesmo objeto, alterações no objeto que x referencia altera o objeto que y referencia, pois é o mesmo objeto!
Maio 2013 O Paradigma Orientado a Objetos 46
x = y;
![Page 47: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/47.jpg)
Atribuição de valores primi%vos
Maio 2013 O Paradigma Orientado a Objetos 47
int x = 10;
int y = x;
y = 20;
![Page 48: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/48.jpg)
Atribuição de objetos
Maio 2013 O Paradigma Orientado a Objetos 48
Coordenada c1; c1 = new Coordenada(); c1.x = 10; c1.y = 20; c1.z = 30;
Coordenada c2; // Erro comum: // c2 = new Coordenada(); c2 = c1;
![Page 49: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/49.jpg)
Atribuição de objetos
Maio 2013 O Paradigma Orientado a Objetos 49
c2.x = 50;
Tenha sempre em mente a diferença entre um tipo primitivo e um objeto (referência).
![Page 50: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/50.jpg)
Strings em Java • Java não possui %po primi%vo para cadeia de caracteres, mas existe a classe String;
• Esta classe tem tratamento especial: – Construção facilitada usando literais (""); – Operador de concatenação; – Conversão automá%ca de %pos primi%vos e objetos para String.
Maio 2013 O Paradigma Orientado a Objetos 50
![Page 51: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/51.jpg)
Strings em Java
Maio 2013 O Paradigma Orientado a Objetos 51
// Equivale a new String("Olá, mundo!"). String mensagem = "Olá, mundo!"; // String vazia (tamanho 0). String str = ""; // Concatenação. str = "A mensagem é: " + mensagem; // Conversão (c1 é aquele objeto Coordenada). int i = 10; float f = 3.14f; str = "i = " + i + ", f = " + f; str += ", c1 = " + c1;
![Page 52: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/52.jpg)
Strings são imutáveis • Não podemos mudar o valor de um caractere da string. Podemos somente criar outra string.
Maio 2013 O Paradigma Orientado a Objetos 52
String str = "Olá";
str += " mundo!";
Uma nova string é criada e a outra é abandonada para o coletor de lixo.
Lembre-se sempre: strings são imutáveis!
![Page 53: Desenvolvimento OO com Java 2 – Tipos, Variáveis e Operadoresvitorsouza/wp-content/uploads/... · abstract continue for new switch assert default goto package synchronized boolean](https://reader030.fdocumentos.tips/reader030/viewer/2022040119/5e6cb24c359c35080e5f3ead/html5/thumbnails/53.jpg)
h"p://nemo.inf.ufes.br/
Maio 2013 O Paradigma Orientado a Objetos 53