Buscar

Apostila_COMPLETA__Alunos_ate_Arquivos_2_2010

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 86 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 86 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 86 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Programação Orientada a Objetos II 
 
(Linguagem Java) 
 
 
 
A partir de trechos meus [Jane Tavares A. da Silva - JTAS] e de trechos das 
apostilas do Prof. Adriano Caminha [AC], Prof. Francisco Santos [FS]. e da Profa. 
Letícia Winkler [LK]. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 1 
 
 
 
Bibliografia 
 
 Bibliografia básica: 
 
1. DEITEL, H. M.; DEITEL, P. J. Java: Como Programar. 6ª Edição. São Paulo: 
Pearson Prentice Hall, 2005. 
2. HORSTMANN, Cay; CORNELL, Gary. Core Java 2 – Volume I: Fundamentos. 
São Paulo: Pearson Makron Books, 2001. 
 
 Bibliografia complementar: 
 
1. CAMARÃO, Carlos; Figueiredo, Lucília. Programação de computadores em 
Java. Rio de Janeiro: LTC, 2003 
2. HORSTMANN, Cay S. Big Java. Porto Alegre ; Bookman, 2004. 
 
 
 
 
AVISO: Este material não pretende substituir nenhuma outra apostila, e muito menos 
qualquer livro. 
 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 2 
 
 
1. Introdução 
 
 
1.1. Paradigmas das linguagens de programação [FS] 
 
 A maioria das linguagens de programação são extensas e complexas e 
normalmente integram várias idéias. No entanto, cada linguagem baseia-se, 
normalmente, numa idéia central, ou paradigma. 
 Existem 4 paradigmas (principais) de programação: 
o Paradigma Imperativo: Baseado em comandos e procedimentos. 
Ex.: Pascal, C, Fortran. 
o Paradigma OO: Baseado em objetos e classes. 
Ex.: Java, Smalltalk, Simula, C++. 
o Paradigma Funcional: Baseado em funções. 
Ex.: Lisp, ML, Scheme, Haskell. 
o Paradigma Lógico: Baseado na lógica de predicados (fatos e regras) 
Ex.: Prolog. 
 Obs: Linguagens de Marcação (HTML) ≠ Linguagens de Programação. 
Linguagens de Marcação não especificam computações, elas apenas 
descrevem a aparência geral de documentos. 
 
 
1.2. Fundamentos básicos de programação em Java [FS] 
 
Programação Estruturada x Programação Orientada a Objetos - POO 
 
 A principal diferença entre o enfoque tradicional da análise estruturada e o 
enfoque da O.O. está na forma pela qual dados e procedimentos se comunicam. 
 
 Análise Estruturada 
 
 Ênfase nos procedimentos 
 Comunicação através de passagem de dados (parâmetros) 
 Programa = execução de procedimentos cuja tarefa é a manipulação de 
dados 
 
 Análise Orientada a Objetos (AOO) 
 
 Dados e procedimentos fazem parte de um só elemento básico (objeto ou 
classe) 
 Dados e procedimentos encapsulados em um só elemento. 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 3 
 
 
NOTE : 
 
Programação Estruturada 
 
DADOS + FUNÇÕES 
 
Programação Orientada a Objetos (POO) 
 
Atributos 
(dados) 
+ 
Métodos 
(funções) 
 
 
1.3.Vantagens e características da linguagem Java [JTAS] 
 
 Java como uma linguagem de programação: 
 
 Desenvolvida na década de 90 por James Gosling da Sun 
Microsystems 
 Orientada a Objetos 
 Independente de plataforma (portável) : Não há aspectos ―dependentes 
da implementação‖. Por exemplo: Os tipos primitivos têm tamanhos 
determinados . 
 Uso de recursos de rede 
 Segurança : Para ser usada em ambientes de rede/distribuídos. 
Mecanismos para sistemas livres de vírus e adulterações, pacotes para 
criptografia 128 bits, etc. (Não se pode provar que é 100% segura, mas 
é certamente a linguagem mais segura até hoje por causa destes 
mecanismos) 
 
 Simples (sintaxe similar a C/C++) 
 Internacionalização (UNICODE) 
 Distribuída e multitarefa : Os programas podem utilizar recursos na 
Internet com a mesma facilidade que acessam arquivos locais. Lidam 
com TCP/IP, HTTP, FTP. 
 
 Carga dinâmica de código : Java foi projetada para se adaptar a um 
ambiente em evolução. As bibliotecas podem adicionar livremente 
novos métodos e variáveis a qualquer instante (mesmo em execução). 
 
 Desalocação automática de memória (garbage collection) 
 
 
 
 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 4 
 
 Java possui 3 tipos de programas, levando em conta como e quando eles são 
executados: 
 Applications: programas stand-alone que englobam todos os recursos 
de acesso ao Sistema Operacional. Semelhantes aos programas 
convencionais. 
 Applets: programas que são carregados através de uma rede TCP/IP 
de um servidor remoto e são executados localmente pela JVM no 
escopo de um browser. A JVM impõe uma série de restrições aos 
applets por questões de segurança. 
 Servlets: programas que são executados remotamente em um servidor 
Web através de um servlet container. São usados para gerar conteúdo 
dinamicamente. 
 
1.4. Conceitos Básicos em O.O. [FS] 
 
 Objeto  entidade composta por dados (atributos/características) e 
procedimentos para manipulação desses dados(métodos) 
 Classe  objetos com características semelhantes são agrupados em uma 
classe. Dados e procedimentos associados a uma classe são chamados de 
membros da classe. 
 
Ex. Sistema para informatização de uma loja comercial. 
 Classe: Funcionário 
 Objeto: José da Silva 
 atributos: nome, endereço,data de admissão, salário base, etc. 
 métodos (procedimentos): calcular salário liquido, mostrar dados, etc. 
 
 
1.5. Alguns conceitos ERRADOS Sobre JAVA [AC] 
- Java é uma extensão do HTML. 
- Java é fácil de aprender: 1.500 classes e interfaces, sendo necessário 
conhecer muitas delas para se construir programas profissionais. 
- Java é um ambiente fácil de programação: existem ambientes gráficos de 
programação, mas o melhor caminho para se aprender é um editor simples 
como o bloco de notas. 
- Java é interpretada, ou seja, lenta para aplicações sérias: isto pode ser 
resolvido com o uso de compiladores JIT (Just In Time) que compilam na 
primeira vez que a aplicação é usada. Não importa que C++ seja mais rápida, 
Java é mais fácil de programar e é portável. 
- Todos os programas Java executam dentro de uma página Web. 
- Os applets Java são um grande risco à segurança: nenhuma linguagem é 
100% segura, mas as falhas estão sendo corrigidas e o risco é muito menor 
que o encontrado em controles ActiveX. 
- Javascript é a versão mais simples da Java: Javascript foi inventada pela 
Netscape e apenas utiliza uma sintaxe parecida com a de Java, nada mais 
tem a ver com Java. 
 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 5 
 
1.6. A Plataforma Java – Características : [JTAS] 
 
 O termo plataforma normalmente é usada para designar um conjunto 
Hardware + Sistema Operacional. 
 A plataforma Java é definida apenas em software e possui dois componentes: 
 Máquina Virtual Java (JVM) 
 Conjunto de bibliotecas que disponibilizam funções comuns (API Java) 
 
 Diferentemente das linguagens convencionais, que são compiladas para código 
nativo, a linguagem Java é compilada para ―bytecode" (gerando o .class) que 
é executado por uma máquina virtual (JVM – Java Virtual Machine). 
 
Bytecodes interpretados 
 
 Código fonte 
 
 
 
 O modelo inicial (vide figura), que favorece a portabilidade do código, 
através da interpretação dos bytecodes, foi praticamente substituído por 
outro em que a interpretação dos bytecodes é substituída por outra 
compilação (a compilação dos bytecodes), que ocorre quando o programa 
é executado (compilador JIT , isto é, just-in-time). Essa mudança foi 
fundamental para tornar Java uma linguagem de alto desempenho. 
 
Obs.: compilar just-in-time : o código é compilado quando está em vias de ser 
executado. 
 
 A linguagem Java representa um esforço na direção do conceito 
write once, run everywhere (“escreva uma vez, execute em todo lugar”) 
 Uma máquina virtual (Virtual Machine – VM) pode ser definida como ―uma 
duplicata eficiente e isolada de uma máquina real‖. 
 A JVM é, então, uma máquina ‗imaginária‖ que é implementada através da 
emulação por software usando uma máquina real. 
 Com a JVM existe uma camada extra entre o sistema operacional e a 
aplicação,responsável por ―traduzir‖ (não é apenas isso) o que sua 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 6 
 
aplicação deseja fazer para as respectivas chamadas do sistema 
operacional no qual ela está rodando no momento. Veja a figura : 
 
 
 A especificação da Máquina Virtual Java fornece as especificações da 
plataforma de hardware para a qual todo o código Java está compilado. Essa 
especificação permite que os programas Java sejam independentes de 
plataforma . 
 
 A plataforma Java é composta por 3 outras plataformas: 
 J2SE ou Java SE (Java Standard Edition): é a base da plataforma e 
inclui o ambiente de execução e as bibliotecas comuns. 
 J2EE ou Java EE (Java Enterprise Edition): versão voltada para o 
desenvolvimento de aplicações corporativas. Ex: Servlets 
 J2ME ou Java ME (Java Micro Edition): versão voltada para o 
desenvolvimento de aplicações móveis ou embarcadas. Ex: celular 
 
 
1.7. O Ambiente de Desenvolvimento [JTAS] 
 
 Java 2 System Development Kit (J2SDK) 
 Coleção de ferramentas de linha de comando para, entre outras tarefas, 
compilar, executar e depurar aplicações Java 
 
Ex: JRE, javac, javadoc, etc. 
 
 Java Runtime Environment (JRE) 
 Tudo o que é necessário para executar aplicações Java 
 Parte do J2SDK e das principais distribuições Linux, MacOS X, AIX, 
Solaris, Windows 98/ME/2000 
 
 Portanto, lembre-se de baixar o JDK (java development kit, ou seja, kit de 
desenvolvimento java), e não o JRE (java runtime environment, isto é, ambiente de 
execução java). O JDK já vem com um JRE, porém o contrário não é verdade. O 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 7 
 
JRE vem sem compilador e ferramentas para desenvolvimento. Acesse o site da 
Sun (java.sun.com) ou até o GUJ (www.guj.com.br). Neste último, é possível achar 
artigos que mostrem, em português, o passo-a-passo da instalação desejada. 
 
 
1.14. Exemplo de uma Aplicação 
 
 Estrutura de uma aplicação Java: [JTAS] 
 Uma aplicação Java é composta de um ou mais arquivos com 
extensão .java 
 Cada arquivo .java deve conter uma e somente uma classe pública. 
 O nome do arquivo .java tem que ser igual ao nome da classe pública 
que ele contém. Isso acontece porque a JVM usa o nome da classe 
para saber em que arquivo ela se encontra. 
 Cada arquivo .java quando compilado gera um arquivo com o mesmo 
nome com extensão .class. Esse é o arquivo que contém o bytecode 
que será executado pela JVM. 
 Os arquivos .java não precisam estar em um mesmo diretório. Eles 
podem ser organizados em uma hierarquia de diretórios de acordo com 
a finalidade de cada um. Esses diretórios são vistos pela JVM como os 
diversos pacotes que compõem a aplicação. 
 Podemos dizer, então, que uma aplicação Java mínima é composta de 
um único arquivo .java contendo uma única classe. 
 
 Um Programa Simples em JAVA [AC] 
- Veremos inicialmente o mais simples programa JAVA: 
 
 package exemplo; 
public class Primeiro 
{ 
 public static void main (String[] args) 
 { 
System.out.println(“É simples !!!”); 
 } 
}//cuidado com as aspas do MS Word! São diferentes! 
 
 - Esta mini-aplicação em Java imprime um texto na tela quando executada via 
linha de comando 
- Após compilar e executar este programa, nós vamos analisar suas partes 
principais, que se repetem na maioria dos programas JAVA: 
o A palavra-chave public é um modificador de acesso; esses 
modificadores controlam o que outras partes de um programa podem 
usar desse código; 
o A palavra-chave class está lá porque tudo em JAVA está dentro de 
uma classe; por enquanto, uma classe é um projeto preliminar para os 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 8 
 
dados e métodos (funções) que serão parte do aplicativo; um aplicativo 
pode ser composto por uma ou mais classes; 
o Os nomes das classes (neste exemplo a palavra Primeiro) precisam 
começar com uma letra e depois desta quaisquer combinações de 
letras e dígitos; como padrão, os nomes são substantivos que iniciam 
com uma maiúscula; 
o Para começar a execução do programa compilado, o interpretador vai 
iniciar sempre pelo método main da classe indicada; é absolutamente 
necessária a presença do main (por se tratar de um aplicativo); 
o As chaves, { e }, delimitam os blocos de comandos em JAVA; 
o Os cabeçalhos do método main são sempre idênticos ao exemplo 
acima; 
o A palavra reservada static significa que o método é estático. Uma 
classe que contém apenas métodos estáticos pode ser executada sem 
a necessidade de instanciar a classe; 
o A palavra reservada void quer dizer que o método não retorna valor, 
não tem resposta para o método que o chamou; 
o Neste exemplo o método main contém apenas uma instrução (ou 
comando ou sentença da linguagem): a instrução utiliza o método 
println do objeto System.out, para exibir uma string na console 
padrão; cada chamada de println escreve uma nova linha; 
o Java usa a sintaxe geral: 
objeto.método(parâmetros); 
o Os métodos em JAVA podem ter zero, um ou mais argumentos, até 
mesmo o main, mas mesmo que o método não tenha argumentos, ele 
terá que possuir parênteses vazios na sua assinatura; 
o Existe também o método print em System.out, que imprime sem 
quebra de linha no final. 
o Comentários sobre pacote (package) : 
  Fica fácil notar que a palavra chave package indica qual o 
pacote que contém a classe Primeiro. Um pacote pode conter 
nenhum, um ou mais subpacotes e uma ou mais classes dentro 
dele. 
 Quando não se põe a linha do pacote, temos um pacote 
anônimo. 
 Os nomes dos pacotes devem ser formados apenas de letras 
minúsculas, não importa quantas letras estejam contidas nele. 
 As classes do pacote padrão de bibliotecas não seguem essa 
nomenclatura, que foi dada para bibliotecas de terceiros. 
 
 
 Unidades de Compilação 
- Três elementos top-level conhecidos como compilation units, não obrigatórios, 
aparecem em um arquivo Java na seguinte ordem: 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 9 
 
o Declaração de pacote: package 
o Declarações de importação: import 
o Definições de class, interface ou enum 
- Uma declaração de pacote serve para indicar um caminho de pastas onde 
deverão estar os arquivos (.class) do pacote. Por exemplo: package 
pasta1.pasta2; indica que os arquivos do pacote estão em pasta2 que 
está dentro de pasta1. Falaremos de pacote mais adiante. 
- Uma declaração de import serve para importar uma ou todas as classes de 
um pacote. O caminho indicado no import é justamente um caminho de 
pastas. Asterisco significa todos os arquivos da pasta (mas não das 
subpastas). 
- É preciso tomar cuidado com ambigüidade nos comandos import. Por 
exemplo, ao utilizar a classe Date, se importou java.util.* e 
java.sql.* (ambos contêm classes Date diferentes), certifique-se de 
importar explicitamente Date do pacote desejado (por exemplo, 
java.util.Date). 
 
- Exemplo Modelo: 
 
package org.templojava; 
//nome do pacote pode ser o endereço web invertido 
import java.util.SimpleDateFormat; //importa classe 
import java.util.*; 
//o compilador importa classes utilizadas no código 
 
public class Exemplo 
{ 
//codigo 
} 
 
 Pesquisando na Referência da Linguagem Java 
- Verifique a referência para cada nova classe que for estudada. 
 Acesse: http://java.sun.com/ 
 
 
 
 
 
 
 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 10 
 
2. Estruturas Básicas de Programação[AC] 
 
2.1. Comentários em JAVA 
- 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 escrever 
o comentário em várias linhas. 
*/ 
- Os comentários não podem ser aninhados em JAVA, ao contráriode outras 
linguagens. 
 
2.2. Tipos de Dados 
 
- 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. 
 
a) Inteiros [JTAS] 
 
Tipo Tamanho 
(bytes) 
Faixa de valores Tipo 
 byte 1 -128 à 127 byte 
 short 2 -32768 à 32767 short 
 int 4 -2147483658 à 2147483657 int 
 long 8 -9223372036854775808 à 
9223372036854775807 
 long 
 
- 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; 
 
b) Ponto Flutuante [JTAS] 
 
Tipo Tamanho (bytes) Faixa de valores 
Float 4 ±3.40292347E+38 
(6-7 dígitos decimais significantes) 
double 8 ± 1.79769313486231570E+308 
(15 dígitos decimais significantes) 
 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 11 
 
- O tipo double tem duas vezes a precisão do float. 
- O double é usado na maioria dos casos. 
- Os valores mínimos e máximos seguem os correspondentes na tabela dos 
inteiros. 
 
c) O Tipo Caracter (char) 
- Apóstrofos definem valores char; por exemplo „J‟ é um caractere e “J” é uma 
string contendo um único caractere. A faixa é de 0 a 216-1 (16 bits), conjunto 
Unicode de caracteres. 
 
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 
 
d) O Tipo Lógico (Boolean) 
- O tipo boolean tem dois valores possíveis, false ou true. e são 
armazenados em 1 byte. 
 
2.3. Declaração de Variáveis em Java 
- Declaram-se as variáveis Java colocando o tipo primeiro e depois o nome da 
variável, finalizando com ponto e vírgula. 
- Exemplos: 
 
byte b; 
 
int numerointeiro1, numerointeiro2; 
 
long inteirolongo; 
//para o valor da nossa dívida externa em centavos 
 
char letra; 
 
- Um identificador precisa iniciar com uma letra e ser uma seqüência de letras ou 
dígitos; 
- Podem ser usados símbolos como ‗_‘, ‗‘ ou qualquer outro do Unicode 
(conjunto de caracteres utilizado por Java), mas não é aconselhável usar 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 12 
 
principalmente caracteres com acento, por causa da diferença de conjuntos de 
caracteres nos vários sistemas operacionais (questão de visualização correta 
do símbolo). 
- Comumente não são usados símbolos para nomenclatura em Java, é mais 
simples usar letras e números, além de seguir as convenções para cada tipo de 
identificador (classes iniciam com maiúsculas, métodos com minúsculas, 
variáveis com minúsculas, constantes são escritas com maiúsculas, etc). 
- Não podem ser usados espaços em nomes de variáveis ou de identificadores 
quaisquer; 
 
2.4. Atribuições e Inicializações 
- 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. 
 
2.5. Constantes 
- A palavra final denota uma constante (utilize maiúsculas nos nomes das 
constantes): 
final double CMPORPOL = 2.54; 
 
Exemplo : 
 
public class Constantes 
{ final double G = 9.81; 
 //gravitação 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.”); 
 } 
} 
 
 
2.6. Operadores Aritméticos 
- Operadores aritméticos: + para adição, - para subtração, * para multiplicação e / 
para divisão; 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 13 
 
- 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; 
 
2.7. Exponenciação 
- Não há operador para exponenciação, deve-se usar o método pow da classe 
Math, ou seja, Math.pow(operando, expoente). 
- Para xa, temos: 
double y = Math.pow (x, a); 
 
 
 
 Outros métodos da classe Math 
- Math faz parte do pacote java.lang. Não é necessário importar este 
pacote, nunca. Podemos usá-la diretamente, com atenção para os argumentos 
de cada função. Verifique na referência de Java toda a lista de métodos de 
Math. 
 
Método Descrição Exemplo 
abs (x) Valor absoluto de x Se x = -3, então abs(x) é 3. 
ceil (x) Arredonda para o próximo inteiro 
maior que x 
Se x = 6.7, ceil(x) é 7. 
Se x = -6.8, ceil(x) é –6. 
floor (x) Arredonda para o próximo inteiro 
menor que x 
Se x = 6.7, floor(x) é 6. 
Se x = -6.8, ceil(x) é –7. 
max (x, y) Maior valor entre x e y max(3, 4) é 4. 
min (x, y) Menor valor entre x e y min(3, 4) é 3. 
sqrt (x) Raiz quadrada de x sqrt(9) é 3. 
PI Valor da constante PI 3.14159265358979323846 
 
 
2.8. Operadores para Incremento e Decremento 
 
- Adicionar ou subtrair 1: 
int x = 10; x++; //adiciona 1 ao valor de x, x=11 
x--; //subtrai 1 do valor de x, x=10 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 14 
 
int y = 5 + ++x; //incrementa x antes, y=16, x=11 
//ou, se a posição do operador estivesse trocada: 
int y = 5 + x++; //incrementa x depois, y=15, x=11 
 
2.9. Conversões entre Tipos Numéricos 
- Algumas conversões são permitidas diretamente: 
o byte  short  int  long  float  double 
o char  int  long  float  double 
 
- Em operações binárias, serão seguidas as seguintes regras: 
o Se um dos operandos for double, o outro será convertido para 
double; 
o Se um dos operandos for float, o outro será convertido para float; 
o Se um dos operandos for long, o outro será convertido para long; 
o Mesma regra para int, short e byte. 
 
- Ou seja, o ―maior‖ tipo sempre manda na expressão, inclusive String (que 
veremos mais a frente). 
- Conversões explícitas de tipo ou casts são conversões onde são permitidas 
perdas de informação: 
double x = 9.997; 
int nx = (int) x; 
 
- Nesta conversão, a variável nx terá o valor final 9, pois a parte fracionária será 
descartada. 
 
- Se for necessário arredondar um número de ponto flutuante para o inteiro mais 
próximo, um dos métodos que pode-se usar é o método Math.round (Math é 
uma classe de java.lang, pacote padrão da linguagem): 
 
 double x = 9.997; 
 int nx = (int) Math.round (x); 
 
- Nesta conversão, a variável nx terá o valor final 10. Mas fique atento, round 
retorna um long, então ainda é necessário usar o cast se for preciso 
armazenar em uma variável de outro tipo. É aconselhável sempre testar os 
valores obtidos com conversões explícitas, a fim de garantir o resultado 
desejado. 
- O pacote java.lang é usado naturalmente na compilação, nunca é preciso 
incluir (importar) este pacote. 
 
 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 15 
 
2.10. Operadores Relacionais e Lógicos 
- Igualdade: (3 == 7) , tem resultado false; 
- Desigualdade: (3 != 7) , tem resultado true; 
- Os outros operadores mais comuns ‗>‘, ‗<‘, ‗>=‘, ‗<=‘, são usados nestas formas 
mesmo. 
- Para o and lógico, usa-se ‗&&‘, para o ou lógico, usa-se ‗||‘. O operador de 
negação é o ‗!‘. 
 
2.11. Hierarquia de Operadores e Parênteses 
- Como em todas as linguagens, é melhor usar parênteses para indicar a ordem 
das operações. A tabela de hierarquiade operações em Java é: 
 
Operadores Associatividade 
[], . (ponto), () (chamada de método) ESQ para DIR 
!, ~, ++, --, + (unário), - (unário) , () (cast), new DIR para ESQ 
*, /, % ESQ para DIR 
+, - ESQ para DIR 
<, <=, >, >=, intanceOf ESQ para DIR 
==, != ESQ para DIR 
&& ESQ para DIR 
|| ESQ para DIR 
?: ESQ para DIR 
=, +=, -=, *=, /=, %= DIR para ESQ 
 
2.12. 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á”; 
 
a) Concatenação 
String uniao = ―use o sinal de + para ‖ + ―concatenar Strings‖; 
 
b) 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 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 16 
 
o posicaolimite a posição imediatamente posterior à ú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”; //0=B,1=e,2=m 
String s = saudacao.substring(0, 3); //s = “Bem” 
//o espaço na posição 3 não é incluído 
 
c) 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 
 
- Para descobrir o caracter na posição n de uma string, usa-se o método 
nomestring.charAt(n): 
String saudacao = “Bem vindo”; 
char letra3 = saudacao.charAt(2); //letra3 = m 
 
d) Teste de Igualdade entre Strings 
- Para testar se duas strings são iguais, usa-se 
nomestring1.equals(nomestring2). O valor true será retornado se 
forem iguais. Ex: 
 
String saudacao = “Bem vindo”; 
boolean igual = “Bem vindo”.equals(saudacao); 
//igual = true 
 
- Para testar se duas strings são iguais ignorando maiúsculas e minúsculas, usa-
se nomestring1.equalsIgnoreCase(nomestring2). 
 
 Uma classe pré-definida - Métodos da Classe java.lang.String 
- A classe java.lang.String possui muitos métodos (verifique na referência 
da linguagem outros métodoS também úteis). A referência da linguagem está 
acessível a partir de http://java.sun.com/ ou no javadoc que foi instalado junto 
com seu JDK. Seguem alguns métodos interessantes, dos quais uns já foram 
especificados acima: 
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 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 17 
 
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 
o String toUpperCase() 
//retorna uma nova string convertendo minúsculas para maiúsculas 
o String trim() 
//elimina espaços iniciais e finais 
 
2.13. Comandos de Decisão 
 
a) Comando if 
 
- Forma mais simples: 
if (condicao) instrucao; 
 
- Com bloco de instruções: 
if (condicao) 
{ instrucao1; 
 instrucao2; 
 ... 
} 
 
- Forma mais simples com else: 
if ( condicao ) instrucao1 else instrucao2; 
 
- Forma com else e bloco de instruções: 
if ( condicao ) 
{ instrucao1; 
 instrucao2; 
 ... 
} 
else 
{ instrucao1; 
 instrucao2; 
 ... 
} 
 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 18 
 
 
- Exemplo Maior.java: 
 
public class Maior 
{ 
 public static void main (String[] args) 
 { int a = 5; 
 int b = 3; 
 
 if ( a > b ) 
 { System.out.println(“O maior é ” + a); 
 } 
 else 
 { System.out.println(“O maior é ” + b); 
 } 
 } 
} 
 
b) 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, a não 
ser que a versão do JDK instalado seja a partir da 1.5 que aceita objetos 
Enumeration. (veja a referência da linguagem) 
- 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. 
 
 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 19 
 
2.14. Comandos de Repetição 
 
a) Comando for (para-faça) 
- Se soubermos quantas vezes o conjunto de instruções deve ser processado, o 
mais simples é usar o comando for: 
for (instrucao1; expressao1; expressao2) { bloco } 
 
- Exemplo ContagemRegressiva.java: 
 
public class ContagemRegressiva 
{ 
 public static void main (String[] args) 
 { for ( int i = 10; i > 0; i-- ) 
 { System.out.println(“Contagem: ” + i); 
 } 
 
 System.out.println(“Lançamento!”); 
 } 
} 
 
- É possível também criar laços for 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. 
 
b) Comandos while (enquanto faça) e do-while (faça enquanto) 
- Usados quando não sabemos quantas vezes o conjunto de instruções deve ser 
processado. O while executa o corpo do laço apenas enquanto a condição for 
true (verdadeira): 
while ( condicao ) { bloco } 
 
- O while executa o teste da condição antes do início do bloco. Se for preciso 
executar pelo menos uma vez o bloco de comandos do laço, deve-se usar a 
versão do de um laço while: 
do { bloco } while ( condicao ); 
 
 
3. Revisão de Orientação a Objetos Básica (OO Básica) [JTAS] 
 
 
 Como já foi estudado, as principais características do Paradigma OO são : 
 identidade 
 abstração 
 classificação 
 encapsulamento 
 herança 
 polimorfismo 
 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 20 
 
 Conceitos de OO 
 
3.1. Objeto 
 
 Um objeto é a representação computacional de um elemento ou processo do 
mundo real. 
 
Exemplos : 
 
casa, martelo, venda, programa, carro, ... 
 
 Note que, esses objetos podem ser tanto objetos concretos (carro, livro, nota 
fiscal), quanto conceitos abstratos (conta corrente, venda, pessoa jurídica). Cada 
objeto possui estados e comportamentos. 
 
 Um objeto possui identidade, características e comportamento. Vejamos cada 
um: 
 
a) Identidade : Todo objeto possui uma identidade única que permite que o 
sistema o selecione dentre um conjunto de objetos similares. Ou seja, a 
identidade possibilita a referência aos objetos 
b) Características : Uma característica descreve uma propriedade de um 
objeto, ou seja, algum elemento que descreva o objeto. 
 Cada característica é chamada de atributo do objeto 
 
 Exemplo : Objeto moto tem as seguintes características ou atributos : cor, 
marca,ano de fabricação, tipo de combustível 
 
 c) Comportamento : 
 
 Definição: 
 
o Um comportamento representa uma ação ou resposta de um 
objeto a uma ação do mundo real (AÇÃO ou REAÇÃO) 
o Cada comportamento é chamado de método do objeto 
 
 Obs. : Em C++, os métodos podem ser também chamados de 
 funções membro. 
 
 Exemplos de comportamento para o objeto moto 
o Acelerar 
o Parar 
o Andar 
o Estacionar 
 
 
Um sistema pode conter um ou inúmeros objetos ativos. Cada objeto ativo no 
sistema em particular também é chamado de instância. As diferentes instâncias 
possuem seu próprio estado. 
 
 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 21 
 
Exemplo : 
 
Objeto : Maria 
 
 Estado : 
 Idade : 20 anos 
 Altura : 1,60 m 
 Peso : 58 Kg 
 Comportamento : 
 andar, falar e pular 
 
 
 
 Uma segunda característica de OO é a abstração, que ―foca as 
características essenciais de algum objeto, de acordo com a perspectiva do 
observador.‖ 
 
Exemplo : 
 
 Se pensarmos no conceito de ―conta corrente‖ bancária e abstrairmos este 
conceito, podemos identificar detalhes comuns, como o número da conta, número da 
agência e saldo; e operações como débito em conta, depósito e extrato da conta. 
 
 Basicamente essas são as características de conta corrente para todos os 
bancos, apesar de um ou outro banco ter uma política de descontos de taxas etc. 
 
 À medida que refinamos um objeto, mais específico ele se torna e mais 
dependente do domínio da aplicação. 
 
 A terceira característica de OO é a classificação. Na Classificação, Objetos 
com as mesmas características (atributos e comportamento) são agrupados em uma 
classe, sendo que cada classe define um conjunto possível de objetos. 
 
Exemplo : Objetos mesas  abstrair em  Classe Mesa 
 Classe Mesa Atributos: tamanho, forma, número de pés, 
 ___ material 
 Operações : mover, limpar 
 
 
3.2.Classes 
 
 A classe descreve as características e comportamento de um conjunto de 
objetos : 
 
 Cada objeto possui uma única classe 
 O objeto possuirá os atributos e métodos definidos na classe 
 O objeto é chamado de instância de sua classe 
 A classe é o bloco básico para a construção de programas OO 
 
 
 
Atributos : idade, altura e 
peso 
 
Métodos : andar, falar e 
pular 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 22 
 
 Criação de Objetos: 
 
 A classe é responsável pela criação de seus objetos 
 Esta criação é realizada através de um método especial, chamado 
 de construtor 
 Em Java, usa-se new para se criar um objeto. 
 
 Eliminação de Objetos 
 A classe é responsável pela eliminação de seus objetos, quando eles 
não podem mais ser utilizados pelo sistema 
 Esta eliminação é realizada por um método especial, chamado de 
destrutor 
 
Comentários : 
 
1. Em Java não existe destrutor, mas em C++ sim. 
2. Uma classe representa um conjunto de objetos que compartilham uma 
mesma estrutura e um mesmo comportamento. 
 
 Destacando a terceira característica em OO, isto é, a Classificação, temos a 
observar que: 
 
 Cada objeto é dito ser uma instância de uma classe 
 Cada instância mantém seus próprios valores de atributo (estado), 
mas compartilha os nomes dos atributos e comportamento (operações) com outras 
instâncias da classe. 
 
Uma quarta característica do Paradigma OO é o encapsulamento. 
Relacionando esta característica com os conceitos de classe e objeto pode-se 
afirmar que : 
 
―Uma classe encapsula atributos (nomes, tipos) e comportamentos, 
ocultando os detalhes de implementação dos objetos.” 
 
 Com relação ao encapsulamento, os métodos formam uma ―cerca‖ em torno 
dos atributos, que não podem (ou devem) ser manipulados diretamente. Os 
atributos somente podem ser alterados ou consultados através dos métodos do 
objeto. Considerando clientes de um objeto X os outros objetos que utilizam 
métodos de X, os benefícios do encapsulamento são : 
 
 os clientes de um objeto podem utilizar seus métodos sem conhecer os 
detalhes de sua implementação 
 A implementação de um objeto pode ser alterada sem o conhecimento de 
seus clientes, desde que a interface visível seja mantida 
 
 
 Um programa OO é um conjunto de objetos que colaboram entre si para a 
solução de um problema. A colaboração ocorre através de trocas de 
mensagens, sendo que a troca de mensagem representa a chamada de um 
método. 
 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 23 
 
 
 Controle de visibilidade 
 
 Os atributos e métodos, em termos de visibilidade, podem ser : 
 
 public  acessíveis por qualquer classe 
 private  acessíveis pela própria classe 
 protected  Acessíveis pela própria classe ou por 
 seus descendentes 
 
3.3.Herança 
 
 O compartilhamento de atributos e comportamentos entre classes baseiam-se 
num relacionamento hierárquico. 
 Uma classe pode ser definida genericamente e então refinada (especializada) 
sucessivamente em sub-classes mais específicas. 
 
 
Herança Simples x Herança Múltipla 
 
 Se uma classe herda de apenas uma superclasse (classe mãe ou 
base), temos uma herança simples 
 Se uma classe herda de diversas superclasses, temos uma herança 
múltipla 
 
Não existe herança múltipla em Java. 
 
 
Exemplo : A classe Animais pode ser subdividida nas sub-classes anfíbios, 
mamíferos, aves, peixes e répteis. 
 
 
3.4. Polimorfismo 
 
 Uma subclasse pode redefinir um elemento herdado, o que é denominado 
polimorfismo. 
 O polimorfismo se realiza através da recodificação de um ou mais métodos 
herdados por uma subclasse. Ou seja, um mesmo comportamento pode se 
apresentar de forma diferente em classes diferentes (poli = vários, morfismo = 
forma). 
 Uma linguagem de programação orientada a objetos automaticamente escolhe 
o método correto para implementar uma operação baseado no nome da 
operação, nos dados que carrega (parâmetros) e na classe implementada do 
objeto (assinatura do método) . Por isto, novas classes podem ser 
acrescentadas sem a modificação de todo o código existente 
 Mais adiante, falaremos mais de Polimorfismo. 
 
 
 
 
 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 24 
 
 
Comentário [AC] : Ao projetar um sistema POO, começamos pela determinação das 
classes e depois acrescentamos os métodos de cada classe. Uma regra para criar 
as classes é procurar por substantivos no problema. Os métodos correspondem aos 
verbos. 
Exemplo: Num sistema de processamento de pedidos: 
- Classes (substantivos): item, pedido, endereço para remessa 
(endereçoRemessa), pagamento, conta, etc. 
- Métodos (verbos): itens são adicionados aos pedidos, pedidos são 
enviados ou cancelados, pagamentos são aplicados aos pedidos. 
Cada verbo sugere um método. 
- Objetos: com cada verbo, como ―adicionar‖, ―enviar‖, ―cancelar‖ e 
―aplicar‖, é necessário identificar o objeto que tem a maior 
responsabilidade em efetuar esta ação. 
 
 
 Exemplo [FC]: Apresenta uma classe Ponto com 2 atributos, e outra classe 
TestaPonto que cria uma instância de um objeto da classe Ponto. 
 
public class Ponto { 
 int x, y; //atributos 
} 
 
 
public class TestaPonto { 
 public static void main(String[] args) { 
 Ponto p; 
 
 p = new Ponto(); // Cria um objeto com new 
 p.x = 1; // acessa pelo . – não privado 
 p.y = 2; 
 
 System.out.println ("Coordenada (x,y) = (" + p.x + 
"," + p.y +")"); 
 } 
} 
3.5. O Vocabulário da POO – Enfatizando os conceitos [AC] 
 a) CLASSE 
- O modelo ou a forma a partir do qual um objeto é criado. Em JAVA, toma-se 
como padrão a primeira letra do nome da classe em maiúscula (como String, 
System, Math etc.). 
b) OBJETO 
-Instância da classe; componente na memória com seus atributos e dados 
próprios, que utilizam seus métodos para manipular os seus dados internos; se 
comunicam entre si através de mensagens (chamadas a métodos). 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 25 
 
- Para criar um objeto e utilizar (chamar) os seus métodos é necessário utilizar o 
operador new: 
Casa c1 = new Casa(); 
c) BIBLIOTECA PADRÃO 
- Classes e pacotes para diversos propósitos tais como projetos de interface de 
usuário e programação em rede. 
 d) CLASSE Object 
- As classes em Java sempre são formadas a partir de outras classes. Uma 
classe formada a partir de outra "estende" esta outra. Em Java existe uma 
classe "mãe" a partir da qual todas as outras classes são naturalmente 
formadas, esta é a classe Object. Todas as classes ―herdam‖ de Object. 
 e) ENCAPSULAMENTO 
- Em POO devemos combinar dados e comportamento em um pacote fechado e 
ocultar a implementação dos dados, de forma que o usuário do objeto (em geral 
outro objeto) não veja como estes dados são manipulados. Dizemos que os 
dados e métodos são encapsulados em objetos. É outro conceito fundamental 
em POO. O encapsulamento dá aos objetos a característica de "caixa-preta". 
Os objetos devem se comunicar apenas através de mensagens, ou seja, seus 
dados (atributos) devem estar protegidos de outros objetos e só poderão ser 
acessados através de métodos (funções). 
f) VARIÁVEIS DE INSTÂNCIA 
- Dados ou atributos do objeto (só existem após ser criado o objeto). 
g) ESTADO DO OBJETO 
- Valores atuais dos dados do objeto. 
 Vejamos um primeiro exemplo: Suponha que você deseja construir um 
aplicativo que imprima a área das figuras geométricas ―quadrado‖ e ―triângulo 
eqüilátero‖. Definiremos para o exemplo o valor dos lados como 10, para vermos a 
diferença no valor das áreas calculadas. O primeiro passo é criar as classes (cujos 
nomes serão: Quadrado e Triangulo, a partir das quais serão gerados os objetos 
q e t no método main: 
 
public class Quadrado 
{ double lado = 0; 
 
 public double area() //método cálculo da área 
 { return (lado * lado); } // Retorno com return 
} 
Salve como Quadrado.java mas não compile ainda. Agora, a classe Triangulo: 
 
public class Triangulo 
{ double lado = 0; 
 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 26 
 
 public double area() 
 { 
 return (0.433*lado*lado); } 
} 
 Salve como Triangulo.java mas não compile ainda. Finalmente, a classe 
Figuras: 
public class Figuras 
{ public static void main (String[] args) 
 {// declarando e instanciando "q" 
 Quadrado q = new Quadrado(); 
// declarando e instanciando "t" 
 Triangulo t = new Triangulo(); 
//valor do atributo lado do obj “q” 
 q.lado = 10; 
//chamada ao método area do obj “q” 
 double s = q.area(); 
 System.out.println("Área do Quadrado: "+s); 
//valor do atributo lado do obj “t” 
 t.lado = 10; 
//chamada ao método area do obj “q” 
 s = t.area(); 
 System.out.println("Área do Triângulo: "+s); 
 } 
} 
 Salve como Figuras.java e compile esta classe com sua ferramenta ou na 
linha de comandos com javac Figuras.java. Ao compilar, você notará que 
todas as classes do exemplo serão compiladas gerando os três arquivos ―.class‖. 
Isto acontece porque Java reconhece quais as classes que fazem parte do sistema, 
pois estão sendo chamadas pela classe principal, e as compila. Execute com java 
Figuras. 
 
3.6. Observações sobre variáveis, valores, referências e tipos[FS] 
 
a) Variáveis, valores e referências 
 Variáveis são usadas em linguagens em geral para armazenar valores 
 Em Java, variáveis podem armazenar endereços de memória ou valores 
atômicos de tamanho fixo 
 
b) Tipos 
 Tipos representam um valor, uma coleção de valores ou coleção de outros 
tipos. Podem ser 
 Tipos básicos, ou primitivos, quando representam unidades indivisíveis de 
informação de tamanho fixo. Exemplo : um inteiro, um booleano ... 
 Tipos complexos, quando representam informações que podem ser 
decompostas em tipos menores. Os tipos menores podem ser primitivos 
ou outros tipos complexos. Exemplo : Um vetor, uma data ... 
 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 27 
 
 Em Java, tipos complexos são armazenados como objetos . 
 
3.7. Coleta de Lixo [FS] 
 
 A memória alocada em Java não é liberada pelo programador, ou seja, 
objetos criados não são destruídos pelo programador 
 
 A criação de objetos em Java consiste de 
 
  Alocar memória para armazenar os dados do objeto 
  Inicializar o objeto (via construtor) 
  Atribuir endereço de memória a uma variável (referência) 
 
 Mais de uma referência pode apontar para o mesmo objeto 
 
 
 
Mensagem m, n, p; 
m = new Mensagem("A"); 
n = m; 
p = new Mensagem("B"); 
 
 
 
 
 
 Quando um objeto não tem mais referências apontando para ele, seus dados 
não mais podem ser usados e a memória deve ser liberada. 
 
 
 O coletor de lixo irá liberar a memória na primeira oportunidade 
 
 
 
n = null; 
p = new Mensagem("C"); 
 
 
 
 
 
 
 
 
 
 
 
 
 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 28 
 
3.8. Um pouco de entrada e saída de dados em JAVA [AC] 
 
 
a) Leitura de Dados via Entrada Padrão 
 
- A leitura de dados de entrada pelo teclado era difícil em Java antes da versão 
1.5. Quando usamos componentes como caixas gráficas de entrada de dados 
isto se torna menos complexo, mas antes disso é preciso verificar como 
funciona a entrada via console. 
 
- De forma gerla, uma declaração de import serve para importar uma ou todas 
as classes de um pacote. O caminho indicado no import é justamente um 
caminho de pastas. Asterisco significa todos os arquivos da pasta (mas não as 
subpastas). 
 
- O exemplo a seguir utiliza a classe Scanner, que possui métodos para leitura 
de diversos tipos de dados de entrada via console: 
 
Exemplo : 
import java.util.*; 
 
public class LeituraComScanner 
{ 
 // Testes de leitura com classe Scanner (Java 5.0) 
 public static void main(String[] args) 
 { 
 //objeto para leitura via console 
 Scanner entrada = new Scanner (System.in); 
 
 System.out.println("Informe nome:"); 
 //lê uma string como o método nextLine() 
 String nome = entrada.nextLine(); 
 
 System.out.println("Informe idade:"); 
 //lê um inteiro com o método nextInt 
 int idade = entrada.nextInt(); 
 System.out.println("Nome:" + nome + 
 "\nIdade:" + idade); 
 } 
} 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 29 
 
Tabela com alguns métodos da classe Scanner [JTAS] 
 
Método Descrição 
String nextLine() Lê toda a linha 
int nextInt() Lê um inteiro 
double nextDouble() Lê um double 
float next Float() Lê um float 
long nextLong() Lê um long 
boolean hasNext() Verifica se ainda existem dados a serem lidos 
 
 
b) Leitura via Componentes Gráficos do Pacote Swing 
- Mais tarde estudaremos componentes gráficos para interfaces de aplicativos, 
mas já podemos começar a trabalhar com o componente chamado 
JOptionPane, que representa uma janela ou caixa de diálogo com o usuário. 
A classe JOptionPane está no pacote javax.swing que devemos importar 
para utilizar este componente. 
 
Exemplo: 
 
import javax.swing.JOptionPane; //pacote necessário 
 //ou 
 //import javax.swing.*; 
 //o compilador verifica 
 
public class Mensagem 
{ public static void main (String[] args) 
 { 
 //comando para a caixa de diálogo 
 JOptionPane.showMessageDialog 
 (null, “Esta é uma mensagem !”); 
 
 //saída obrigatória do sistema 
 System.exit(0); 
 } 
} 
 
- O componente pode ser usado, pois a classe foi incluída no código com o 
comando import. É possível tambémusar o seguinte (selecionar todo o pacote 
e deixar o trabalho de carregar a classe, feito pelo compilador): 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 30 
 
import javax.swing.*; 
- O comando JOptionPane.showMessageDialog é usado para mostrar 
caixas de mensagem e pode ser usado nesta forma simples, com dois 
parâmetros: o primeiro, com valor null, representa o componente parent 
(janela maior que abriria a caixa de mensagem, como não existe, usa-se null), 
o segundo representa a mensagem a ser exibida. 
- Por último, é preciso, sempre que se usar componentes de interface com o 
usuário, incluir o comando de saída do sistema, para encerrar a execução. 
- Uma versão mais completa do comando de caixa de diálogo contém quatro 
argumentos, como segue: 
JOptionPane.showMessageDialog 
(null, “Texto da Mensagem”, 
“Titulo da janela”, TIPOICONE); 
- O campo TitulodaJanela aparece na barra azul da caixa de diálogo. Já o 
TIPOICONE representa o pequeno desenho que pode aparecer, identificando o 
tipo de mensagem. Veja o que pode ser colocado neste argumento e o tipo de 
janela gerado: 
 
JOptionPane.ERROR_MESSAGE 
 
JOptionPane.INFORMATION_MESSAGE 
 
JOptionPane.WARNING_MESSAGE 
 
JOptionPane.QUESTION_MESSAGE 
 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 31 
 
JOptionPane.PLAIN_MESSAGE 
 
 
- Para entrada de dados utilizamos o comando showInputDialog, com uma 
variável do tipo String aguardando o retorno (as janelas retornam sempre 
uma string): 
 
 String numLido = 
JOptionPane.showInputDialog( "Informe:" ); 
- Gerando a janela a seguir: 
 
 
- Após a leitura, é necessário obter o número a partir da string lida, o que deve 
ser feito com um dos comandos a seguir: 
int numero = 
Integer.parseInt( numLido ); 
//obtém inteiro 
 
double numero = 
Double.parseDouble( numLido ); 
//obtém ponto flutuante 
 
NOTE : Classe Integer com o método parseInt 
 Classe Double com o método parseDouble 
 
Exemplo (DEITEL): 
 
import javax.swing.JOptionPane; 
 
public class Soma { 
 public static void main( String args[] ) 
 { 
 String numero1, numero2; 
 int n1, n2, resultado; 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 32 
 
 
 numero1 = JOptionPane.showInputDialog 
 ("Informe um inteiro:"); 
 
 numero2 = JOptionPane.showInputDialog 
 ("Informe outro inteiro"); 
 
 // convertendo 
 n1 = Integer.parseInt( numero1 ); 
 n2 = Integer.parseInt( numero2 ); 
 
 // somando 
 resultado = n1 + n2; 
 
 JOptionPane.showMessageDialog 
 (null, "A soma é "+resultado, 
 "Resultado:", JOptionPane.PLAIN_MESSAGE); 
 
 System.exit( 0 ); 
 } 
} 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 33 
 
4. Vetores (Arrays) 
 
 São estruturas homogêneas, ou seja, são estruturas utilizadas para 
armazenar vários elementos de um mesmo tipo. Os elementos de um vetor, 
em Java, podem ser de tipos primitivos (Ex: int, double, etc) ou objetos 
(referências). 
 O primeiro elemento (posição) possui índice 0 (zero). 
 São tratados em java como objetos, ou seja, para serem utilizados temos que 
instanciá-los (usando new). 
 
 
4.1. Criação de Vetores 
 
Exemplo 1: Criando um vetor de tipos primitivos (int). 
int c[]; // declara o array 
c = new int[10]; // aloca o array 
c[1] = 20; // atribui o valor 20 ao componente de 
 // índice 1 
 
Obs: A linha int c[]; poderia ser substituída por int [] c; 
 
Outro exemplo criando um array com valores iniciais: 
int n[] = {20,63,40,58}; //Cria, aloca e inicializa o array 
 
Exemplo 2: Criando vetores de objetos. 
class Coisa { } // Uma classe qualquer 
 
Coisa[] a; // referência do vetor (Coisa[]) é null 
Coisa[] b = new Coisa[5]; // referências Coisa null 
Coisa[] c = new Coisa[4]; 
for (int i = 0; i < c.length; i++) { 
 c[i] = new Coisa(); // refs. Coisa inicializadas 
} 
Coisa[] d = {new Coisa(), new Coisa(), new Coisa()}; 
 
 
4.2. Comprimento de um vetor 
 
 Pode ser obtido, usando-se a propriedade length. 
 
int x[] = {1,2,3,4,5}; 
System.out.println(x.length); // Imprimirá 5; 
 
4.3. Vetores Multidimencionais (Matrizes) 
 
 Possuem mais de uma dimensão 
 
int b[][]; //Declaração 
b = new int[3][3]; //Criação 
 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 34 
 
b[1][2]=5; //Atribuição 
ou 
int b[][] = {{2,3,4},{4,5,6}}; 
 
4.4. Vetores com dimensões diferentes 
 
int b[][]; 
b = new int[2][]; 
b[0]=new int[3]; 
b[1]=new int[10]; 
 
 
5. Getters, Setters e Construtores 
 
5.1. Construção de Classes 
 Veremos agora algumas recomendações para criarmos programas JAVA mais 
sofisticados, onde a classe escolhida para começar a executar pelo interpretador 
geralmente tem pouca funcionalidade além de criar os vários objetos que vão 
realmente fazer o trabalho do programa. 
 
 Construtores 
- Um construtor tem o mesmo nome da classe; 
- Um construtor pode ter um ou mais parâmetros, ou mesmo nenhum (construtor 
padrão fornecido pelo compilador); 
- Um construtor é sempre chamado através da palavra-chave new; 
- Um construtor não retorna valor (mesmo assim não tem void na assinatura) 
 
Exemplo : 
 
public class Cliente{ 
 private String nome; //atributos nome e numConta 
private int numConta; 
public Cliente(String n, int c)//construtor 
 { nome = n; 
 numConta = c; 
 } 
} 
 
 Construtores Padrões 
- Se um método construtor não for especificado para uma classe e um objeto for 
referenciado no sistema, um construtor padrão será providenciado. Estes 
construtores não têm argumentos e inicializam todos os campos de instância 
com valores padrões. 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 35 
 
 
 Sobrecarga de Construtores 
- Ao implementar uma classe, podemos definir mais de um construtor para a 
classe, a fim de que possamos criar objetos de várias maneiras. Exemplo: 
 
Dia hoje = new Dia (); 
Dia hoje = new Dia (1999,11,31); 
 
- Existem dois construtores para uma certa classe Dia, o primeiro inicializa os 
campos de instância com a data atual do sistema e o segundo inicializa os 
campos de instância com os parâmetros passados na inicialização do objeto. 
- A sobrecarga de métodos acontece quando vários métodos dentro de uma 
mesma classe têm o mesmo nome, mas argumentos diferentes (o compilador 
decide que método será usado). 
- Java permite sobrecarregar qualquer método, de qualquer tipo! 
 
 Utilização de Métodos e Campos Privados 
- Ao implementar uma classe, recomenda-se que os atributos sejam privados 
(private), mantendo estes atributos ocultos, impedindo que outros objetos os 
acessem, protegendo os objetos como caixas pretas, com sua comunicação 
apenas através de mensagens (chamada dos métodos). A classe Cliente no 
exemplo anterior já possui dados privados. 
- Os métodos também podem ser private, o que os torna acessíveis apenas 
por outros métodos da mesma classe. Estes métodos ocorrem normalmente 
quando se divide um método público em vários módulos de tarefas específicas. 
- É recomendável encapsular tarefas internas das classes do sistema em 
métodos privados, para que possam ser modificadas minimizando as mudanças 
no lado do usuário, sem mexer na interface com o usuário. 
 
 Métodos Acessadores (getters) e Modificadores (setters) 
 
- Acessadores são métodos que simplesmente retornam o estado atual de um 
campo private do objeto. Por convenção, os nomes iniciam com o prefixo 
―get‖. 
 Por exemplo, digamos que na nossa classe Empregado, quiséssemos um 
método para nos retornar o número da conta do cliente: 
public int getNumConta () 
{ return numConta; //o get retorna 
} 
 A partir de agora, comeste método, tornamos o campo numConta um campo 
de ―somente-leitura‖ para o mundo exterior à classe, ou seja, só através de 
operações na classe é possível modificar o seu valor. 
 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 36 
 
Um método modificador para este mesmo campo poderia ser: 
public void setNumConta (int novoNumero) 
{ numConta = novoNumero; //o set modifica 
} 
 Em geral, quando o usuário tem interesse em ler e escrever em um campo 
private, o programador poderá fornecer (se estiver de acordo com o projeto): 
o Um método público de leitura de campo (acessador  get); 
o Um método público de alteração de campo (modificador  set). 
 
 Inicialização de atributos 
- Em Java, se o construtor do objeto não indicar o valor para inicialização dos 
campos de instância, os números são inicializados com 0 (zero), objetos com 
null e booleanos com false, mas as variáveis locais dos métodos precisam 
ser inicializadas explicitamente 
 
 Referência ao Objeto Através de this 
- Para acessar o objeto atual em sua totalidade e o não atributo em particular, 
usamos this: 
1. Fazendo referência ao objeto no qual o método opera. 
System.out.println (this); 
//mostra apenas o endereço do objeto 
//usaremos isto no tratamento de eventos 
//no próximo capítulo 
 
2. Chamada para outro construtor da mesma classe. É um excelente 
artifício para combinar código dos construtores. 
 
Veja um exemplo completo, mostrando vários usos do this: 
public class Cliente 
{ public Cliente(String n) //sobrecarga 
 { this(n,0 ); 
 } 
//argumento com mesmos nomes dos atributos 
public Cliente(String nome, int numConta) 
 { 
 this.nome = nome; //atributo=argumento 
 this.numConta = numConta; 
 } 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 37 
 
 
public int getNumConta () 
{ return numConta; 
} 
 
public void setNumConta (int numConta) 
{ this.numConta = numConta; 
} 
 
 private String nome; 
private int numConta; 
} 
 
 Ao fazer new Cliente (“Joe Satriani”), o construtor 
Cliente(String) chama o outro construtor Cliente(String, int). 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 38 
 
5.2. Os principais modificadores [FS] 
 
A) Modificadores de Classes 
 
- public 
o Classes public podem ser instanciadas por qualquer objeto livremente. 
o Para declarar uma classe como public, inclua a palavra reservada 
public na definição da classe (esta é a convenção): 
 public class NomeClasse 
 
- abstract 
o Classes abstract são classes que não permitem que sejam 
instanciadas, ou seja, servem para definir superclasses. 
o Para declarar uma classe como abstract, inclua a palavra reservada 
abstract na definição da classe: 
 public abstract class NomeClasse 
 
- final 
o Classes final são classes que não permitem que você crie subclasses 
delas. Para declarar uma classe como final, inclua a palavra reservada 
final na definição da classe: 
 public final class NomeClasse 
 
B) Modificadores de Métodos e Atributos 
 
 
- public 
o Faz com que o método ou atributo possa ser utilizado livremente, como 
em (na definição da classe Empregado): 
public double calc () 
 
- protected 
o Faz com que o método ou atributo somente possa ser invocado 
pelas classes do mesmo pacote, ou seja, para classes dentro do 
mesmo pacote é o mesmo que public (em Java é mais comum 
proteger/encapsular com private). As subclasses podem acessar 
os membros protected, mesmo que estejam em outros pacotes. 
protected double calc () 
 
- private 
o Faz com que o método ou atributo somente possa ser invocado na 
classe em que é definido. Mas as instâncias da classe podem acessar 
os atributos em outras instâncias da mesma classe, ou seja, private 
é concernente à classe e não às instâncias. Uma subclasse não 
acessa atributos nem métodos private da superclasse. 
 private double calc () 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 39 
 
 
- static 
o Métodos e atributos static podem ser considerados como 
pertencentes à classe e não às instâncias. Um membro static pode 
ser invocado por todas as instâncias da classe, ou mesmo sem a 
instanciação de um objeto, como é o caso do método main na criação 
de um aplicativo: 
 public static void main (String[] args) 
 
- final 
o Métodos final não permitem sobreposição. Atributos final 
possuem valor constante, ou seja, não podem ser modificados. 
 public static final double LUCRO = 0.2; 
 
- abstract 
o Métodos abstract não possuem corpo, apenas definem a assinatura 
do método e indicam que devem ser implementados nas subclasses. 
Métodos static, final e private não podem ser abstratos, não faz 
sentido reescrevê-los em subclasses, isto é considerado erro de 
sintaxe. 
 public abstract double calc(); 
 
- Default 
o Um membro sem modificador de acesso definido é dito possuir o 
modificador default. Mas ―default‖ não é uma palavra-chave em Java, é 
apenas uma denominação. Na prática, o acesso funciona normalmente 
como o public, mas se estiverem definidos pacotes diferentes para 
as classes, o modificador default só permite o acesso para classes 
dentro do mesmo pacote, ou seja, neste caso funciona como 
protected. O conselho então é definir bem os modificadores de 
acesso, escreva todos, mesmo que sejam public. Em Java é uma 
boa prática de programação deixar tudo muito claro e definido. 
 
 Hierarquia de Modificadores na Sobreposição de Métodos 
- A ordem a ser respeitada é: 
private  default  protected  public 
ou seja, um método private pode ser reescrito nas subclasses com os 
modificadores private, default (sem modificador), protected e public, 
um método default pode ser reescrito nas subclasses com os modificadores 
default, protected e public, e assim por diante. 
 
- Para maiores informações sobre modificadores, leia o capítulo 3 do ―Sybex 
Complete Java Certification Study Guide‖. 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 40 
 
 
 Sintaxe de declaração de atributos 
 
Sintaxe básica: 
 
 [modificador]* tipo identificador [= valor] ; 
 
onde: 
 
 [modificador]* – zero ou mais modificadores (de acesso, de qualidade), separados 
por espaços: public, private, static, final, etc. 
 tipo – tipo de dados que a variável (ou constante) pode conter 
 identificador – nome da variável ou constante 
 [= valor] – valor inicial da variável ou constante 
 
 Exemplo: 
 
protected static final double PI = 3.14159 ; 
int numero; 
 
 
 
 
 Sintaxe de definição de métodos 
 
Sintaxe básica 
 
 [mod]* tipo identificador ( [tipo arg]* ) [throws exceção*] { ... } 
 
onde: 
 
 [mod]* – zero ou mais modificadores separados por espaços 
 tipo – tipo de dados retornado pelo método 
 identificador – nome do método 
 [arg]* – zero ou mais argumentos, com tipo declarado, 
 
separados por vírgula 
 
 [throws exceção*] – declaração de exceções. Estudaremos mais adiante. 
 
 Exemplos 
 
public static void main ( String[] args ) { ... } 
private final int metodo (int i, int j, int k) ; 
String abreArquivo () throws IOException, Excecao2 { ... } 
 
 
 
 
 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 41 
 
6. Mais POO em Java – Herança e Polimorfismo 
 
6.1. Herança [AC] 
 Ao estender uma classe, a classe filha passa a possuir todos os atributos e 
métodos da classe mãe, além dos seus próprios. Pode-se também adicionar ou 
modificar métodos que se aplicam apenas a esta classe filha. Então, a classe 
filha "herda" métodos e propriedades da classe mãe. 
 
 Vejamos um exemplo: 
 Suponha que numa firmahipotética, os empregados sejam identificados por 
suas matrículas e nomes. Há, porém, dois tipos de empregados: os vendedores e os 
técnicos. Os vendedores têm uma comissão sobre o salário e os técnicos têm um 
título (advogado, engenheiro, etc.). 
 Graficamente, pode-se representar este sistema desta forma: 
 
- O vendedor tem, além de matrícula, nome, e salário, uma quarta informação, 
a porcentagem de comissão, ou seja, podemos dizer que um objeto da classe 
Vendedor herda os atributos da classe Empregado. 
 
- Implementando este projeto em Java, da forma mais simples, temos: 
 
Classe construtora Empregado: 
 
public class Empregado 
{ 
 String matricula; 
Empregado 
 
matricula 
nome 
salario 
Vendedor 
 
comissao 
Tecnico 
 
titulo 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 42 
 
 String nome; 
 double salario; 
} 
 
Classe construtora Vendedor: 
 
public class Vendedor extends Empregado 
{ 
 double comissao; 
} 
 
Classe construtora Tecnico: 
 
public class Tecnico extends Empregado { 
 String titulo; 
} 
 
- Podemos observar que os atributos matricula, nome e salario foram 
definidos na classe Empregado (também chamada superclasse), e as 
classes Vendedor e Técnico (também chamadas subclasses) utilizam tais 
atributos, pois os herdam da super classe da qual são derivadas. 
 
- No código acima, criamos a classe Vendedor por herança da classe 
Empregado utilizando o nome desta após a instrução extends: 
 
public class Vendedor extends Empregado 
 
- Qualquer modificação na classe Empregado refletirá na classe Vendedor 
(bem como na classe Tecnico). Por exemplo, a alteração do atributo 
matricula de String para int altera este dado também nas subclasses. 
 
 Para completar o exemplo, só falta a classe que instanciará os objetos das 
classes Empregado, Vendedor e Técnico. Para utilizar os atributos e métodos 
definidos em uma classe, precisamos utilizar um objeto desta classe, o que significa 
dizer que precisamos instanciar um objeto desta classe. 
A classe que instanciará os objetos será chamada de Firma, tendo seu código-fonte 
definido a seguir: 
 
public class Firma 
{ 
public static void main(String[] args) 
{ 
 Empregado e; //declarações 
 Vendedor v; 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 43 
 
 Tecnico t; 
 
 e = new Empregado(); //instanciações 
 v = new Vendedor(); 
 t = new Tecnico(); 
 
 e.nome = "João"; //inicializações dos atributos 
 e.matricula = "E1"; 
 e.salario = 100.00; 
 
 v.nome = "Pedro"; 
 v.matricula = "V1"; 
 v.salario = 500.00; 
 v.comissao = 20; 
 
 t.nome = "José"; 
 t.matricula = "T1"; 
 t.salario = 900.30 ; 
 t.titulo = "Dr. "; 
 
 System.out.println ("Matrícula: "+ e.matricula + 
" Nome: “ + e.nome + 
" Salário: R$" + e.salario); 
 
 System.out.println ("Matrícula: "+ v.matricula + 
" Nome: " + v.nome + " Salário: R$" + 
v.salario + "(já incluída a comissão de: 
" + v.comissao + "%)"); 
 
 System.out.println ("Matrícula: "+ t.matricula + 
" Nome: " + t.titulo + t.nome + 
" Salário: R$" + t.salario); 
} 
} 
 
 Salve-o como Firma.java, compile-o (as outras classes serão compiladas 
automaticamente) e execute com sua ferramenta. 
 
6.2. Uso de Classes Existentes 
 Podemos usar classes existentes nos nossos projetos, bastando para isso 
saber a sintaxe de seus métodos, como no exemplo anterior: 
- Na maior parte das classes Java, criam-se objetos, especifica-se o estado inicial 
de cada um e depois se trabalha com estes objetos. E para acessar os objetos, 
define-se variáveis objeto. Veja: 
 
Empregado e; 
// „e‟ não é objeto ainda nem se refere a nenhum 
//objeto 
 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 44 
 
e.calculaAumentoAnual(); // NÃO AINDA !!!!!! ERRO!!! 
 
e = new Empregado(); // agora sim ! Existe o objeto e 
 
e.nome = "João"; //OK 
e.matricula = "E1"; 
e.salario = 100.00; 
 
6.3. Relações entre Classes 
- Relações mais comuns: 
o Uso: quando uma classe usa objetos de outra classe. No exemplo 
anterior, Firma usa objetos de Empregado. 
 De um modo geral, uma classe A usa uma classe B se um 
método de A envia uma mensagem para um objeto da classe B, 
ou se um método de A cria, recebe ou retorna objetos da classe 
B. 
 O uso desta relação deve ser minimizado, visando independência 
de funcionamento entre as classes, facilitando a manutenção do 
código. 
 
o Inclusão (“tem um”): ocorre quando um atributo de uma classe é um 
objeto de outra classe. 
 Exemplo : Imagine uma Classe Endereco, que possui os atributos : 
logradouro, numero, complemento, bairro, cidade, estado, cep. 
 Pode-se ter outra classe Funcionario, que tenha como 
Endereco como um de seus atributos. 
 
o Herança (“é um”): denota especialização ou generalização. É quando 
uma classe estende outra. Vendedor é um Empregado. 
 
6.4. 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; 
 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 45 
 
 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() 
{ return ( 0.85 * salario ); //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 = salario * (1 + comissao/100); 
 //aumento de 20% 
 
 return ( 0.85 * sal); 
 //desconto de 15% 
 } 
 
 Graficamente, os métodos são representados separadamente dos atributos, 
na parte inferior. 
 Desta forma, poderíamos reescrever os códigos para um novo exemplo: 
 
Empregado 
 
matricula 
nome 
salario 
 
calc() 
Vendedor 
 
comissao 
 
 
 
calc() 
Tecnico 
 
titulo 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 46 
 
public class Empregado 
{ 
String matricula; 
String nome; 
double salario; 
 
public double calc () 
{ 
 return (0.85 * salario); 
} 
} 
 
public class Vendedor extends Empregado 
{ 
double comissao; 
 
public double calc () 
{ 
double sal = salario * (1 + comissao/100); 
return (0.85 * sal); 
} 
} 
 
public class Firma 
{ 
public static void main(String args[]) 
 { 
 Empregado e; 
 Vendedor v; 
 Tecnico t; 
 
 e = new Empregado(); 
 v = new Vendedor(); 
 t = new Tecnico(); 
 
e.nome = "João"; 
 e.matricula = "E1"; 
 e.salario = 100.00; 
 
 v.nome = "Pedro"; 
 v.matricula = "V1"; 
 v.salario = 500.00; 
 v.comissao = 20; 
 
 t.nome = "José"; 
 t.matricula = "T1"; 
 t.salario = 900.30 ; 
 t.titulo = "Dr. "; 
System.out.println ("Matrícula: "+ e.matricula + 
" Nome: “ + e.nome + 
" Salário: R$" + e.calc() ); 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 47 
 
 
 System.out.println ("Matrícula: "+ v.matricula + 
" Nome: " + v.nome + " Salário: 
R$" + v.calc() + "(já incluída a 
comissãode: " + v.comissao + 
"%)"); 
 
 System.out.println ("Matrícula: "+ t.matricula + 
" Nome: " + t.titulo + t.nome 
+ " Salário: R$" + t. calc()); 
 
 } 
} 
 
 Então, Polimorfismo é a capacidade que os métodos de mesmo nome têm de 
efetuarem tarefas diferentes. 
Polimorfismo: um mesmo método com várias formas. 
 O polimorfismo acontece quando os métodos são definidos em classes em 
herança (sobreposição) 
 No nosso caso, o método calc efetua um cálculo quando utilizado pelos 
objetos das classes Empregado e Tecnico, e outro cálculo quando o objeto em 
questão foi instanciado da classe Vendedor. 
 Pode-se observar que tanto Empregado como Tecnico utilizam o método 
calc para cálculo do trabalho, e que Vendedor, apesar de utilizar o método 
calc, utiliza o seu próprio método, com corpo diferente daquele definido na 
classe ancestral Empregado. 
 Resumindo o conceito de Polimorfismo: 
Reutilização do mesmo nome para um 
conceito correlato em tipos diferentes. 
 
Não confunda ! 
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?‖. 
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. 
 
 
 
 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 48 
 
6.5 . Uso de SUPER 
 O comando super sempre se refere a uma superclasse. Todo método 
construtor de uma subclasse precisa também chamar um construtor para os 
campos de dados da superclasse, caso existam campos de instância também na 
superclasse. 
 Se a superclasse tiver um construtor então as subclasses precisam usar 
super para passar os parâmetros, a fim de utilizar este construtor da 
superclasse. 
 
super também pode ser usado para passar parâmetros para métodos da 
superclasse, utilizando o código deste, sem ter que redefinir totalmente o 
método, por exemplo, na linha super.calc (); do exemplo a seguir. 
- Exemplo Firma utilizando encapsulamento, polimorfismo, super e this: 
 
public class Empregado 
{ 
 private String matricula, nome; 
 private double salario; 
 
public Empregado (String m, String n, double s) 
 { matricula = m; 
 nome = n; 
 salario = s; 
 } 
 
 public Empregado (String m, String n) 
 { this(m, n, 0 ); //sobrecarga salário não definido 
 } 
 
 public double calc () { 
 return (this.getSalario() * 0.85); 
 } 
 
//getters & setters 
 
public String getMatricula() 
{ return matricula; } 
 
 public void setMatricula(String matricula) 
{ this.matricula = matricula; } 
 
 public String getNome() 
{ return nome; } 
 
 public void setNome(String nome) 
{ this.nome = nome; } 
 
 public double getSalario() 
{ return salario; } 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 49 
 
 public void setSalario(double salario) 
{ this.salario = salario; } 
}// fim classe Empregado 
 
 
public class Vendedor extends Empregado 
{ 
 private double comissao; 
 
 public Vendedor(String m, String n, double s, double c) 
 { super(m, n, s); 
 this.comissao = c; 
 } 
 
 public double calc () 
 { return super.calc() * (1 + this.comissao / 100); } 
 
 //getters & setters 
 public double getComissao() 
 { return comissao; } 
 
 public void setComissao(double comissao) 
 { this.comissao = comissao; } 
} // fim classe Vendedor 
 
public class Tecnico extends Empregado 
{ 
 private String titulo; 
 
public Tecnico(String m, String n, double s, String t) 
 { 
 super(m, n, s); 
 this.titulo = t; 
} 
 
 //getters & setters 
 public String getTitulo() 
{ return titulo; } 
 
 
 public void setTitulo(String titulo) 
{ this.titulo = titulo; } 
} // fim classe Tecnico 
 
 
import java.util.Formatter 
 
public class Firma 
{ 
public static void main(String[] args) 
 { 
 Empregado e = new Empregado("E1","João",100); 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 50 
 
 Vendedor v = new Vendedor("V1","Pedro",500,0.2); 
 Tecnico t = new Tecnico("T1","José",930,"Dr. "); 
 
 
 
 System.out.format("\nMatricula: %s 
 \nNome: %s \nSalario:R$ %.2f \n ", 
 e.getMatricula(), e.getNome(), e.calc()); 
 
 System.out.format("\nMatricula: %s 
 \nNome: %s \nSalario:R$ %.2f 
 \nComissao de %.0f por cento\n", 
 v.getMatricula(), v.getNome(), 
 v.calc(), v.getComissao()*100); 
 
 System.out.format("\nMatricula: %s 
 \nNome: %s \nSalario:R$ %.2f \n ", 
 t.getMatricula(), t.getNome(), t.calc()); 
 } 
} 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 51 
 
6.6. Relacionamento entre objetos da superclasse e objetos 
da subclasse [JTAS] 
 O objeto de uma subclasse pode ser tratado como um objeto de sua 
superclasse. Isso é validado pela própria condição de herança e pode ser 
interessante, se for desejável, por exemplo, criar um vetor com objetos das 
subclasses. 
 Não é possível, no entanto, fazer um objeto de uma subclasse receber um 
objeto da superclasse. Isso configura erro de sintaxe. 
 No exemplo da classe Ponto e sua subclasse Circulo, que veremos a seguir, 
foi usado o operador cast. Este operador converte a expressão do seu lado 
direito no tipo da variável ou objeto do lado esquerdo de uma atribuição. 
 (tipo) expressao ou (Classe) expressao 
Se tivermos, por exemplo, 
 int x = 5; 
 O cálculo x/2 dará o inteiro 2 (quociente da divisão com /). 
 O cálculo de (double)x/2 dará 2.5, pois x foi convertido para double. 
 
Exemplo : Vejamos agora as classes Ponto e Circulo 
 
Classe Ponto 
 
public class Ponto { 
 protected int x, y; // variáveis de instância 
 
 public Ponto() { setPonto(0,0); } 
 public Ponto(int xc, int yc) { setPonto(xc,yc); } 
 public void setPonto(int xc, int yc) { 
 x = xc; 
 y = yc; 
 } 
 public int getX() { return x; } 
 public int getY() { return y; } 
 public String toString() { 
 return "[ " + x + " , " + y + "]"; 
 } 
} 
 
 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 52 
 
 
Classe Circulo 
 
public class Circulo extends Ponto { 
 protected double raio; 
 
 public Circulo() { setRaio(0); } 
 public Circulo(double r, int x, int y) { 
 super(x,y); 
 setRaio(r); 
 } 
 
 public void setRaio(double r) { 
 raio = (r >= 0.0 ? r : 0.0); 
 } 
 public double getRaio() { return raio; } 
 public double getArea() { 
 return (Math.PI * Math.pow(raio,2)); 
 } 
 public String toString() { 
 return "Centro = " + "[ " + x + " , " + y + "]" 
 + "; Raio = " + raio; 
 } 
} 
 
Arquivo : TestaHeranca_e_Cast 
 
public class TestaHeranca_e_Cast { 
 public static void main(String[] args) { 
 Ponto p1, p2; 
 Circulo c1, c2; 
 
 p1 = new Ponto(30,50); 
 c1 = new Circulo(2.7, 120, 89); 
 String saida = "Ponto p1 : " + p1.toString() + 
 "\nCirculo c1 : " + c1.toString(); 
Prof
a
. Jane Programação Orientada a Objetos I I (Linguagem Java) 
 
 53 
 
 // Atribui objeto da subclasse a um objeto da superclasse 
 // Ocorrerá vinculação dinâmica ou vinculação tardia . Ou seja,

Outros materiais