Escolar Documentos
Profissional Documentos
Cultura Documentos
Nome da classe
Atributos
Métodos
1
Programação Orientada a Objetos I – Prof. Ediberto.
Notação UML para Classes
- A UML (Unified Modeling Language) é uma linguagem para se modelar projetos bem estruturados, muito
usada para POO, indispensável em projetos de software complexos.
- As classes na UML são representadas por retângulos, geralmente incluindo seu nome, atributos (dados) e
operações (métodos).
Nome Primeiro
Atributos
Métodos
main( )
2
Programação Orientada a Objetos I – Prof. Ediberto.
- Os comentários não aparecem no executável do programa; em JAVA temos comentários de uma linha,
sinalizados com //, e temos os comentários de mais de uma linha, entre /* e */:
// Este é um comentário de uma linha
/* Agora podemos escreve r
o comentário em várias linhas.
*/
- Os comentários não podem ser aninhados em JAVA, ao contrário de outras linguagens.
Exercício
Codifique um programa em JAVA que:
a) Escreva no início do programa como comentário: Nome do autor, Data e Objetivo do programa.
b) Exiba na tela a frase: Meu primeiro programa na linguagem Java
/*Nome do autor: Ediberto
Data: 22/08/2006
Objetivo do Programa: */
public class Primeiro
{ public static void main (String[] args)
{System.out.println(“Primeiro programa na linguagem java”);
}}
Tipos de dados, Variáveis e Constantes
- JAVA é fortemente tipada, ou seja, as variáveis precisam ter um tipo declarado.
- Há oito tipos primitivos de dados em JAVA: quatro tipos inteiros, dois tipos ponto flutuante, um tipo para
caracteres e outro para variáveis lógicas.
Inteiros
Tipo Descrição
long Inteiro de 64 bits em notação de complemento de dois. Pode assumir valores entre –263 e
263 - 1 ( 8 bytes)
int Inteiro de 32 bits em notação de complemento de dois. Pode assumir valores entre –
231 = 2.147.483.648 e 231 - 1 = 2.147.483.647 (4 bytes)
short Inteiro de 16 bits em notação de complemento de dois. Os valores possíveis cobrem a
faixa de –2-15 = - 32.768 a 2 15 - 1 = 32.767 (2 bytes)
byte Inteiro de 8 bits em notação de complemento de dois. Pode assumir valores entre –27 = -
128. e 27 - 1 = 127 (1 byte)
- O tipo int é o mais prático e o mais usado;
- O mais importante é que os intervalos possíveis não dependem da máquina;
Ponto Flutuante
Tipo Descrição
double Representa números em notação de ponto flutuante normalizada
em precisão dupla de 64 bits em conformidade com a norma
IEEE 754-1985.
O menor valor possível representável é 4.94065645841246544e-
324 e o maior é 1.7976931348623157e+308 (8 bytes)
float Representa números em notação de ponto flutuante normalizada em
precisão simples de 32 bits em conformidade com a norma IEEE
754-1985.
O menor valor possível representável é 1.40239846e-46 e o maior é
3.40282347e+38 (4 bytes)
- O tipo double tem duas vezes a precisão do float.
- O double é usado na maioria dos casos.
O Tipo Caractere (Char)
3
Programação Orientada a Objetos I – Prof. Ediberto.
- Apóstrofos definem valores char; por exemplo ‘J’ é um caractere e “J” é uma string contendo um único
caractere.
Caracteres Especiais
Seqüência de Controle Significado
\b backspace (volta um caracter)
\t tab (tabulação)
\n linefeed (quebra de linha)
\r carriage return (início da linha)
\“ aspas duplas
\’ apóstrofos
\\ barra invertida
O Tipo Lógico (Boolean)
- O tipo boolean tem dois valores possíveis, false e true.
Variáveis
- Declaram-se as variáveis JAVA colocando o tipo primeiro e depois o nome da variável, finalizando com
ponto e vírgula:
byte b;
//para casos em que o tamanho de memória importa
int numerointeiro1, numerointeiro2;
long inteirolongo;
//para o valor da nossa divida externa em centavos
char letra;
- Não podem ser usados espaços em nomes de variáveis ou de identificadores quaisquer;
Variáveis de Classe
- É possível que sejam necessárias variáveis ou constantes acessíveis por todos os métodos da classe. As
variáveis de classe são declaradas fora de qualquer método da classe como no modelo anterior no lugar de:
//declaração das variáveis de classe
- Estas declarações são feitas da mesma maneira que as declarações comuns de variáveis com a adição das
palavras private static se for preciso definir que é uma variável visível apenas naquela classe.
Veja:
private static double juros = 0.0123456;
As variáveis de classe, diferente das variáveis locais, recebem valores a priori automaticamente (objetos recebem
null , booleanas recebem false e variáveis numéricas recebem 0 (zero)).
Constantes
- A palavra final denota uma constante (utilize maiúsculas nos nomes das constantes):
final double CMPORPOL = 2.54;
- É mais comum definir uma constante que fique disponível para vários métodos dentro de uma classe. As
chamadas Constantes de Classe são definidas com static final:
public class Constantes
{ public static final double G = 9.81;
//gravitacao em metros por segundo ao quadrado
public static void main (String[] args)
{ System.out.println(G + “ metros por segundo ao quadrado é a
aceleração da gravidade.”);
System.out.println(“A constante de classe G= ” + G + “ pode ser
acessada em qualquer método da classe.”);
}
}
4
Programação Orientada a Objetos I – Prof. Ediberto.
Atribuições, Inicializações e Operadores
- Deve-se inicializar uma variável antes de utilizá- la, em geral após a sua declaração ou na mesma
instrução, exemplos:
int numero; //esta é uma declaração
numero = 5; //esta é uma atribuição
char letra = ‘A’; //esta é uma inicialização
- As declarações podem aparecer em qualquer lugar do código, mas uma variável só pode ser declarada uma
vez em um bloco.
Operadores Aritméticos
- Operadores aritméticos:
+ Adição
- Subtração
* Multiplicação
/ Divisão
% Resto inteiro de uma divisão
++ Incremento
-- Decremento
- ATENÇÃO: o operador / denota divisão inteira se os dois argumentos forem inteiros e divisão de ponto
flutuante se pelo menos um dos operandos for um número real.
- O resto inteiro é denotado por %. Exemplos: (15 / 4) é 3, (15 % 2) é 1.
- Pode-se utilizar inicializações do tipo:
int n = 3;
int dobron = n * 2;
- Pode-se utilizar a forma reduzida:
n += 4; //que equivale a n = n + 4;
Operadores Relacionais
> Maior que
>= Maior ou igual
< Menor que
<= Menor ou igual
== Igual a
= Atribuição
!= Diferente de
Operadores Lógicos
&& And (lógico)
|| Or (lógico)
Exponenciação
- Não há operador para exponenciação, deve-se usar o método Math.pow. Para xa, temos:
double y = Math.pow (x, a);
- DecimalFormat funciona bem para formatar valores monetários. Não é adequada para notação
científica, tabelas com colunas de largura fixa ou números em formato hexadecimal ou octal.
6
Programação Orientada a Objetos I – Prof. Ediberto.
- valor_retorno é uma variável ou constante de mesmo tipo (ou compatível) que o valor de retorno do
método.
- Se o método não possui valor de retorno, deve ser especificado como void e não deve possuir o comando
return.
- Para utilizar um método, deve-se escrever seu código dentro da classe, como no modelo abaixo:
public class <nome>
{ //declaração das variáveis de classe
<tipo_do_método> <nome_do_método>()
{//declaração das variáveis locais ao método
//código do método
return (valor_de_retorno); //se não for void
}
public static void main (String[] args)
{//declaração das variáveis locais
//código do trecho principal
nome_var = nome_do_método (); //chamada
}}
- Onde:
o <tipo_do_método> pode ser um dos vários tipos de métodos em JAVA, mas neste capítulo
será usado sempre public static acompanhado do tipo de retorno do método (int,
double, long, etc.);
o <nome_do_método>() é um nome para o mé todo que segue a mesma regra de formação dos
identificadores de variáveis, de classe, etc, mas em geral são escritos iniciando com minúsculas e
as palavras subseqüentes iniciando com maiúsculas como: calcularAumento(). Os
parênteses são obrigatórios tanto na definição do método como na sua chamada e devem conter as
variáveis locais caso sejam necessários parâmetros, como no exemplo a seguir:
- Exemplo: Com retorno e com argumento
public class Ex06
{public static double calculaTriplo (double numero)
{double x = 3 * numero;
return ( x );}
public static void main (String[] args)
{ double num1 = 7;
double triplo = calculaTriplo (num1);
System.out.println("Triplo de "+num1+" é "+triplo);}}
Resposta: Triplo de 7 = 21
- Onde:
o public static double calculaTriplo define o tipo de retorno (double) do método
chamado calculaTriplo;
o (double numero) define a variável local numero que receberá o parâmetro, passado sempre
POR VALOR (a não ser que seja um objeto) na chamada ao método. Um método também pode ser
definido sem passagem de parâmetros, devendo-se então incluir os parênteses () de qualquer
forma;
o return (x); é o comando final do método, retornando o valor calculado;
o double triplo = calculaTriplo (num1); é a chamada ao método
calculaTriplo, passando o valor num1 como parâmetro para o cálculo. O valor de num1
nunca será alterado pelo método. O valor retornado pelo método será armazenado na variável
triplo.
7
Programação Orientada a Objetos I – Prof. Ediberto.
Método com retorno de valor e com retorno e com argumento
Criar o método calculaQuadrado retornando o quadrado tipo inteiro em que atribua o numero 7 a uma variável
num1
public class Ex07
{public static int calculaQuadrado (int numero)
{ int x = numero * numero;
return ( x );
}
public static void main (String[] args)
{ int num1 = 7;
int quadrado = calculaQuadrado (num1);
System.out.println("Quadrado "+num1+" = "+quadrado);
}}
Método com retorno de valor e com retorno e com argumentos
Criar o método calculaSoma retornando a soma tipo inteiro de dois numeros com valores = num1 = 7, num2 = 3
public class Ex08
{public static int calculaSoma (int num1, int num2)
{ int x = num1 + num2;
return ( x );
}
public static void main (String[] args)
{ int num1 = 7;
int num2 = 3;
int soma = calculaSoma (num1, num2);
System.out.println("Soma dos numeros "+num1+"+"+num2 +" = "+soma);
}}
Manipulação de Strings
- Strings são seqüências de caracteres como “tudo bem ?”. Não há um tipo String em JAVA, e sim uma
classe predefinida chamada String, que faz parte do pacote padrão de Java. Cada conjunto de caracteres
entre aspas é uma instância da classe String:
String e = “”; //uma string vazia
String saudacoes = “Olá”;
Métodos da Classe java.lang.String
- A classe java.lang.String possui muitos métodos (verifique na referência da linguagem). Seguem
os mais interessantes:
o charAt(int indice)
//retorna o caractere na posição especificada
o int compareTo(String outraString)
//retorna um valor negativo se a string vier antes de outraString na
//ordem do dicionário, um valor positivo se outraString vier antes e
//0 (zero) caso forem iguais
o boolean endsWith(String sufixo)
//retorna true se a string terminar com sufixo
o boolean equals(String outra)
//retorna true se a string for igual à outra
o boolean equalsIgnoreCase(String outra)
//retorna true se a string for igual à outra, ignorando maiúsculas e
//minúsculas
o String toLowerCase()
//retorna uma nova string convertendo maiúsculas para minúsculas
8
Programação Orientada a Objetos I – Prof. Ediberto.
o String toUpperCase()
//retorna uma nova string convertendo minúsculas para maiúsculas
o String trim()
//elimina espaços iniciais e finais
Concatenação
String uniao = “use o sinal de + para ” + “concatenar Strings”;
Substrings
- Java possui um método para se obter um subconjunto de uma string, que é o método
nomestring.substring(posicaoinicial, posicaolimite)
onde:
o posicaoinicial é a primeira posição a ser inclusa na substring
o posicaolimite a posição imediatamente posterior a última a ser inclusa.
- Lembre-se que em JAVA conta-se a partir do 0 (zero), ou seja, a primeira posição de uma string é a
posição 0.
String saudacao = “Bem vindo”;
String s = saudacao.substring(0, 3); //s = “Bem”
Edição de Strings
- Para descobrir o tamanho de uma string, usa-se o método nomestring.length():
String saudacao = “Bem vindo”;
int tamanho = saudacao.length(); //tamanho = 9
CONTINUE – A instrução, quando executa em um while ou do...while, pula as instruções restantes no corpo do
loop e prossegue com a próxima interação do loop.
- É possíve l criar laços for também com variáveis e incrementos em ponto flutuante, com cuidado em
relação aos erros de arredondamento dos valores (a expressão limite deve ser bem definida). Também é
permitido utilizar laços com duas variáveis de controle.
Seleções M últiplas – A Instrução switch
- A instrução if...else pode ser incômoda quando temos várias seleções com múltiplas alternativas.
Com a instrução switch pode-se testar o tipo char e todos os inteiros menos long e não se pode usar
conjuntos de valores (esta instrução infelizmente não foi aprimorada de C++)
- Exemplo (trecho de código):
int opcao = 2;
switch ( opcao )
{ case 1:
System.out.println(“A opção é 1.”);
break; // fim do bloco para opcao = 1
case 2:
System.out.println(“A opção é 2.”);
break;
case 3:
System.out.println(“A opção é 3.”);
break;
default:
System.out.println(“Opção inválida.”);
break; // a cláusula default é opcional
}
É possível ainda retirar o comando break de uma cláusula fazendo com que a execução prossiga para os
comandos da cláusula seguinte, mas isso tem que ser feito com bastante cuidado. Nestes casos é aconselhável
acrescentar um comentário no código.
- A instrução acima define um array de 100 inteiros cujos elementos são numerados de 0 a 99. Para o
preenchimento podemos usar:
for ( int i = 0; i > 100; i++ )
{ arrayDeInts[ i ] = i;
}
- Para arrays pequenos, podemos usar a forma abreviada (sem o operador new):
int[] primosMenores = { 2, 3, 5, 7, 11, 13 };
- Pode-se executar cópias de variáveis arrays em outras de forma que as variáveis apontem para o mesmo
array (neste caso, com a modificação de um dos valores os dois arrays serão modificados!):
11
Programação Orientada a Objetos I – Prof. Ediberto.
int[] sequencia = primosMenores;
- Para copiar realmente arrays, é necessário utilizar o método arraycopy da classe System :
System.arraycopy (arrayorigem, indiceorigem, arraydestino,
indicedestino, quantidade);
- Ao utilizar este método atenção para o fato do índice do primeiro elemento ser 0.
- Os arrays em JAVA são tratados por referência, logo, é possível utilizar um array como parâmetro para
um método onde não seja necessário retornar o array resultado, pois neste caso, o próprio array será
modificado diretamente pelo método. Ex:
public static void print (int[] a)
{ for (int i=0; i<a.length; i++)
System.out.println(a[i] + “ “);
}
- Mas podemos também utilizar os arrays em JAVA como valores de retorno. Ex:
- Os arrays multidimensionais (matrizes) em JAVA são declarados da seguinte forma (os cálculos e
manipulações são feitos de forma semelhante aos arrays unidimensionais):
Polimorfismo
- Voltando ao assunto Herança, veremos um conceito muito importante, o de Polimorfismo.
- No nosso exemplo Firma, o vendedor deve ter x% de comissão. Suponha então que seja necessária a
construção de um método que calcule o salário de todos os empregados, descontando 15% de imposto.
- Por exemplo, se o salário de:
Empregado = 200;
Vendedor = 200; //Salário-base
Tecnico = 2.000;
- Supondo uma comissão de 20% , o salário de Vendedor seria:
Vendedor = 240; // 200 + 20% = 200 + 40 = 240
- Calculando o salário líquido de cada um:
Empregado = 170 // 200-15% = 200-30
Vendedor = 204 // 240-15% = 240-36
Tecnico = 1700 // 2.000-15% = 2.000- 300
- O método para cálculo do salário para a classe Empregado pode ser:
public double calc(double sal)
{ return ( 0.85 * sal ); // desconto de 15%
}
- E esse método será herdado pela classe Tecnico. Porém, a classe Vendedor deverá implementar seu
próprio método:
public double calc(double sal)
{ sal = sal * (1 + comissao/100);
12
Programação Orientada a Objetos I – Prof. Ediberto.
//aumento de 20%
return ( 0.85 * sal );
//desconto de 15%
}
- Graficamente, os métodos são representados separadamente dos atributos, na parte inferior:
Empregado
matricula
nome
salario
calc()
Vendedor Tecnico
comissao titulo
calc()
13
Programação Orientada a Objetos I – Prof. Ediberto.
- Resumindo o conceito de Polimorfismo: Reutilização do mesmo nome para um conceito correlato em
tipos diferentes. O sistema escolherá qual o método que deve ser utilizado por meio de:
o Sobrecarga (Overloading) ? comparação feita em tempo de compilação que pergunta “Qual
método possui os tipos de argumentos correspondentes?” e escolhe o método que será usado.
Recurso usado no caso de métodos de mesmo nome, definidos em uma mesma classe, com
argumentos diferentes;
o Sobreposição (Overriding) ? comparação feita em tempo de execução que pergunta “Qual
método foi definido para este tipo de objeto? Existe uma redefinição deste método na classe do
objeto ou deve ser usado o método definido na superclasse?”.
14