Programação Orientada a Objeto - Java Básico
1
Elementos Básicos da Linguagem Java
Prof. Ricardo Linden
Programação Orientada a Objeto - Java Básico 2
Conceitos básicos do Java• Java é uma boa linguagem de programação, mas não é a panacéia
para todos os males computacionais do mundo.
• Núcleo da linguagem bastante estável melhoramentos ocorrem em sua maioria nas bibliotecas
Compatibilidade Retroativa!
Programação Orientada a Objeto - Java Básico 3
Vantagens da Linguagem Java• Independência de plataforma
Sintaxe similar à linguagem C++
• Linguagem totalmente orientada a objetos
• Linguagem menos sujeita a erros de programaçãoFim da alocação de liberação manuais de memóriaFim da aritmética de ponteirosFim da confusão da atribuição com o teste de igualdadeFim da herança múltipla
Programação Orientada a Objeto - Java Básico 4
Palavras chaves do Java• Simples
– Nós quisemos elaborar um sistema que pudesse ser programado facilmente sem muito treinamento esotérico e que facilitasse a prática padrão atual. Assim, embora achássemos que a linguagem C++ não fosse adequada, nós projetamos a linguagem Java o mais parecida possível com o C++ a fim de tornar o sistema mais compreensível. Java omite recursos raramente usados e pouco compreendidos do C++ que, em nossa experiência, trazem mais dificuldades que benefícios.
Programação Orientada a Objeto - Java Básico 5
Palavras chaves do Java• Orientada a objeto
– Definido de forma simples, um projeto orientado a objetos é um atécnica de programação que concentra-se nos dados e nas interfaces de projetos. (...) Os recursos de programação orientada a objetos da linguagem Java são, essencialmente, os da linguagem C++.
Programação Orientada a Objeto - Java Básico 6
Palavras chaves do Java• Distribuída
– A linguagem Java tem uma biblioteca extensa de rotinas para lidar com protocolos TCP/IP, como o HTTP e o FTP. Os aplicativos Java podem abrir e acessar objetos na Internet através de URLs com a mesma facilidade com que se acessa um arquivo no sistema local.
Programação Orientada a Objeto - Java Básico 7
Palavras chaves do Java• Robusta
– Java tem a intenção de escrever programas que precisam ser confiáveis de várias formas. O Java coloca muita ênfase na verificação antecipada de possíveis problemas, na verificação dinâmica em tempo de execução e na eliminação de situações sujeitas a erros. A única e grande diferença entre o Java e o C++ está em que o Java usa um modelo de ponterios que elimina a possibilidade de sobrescrita de memória e conseqüente destruição de dados.
Programação Orientada a Objeto - Java Básico 8
Palavras chaves do Java• Segura
– A linguagem Java tem a intenção de ser usada em ambientes de rede/distribuídos. Nesta direção, grande ênfase tem sido colocada na segurança. O Java permite a construção de sistemas livres de vírus e adulterações.
Programação Orientada a Objeto - Java Básico 9
Palavras chaves do Java• Arquitetura Neutra
– O compilador gera um formato de arquivo objeto neutro em relação à arquiteura - o código compilado é executável em muitos processadores, dada a presença do sistema Java em tempo de execução. O compilador Java daz isso gerando instruções em bytecodes que nada têm a ver com uma arquitetura particular de um computador específio. Em vez disto, elas são projetadas para serem fáceis de interpretar em qualquer máquina e convertidas facilmente para o código nativo da máquina em tempo real.
Programação Orientada a Objeto - Java Básico 10
Palavras chaves do Java• Portável
– Diferente das linguagens C e C++, não há aspectos “dependentes da implementação” na especificação da linguagem Java. Os tamanhos dos tipos de dados primitivos são especificados, assim como o comportamento da aritmética que os utiliza.
Programação Orientada a Objeto - Java Básico 11
Palavras chaves do Java• Interpretada
– O interpretador Java pode executar bytecodes Java diretamente em qualquer máquina para a qual tenha sido escrito. Como a ligação é um processo mais incremental e leve, o processo de desenvolvimento pode ser muito mais rápido e exploratório.
Programação Orientada a Objeto - Java Básico 12
Palavras chaves do Java• Alto desempenho
– Embora o desempenho dos bytecodes interpretados seja geralmente mais do que adequado, há situações em que é necessário um desempenho superior. Os bytecodes podem ser convertidos em tempo real para o código de máquina da CPU particular onde o aplicativo está executando.
Programação Orientada a Objeto - Java Básico 13
Palavras chaves do Java• Múltipla execução
– Os benefícios das múltiplas linhas d execução (threads) são melhor capacidade de resposta interativa e melhor comportamento em tempo real de execução.
Programação Orientada a Objeto - Java Básico 14
Índice de temas•Palavras chaves
•Statements
•Expressões
•Operadores
•Separadores
•Identificadores
•Literais
•Constantes
•Comentários
•Strings
•Objetos
•Arrays
Programação Orientada a Objeto - Java Básico 15
Estrutura básica de um programa Java• Um programa Java básico tem uma estrutura similar à seguinte:
package <nome_pacote>;import <classes_importadas>;
class <nome_classe> {public static void main (String[] args) :: }
}
Mais a frente nós veremostudo isto com mais detalhes
Equivalentes às bibliotecas do C
Existe uma associação de pacote c/ diretório
Todo programa Java é uma coleção de classes, ao menosuma das quais é pública e tem um função main
A função main é onde começao processamento em Java
Programação Orientada a Objeto - Java Básico 16
Palavras Chave• As palavras chaves do Java são palavras reservadas.
– Isto quer dizer que não podem ser usadas em nenhum outro contexto que não aquele para o qual foram definidas.
– Isto quer dizer que não podem ser usadas como nomes de variáveis, classes ou métodos.
• Combinadas com a sintaxe dos operadores e separadores formam a definição da linguagem Java.
Programação Orientada a Objeto - Java Básico 17
Palavras Chave do Javaabstract boolean break byte byvaluecase cast catch char class const continuedefault do double else extends false final finally float for future generic gotoif implements import inner instanceof int interface long native new null operator outerpackage private protected public rest returnshort static super switch synchronizedthis throw throws transient true try var void volatile while
Programação Orientada a Objeto - Java Básico 18
Palavras Chaves do Java
Como no C, o núcleo da linguagem é relativamente pequeno, sendo extendido usando-se bibliotecas (neste caso, de classes)
Entretanto, não se espera que se decore todas as palavras chaves imediatamente. Com o tempo e o uso, elas vão aos poucos entrando em nossa cabeça.
Programação Orientada a Objeto - Java Básico 19
Statements• Todo programa Java é composto de statements.
• Todas as statements são sensíveis a caso
• Todas as statements teminam com um ponto-e-vírgula (;).
• As statements são similares àquelas do C.
• Statements mais importantes : – atribuições– condicionais
– declarações de variáveis– estruturas de repetição
Programação Orientada a Objeto - Java Básico 20
Identificadores• Identificadores são usados para nomear variáveis, classes, métodos e quaisquer
outros elementos do Java. • Um identificador pode ser montado de acordo com as seguinte regras:
– O primeiro caracter deve ser uma letra.– A partir da segunda posição, pode-se usar livremente letras ou numerais.– O sublinhado (_) e o cifrão ($) são considerados letras e podem ser usadas
em qualquer posição, incluindo a primeira.• É de bom alvitre utilizar nomes descritivos.
– Salario é mais compreensível do que s– ClasseAutomovomeis é mais compreensível do que CA1
Programação Orientada a Objeto - Java Básico 21
Exemplos de Identificadores
• Válidos:– xpto– x123– $123– _x
• Inválidos– 1xpto– x-y– x^– y@
$ e _ são considerados como letras
Uso de caracteres inválidos
Identificadores têm que começar com letras
Programação Orientada a Objeto - Java Básico 22
Convenções usadas normalmente para nomes
• Classes: Primeira letra maiúscula, resto minúsculo
• Métodos e variáveis de objetos públicos : primeira letra minúscula e maiúscula para próxima palavra descritiva
parseInt, nextItem, currentValue, taxRate
• Variáveis locais e privadas: letras minúsculas e sublinhadonext_value, temp_value
• Constantes (final) : tudo maiúsculoTAXRATE_CA, CURRENCY_US
Programação Orientada a Objeto - Java Básico 23
Tipos Primitivos de Dados• Existem exatamente oito tipos primitivos de dados em Java
• Quatro representam inteiros:– byte, short, int, long
• Dois representam números em ponto flutuante:– float, double
• Um para representar caracteres:– char
• Um para representar valores lógicos (booleanos) :– boolean
Programação Orientada a Objeto - Java Básico 24
Tipos Primitivos Numéricos• A diferença entre os vários tipos numéricos primitivos é o seu
tamanho e conseqüentemente os valores que eles podem armazenar:
Tipo
byteshortintlong
floatdouble
Tamanho
8 bits16 bits32 bits64 bits
32 bits64 bits
Valor Mínimo
-128-32,768-2,147,483,648< -9 x 1018
+/- 3.4 x 1038 com 7 dígitos significativos+/- 1.7 x 10308 com 15 dígitos significativos
Valor Máximo
12732,7672,147,483,647> 9 x 1018
Programação Orientada a Objeto - Java Básico 25
Caracteres• Uma variável do tipo char armazena um único caracter do
conjunto de caracteres Unicode• Um conjunto de caracteres é uma lista ordenada de caracteres e
cada caracter corresponde a um único número• O conjunto de caracteres Unicode usa 16 bits por caracter,
permitindo armazenar 65,536 caracteres diferentes• É um conjunto de caracteres internacional, contendo símbolos e
caracteres de várias línguas mundiais (mas não todas )
Programação Orientada a Objeto - Java Básico 26
Caracteres• O conjunto de caracteres ASCII é mais velho e menor que o
Unicode, mas ainda é bastante popular.• Os caracteres ASCII são um subconjunto dos caracteres
Unicode, incluindo:
Letras maiúsculasLetras minúsculasPontuaçãoDígitosSímbolos especiaisCaracteres de Controle
A, B, C, …a, b, c, …ponto, ponto-e-vírgula, …0, 1, 2, …&, |, \, …carriage return, tab, ...
Programação Orientada a Objeto - Java Básico 27
Importante• Atenção, programadores de C:
Em Java não existem tipos unsigned O tipo char não é um tipo numérico - para converter de char
para inteiro precisamos de um cast explícito.
Programação Orientada a Objeto - Java Básico 28
Boolean
• Um valor boolean representa uma condição verdadeira ou falsa
• Um boolean pode ser usado também para representar dois estados, tais como ter uma lâmpada estar ligada ou desligada.
• As palavras reservadas true e false são os únicos valores válidos para o tipo boolean
boolean done = false;
Programação Orientada a Objeto - Java Básico 29
Expressões• Uma expressão é a forma mais simples de statement em
Java.
• É uma combinação de operadores e operandos.
• São usadas, por exemplo, no lado direito de atribuições e como parte de testes em statements condicionais.
• Atribuições : <lado_esquerdo> = <expressão>– onde <lado_esquerdo> é uma variável ou atributo.
Programação Orientada a Objeto - Java Básico 30
Expressões • Exemplos :
– yearEndBalance = 1788.555– x = 2 + 3 * 4– objeto1.atributo1=2*x/y;
•E se y for igual a zero?•Geraremos uma exceção•Aprenderemos a tratá-las mais tarde!
Programação Orientada a Objeto - Java Básico 31
Operadores• Como dissemos antes, uma expressão é uma combinação de
operandos e operadores para executar uma operação• Operandos : variáveis, valores literais ou expressões (definição
recursiva!).• Operadores : símbolos especiais para realizar operações
aritméticas e lógicas.
Programação Orientada a Objeto - Java Básico 32
Operadores Aritméticos• Java tem quatro operadores matemáticos básicos (+, -, *, /) e
um operador de módulo (%) para realizar a aritmética básica:
Operador Significado Exemplo + Adição 3 + 4 - Subtração 5 - 7 * Multiplicação 5 * 5 / Divisão 14 / 7 % Módulo 20 % 7
Programação Orientada a Objeto - Java Básico 33
Operadores Aritméticos de Atribuição
• Cada uma das operações aritméticas tem uma forma associada que tem uma atribuição associada que simplifica um tipo expecífico de operação
• Forma geral: variável operador = expressão• Equivale a: variável = variável operador expressão
Operador Significado Exemplo += Atribuição c/ adição a += 5 (a = a + 5) - = Atribuição c/ subtração b -= 3 (b = b - 3) * = Atribuição c/ multiplicação c *= 2 (c = c * 2) / = Atribuição c/ divisão d /= 7 (d = d /7) % = Atribuição c/ módulo e %= 10 (e = e % 10)
Programação Orientada a Objeto - Java Básico 34
Operadores incremento e decremento
• Assim como em C e C++, os oepradores ++ e -- podem ser usados para incrementar ou decrementar o valor de uma variável em 1.
• Por exemplo, a++ incrementa em 1 o valor de a, como se fizéssemos a = a + 1.
• Os operadores incremento e decremento podem ser prefixados ou pós-fixados; isto é, o ++ ou o -- podem aparecer antes ou depois dos valores a serem incrementados ou decrementados.
• O comportamento de ambas é distinto: no caso pré-fixado, primeiro incrementa (ou decrementa) e depois usa o valor enquanto que no pós-fixado, o incremento (ou decremento) é feito a posteriori.
Programação Orientada a Objeto - Java Básico 35
Operadores incremento e decremento
package exemplos;import java.lang.*;
public class Class3 { public static void main (String[] args) {
int a,b;a=5;b=1+ ++a;System.out.println("b="+b);System.out.println("a="+a);a=5;
b=1+a++;System.out.println("b="+b);System.out.println("a="+a);
}}
Programação Orientada a Objeto - Java Básico 36
Operadores de Comparação
• Java tem vários operadores para testar igualdade e magnitude. Todas estas expressões retornam uma valor lógico(verdadeiro ou falso)
Operador Significado Exemplo< Menor que x < 3> Maior que x > 3<= Menor ou igual que x <= 3>= Maior ou igual que x >= 3== Igual x == 3!= Diferente x != 3
Não valem para objetos (que são ponteiros)nem para strings (que são classes)
Programação Orientada a Objeto - Java Básico 37
Operadores Lógicos• Expressões que resultam em valores lógicos podem ser combinados usando os operadores lógicos
– Operadores de comparação– Variáveis lógicas– Funções que retornem valores lógicos– etc.
• Estão disponíveis: Operador Resultado & AND lógico | OR lógico ^ XOR lógico (ou exclusivo) && AND “curto circuitado” || OR “curto circuitado” ! NOT unário lógico
Programação Orientada a Objeto - Java Básico 38
Operações lógicas curto-circuitadas
• Usando &&, se o lado esquerdo da expressão for falso, toda a expressão é assumida falsa. O mesmo vale para o || quando o lado esquerdo é assumido como verdadeiro.
• Um caso interessante evitado é quando o lado direito da expressão gera um erro - usando operadores curto-circuitados, este erro é evitado.
• Exemplo: if (demo != 0 && num / demon > 10) if (demo != 0 & num / demon > 10)error message: java.lang.ArithmeticException: / by zero
Programação Orientada a Objeto - Java Básico 39
Avaliação de expressões
• Há três fatores de avaliação, em ordem:– Precedência do operador : algumas operações têm precedência sobre outras.– Associatividade do operador: se houver empate na regra acima, vê-se qual é a
associatividade de operadores de precedência igual.– Regras de ordem de avaliação: dizem não quando os operadores são avaliados,
mas sim quando os operandos são avaliados.
Programação Orientada a Objeto - Java Básico 40
Precedência de operadoresOperador Descrição[] () Chamada de funções, arrays e parênteses em expressões* / % Multiplicação, divisão e módulo + - Adição e subtração<< >> >>> Shift de bits (multiplicação por potências de 2)< > <= >= Testes de comparação lógicos== != Testes de igualdade& AND^ XOR| OR&& AND lógico|| OR lógico? : versão mais curta do if...then...else = op= operadores de atribuição
Programação Orientada a Objeto - Java Básico 41
Associatividade de operadores
• Os operadores aritméticos Java (e suas versões do mundo real) são associativos da esquerda para a direita.
• Isto significa que se o mesmo operador aparece mais de uma vez na expressão, a ocorrência mais à esquerda é avaliada primeiro, seguida por aquela da direita, e assim por diante.
• Exemplos:– x = a + b + c – y = a * b * c– z = a + b * c Não se aplica o conceito (não é o mesmo operador)
Vocês se lembram de algum operador da vida real que não segue esta regra?
Programação Orientada a Objeto - Java Básico 42
Ordem de avaliação• Para todos os operadores binários, o operando à esquerda é avaliado
antes do operando à direita do operador. • Todos os operandos são avaliados integralmente antes do operador
ser avaliado.• Se vários argumentos são mandados para um método/procedimento,
eles são avaliados da esquerda para a direita.• Exemplos
– a = x + y == 4 | a * b == 5– Celsius = Fahrenheit – 32 * 5 / 9– Celsius = ( Fahrenheit – 32 ) * 5 / 9
Programação Orientada a Objeto - Java Básico 43
Literais • Um literal é um valor que é colocado diretamente no código, que respeita
a regra de que “o que você digita é o que você obtém.” • Um literal consiste em uma constante que tem um tipo de dados associado
a ele. • Estes tipos podem ser:
– Inteiros: usados para representar números inteiros (subconjunto de Z). – Ponto flutuante: representa números decimais com componentes fracionários
(subconjunto de Q).– Booleanos: também chamados de lógicos, representam os valores true (verdadeiro) ou
false (falso). – Caracter: são expressados por um único caracter cercado por aspas simples (plics).– String: são combinações de caracteres. Em Java strings são uma classe que será
discutida com todo o cuidado mais à frente.
Programação Orientada a Objeto - Java Básico 44
Literais Numéricos• Literais inteiros são representados simplesmente por uma seqüência de dígitos.
Exemplos:– 123 ; -345 ; 2846556 ; 0 ; etc.
• Já literais de ponto flutuante normalmente têm duas partes : a parte inteira e a parte fracionária.
• Pode-se forçar um número inteiro a ser do tipo ponto flutuante colocando-se a letra f (ou F) ao fim daquele número.
• Também podemos usar notação científica, definindo um expoente antecedido pela letra e ou E
• Exemplos: – Notação padrão: 1003.45 ; 2f ; -13.873– Notação científica: 1.00345e3 ; 0.345E+11 ; 00345e-2 ; .00100345e6 ; etc.
Programação Orientada a Objeto - Java Básico 45
Literais booleanos• Usados para representar valores lógicos• As palavras chave, true e false, podem ser usadas em qualquer
lugar que for necessário usar um valor lógico.• Estes são os dois únicos valores que podem ser assumidos por
uma variável booleana.
É importante entender que não há correspondência entre valores lógicos e numéricos, como havia no C.
Programação Orientada a Objeto - Java Básico 46
Literais Caracter• Um literal caracter é representado por um caracter dentro de um par de aspas
simples (‘ ‘). • Exemplos: ‘a’ ; ‘z’ ; ‘9’ (diferente do número 9)• Alguns caracteres não visíveis, tais como o enter e o backspace, são
representados, como em C, pelos caracteres de escape :– \n CRLF– \t Tab– \b Backspace– \r CR– \f Form feed– \\ Barra invertida– \’ Aspas simples– \” Aspas duplas
Programação Orientada a Objeto - Java Básico 47
Literais strings• Um literal do tipo string é criado colocando-se qualquer texto entre aspas duplas.• Exemplos:
– “abc”– “a”– “”– etc.
• O interpretador Java automaticamente cria um objeto da classe String usando o valor do literal string como o valor armazenado neste objeto.
A classe string serávista com detalhes!
Programação Orientada a Objeto - Java Básico 48
Constantes • Como em todas as linguagens de programação, Java permite que
definamos constantes que recebem um nome para evitar utilização de valores literais.
• Afinal, é mais fácil entender porque o programador quis dizer quando ele usou C_SALARIO_MAXIMO do que quando ele usou 25000, não é mesmo?
• Para definir que um identificador é uma constante, basta colocar a palavra chave final em frente a ele.
Programação Orientada a Objeto - Java Básico 49
Constantes
• Logo, a sintaxe ficafinal datatype CONSTANTNAME = VALUE;
• Exemplos:final double PI = 3.14159; final int SIZE = 3;
Programação Orientada a Objeto - Java Básico 50
Separadores Símbolo Nome Propósito ( ) parênteses precedência { } chaves definição de métodos,
blocos de código. [ ] colchetes vetores ; ponto-e-vírgula fim de statement , vírgula identificadores consecutivos . Ponto separador de pacote, classes,
métodos e variáveis.
Programação Orientada a Objeto - Java Básico 51
Comentários• Os símbolos /* e */ cercam comentários de múltiplas linhas e todo o texto entre
eles é devidamente ignorado:
/* This is the beginning of my Java program. ... Please read it carefully ...*/
• Estes comentários não podem ser aninhados, isto é, não pode haver um comentário dentro de um comentário
• Barras duplas (//) podem ser usados para uma única linha de comentário. Todo o texto daquele ponto até o fim da linha será ignorado pelo interpretador.
taxrate = 0.075 // The tax rate for L.A. County
Comentários com // têm a vantagemde servir quando usarmos Javadoc
Programação Orientada a Objeto - Java Básico 52
Objetos
• Vamos começar agora a ver os conceitosde objetos.
• Não vamos ver profundamente, mas simentender como as variáveis se relacionamcom os objetos
Veremos depois os conceitos de classes e orientação a objetos
Programação Orientada a Objeto - Java Básico 53
Criando Objetos• Uma variável armazena um tipo primitivo ou uma referência para um
objeto• Um nome de classe pode ser usado como um tipo para declarar uma
variável de referência a um objeto
String title;
• Nenhum objeto foi criado com esta declaração• Assim como um ponteiro, uma variável de referência a um objeto armazena
o endereço do objeto.• O objeto deve ser criado separadamente usando as declarações apropriadas.
Programação Orientada a Objeto - Java Básico 54
• Nós usamos o operador new para criar um objeto
title = new String ("Java Software Solutions");
Este operador chama o construtor da classe String, queque é um método especial para inicializar o objeto
• O ato de criar um objeto é chamado de instanciação
• Um objeto é chamado de instância de uma classe particular
Criando Objetos
Programação Orientada a Objeto - Java Básico 55
• Dado que as strings são muito comuns, não precisamos usar o operador new para criar um objeto da classe String
title = "Java Software Solutions";
• Esta é uma sintaxe especial que funciona apenas para as strings.
• Uma vez que um objeto foi instanciado, podemos usar o operador ponto (dot operator) para chamar seus métodos
title.length()
Criando Objetos da classe String
Programação Orientada a Objeto - Java Básico 56
Métodos da classe string• A classe String tem vários métodos úteis para manipular strings,
como por exemplo:– char charAt(int index) retorna o caracter na posição dada pelo
índice– int compareTo(String str) compara a string com o parâmetro.
O retorno é igual ao strcmp do C– String concat(String str) concatena a string com o parâmetro– boolean equals(String str) verifica se duas strings são iguais.
Não podemos usar o sinal de igual para compará-las.– int length() retorna o comprimento da string.– String substring(int inicio, tam) retorna a string que começa na
posição dada por início e tem comprimento tam. A primeira posição de uma string é zero (como em C)
Programação Orientada a Objeto - Java Básico 57
Usando os métodos da classe Stringimport javax.swing.JOptionPane;
public class Max1 { public static void main (String[] args)
{ String senha=“Senha1”; String suaTentativa; int i=1; while ((i<=3)&&(!suaTentativa.equals(senha))) { suaTentativa=Integer.parseInt(JOptionPane.showInputDialog(“Senha:")); System.out.println(“Sua palavra tem ”+suaTentativa.length()+“letras”); i++; } if (i>3) {System.out.println(“Você não descobriu a senha.”);
System.exit(0);}
}
Programação Orientada a Objeto - Java Básico 58
• Lembre-se que quando usamos objetos, os métodos pertencem a eles
• Algumas vezes os métodos pertencem às classes, mas isto veremos depois.
• Logo, para chamar um método precisamos lembrar da sintaxe <objeto>.<método>({<parâmetros>});
Usando os métodos da classe String
Programação Orientada a Objeto - Java Básico 59
Usando os métodos da classe String• É isto que fizemos no exemplo: sempre que precisamos usar um método,
precisávamos saber a quem este método se aplicaria.
• Assim ,pudemos fazer as chamadas corretamente, sempre usando o formato: <objeto>.<método>({<parâmetros>});
• Exemplo : queremos saber o tamanho da string digitada. O método para isto é length(), mas a quem ele se aplica.
• Resposta : ao objeto suaTentativa. Logo, a chamada correta é suaTentativa.length()
Programação Orientada a Objeto - Java Básico 60
Bibliotecas de Classes• Uma biblioteca de classes é uma coleção de classes que podemos usar
quando desenvolvemos programas.• Existe uma Biblioteca de Classes Padrão Java (standard class library)
que é parte do ambiente de desenvolvimento Java.• As classes não são parte da própria linguagem Java, mas nós usamo-as
fortemente.• Parecido com o que acontecia com o C!• O printf também não era parte da linguagem C padrão, mas sim de
uma biblioteca.• Isto não impedia que nós o usássemos na maioria de nossos
programas
Programação Orientada a Objeto - Java Básico 61
Biblioteca de Classes• As classes System e String são parte da Biblitoeca Padrão
Java.• Existem várias outras classes nesta biblitoeca. Vamos vendo-as aos
poucos.• Outras bibliotecas podem ser criadas por vocês ou obtidas das mais
diversas fontes, como no caso do livro texto ou de fornecedores que as vendem.
Instalar uma classe é rapidinho : basta copiá-la para o HD e colocar seu diretório dentro da variável classpath
Programação Orientada a Objeto - Java Básico 62
Pacotes• As classes na biblioteca padrão de classes estão organizadas em
pacotes.• Pacotes são basicamente organizados em diretórios.• O ponto na declaração de import corresponde a um sub-diretório
não podemos ter pontos nos nomes de classes.• Alguns dos pacotes na biblioteca padrão de classes são:
Pacote
java.langjava.appletjava.awtjavax.swingjava.netjava.util
Propósito
Suporte genéricoCriação de applets para a webInterfaces gráficas e gráficosComponentes e capacidades gráficas adicionaisComunicação via redeUtilitários variados
Programação Orientada a Objeto - Java Básico 63
Vamos ver todos os pacotes no seu devido tempo!
Pacotes
Programação Orientada a Objeto - Java Básico 64
A declaração import• Quando quisermos usar uma classe de um pacote, temos que usar seu nome
completamente qualificado
java.util.Random
• Outra opção (a melhor delas!) é importar a classe usando uma declaração import no começo do programa e depois usar apenas o nome da classe
import java.util.Random;
• Para importar todas as classes em um determinado pacote, podemos usar o caracter de wildcard * (asterisco)
import java.util.*;
Programação Orientada a Objeto - Java Básico 65
• Todas as classes no pacote java.lang são automaticamente importadas para nossos programas
• Por isto não precisamos importar explicitamente este pacote ou qualificar completamente o nome das classes System ou String nos programas que usamos até agora.
A declaração import
Programação Orientada a Objeto - Java Básico 66
Exemplo de Criação e Uso de Objetosimport java.lang.*;
class Ponto { int x,y; //Coordenadas de um ponto Ponto (int a, int b) {x=a; y=b;} Ponto () {x=0;y=0;} public double distancia (Ponto p); {
int dx=this.x - p.x;int dy=this.y - p.y;return Math.sqrt(dx*dx+dy*dy);}
}
public class TestePonto { public static void main (String[] args) {
Ponto p1=new Ponto(2,3);Ponto p2=new Ponto();
System.out.println(p1.distancia(p2));}
}
Construtor da classe(Método polimórfico)
Criação de um objeto (chamadaao construtor da classe)
Como é uma classe pública, deve estar em um arquivo chamado TestePonto.java
Programação Orientada a Objeto - Java Básico 67
Objetos em Java• Em Java, um objeto na verdade é um ponteiro para o seu
conteúdo.
• Ele funciona igual aos ponteiros em C, mas não têm a mesma “aparência” (eles agem como variáveis normais).
• Seja a definição que vimos anteriormente
Ponto p1=new Ponto(2,3);
• A verdadeira representação do que acontece na memória é:
p1 Objeto do tipo Ponto2x
3y
Programação Orientada a Objeto - Java Básico 68
Objetos em Java• Assim, imagine a seguinte seqüência de instruções
Ponto p=new Ponto(2,3);Ponto b;b=a;b.y=b.x
• Quanto vale a.y?
2x
3ya
Depois da criação de a
Depois da atribuição de b
b
2
Depois da atribuição de b.y
Logo, a.y=2
Programação Orientada a Objeto - Java Básico 69
Mais objetos em Java• Assim, imagine a seguinte seqüência de instruções
Ponto p=new Ponto(2,3);Ponto b;b=a;b=null;
• Quanto vale a?
2x
3ya
Depois da criação de a
Depois da 1a. atribuição de b
b
Logo, a permanece inalterado!
Depois da 2a. atribuição de b
Programação Orientada a Objeto - Java Básico 70
Vetores (Arrays)• Um array é uma área contígua de memória que armazena zero ou
mais elementos do mesmo tipo, endereçáveis através de um índice.
Elemento1Elemento2Elemento3Elemento4
meuArray
• Assim como no C, os índices do array começam em zero e crescem. O primeiro elemento de um array é acessado como myArray[0]
Ao contrário do C, arrays não são ponteiros disfarçados, pois não há ponteiros (explícitos) em Java
Programação Orientada a Objeto - Java Básico 71
Arrays• Ao contrário do C, em Java os arrays são na realidade instâncias de objetos. O
significado verdadeiro disto ficará claro mais à frente.
• Existem duas maneiras de declarar um array:int[] integerArray;int integerArray2[];
Qual das duas é melhor?Use o segundo formato (int integerArray[]). É mais próximo ao C, logo mais compreensível para todos.Entretanto, muitas pessoas preferem o primeiro formato, logo vocês podem ver isto
em códigos alheios.
Programação Orientada a Objeto - Java Básico 72
Alocando um Array As declarações acima só criam a variável que se refere ao array, mas
não aloca espaço para este.
• Já que o array é um objeto, isto é esperado. Lembre-se que variáveis de objetos nada mais são que ponteiros
disfarçados.
• Nós temos que alocar espaço usando uma das seguintes maneiras:– Inicialização explícita– Usando o operador new
Programação Orientada a Objeto - Java Básico 73
Alocando um Array
• Se você inicializar explícitamente um array, o espaço necessário para ele é automaticamente alocado.
int ponto[] = {4, 17, 13};int ponto2[] = ponto;double velocidade[] = {12.1, 55.2, 70.4, 6};
41713
pontoponto2
Programação Orientada a Objeto - Java Básico 74
Alocando um Array• Se você não alocar espaço usando inicialização explícita, você
pode fazê-lo usando o operador new.
• Este operador aloca um pedaço contíguo de memória para armazenar os dados do array.
int meuArray[] = new int[5];double velocidade[] = new double[3];
• Usando o operador new, não é necessário inicializar os elementos do array.
O JDK inicializa todos os elementos de arrays numéricos com zeros, mas
nãonão se deve confiar nisto.
Programação Orientada a Objeto - Java Básico 75
• Note-se que o seguinte C-ismo não é permitido em Java:
int myArray[10];
Você receberá um erro de compilação se tentar fazer isto. As únicas maneiras de alocar espaço para um array são através de inicialização explícita e através do operador new.
Alocando um Array
Programação Orientada a Objeto - Java Básico 76
Tamanho de um array• Podemos determinar o tamanho de um array em tempo de
execução usando-se o atributo length (que é uma constante) do objeto Array em questão:
myArray.length;• Isto aumenta a manutenibilidade do código. • Exemplo: qual dos dois códigos abaixo é mais fácil de manter se o
tamanho do array for modificado?
int myArray[] = {1, 2, 3, 4, 5};
for(int idx=0; idx < 5; idx++) System.out.println(myArray[idx]);
for(int idx=0; idx < myArray.length; idx++) System.out.println(myArray[idx]);
Programação Orientada a Objeto - Java Básico 77
Tamanho de um array• Lembre-se sempre que os índices de um array começam em zero.
• Um erro comum é começar a contar em 1 e tentar acessar algo além do fim do array.
• Em C/C++ isto pode causar problemas catastróficos (escrever por cima de dados valiosos, entre outros) e o programa pode passar a comportar-se misteriosamente.
• Em Java todos os acessos a rrays são checados contra o tamanho limite antes de serem efetuados.
Programação Orientada a Objeto - Java Básico 78
Verificação de Limites
int myArray[] = {1, 2, 3, 4, 5};
for(int idx = 0; idx < 6; idx++){ System.out.println(myArray[idx]);}
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException at Arrays.main(Arrays.java:34)
Programação Orientada a Objeto - Java Básico 79
Verificação de limites• Podemos usar as capacidades de tratamento de erro do Java (que
veremos com cuidado mais a frente), de forma que o programa não seja interrompido: try{ for(int idx=0; idx < 6; idx++) { System.out.println(myArray[idx]); }}catch (ArrayIndexOutOfBoundsException indexException){ System.out.println(“Index out of bounds”);}
Programação Orientada a Objeto - Java Básico 80
Arrays de mais de uma dimensão• Podemos criar arrays de mais de uma dimensão, como por exemplo
um array bi-dimensional:
int twoDimensions[][]= {{1, 2}, {3, 4}};double map[][] = new double[4][8];
System.out.println(map.length);System.out.println(map[0].length);
Podemos adicionar quantas dimensões forem necessárias para nosso programa.
Programação Orientada a Objeto - Java Básico 81
Passando Arrays para Métodos• É importante entender algo: se passarmos um array como um
parâmetro para um método, toda modificação de seu conteúdo será vista fora do método também.
• Isto é, todos os arrays são passados por referência e podem ser modificados dentro do método para o qual são passados.
• Isto, é claro, vale para todos os objetos. Já que eles na verdade são ponteiros, ao passá-los por valor, estamos fazendo uma passagem por referência do que eles apontam
Programação Orientada a Objeto - Java Básico 82
Passando Arrays para Métodos
Quando discutirmos classes e seus métodos, vamos voltar a este tópico que será então discutido exaustivamente.
Entretanto, é sempre importante lembrar: objetos são, na realidade, ponteiros.
Saber isto vai evitar que sejamos enganados e cometamos erros bobos.
Programação Orientada a Objeto - Java Básico 83
Arrays Dinâmicos?
• Não é permitido modificar o tamanho de um array uma vez que ele já foi alocado.
• O atributo length é do tipo final (constante).
• Não dá para fazer um array ser mais curto ou mais longo.
• Para fazer isto, temos que alocar um novo array e copiar os dados do original para o novo.