Buscar

materialdejava

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

JAVA_Aula1.pdf
1
Programação Orientada a ObjetosProgramação Orientada a Objetos
em Javaem Java
Aula 1 Aula 1 –– Introdução, História e Introdução, História e 
ConceitosConceitos
Prof. Dr. Francisco Isidro Massetto
francisco.isidro@techschool.com.br 2
Plano de EnsinoPlano de Ensino
• Justificativa
• Apresentar técnicas de programação Orientada a 
Objetos com implementações em uma linguagem de 
programação.
3
Plano de EnsinoPlano de Ensino
• Objetivo
• Capacitar o aluno a desenvolver aplicações através do 
paradigma Orientado a Objetos.
4
BibliografiaBibliografia
• Básica
• DEITEL, H. M.; DEITEL, P. J. Java, Como Programar. 4ª Edição, 
Bookman, Porto Alegre, 2003.
• HORSTMANN, C. S. Core Java 2: Fundamentos. Makron Books, 
São Paulo, 2001, v.1.
• HORSTMANN, C. S. Core Java 2: Recursos Avançados. Makron
Books, São Paulo, 2001, v.2.
5
BibliografiaBibliografia
• Complementar
• FURGERI, S. Java 2: Ensino Didático: desenvolvendo e 
implementando aplicações. Érica, São Paulo, 2002, 
372p.
• Softwares de Apoio
• Java Development Kit (JDK)
• NetBeans IDE
Introdução a Linguagem JavaIntrodução a Linguagem Java
2
7
• A linguagem Java tem-se consolidada no mercado 
de aplicativos
• Apresenta um código portável
• Utilizada em:
• Sites
• Sistemas Bancários
IntroduçãoIntrodução
8
IntroduçãoIntrodução
• Pensando em servidores, tem- se os Servlets, JSPs
(JavaServer Pages), EJBs (Entreprise Java Beans)
• Muitas linhas de pesquisas envolvem desenvolvimento 
nessa linguagem (Computação Distribuída, Multimídia, 
Middleware, Processamento de Alto- Desempenho)
• Permite a implementação do paradigma Orientado a 
Objetos, já consolidado por outras linguagens (ex. C++)
9
HistóriaHistória
• Surgimento: resultado de um projeto de pesquisa - Green 
(1991) - financiado pela Sun Microsystems
• Objetivo: desenvolvimento de uma linguagem baseada em 
C e C++ que pudesse fazer funcionar os utensílios 
domésticos do futuro e possibilitar a comunicação entre 
eles. 
• Ex: TV, liqüidificador, torradeira. 
• Mudança no enfoque do projeto devido a problemas de 
patrocínio
10
• Aumento da popularidade da WWW em 1993 - imediato 
potencial de Java para criar páginas WEB
• 1995: a Sun anunciou Java formalmente 
• Se consolidou por volta de 1996
• Primeiro nome adotado: “Oak”(carvalho) - James Gosling
• O crescimento do WWW (Internet) fez surgir o HotJava –
um browser em Java para o próprio código Java
HistóriaHistória
11
• Empresas começaram a incorporar o browser Java 
(Netscape, IBM, Symantec, Microsoft, etc)
• As primeiras versões eram pobres (nem imprimiam)
• As evoluções em curto período de tempo mostraram 
o poder da linguagem
HistóriaHistória
12
• Linguagem de programação Orientada a Objetos, 
desenvolvida pela Sun Microsystems. 
• Tem como base linguagens de alto nível anteriores.
• Simplicidade
• Versão simples de C++
• Simples implementar Orientação a Objetos
• Código interpretado pequeno
• Máquina Virtual (JVM) pequena – 45Kb
CaracterísticasCaracterísticas
3
13
• Orientação a Objetos
• Recursos desse paradigma
• Não possui herança múltipla
CaracterísticasCaracterísticas
14
• Distribuída
• Comunicação facilitada através de redes de 
computadores
• Execução remota de recursos (RMI)
• Criação de aplicações server- side (Servlets, JSP, etc.)
CaracterísticasCaracterísticas
15
• Segurança
• Nada é seguro!!!
• Sistemas de segurança na JVM
• Assinatura digital
• Grande eficácia
• Controle para evitar estouro de pilha
• Controle para evitar corrupção de memória
• Controle de Escrita ou leitura de arquivos locais
CaracterísticasCaracterísticas
16
CaracterísticasCaracterísticas
• Portabilidade e Arquitetura Neutra
• Código intermediário (bytecode)
• Java possui ricas coleções de classes existentes 
em bibliotecas de classes Java - Java APIs 
(Applications Programming Interfaces – Interfaces 
de programas aplicativos)
17
• Múltiplas linhas de execução
• Facilidade de construção de threads
• Atraente para aplicações servidores
• Dinâmica
• Adapta- se para o ambiente de execução
• Adiciona classes, métodos, variáveis em tempo de 
execução
CaracterísticasCaracterísticas
18
• Bytecode
• Código intermediário, pré- compilado e pronto para ser 
interpretado
• Coletor de lixo (Garbage collection)
• Recurso do Java para gerenciamento de memória, 
liberando memória que não é mais necessária
CaracterísticasCaracterísticas
4
19
• HotJava
• Browser da Sun para execução de códigos Java, já “esquecido” 
desde que a Nestscape o incorporou
• JVM
• Máquina virtual Java, responsável pela interpretação do código 
Java
• Compilador JIT (Just- in- Time)
• Compilador de Java específico para uma plataforma
CaracterísticasCaracterísticas
20
• JavaScript
• Linguagem de scripts para páginas Web; apesar do 
nome e da sintaxe, não tem nada a ver com a 
programação em Java
• Java é extensão do HTML
• HTML é uma linguagem de marcação de hypertexto
• Java é uma linguagem de programação
CaracterísticasCaracterísticas
21
Conceitos errados sobre JavaConceitos errados sobre Java
• Java é fácil
• Nenhuma linguagem de programação é fácil
• Implementar os conceitos de OO não é simples
22
Ambiente Java TípicoAmbiente Java Típico
Fase 1 Editor Disco - O programa é criado no editor (.java) e armazenado em disco
Fase 2 Compilador Disco - O compilador cria bytecodes (.class) e osarmazena em disco. 
Fase 3 Class Loader
..
Memória Principal
Disco
- O carregador de classe coloca bytecodes
na memória.
Fase 4 Verificador de 
Bytecode ..
Memória Principal - O verificador de bytecodes confirma que
todos os bytecodes são válidos e não
violam restrições de segurança de Java. 
(Internet)
Fase 5 Interpretador
..
Memória Principal
- O interpretador lê os bytecodes e os
traduz para uma linguagem que o 
computador possa entender, 
possivelmente armazenando valores dos 
dados enquanto executa o programa.
23
Java Software Java Software DevelopmentDevelopment KitKit
• O ambiente de desenvolvimento de software Java, Java 
SDK (antigamente, JDK), é formado essencialmente por:
• um conjunto de aplicativos que permite, entre outras tarefas, 
realizar a compilação e a execução de programas escritos na 
linguagem Java. 
• um amplo conjunto de APIs que compõem o núcleo de 
funcionalidades da linguagem Java. 
• Uma API (Application Programming Interface) é uma biblioteca formada por 
código pré-compilado, pronto para ser utilizado no desenvolvimento de 
suas aplicações. 
24
• As ferramentas básicas do kit de desenvolvimento Java 
são: 
• o compilador Java, javac, 
• o interpretador de aplicações Java, java e 
• o interpretador de applets Java, appletviewer. 
• Tudo em Java está organizado em classes. 
• Algumas classes são desenvolvidas pelo programador da 
aplicação e outras,
• Já estão disponíveis através do núcleo de funcionalidades da 
plataforma Java. 
Java Software Java Software DevelopmentDevelopment KitKit
5
25
• As classes que compõem o núcleo de funcionalidades Java 
estão organizadas em pacotes. 
• Um pacote (package) Java é um mecanismo para agrupar 
classes de finalidades afins ou de uma mesma aplicação. 
• Além de facilitar a organização conceitual das classes, o 
mecanismo de pacotes permite localizar cada classe necessária 
durante a execução da aplicação. 
• Principal funcionalidade de um pacote Java:
• Evitar a explosão do espaço de nome, ou seja, classes
com o mesmo nome 
em pacotes diferentes podem ser diferenciadas pelo nome completo, 
pacote.classe. 
Núcleo de funcionalidadesNúcleo de funcionalidades
26
Principais Pacotes JavaPrincipais Pacotes Java
• Entre os principais pacotes oferecidos como parte do núcleo Java estão: 
• java.lang
• java.util
• java.io
• java.awt
• java.applet
• java.net
• Observe que esses nomes seguem a convenção Java, pela qual nomes de 
pacotes (assim como nomes de métodos) são grafados em letras minúsculas, 
enquanto nomes de classes têm a primeira letra (de cada palavra, no caso de 
nomes compostos) grafada com letra maiúscula. 
• Além dessas funcionalidades básicas, há também APIs definidas para propósitos 
mais específicos compondo a extensão padronizada ao núcleo Java.
27
BytecodesBytecodes
• Um dos grandes atrativos da plataforma tecnológica Java é a 
portabilidade do código gerado. 
• Esta portabilidade é atingida através da utilização de bytecodes.
• Bytecode é um formato de código intermediário entre o código fonte, o texto 
que o programador consegue manipular, e o código de máquina, que o 
computador consegue executar. 
• Na plataforma Java, o bytecode é interpretado por uma máquina 
virtual Java (JVM). 
28
BytecodesBytecodes
• A portabilidade do código Java é obtida à medida que máquinas virtuais Java estão 
disponíveis para diferentes plataformas. 
• Assim, o código Java que foi compilado em uma máquina pode ser executado em 
qualquer máquina virtual Java, independentemente de qual seja o sistema 
operacional ou o processador que executa o código: 
29
Máquina Virtual Java (JVM) Máquina Virtual Java (JVM) 
• É uma máquina de computação abstrata e um ambiente de 
execução independente de plataforma. 
• Programas escritos em Java e que utilizem as 
funcionalidades definidas pelas APIs dos pacotes da 
plataforma Java executam nessa máquina virtual. 
30
FerramentasFerramentas
• Editor
• UNIX/Linux
• vi
• emacs
• Windows 95/98/ME e NT/2000
• Edit do DOS
• Notepad
• Ambiente de Desenvolvimento Integrado (IDEs)
• Forté for Java Community Edition
• NetBeans IDE
• JBuilder da Borland
• Eclipse da IBM
• J++ da Microsoft
6
31
1 //um primeiro programa em Java
2//Welcome.java
3 public class Welcome {
4 // o método main inicia a execução do aplicativo Java 
5 public static void main (String args [ ] )
6 {
7 System.out.println(“Welcome to Java Programming!”);
8 } // fim do método main
9 } // fim da classe Welcome
Estrutura de um Programa em Estrutura de um Programa em 
JavaJava
Welcome to Java Programming!
32
Estrutura de um Programa em Estrutura de um Programa em 
JavaJava
• // (comentário de única linha)
• indica que o restante da linha é um comentário
• /* (comentário de múltiplas linhas) */
• pode ser dividido em várias linhas
• /** (cometário de documentação) */
• programa utilitário javadoc - lê esses comentários e usa os 
mesmos para preparar a documentação do programa
• Documentar programas e melhorar a legibilidade
• Dica: todo programa deve inciar com um comentário 
indicando o propósito do programa.
33
Estrutura de um Programa em Estrutura de um Programa em 
JavaJava
• public class Welcome {
• Inicia a definição de classe para a classe Welcome
• class palavra reservada (sempre escrita em minúsculo)
• Convenção: nome de classes iniciam com uma letra maiúscula e 
têm uma letra maiúscula para cada palavra do nome de classe 
(ExemploNomeClasse) - identificador
• O identificador é uma série de caracteres que consistem em letras, dígitos, 
sublinhados ( _ ) e sinais de cifrão ($) que não iniciem com um dígito e não 
contenham nenhum espaço
• Java faz distinção entre letras maiúsculas e minúsculas - erro de 
sintaxe
• Todas as definições de classe Java são armazenadas em 
arquivos que terminam com a extensão nome de arquivo “.java” 34
Estrutura de um Programa em Estrutura de um Programa em 
JavaJava
• Dica: erro comum para uma classe public
• Se o nome do arquivo não for idêntico ao nome da classe 
(ortografia e letras maiúsculas e minúsculas)
• Um arquivo contenha duas ou mais classes public
• { 
• inicia o corpo de cada definição de classe
• }
• termina cada definição de classe
• Observe que as linhas de 4 a 8 estão recuadas - convenção 
de espaçamento
35
Estrutura de um Programa em Estrutura de um Programa em 
JavaJava
• public static void main (String args [ ] )
• Faz parte de todo aplicativo Java
• Responsável pelo início da execução dos aplicativos
• ( ) indicam que main é um método
• Palavra-chave void indica que esse método realizará uma tarefa 
(exibindo uma linha de texto nesse programa), mas não retornará 
nenhuma informação 
• Dica: recue o corpo inteiro de cada definição de método um 
“nível” de recuo entre { e } que definem o corpo do método.
36
Método Método MainMain
• É um método associado à classe e não a um objeto 
específico da classe 
• é definido como um método estático
• deve ser um método público para permitir sua execução a partir 
da máquina virtual Java. 
• Não tem valor de retorno, mas recebe como argumento um 
arranjo de strings que corresponde aos parâmetros que podem 
ser passados para a aplicação a partir da linha de comando. 
Essas características determinam a assinatura do método.
7
37
Método Método MainMain
• Assinatura do método main é:
• public static void main(String args []) ou 
• static public void main(String args []) 
• O nome do parâmetro (args) poderia ser diferente, mas os 
demais termos da assinatura devem obedecer ao formato 
especificado. 
• Se a máquina virtual Java do interpretador não encontrar um 
método com essa assinatura para a classe especificada, uma 
exceção será gerada em tempo de execução: Exception in 
thread "main" java.lang.NoSuchMethodError: main
38
Método Método MainMain
• Argumento do main:
• O método main recebe como argumento um parâmetro do tipo 
arranjo de objetos String. 
• Cada elemento desse arranjo corresponde a um argumento 
passado para o interpretador Java na linha de comando que o 
invocou. 
• Por exemplo, se a linha de comando é 
• java Xyz abc 123 def 
• o método main (String args []) da classe Xyz vai receber, nessa execução, 
um arranjo de três elementos na variável args com os seguintes 
conteúdos: 
• em args[0], o objeto String com conteúdo "abc"; 
• em args[1], o objeto String com conteúdo "123"; 
• em args[2], o objeto String com conteúdo "def". 
39
Compilando e Executando Compilando e Executando ––
aplicativo Javaaplicativo Java
• Usando o kit JSDK:
• Para compilar:
• Abrir uma janela de comando
• Mudar para o diretório onde o código fonte está armazenado
• Digitar:
javac NomeDoPrograma.java
• Resultado: se o programa não contiver erros de sintaxe, o comando 
precedente criará um novo arquivo - NomeDoPrograma.class
contendo os bytecodes de Java que representam nosso aplicativo
• Para executar:
• Digitar no diretório onde se encontram os arquivos .java e .class:
java NomeDoPrograma
• Este comando dispara a execução do interpretador Java e indica que 
ele deve carregar o arquivo .class 40
ArgumentosArgumentos
// Principal.java
// Mostra o uso de argumentos
public class Principal
{
public static void main(String args[])
{
int numargs = args.length;
String arg1 = args[0];
String arg2 = args[1];
}
}
C:\>java Principal nome endereco ...
args[0] args[1] args[2] ...
args.length
41
System.out System.out 
(objeto de saída padrão)(objeto de saída padrão)
• System.out.println(“Welcome to Java Programming!”);
• Instrui o computador a realizar
uma ação: imprimir a string de 
caracteres contida entre aspas duplas.
• System.out é conhecido como objeto de saída padrão
• Permite exibir strings e outros tipos de informações na janela de comando 
a partir da qual o programa Java é executado.
• O método System.out.println exibe (ou imprime) uma linha 
de texto na janela de comando.
• A linha inteira System.out.println , seu argumento entre 
parênteses e ; , é uma instrução.
• Cada instrução deve terminar com ;
42
PalavrasPalavras--chave Javachave Java
enumwhilevolatilevoid
trytruetransientthrowsthrow
thissynchronizedswitchsuperstatic
shortreturnpublicprotectedprivate
packagenullnewnativelong
interfaceintinstanceofimportimplements
ifforfloatfinallyfinal
falseextendselsedoubledo
defaultcontinueclasscharcatch
casebytebreakbooleanabstract
8
43
OperadoresOperadores
• Aritméticos
• +
• -
• *
• /
• % (módulo) “resto da divisão”
• Igualdade
• = =
• ! =
• Relacionais
• >
• <
• >=
• <=
• Lógicos
• && (E lógico)
• | | (Ou lógico)
• ! (Não lógico)
44
Precedência e Associatividade de Precedência e Associatividade de 
OperadoresOperadores
de atribuiçãoDa direita para esquerda= + = - = * = / = % =
condicionalDa direita para esquerda(teste)? se V: se F
Ou lógicoDa esquerda para direita| |
E lógicoDa esquerda para direita&&
igualdadeDa esquerda para direita= = ! =
relacionalDa esquerda para direita< <= > >=
aditivoDa esquerda para direita+ -
multiplicativoDa esquerda para direita* / %
parêntesesDa esquerda para direita( )
TipoAssociatividadeOperadores
45
Operadores de Incremento e Operadores de Incremento e 
DecrementoDecremento
Utiliza o valor atual de b na
expressão em que b reside.
b--Pós-incremento--
Decrementa b por 1, depois utiliza o 
novo valor de b na expressão em
que b reside.
--bPré-incremento--
Utiliza o valor atual de a na
expressão em que a reside.
a++Pós-incremento++
Incrementa a por 1, depois utiliza o 
novo valor de a na expressão em
que a reside.
++aPré-incremento++
ExplicaçãoExpressão de 
exemplo
Chamado deOperador
JAVA_Aula1-GUI.pdf
1
Programação Orientada a ObjetosProgramação Orientada a Objetos
em Javaem Java
Aula 6 Aula 6 –– Interface Gráfica com Interface Gráfica com 
Usuário (GUI)Usuário (GUI)
Prof. Dr. Francisco Isidro Massetto
francisco.isidro@tecschool.com.br 2
GUI GUI -- Interface Interface GráficaGráfica com com UsuárioUsuário
• Conjunto consistente de componentes intuitivos
de interface com o usuário.
• Um componente GUI é um objeto através do 
qual o usuário interage via mouse ou teclado.
• Exemplos de GUI:
• Botão, Rótulo, Barra de Menus, Campo de Texto…
3
ContainersContainers
Container
ScrollPane
Window
Frame
Dialog
Panel
Applet
„„ Contém componentes Contém componentes 
4
ComponentesComponentes
Pacote SWING:
JFrame, JApplet, 
JDialog
5
IntroduçãoIntrodução
• GUI (Graphical User Interface)
• Fornece a um programa uma "aparência"e um "comportamento" 
diferenciados.
• As GUIs são construídas a partir de componentes GUI
• JLabel: área em que podem ser exibidos textos não-editável ou ícones.
• JTextField: área em que o usuário insere dados pelo teclado ou
exibe informações.
• JButton: área que aciona um evento quando você clica
• JCheckBox e JRadioButton: componentes que possuem dois
estados: selecionado ou não-selecionado.
• JComboBox: lista de itens a partir da qual o usuário pode fazer uma
seleção clicando em um item na lista ou digitando na caixa, se permitido.
6
IntroduçãoIntrodução
• JList: área em que uma lista de itens é exibida, a partir da qual o 
usuário pode fazer uma seleção clicando uma vez em qualquer
elemento na lista.
• JPanel: Container em que os componentes podem ser colocados
• Pacote javax.swing.*
• Esses componentes GUIs se tornaram padrão a partir da
versão 1.2 - Java 2
• Conhecidos como componentes Java puros
• Componentes GUIs originais do pacote java.awt estão
associados com recursos da interface gráfica com o usuário
da plataforma local
• Aparência e Interação com os componentes diferente em cada
plataforma (Windows, Macintosh…)
2
7
IntroduçãoIntrodução
• Componentes swing permitem que o programador
especifique uma aparência e um comportamento
uniformes em todas as plataformas.
• Oferecem um maior nível de portabilidade e 
flexibilidade que os componentes GUIs originais do 
pacote java.awt.
8
SuperclassesSuperclasses comunscomuns de de muitosmuitos
componentescomponentes SwingSwing
java.lang.Objectjava.lang.Object
java.awt.Componentjava.awt.Component
java.awt.Containerjava.awt.Container
javax.swing.JComponentjavax.swing.JComponent
Superclasse para a maioria dos 
componentes swing
A maioria dos componentes GUIs 
estendem esta classe direta ou
indiretamente. Métodos paint ( ), repain
( ) e update ( ). Operações comuns par
a maioria dos componentes
É uma coleção de componentes
relacionados. Em aplicativos JFrames e 
applets , anexamos os componentes ao
painel de conteúdo, que é um objeto da
classe Container
9
JLabelJLabel
• Apresenta textos e/ou imagens não selecionáveis
• Construtores:
JLabel(String texto)
JLabel(Icon imagem)
JLabel(String texto, Icon imagem, int
alingH)
• Alinhamento: LEFT, CENTER, RIGHT
• Um Icon é um objeto de qualquer classe que implementa a interface Icon 
do pacote javax.swing.
• Uma dessas classes é ImageIcon, que suporta dois formatos de 
imagem, GIF e JPEG.
10
JLabelJLabel
• Alguns Métodos:
• setText(String)
• getText()
• setIcon(Icon)
• getIcon()
• “seta” ou “obtém” texto/imagem do JLabel
• setHorizontalTextPosition(int)
• setVerticalTextPosition(int)
• “seta” posicionamento horizontal/vertical do JLabel
11
JLabelJLabel
• setToolTipText()
• herdado de JComponent - especificar dica de 
ferramenta quando o usuário posiciona o cursor do 
mouse
12
JTextFieldJTextField e e JPasswordFieldJPasswordField
• JTextField são áreas de uma única linha em que o texto
pode ser inserido pelo usuário via teclado ou o texto
pode ser simplesmente exibido
• Construtores:
JTextField()
JTextField(int tamanho)
JTextField(String frase)
JTextField(String frase, int tamanho)
3
13
JTextFieldJTextField e e JPasswordFieldJPasswordField
• JPasswordField mostra que um caractere foi digitado quando
o usuário insere caracteres, mas oculta os caracteres
assumindo que eles representam uma senha.
• Construtores:
JPasswordField()
JPasswordField(int tamanho)
JPasswordField(String frase)
JPasswordField(String frase, int tamanho)
14
JTextFieldJTextField e e JPasswordFieldJPasswordField
• Quando o usuário digita os dados em um desses
componentes e pressiona Enter, ocorre um evento de 
ação
• Alguns métodos:
• setEditable(): herdado da classe JTextComponent
• addActionListener(): recebe como argumento um objeto
ActionListener
• getSource():determina o componente GUI com o qual o usuário
interagiu
• getPassword(): devolve a senha como um array do tipo char
15
JTextFieldJTextField e e JPasswordFieldJPasswordField
• Tratamento de eventos:
• Interface: ActionListener
•actionPerformed (ActionEvent event)
• ActionEvent:
•getActionCommand(): devolve o texto que gerou o 
evento
16
ModeloModelo de de TratamentoTratamento de de EventosEventos
• As GUIs são baseadas em eventos, isto é, geram
eventos quando o usuário do programa interage com a 
GUI. 
• Algumas interações comuns são: 
• mover o mouse
• clicar no mouse
• clicar em um botão
• digitar em um campo de texto
• selecionar um item de um menu, fechar uma janela, etc. 
• Quando ocorre uma interação com o usuário, o evento
é automaticamente enviado para o programa.
17
ModeloModelo de de TratamentoTratamento de de EventosEventos
• Para processar um evento de interface gráfica com o 
usuário, o programador deve realizar duas tarefas
principais:
• Registrar um ouvinte de eventos e 
• Implementar um tratador de eventos. 
• Um ouvinte de eventos para um evento GUI é um 
objeto de uma classe que implementa uma ou mais das 
interfaces ouvintes de eventos dos pacotes
java.awt.event e javax.swing.event
18
ModeloModelo de de TratamentoTratamento de de EventosEventos
• Um objeto ouvinte de eventos “ouve” tipos
específicos de eventos gerados no mesmo
objeto ou por outros objetos de um programa
• Um tratador de eventos é um método chamado
automaticamente em resposta a um tipo de 
evento em particular
4
19
JButtonJButton
• Um botão é um componente no qual o usuário clica
para acionar uma ação específica
• Construtores:
JButton()
JButton(String texto, Icon imagem)
JButton(String texto)
JButton(Icon imagem)
• Um botão de comando gera um ActionEvent quando
o usuário clica no botão
• Herda da classe AbstractButton
• JButton pode exibir Icons (Icon rollover - exibido quando o 
mouse é posicionado sobre o botão) 20
JButtonJButton
• Alguns métodos:
• setEnabled(boolean)
• setRolloverIcon(): herdado da classe
AbstractButton para especificar a imagem
exibida no botão quando o usuário posiciona o 
mouse sobre o botão
• ActionEvent - interface ActionListener
• getActionCommand()
• actionPerformed(ActionEvent event)
21
JToggleButtonJToggleButton, , JCheckBoxJCheckBox e e 
JRadioButtonJRadioButton
• Componentes Swing contêm 3 tipos de botões
de estado:
• JToggleButton: são frequentemente utilizados
com barras de ferramentas
• JCheckBox e JRadioButton são subclasses de 
JToggleButton
22
JCheckBoxJCheckBox
• Botão de seleção para coleta de informações
• Permite a seleção de vários componentes deste
tipo
• Construtores:
JCheckBox()
JCheckBox(String texto) 
JCheckBox(Icon imagem) 
JCheckBox(String texto, Icon imagem) 
23
JCheckBoxJCheckBox
• Quando o usuário clica em um JCheckBox é gerado
um ItemEvent, que pode ser tratado por um 
ItemListener.
• ItemListener define o método
itemStateChanged que é chamado quando o usuário
clica na JCheckBox
• O método e.getSource() determina qual
JCheckBox foi clicada
• O método e.getStateChange() determina o estado
do botão
• Alguns métodos:
• addItemListener() 24
FontsFonts
• A classe Font define fonte para o texto.
• Construtor:
Font(String nome, int estilo, int tamanho)
• Font.PLAIN
• Font.BOLD
• Font.ITALIC
• Font.getAllFonts()- retorna um array de todas as 
fontes do sistema
5
25
JRadioButtonJRadioButton
• Botões de opção
• Possuem dois estados:
• Selecionado
• Não-selecionado
• Aparecem como um grupo em que apenas um botão de 
opção pode ser selecionado por vez
• Utilizados para representar um conjunto de opções
mutuamente exclusivas
• ButtonGroup: permite o relacionamento lógico entre 
os botões de opção
• add() 26
JRadioButtonJRadioButton
• Construtores:
JRadioButton()
JRadioButton(String texto)
JRadioButton(Icon imagem)
JRadioButton(Icon imagem, boolean sel)
JRadioButton(String texto, Icon imagem)
JRadioButton(String texto, Icon imagem,
boolean sel)
JRadioButton(String texto, boolean sel)
27
JRadioButtonJRadioButton
• Tratamento de eventos:
• ItemEvent
• getStateChange(): determina o estado do 
botão
• Interface ItemListener
• itemStateChanged()
28
JComboBoxJComboBox
• Caixa de Combinação: fornece uma lista de itens da qual o 
usuário pode fazer uma seleção
• Construtores:
JComboBox()
JComboBox(Object[] itens)
JComboBox(Vector itens)
• Tratamento de eventos:
• ItemEvent
• getStateChange (): determina se a caixa está ou não
marcada
• Interface ItemListener
• itemStateChanged ()
29
JComboBoxJComboBox
• Alguns Métodos:
• setMaximumRowCount(): estabelecer o número
máximo de elementos que são exibidos
• getSelectedIndex(): determina o número do 
índice do item selecionado
30
JListJList
• Exibe uma série de itens da qual o usuário pode selecionar um 
ou mais itens. 
• Não fornecem uma barra de rolagem se houver mais itens na
lista que o número de linhas visíveis- JScrollPane
• Suporta:
• Listas de uma única seleção e 
• Listas de seleção múltipla
• Construtores:
JList()
JList(Object[] itens)
JList(Vector itens)
6
31
JListJList
• Alguns métodos:
• setVisibleRowCount(): número de itens que são visíveis na
lista
• setSelectionMode(): especificar o modo de seleção para a 
lista
• addListSelectionListener(): adiciona um "ouvite" para
tratamento de eventos
• valueChanged(): executado quando o usuário faz uma seleção
• getSelectionIndex (): retorna o índice do item selecionado
• Tratamento de eventos:
• Interface ListSelectionListener - valueChanged ()
32
JPanelJPanel
• Um container genérico e visual.
• As GUIs complexas exigem que cada componente seja
colocado em uma posição exata
• Consistem em múltiplos painéis com os componentes
de cada painel organizados em um layout específico
• Classe JPanel- subclasse de JComponent
• Cada JPanel é um Container. Assim,
JPanels podem ter componentes, incluindo outros
painéis, adicionados a eles.
33
JPanelJPanel
• O construtor padrão cria um objeto JPanel com 
FlowLayout
• Diferentes layouts podem ser especificados
• Durante a construção ou 
• Através do método setLayout():
• FlowLayout
• BorderLayout
• GridLayout.
34
GerenciadoresGerenciadores de Layoutsde Layouts
• São úteis para organizar os componentes GUIs em um 
container para fins de apresentação
• FlowLayout
• Forma menos rígida de organização
• Coloca os componentes sequencialmente (da esquerda para a direita) na
ordem em que foram adicionados. 
• Também é possível especificar a ordem dos compoentes utilizando o 
método add de Container que recebe um Component e um 
índice de posição inteiro como argumentos
• Quando os componentes alcança a borda do container, os componentes
continuam na próxima linha
• Alinhamentos: LEFT, RIGHT e CENTER
• setAligment ()
35
GerenciadoresGerenciadores de Layoutsde Layouts
• BorderLayout
• Padrão para painéis de conteúdo de JFrames e JApplets. 
• Organiza os componentes em cinco áreas: 
•NORTH
•SOUTH
•EAST
•WEST
•CENTER
• Até cinco componentes podem ser adicionados diretamente
a um BorderLayout - um para cada região
36
GerenciadoresGerenciadores de Layoutsde Layouts
• GridLayout
• Organiza os componentes em linhas e colunas.
• Cada componente em um GridLayout tem a mesma
largura e altura
• Os componentes são adicionados a um GridLayout que
começa na célula da parte superior esquerda da grade e vai
da esquerda para a direita até a linha estar cheia
• Reorganizar um container cujo Layout foi alterado
• Método validate() recalcula o layout do Container
com base no gerenciador de Layout atual para o 
Container e o conjunto atual de componentes GUIs 
exibidos.
JAVA_Aula2.pdf
1
Prof. Dr. Francisco Isidro Massetto
francisco.isidro@techschool.com.br
Programação Orientada a ObjetosProgramação Orientada a Objetos
em Javaem Java
Aula 2 Aula 2 –– Fundamentos da Fundamentos da 
Linguagem JavaLinguagem Java
22
• Booleanos
• Caracteres
• Inteiros
• Ponto flutuante
Obs.: Além dos tipos de dados primitivos as variáveis em Java 
podem ser instâncias de
qualquer classe definida.
TiposTipos de Dados de Dados PrimitivosPrimitivos
33
BooleanosBooleanos
• Variáveis do tipo boolean podem assumir os valores true ou false.
• valor default para um atributo booleano de uma classe, se não especificado, é
false.
• Variáveis booleanas e variáveis inteiras, ao contrário do que ocorre em C e 
C++, não são compatíveis em Java. 
• Assim, não faz sentido atribuir uma variável booleana a uma variável inteira ou 
usar um valor inteiro como uma condição de um teste.
• Exemplo de declaração e uso: 
boolean deuCerto = true;
44
CaracteresCaracteres
• Uma variável do tipo char contém um caracter Unicode, 
ocupando 16 bits de armazenamento em memória. 
• um valor literal do tipo caracter é representado entre aspas 
simples (apóstrofes), como em: 
char umCaracter = 'A'; 
• Valores literais de caracteres podem também ser representados 
por seqüências de escape, como em '\n' (nova linha)
55
InteirosInteiros
• Valores numéricos inteiros em Java podem ser representados por variáveis do tipo 
byte, short, int ou long. 
• Todos os tipos contém valores inteiros com sinal.
• O valor default para atributos desses tipos é 0. 
• byte: ocupam 8 bits de armazenamento interno (-128 a +127). 
• short: ocupam 16 bits de armazenamento interno (-32.768 a +32.767). 
• int: ocupam 32 bits de armazenamento interno (-2.147.483.648 a +2.147.483.647). 
• long: ocupam 64 bits de armazenamento interno ( -9.223.372.036.854.775.808 a 
+9.223.372.036.854.775.807). 
• Constantes literais do tipo long podem ser identificadas em código Java através do sufixo l ou 
L, como em: 
long valorQuePodeCrescer = 100L; 
• Ao contrário do que ocorre em C, não há valores inteiros sem sinal (unsigned) em Java.
Combinações da forma long int ou short int são inválidas em Java.
66
Ponto FlutuantePonto Flutuante
• Valores reais, com representação em ponto flutuante, podem ser 
representados por variáveis de tipo float ou double. 
• Representação interna desses valores segue o padrão de 
representação IEEE 754
• O valor default para atributos desses tipos é 0.0. 
• float: ocupam 32 bits de armazenamento interno (±3.40282347E+38 a 
±1.40239846E-45) - com nove dígitos significativos de precisão. 
• double: ocupam 64 bits de armazenamento interno (±4.94065645841246544E-
324 a ±1.79769313486231570E+308) - com 18 dígitos significativos de 
precisão. 
• Constantes literais do tipo float podem ser identificadas no código Java pelo 
sufixo f ou F; do tipo double, pelo sufixo d ou D. 
2
77
Conversões de Tipos de DadosConversões de Tipos de Dados
• String para int?
• int para String?
• float para int?
• float para String?
• double para int?
• String para double?..
java.lang.Integer
java.lang.Float
java.lang.Double
java.lang.String
88
Conversões de Tipos de DadosConversões de Tipos de Dados
• String para double
• Double.parseDouble(String)
• String para int
• Integer.parseInt(String)
• String para Float
• Float.parseFloat(String)
• int, float, double para String
• toString() ou toString(tipo)
• String.valueOf(int ou float ou double)
99
Estruturas de ControleEstruturas de Controle
• Antes de escrever um programa
• Entendimento completo do problema
• Abordagem cuidadosamente planejada para resolvê- lo
• Entender os tipos de blocos de construção disponíveis
• Empregar princípios comprovados de construção de 
programas
1010
Estruturas de ControleEstruturas de Controle
• As instruções em um programa:
• São executadas na ordem em que são escritas
• Execução sequencial
• Transferência de controle (Java)
• Estrutura de seqüência
• Estrutura de seleção (3 tipos)
• Estrutura de repetição (3 tipos)
1111
Estruturas de ControleEstruturas de Controle
• Estruturas de Seleção
• if (estrutura de seleção única)
• Executa uma ação indicada somente quando a condição for verdadeira
• Exemplo: suponha que a nota de aprovação em um exame seja 60 (em 
100).
if ( nota >= 60 )
System.out.println ( “Aprovado”);
nota>=60 Imprimir “Aprovado”verdadeira
falsa
1212
Estruturas de ControleEstruturas de Controle
• Estruturas de seleção (continuação)
• if/else (estrutura de seleção dupla)
• Especifica ações separadas que serão executadas quando a condição for 
verdadeira e quando for falsa.
• Considere o exemplo anterior:
if ( nota >= 60 )
System.out.println ( “Aprovado”);
else
System.out.println ( “Reprovado”);
nota>=60
Imprimir “Aprovado”
verdadeirafalsa
Imprimir “Reprovado”
3
1313
Estruturas de ControleEstruturas de Controle
• Exemplo estrutura if/else aninhadas: imprimirá A para as notas >= 90, B
para as notas no intervalo de 80 a 89, C para as notas no intervalo de 70 a 
79, D para as notas no intervalo de 60 a 69 e F para as demais notas
if ( nota >= 90 )
System.out.println ( “A”);
else
if ( nota >= 80 )
System.out.println ( “B”);
else
if ( nota >= 70 )
System.out.println ( “C”);
else
if ( nota >= 60 )
System.out.println ( “D”);
else
System.out.println ( “F”);
Dica: se existirem vários níveis
de recuo, cada nível deve ser 
recuado pela mesma
quantidade adicional de espaço.
1414
Estruturas de ControleEstruturas de Controle
• Exemplo:
- o corpo da primeira estrutura if é uma
estrutura if/else.
- testa se x > 5, se for, a execução
continua testando se y > 5. Se a 
segunda condição for verdadeira, exibe
x e y são > 5
- entretanto se a segunda condição for 
falsa, o string x é <= 5 é exibido, 
embora saibamos que x >5.
- para forçar a estrutura anhinhada
anterior a ser executada como
pretendido a estrutura deve ser escrita
como no exemplo acima.
- as { } indicam ao compilador que a 
segunda estrutura if está no corpo da
primeira estrtutura if e que o else
corresponde à primeira estrutura if.
if ( x > 5 )
if ( y > 5 )
System.out.println(“x e y são > 5”);
else
System.out.println(“x é <= 5”);
if ( x > 5 ) {
if ( y > 5 )
System.out.println(“x e y são > 5”);
}
else
System.out.println(“x é <= 5”);
1515
Estruturas de ControleEstruturas de Controle
• Para incluir mais instruções no corpo de um if, inclua as 
instruções entre { e } - bloco
if ( nota >= 60 )
System.out.println ( “Aprovado”);
else {
System.out.println ( “Reprovado”);
System.out.println ( “Você deve repetir este curso”);
}
- observe que as chaves cercam as duas instruções na cláusula else. Essas
chaves são importantes, pois sem elas a instrução
System.out.println ( “Você deve repetir este curso”);
estaria fora do corpo da parte else da estrutura if e seria executada
independentemente da nota ser ou não menor que 60.
1616
Estruturas de ControleEstruturas de Controle
• switch (estrutura de seleção múltipla)
• Trata uma série de condições nas quais uma variável ou expressão
particular é comparada com valores que ela pode asssumir e diferentes 
ações são tomadas
• break depois das instruções para cada case: faz com que o controle 
saia imediatamente da estrutura switch
• Só pode comparar com expressões constantes integrais
case a
ação (ões) default
case z
...
ação (ões) do caso a break
ação (ões) do caso z break
verdadeiro
verdadeiro
falso
falso
1717
Estruturas de ControleEstruturas de Controle
• Estruturas de repetição
• while
• Especifica que uma ação deve ser repetida enquanto alguma condição permanecer 
verdadeira
while ( condição)
instrução
• Exemplo: segmento de programa projetado para encontrar a primeira potência de 2 
maior que 1000
int produto = 2;
while (produto <= 1000)
produto = 2 * produto;
produto<=1000 produto = 2 * produtoverdadeira
falsa
1818
Estruturas de ControleEstruturas de Controle
• do/while
• Testa a condição de continuação do laço no final do laço
• O corpo do laço será executado pelo menos uma vez
do {
instrução
} while (condição);
condição
falso
ação(ões)
verdadeiro
4
1919
Estruturas de ControleEstruturas de Controle
• for
• trata de todos os detalhes da repetição controlada por contador e exige o seguinte:
• o nome de uma variável de controle;
• o valor inicial da variável de controle;
• o incremento (ou decremento) pelo qual a variável de controle é modificada a cada 
passagem pelo laço (cada iteração do laço); e
• A condição que teste o valor final da variável de controle.
for (expressão1; expressão2; expressão3)
instrução
• Expressão1: inicializa a variável de controle do laço;
• Expressão2: é a condição de continuação do laço;
• Expressão3: incrementa a variável de controle, até que a condição de continuação do 
laço se torne falsa
2020
Estruturas de ControleEstruturas de Controle
• Componentes de um cabeçalho de for típico
for ( int contador = 1; contador <= 10; contador++ )
Incremento da variável de controleValor inicial da variável de controle
Valor final da variável de controleNome da variável de controle
Condição de continuação do laço
contador<=10 contador++
verdadeiro
falso
int contador = 1
corpo do laço (que
pode conter muitas
instruções)
2121
Estruturas de ControleEstruturas de Controle
• Exemplos com a estrutura for:
• Variável de controle de 1 a 100 em incrementos de 1
for ( int i = 1; i <= 100; i++ )
• Variável de controle de 100 a 1 em incrementos de -1
for ( int i = 100; i >= 1; i-- )
• Variável de controle de 7 a 77 em incrementos de 7
for ( int i = 7; i <= 77; i += 7 )
• Variável de controle de 20 a 2 em incrementos de -2
for ( int i = 20; i >= 2; i -= 2 )
• Variável de controle assumir a seguinte seqüência de valores: 2, 5, 8, 11, 
14, 17, 20.
for ( int j = 2; j <= 20; j += 3 )
• Variável de controle assumir a seguinte seqüência de valores: 99, 88, 77, 
66, 55, 44, 33, 22, 11.
for ( int j = 99; j > 0; j -= 11 ) 2222
Estruturas de ControleEstruturas de Controle
• break
• Quando executada em uma das instruções de repetição (while, for, do/while
ou switch), causa saída imediata dessa estrutura
• A execução continua com a primeira instrução depois da estrutura
• continue
• Quando executada em uma das instruções de repetição (while, for, do/while), 
pula qualquer instrução restante no corpo da estrutura e prossegue com o teste 
para a próxima iteração do laço
• Nas estruturas while e do/while, o programa avalia o teste de continuação do laço 
imediatamente depois da instrução continue ser executada
• Em estruturas for, a expressão de incremento é executada e depois o programa 
avalia o teste de continuação do laço
2323
System.in (objeto de entrada System.in (objeto de entrada 
padrão)padrão)
import java.io.*;
public class Leitura {
public static void main (String args[]){
try
{
InputStreamReader in = new InputStreamReader (System.in);
System.out.println("Digite algo e tecle enter");
BufferedReader br = new BufferedReader(in);
String s = br.readLine();
System.out.println(s);
} catch(Exception e) {}
}
}
Leitura.java
2424
Classe Classe JOptionPaneJOptionPane
• Pacote javax.swing.
• Contém classes que ajudam os programadores de Java definir 
interfaces gráficas com o usuário para seu aplicativo
• JOptionPane
• showMessageDialog(null, “string a 
exibir”,”string que deveria aparecer na barra de 
título”, tipo de diálogo de mensagem)
• JOptionPane.PLAIN_MESSAGE
• JOptionPane.ERROR_MESSAGE
• JOptionPane.INFORMATION_MESSAGE
• JOptionPane.WARNING_MESSAGE
• JOptionPane.QUESTION_MESSAGE
5
2525
Classe Classe JOptionPaneJOptionPane
• showInputDialog(“string indicando o que 
o usuário deve digitar no campo texto”)
System.exit(0): termina adequadamente um 
programa que exibe uma interface gráfica
JAVA_Aula3.pdf
1
Prof. Dr. Francisco Isidro Massetto
francisco.isidro@techschool.com.br
Programação Orientada a Objetos Programação Orientada a Objetos 
em Javaem Java
Aula 3 Aula 3 –– Classes e ObjetosClasses e Objetos
2
Classes e ObjetosClasses e Objetos
Classe Pessoa
objeto Maria objeto Pedro
3
Classe
A
T
R
I
B
U
T
O
S
M
É
T
O
D
O
S
Pessoa
nome
endereco
telefone
idade
altura
registrar()
matricular()
estudar()
cadastrar()
pagar()
Maria Rua A, 23 3226-5689 15 1.6
Pedro Rua B, 45 3205-2365 21 1.8
Objetos 
Classes e ObjetosClasses e Objetos
4
Classes e ObjetosClasses e Objetos
Palio JWO-4567
Parati KLJ-0978
Celta JDK-6543
OBJETOS
(Instâncias da classe Automóvel)
Automóvel
Marca
Placa
CLASSE
5
Classes em JavaClasses em Java
• Um dos principais resultados das fases de análise e projeto
OO:
• Definição de um modelo conceitual para o domínio da aplicação, 
contemplando as classes relevantes e suas associações.
• O uso de uma linguagem de modelagem, tal como o 
diagrama de classes UML, permite expressar esse 
resultado de maneira organizada e padronizada. 
• Uma classe é um gabarito para a definição de objetos.
• propriedades (atributos) e
• comportamentos (métodos) 
6
Definição de Classes em JavaDefinição de Classes em Java
• Diagrama de Classes: a representação de classes contempla três 
tipos básicos de informação:
Automovel
- nomeProprietario: String
- modelo: String
- placa: String
- ano: int
+ setNomeProprietario (nome: String): void
+ setPlaca (nPlaca: String): void
+ imprimir (): void
„Nome da classe: Um identificador para a classe que permite referenciá-la 
posteriormente (por exemplo, no momento da criação de um objeto). 
„Atributos:
„nome: um identificador para o atributo. 
„tipo: o tipo do atributo (inteiro, real, caracter, outra classe, etc.) 
„valor_default: opcionalmente, pode-se especificar um valor inicial para o atributo.
2
7
Definição de Classes em JavaDefinição de Classes em Java
• Métodos:
• nome: um identificador para o método. 
• tipo: quando o método tem um valor de retorno, o tipo desse valor. 
• lista de argumentos: quando o método recebe parâmetros para sua execução, o 
tipo e um identificador para cada parâmetro. 
• Modificadores de acesso a membros
• Pode-se especificar o quão acessível é um atributo ou método de um 
objeto a partir de outros objetos. 
• Os valores possíveis são: 
+ public:visibilidade externa total
# protected:visibilidade externa limitada.
- private:nenhuma visibilidade externa
8
ExemploExemplo: Classe : Classe AutomovelAutomovel
//declaração de pacotes
//definição da classe Automovel
public class Automovel
{
//declaração dos atributos da classe
private String nomeProprietario;
private String modelo;
private String placa;
private int ano;
//método construtor
public Automovel (String nomeProprietario, String modelo, 
String placa, int ano)
{
this.nomeProprietario = nomeProprietario;
this.modelo = modelo;
this.placa = placa;
this.ano = ano;
}
9
ExemploExemplo: Classe : Classe AutomovelAutomovel
//declaração dos demais métodos da classe
public void imprimir ()
{
System.out.println(nomeProprietario+ " possui um(a) "+modelo+ 
" com placa "+placa+ " e ano "+ano);
}
public void setNomeProprietario (String nome) 
{
this.nomeProprietario = nome;
}
public void setPlaca (String nPlaca) 
{
this.placa = nPlaca;
}
10
ExemploExemplo: Classe : Classe AutomovelAutomovel
//definição do método main
public static void main
(String args [])
{
//instanciando um objeto da classe Automóvel
Automovel a = new Automovel ("Eduardo", "Palio", "JWO2125", 
2002);
//troca de mensagens (chamada ao método imprimir())
a.imprimir();
System.out.println ("***Transferencia de Proprietario***");
a.setNomeProprietario("Rosa");
a.imprimir();
Automovel b = new Automovel ("Rodrigo", "Parati", 
"JSX6481", 1999);
b.imprimir();
System.out.println ("***Mudanca de Placa***");
b.setPlaca("SDK2581");
b.imprimir();
}//fim do método main
}//fim da classe Automovel
11
Definição de Classes em JavaDefinição de Classes em Java
• Em Java, classes são definidas através do uso da palavra-chave class. 
• Sintaxe para definir uma classe: 
[modificador] class NomeDaClasse { // corpo da classe... } 
• Após a palavra-chave class, segue-se o nome da classe, que deve ser um 
identificador válido para a linguagem.
• [modificador] é opcional; se presente, pode ser uma combinação de public
e abstract ou final. 
• O modificador abstract indica que nenhum objeto dessa classe pode ser 
instanciado.
• O modificador final indica que a classe não pode ser uma superclasse (uma classe 
não pode herdar de uma classe final)
12
Definição de Classes em JavaDefinição de Classes em Java
• A definição da classe propriamente dita está entre { e }, que delimitam blocos 
na linguagem Java. Usualmente, o corpo de uma classe obedece à seguinte 
seqüência de definição:
• As variáveis de classe, iniciando pelas public, seguido pelas protected, e 
finalmente pelas private.
• Os atributos (ou variáveis de instância) dos objetos dessa classe, seguindo a 
mesma ordenação definida para as variáveis de classe. 
• Os construtores de objetos dessa classe.
• Os métodos da classe, geralmente agrupados por funcionalidade. 
• Toda classe pode também ter um método main associado
• Esse método como já mencionado é utilizado pelo interpretador Java para dar 
início à execução de uma aplicação. 
• Propriedades de uma classe podem ser obtidas através das 
funcionalidades oferecidas na classe java.lang.Class
3
13
Modificadores de acesso a Modificadores de acesso a 
membros em Javamembros em Java
• O modificadores de acesso controlam o acesso às variáveis de 
instância e aos métodos de uma classe
• Quando nenhum membro modificador de acesso é oferecido para um 
método ou variável quando estão definidos em uma classe – acesso 
de pacote
• Se o programa consiste em uma definição de classe, isso não tem nenhum 
efeito específico no programa
• Se o programa utilizar várias classes do mesmo pacote (um grupo de classes 
relacionadas), essas classes podem acessar todos os métodos de acesso e 
dados com acesso de pacote umas das outras diretamente, através de uma 
referência a um objeto
14
Modificadores de acesso a Modificadores de acesso a 
membros em Javamembros em Java
• public
• Amplia a visibilidade padrão (está restrita a todos os membros 
que fazem parte de um mesmo pacote) deixando-a sem 
restrições. 
• Uma classe definida como pública pode ser utilizada por qualquer 
objeto de qualquer pacote. 
• Um arquivo fonte (.java) pode ter no máximo uma classe 
pública, cujo nome deve ser o mesmo do arquivo.
• As demais classes num arquivo fonte, não públicas, são 
consideradas classes de suporte para a classe pública e têm a 
visibilidade padrão. 
15
Modificadores de acesso a Modificadores de acesso a 
membros em Javamembros em Java
• protected
• Nível intermediário de proteção entre o acesso public e 
private
• Restringe a visibilidade do membro modificado, atributo 
ou método, apenas à própria classe, àquelas derivada 
desta (herança) e também a outras classes no mesmo 
pacote (acesso de pacote). 
16
Modificadores de acesso a Modificadores de acesso a 
membros em Javamembros em Java
• private
• Restringe o acesso a membros de uma classe (atributo 
ou método) a objetos da própria classe que contém sua 
definição - encapsulamento.
• Tornar private as variáveis de instância de uma 
classe e public os métodos da classe facilita a 
depuração, uma vez que os problemas com as 
manipulações dos dados estão localizados nos métodos 
da classe
17
Variáveis de ClasseVariáveis de Classe
• Cada objeto de uma classe tem sua própria cópia 
de todas as variáveis de instância da classe
• Em certos casos, apenas uma cópia de uma 
variável particular deve ser compartilhada por todos 
os objetos de uma classe
• Uma variável de classe tem sua declaração 
precedida pela palavra-chave static. 
18
Variáveis de ClasseVariáveis de Classe
• Várias constantes são definidas em Java como 
public static final
• a classe Math (java.lang) de Java, por exemplo, define as constantes E 
(2.71828...) e PI (3.14159...). Para ter acesso a esses valores, basta 
precedê-los com o nome da classe e um ponto, como em 
double pi2 = Math.PI/2; 
• Outro exemplo de variável public static final é a variável out
da classe System. Essa variável, System.out, está associada a um 
objeto que representa a saída padrão. 
4
19
Atributos ou Variáveis de Atributos ou Variáveis de 
InstânciaInstância
• Sintaxe para definir um atributo em uma classe é:
[modificador] tipo nome [ = default]; onde 
• modificador (opcional), uma combinação de 
• public, protected ou private; 
• final;
• tipo:deve ser um dos tipos primitivos da linguagem Java ou o nome de uma 
classe. 
• nome: deve ser um identificador válido. 
• default: (opcional) é a especificação de um valor inicial para a variável. 
• O modificador final especifica que uma variável de instância não é 
modificável (constante).
20
Métodos em JavaMétodos em Java
• A definição de métodos reflete de forma quase direta a informação 
que estaria presente em um diagrama de classes UML, a não ser por 
uma diferença vital: o corpo do método.
• Dica: uma boa prática de programação é manter a funcionalidade de 
um método simples, desempenhando uma única tarefa. 
• O nome do método deve refletir de modo adequado a tarefa realizada. 
• Se a funcionalidade do método for simples, será fácil encontrar um nome 
adequado para o método.
• Os métodos são essencialmente procedimentos que podem:
• Manipular atributos de objetos para os quais o método foi definido. 
• Definir e manipular variáveis locais
• Receber parâmetros por valor através da lista de argumentos
21
Métodos em JavaMétodos em Java
• Sintaxe para definir um método em uma classe é: 
[modificador] tipo nome(argumentos) 
{ corpo do método } onde:
• modificador (opcional), uma combinação de: 
• public, protected ou private; 
• abstract ou final; e 
• static. 
• tipo: indicador do valor de retorno, sendo void se o método não tiver um valor de 
retorno; 
• nome: deve ser um identificador válido 
• argumentos: são representados por uma lista de parâmetros separados por 
vírgulas, onde cada parâmetro obedece à forma tipo nome. 
22
Métodos em JavaMétodos em Java
• O modificador abstract define apenas a assinatura do método que deverá ser 
implementado na subclasse
• O modificador final associado ao método indica que o mesmo não pode ser 
sobrescrito em uma subclasse
• O modificador static indica o uso do método independentemente de qualquer 
objeto de uma classe
• Sintaxe de chamada ou acesso a métodos:
objeto.nomeDoMetodo(argumentos)
classe.nomeDoMetodo(argumentos)– para métodos static
23
Métodos em JavaMétodos em Java
• Usualmente, métodos definidos em uma classe são 
aplicados a objetos daquela classe. 
• Há situações nas quais um método pode fazer uso dos 
recursos de uma classe para realizar sua tarefa sem 
necessariamente ter de estar associado
a um objeto 
individualmente.
• Java define os métodos da classe, cuja declaração deve conter o 
modificador static.
• Um método estático pode ser aplicado à classe e não necessariamente a 
um objeto.
24
Métodos em JavaMétodos em Java
• Exemplos de alguns métodos estáticos em Java incluem 
os métodos definidos nas classes:
• java.lang.Character
• java.lang.Integer
• java.lang.Double
• java.lang.Math
• Exemplo: para atribuir a raiz quadrada de 4 a uma variável 
raiz:
double raiz = Math.sqrt(4.0);
5
25
Métodos Métodos getget e sete set
• As variáveis de instância privadas podem ser manipuladas somente
por métodos da classe
• Métodos set (métodos modificadores)
• Atribuir valores a variáveis de instância private
• Métodos get (métodos de acesso)
• Obter valores de variáveis de instância private
• Embora os métodos get e set possam fornecer acesso a 
dados private, o acesso é restringido pela implementação 
dos métodos feita pelo programador
26
Métodos Métodos getget e sete set
• Os métodos que configuram valores de dados private devem 
verificar se os novos valores pretendidos são adequados. 
• Se eles não forem, os métodos set devem colocar variáveis de 
instância private em um estado consistente apropriado
• Exemplos:
public String getNome ()
{
return nome;
}
public void setNome (String novoNome)
{
this.nome = novoNome;
}
27
Objetos em JavaObjetos em Java
• O que é um objeto?
• Sob o ponto de vista da programação, um objeto não é muito 
diferente de uma variável no paradigma de programação 
convencional. 
• Exemplo: quando se define uma variável do tipo int em C ou em Java, 
essa variável tem: 
• um espaço em memória para registrar o seu estado atual (um valor); 
• um conjunto de operações associadas que podem ser aplicadas a ela, 
através dos operadores definidos na linguagem que podem ser aplicados a 
valores inteiros (soma, subtração, inversão de sinal, multiplicação, divisão 
inteira, resto da divisão inteira, incremento, decremento). 
28
Objetos em JavaObjetos em Java
• Da mesma forma, quando se cria um objeto, esse objeto adquire:
• um espaço em memória para armazenar seu estado (os valores de seu 
conjunto de atributos, definidos pela classe) e 
• um conjunto de operações que podem ser aplicadas ao objeto (o conjunto de 
métodos definidos pela classe). 
• É através de objetos que (praticamente) todo o processamento 
ocorre em aplicações desenvolvidas com linguagens de programação
OO.
• Objetos são instâncias de classes: 
• Precisam ser criados a fim de que, através de sua manipulação, possam 
realizar seu trabalho. 
• Após a conclusão de suas atividades, objetos podem ser removidos. 
• Arranjos de tipos primitivos ou de objetos são criados e manipulados de forma 
análoga a objetos.
29
Como criar um objeto em JavaComo criar um objeto em Java
• A criação do objeto é feita através da aplicação do operador 
new (uma vez que a classe a partir da qual deseja- se criar 
o objeto exista): 
NomeDaClasse umaRef = new NomeDaClasse(argumentos); 
• essa expressão invoca o construtor da classe
• umaRef é uma variável que guarda uma referência para um 
objeto do tipo NomeDaClasse. 
• new indica que um novo objeto está sendo criado
• argumentos especificam os valores utilizados pelo construtor da 
classe para inicializar o objeto
30
Como criar um objeto em JavaComo criar um objeto em Java
• Objetos nunca são manipulados diretamente, mas 
sempre através de uma variável que contém uma 
referência para o objeto. 
• Internamente, uma referência conterá:
• O endereço para a área de memória que contém o 
objeto, mas isso é irrelevante sob o ponto de vista do 
programador.
6
31
Manipulação de objetosManipulação de objetos
• Quando se declara uma variável cujo tipo é o nome de uma 
classe, como em:
String nome; 
• não está se criando um objeto dessa classe, mas simplesmente uma
referência para um objeto da classe String, a qual inicialmente não faz 
referência a nenhum objeto válido: 
• Quando um objeto dessa classe é criado, obtém-se uma referência válida, 
que é armazenada na variável cujo tipo é o nome da classe do objeto.
nome
?
32
Manipulação de objetosManipulação de objetos
• Quando se cria uma string como em 
nome = new String("POO/Java");
• nome é uma variável que armazena uma referência para um objeto
específico da classe String - o objeto cujo conteúdo é "POO/Java": 
• É importante ressaltar que a variável nome mantém apenas a referência para 
o objeto e não o objeto em si. 
nome
(Outras informações…)
POO/Javareferência
objeto
33
Manipulação de objetosManipulação de objetos
• Assim, uma atribuição como 
String outroNome = nome;
• não cria outro objeto, mas simplesmente uma outra referência para o 
mesmo objeto: 
• O único modo de aplicar os métodos a um objeto é através de uma 
referência ao objeto. 
nome
(Outras informações…)
POO/Javareferência
objeto
outronome
34
ConstrutoresConstrutores
• Um construtor é um método especial, definido para cada 
classe. 
• Determina as ações associadas à inicialização de cada objeto 
criado.
• É invocado toda vez que o programa instancia um objeto dessa 
classe. 
• A assinatura de um construtor diferencia-se das assinaturas dos 
outros métodos por não ter nenhum tipo de retorno (nem mesmo 
void).
• O nome do construtor deve ser o próprio nome da classe. 
• O construtor pode receber argumentos, como qualquer método.
• Toda classe tem pelo menos um construtor sempre definido. 
35
ConstrutoresConstrutores
• Se nenhum construtor for explicitamente definido pelo 
programador da classe, um construtor default (0 para tipos 
numéricos primitivos, false para boolean e null para 
referências), que não recebe argumentos, é criado pelo 
compilador Java. 
• Se o programador da classe criar pelo menos um método 
construtor, o construtor default não será criado automaticamente 
- se ele o desejar, deverá criar um construtor sem argumentos 
explicitamente. 
• Usando o mecanismo de sobrecarga (lista de parâmetro 
diferentes), mais de um construtor pode ser definido para oferecer 
diversas maneiras de inicializar os objetos dessa classe. 
volta 36
Referência Referência thisthis
• É uma referência a um objeto
• Quando um método de uma classe faz referência a outro 
membro dessa classe para um objeto específico dessa 
classe, como Java assegura que o objeto adequado recebe 
a referência?
• Cada objeto tem uma referência a ele próprio - chamada de 
referência this
• Utiliza-se a referência this implicitamente para fazer referências 
às variáveis de instância e aos métodos de um objeto
7
37
Referência Referência thisthis
• Exemplos de uso de this
• A palavra- chave this é utilizada principalmente em dois 
contextos: 
1. Diferenciar atributos de objetos, de parâmetros ou variáveis 
locais de mesmo nome; 
2. Acessar o método construtor a partir de outros construtores. 
• Utilizar this explicitamente pode aumentar a 
clareza do programa em alguns contextos em que 
this é opcional
38
Referência Referência thisthis
• Esse exemplo ilustra esses dois usos:
public class EsteExemplo
{ 
int x; 
int y; 
// exemplo do primeiro caso: 
public EsteExemplo(int x, int y) 
{ 
this.x = x; 
this.y = y; 
}
// exemplo do segundo caso:
public EsteExemplo () 
{ 
this(1, 1);
}
}
39
Remoção de objetosRemoção de objetos
• Em linguagens de programação OO, a criação de objetos é um 
processo que determina a ocupação dinâmica de muitos 
pequenos segmentos de memória.
• Se esse espaço não fosse devolvido para reutilização pelo 
sistema, a dimensão de aplicações desenvolvidas com 
linguagens de programação OO estaria muito limitada. 
• As duas abordagens possíveis são:
• Dedicar essa tarefa ao programador ou 
• Deixar que o sistema seja o responsável por esta retomada de recursos. 
40
Remoção de objetosRemoção de objetos
• O problema da primeira abordagem é que o programador pode 
não considerar todas as possibilidades
• Na segunda abordagem, recursos adicionais do sistema são 
necessários para a manutenção da informação necessária para 
saber quando um recurso pode ser retomado e para a execução 
do processo que retoma os recursos. 
• C++ é uma linguagem que adota a primeira estratégia. 
• A remoção de objetos é efetivada explicitamente pelo programador
(através do operador delete), que pode também especificar o procedimento 
que deve ser executado para a liberação de outros recursos alocados pelo 
objeto através de um método destructor. 
41
Remoção de objetosRemoção de objetos
• Java adota a abordagem de ter um coletor de lixo automático
• verifica que objetos não possuem nenhuma referência válida, retomando o 
espaço dispensado para cada um desses objetos. 
• O programador não precisa se preocupar com a remoção 
explícita de objetos. 
• Pode ser necessário liberar outros recursos que tenham sido 
alocados para o objeto. 
• Cada classe em Java pode ter um método finalizador que retorna 
recursos ao sistema
• É garantido que o método finalizador para um objeto é chamado 
para realizar uma limpeza de terminação no objeto imediatamente 
antes do coletor de lixo reivindicar a memória para o objeto
42
Remoção de objetosRemoção de objetos
• O método finalizador de uma classe sempre tem o nome 
finalize(), não recebe parâmetros e não retorna nenhum valor 
• Esse método é definido na classe Object como protected. 
Portanto, se for necessário redefiní-lo o programador deve 
também declará-lo como protected.
• Chamada explícita ao coletor de lixo
• Método gc() da classe System
• Lembre-se de que não há garantia de que o coletor de lixo será executado 
quando System.gc() é invocado e nem há garantia de que ele 
colete objetos em uma ordem específica.
8
43
ExercíciosExercícios
• Implementar um TAD Pessoa como classe (Pessoa.java e 
PessoaTeste.java)
Pessoa
nome: String
sobrenome: String
idade: int
sexo: char
imprimir(): void
Assinatura do método
public void imprimir()
44
ExercíciosExercícios
• Implementar um TAD Empregado como classe (Empregado.java e 
EmpregadoTeste.java)
Empregado
nome: String
salario: double
imprimir(): void
aumentarSalario(...):void
Assinaturas dos métodos
public void imprimir()
public void aumentarSalario (double percentual)
45
ExercíciosExercícios
Implementar um TAD Time como classe (Time.java e TimeTeste.java)
Time
hora: int
minuto: int
segundo: int
setTime (...): void
exibirHoraUniversal(): String
exibirHoraPadrao(): String
Assinaturas dos métodos
public void setTime (int h, int m, int s)
public String exibirHoraUniversal(): String
public String exibirHoraPadrao(): String
Hora Universal
00:00:00 – 13:30:07
Hora Padrão
00:00:00 e um 
indicador de AM PM
1:27:06 PM
JAVA_Aula4.pdf
1
Prof. Dr. Francisco Isidro Massetto
francisco.isidro@techschool.com.br
Programação Orientada a Objetos Programação Orientada a Objetos 
em Javaem Java
Aula 4 Aula 4 –– Herança e PolimorfismoHerança e Polimorfismo
2
HerançaHerança
Pessoa
Estudante Professor Funcionário Diretor
é um (a)
3
HerançaHerança
Pessoa
nome
endereco
telefone
Estudante
ra
curso
anoGraduacao
Professor
titulo
instituicao
salario
4
HerançaHerança
Proprietário
Placa
Ano
Modelo
Marca
VeiculoVeiculo
5
HerançaHerança emem JavaJava
• O que torna a Orientação a Objetos única é o conceito de 
herança.
• Herança é um mecanismo que permite que características 
comuns a diversas classes sejam fatoradas de uma classe 
base, ou superclasse. 
• A herança é uma forma de reutilização de software em que 
novas classes são criadas a partir das classes existentes, 
absorvendo seus atributos e comportamentos e 
adicionando novos recursos que as novas classes exigem
6
HerançaHerança emem JavaJava
• A partir de uma classe base, outras classes podem 
ser especificadas. 
• Cada classe derivada ou subclasse apresenta as 
características (estrutura e métodos) da 
superclasse e acrescenta a elas o que for definido 
de particularidade para ela.
• Cada subclasse se torna uma candidata a ser uma 
superclasse para alguma subclasse futura
2
7
HerançaHerança emem JavaJava
• Sintaxe:
[modificador] class NomeDaSuperclasse
{ // corpo da superclasse... }
[modificador] class NomeDaSubclasse extends
NomeDaSuperclasse
{ // corpo da subclasse... }
• extends - indica que está sendo criada uma nova classe que deriva de uma classe
existente
• Classe existente - superclasse, classe base ou classe progenitora
• Nova classe - subclasse, classe derivada ou classe filha
• Em geral, as subclasses têm mais funcionalidade que sua superclasse.
8
ExemploExemplo de de HerançaHerança ((SuperclasseSuperclasse--
Empregado.javaEmpregado.java))
import java.text.*;
public class Empregado 
{
private String nome;
private double salario;
public Empregado (String n, double s) 
{
this.setNome(n);
this.setSalario(s);
}
public void setNome(String n)
{
nome = n;
}
public void setSalario(double sal)
{
salario = sal;
}
9
ExemploExemplo de de HerançaHerança ((SuperclasseSuperclasse--
Empregado.javaEmpregado.java))
public String getNome()
{
return nome;
}
public double getSalario()
{
return salario;
}
public void aumentarSalario (double percentual)
{
salario *= 1 + percentual / 100;
}
10
ExemploExemplo de de HerançaHerança ((SuperclasseSuperclasse--
Empregado.javaEmpregado.java))
public String formatarMoeda ()
{
NumberFormat nf = NumberFormat.getCurrencyInstance();
nf.setMinimumFractionDigits(2);
String formatoMoeda = nf.format(salario);
return formatoMoeda;
}
public void imprimir ()
{
System.out.println(nome + " " + "salario " + 
this.formatarMoeda());
}
11
ExemploExemplo de de HerançaHerança ((SuperclasseSuperclasse--
Empregado.javaEmpregado.java))
public static void main (String args [])
{
Empregado [] e = new Empregado [3];
e[0] = new Empregado ("Harry Hacker", 3500);
e[1] = new Empregado ("Carl Cracker", 7500);
e[2] = new Empregado ("Tony Tester", 3800);
int i;
for (i = 0; i < 3; i++)
e[i].imprimir();
System.out.println("******************************");
for (i = 0; i < 3; i++){
e[i].aumentarSalario(10);
e[i].imprimir();
}
}
} 12
ExemploExemplo de de HerançaHerança ((SubclasseSubclasse--
Gerente.javaGerente.java))
import java.text.*;
public class Gerente extends Empregado
{
private String nomeSecretaria;
public Gerente (String n, double s, String nSec)
{
super (n, s);
this.setNomeSecretaria(nSec);
}
public String getNomeSecretaria () 
{
return nomeSecretaria;
} 
public void setNomeSecretaria (String nome)
{
nomeSecretaria = nome;
}
3
13
ExemploExemplo de de HerançaHerança
((SubclasseSubclasse--Gerente.javaGerente.java))
public void aumentarSalario (double percentual)
{
//adiciona bonus de 20% ao valor do salario
double bonus = 20;
super.aumentarSalario(percentual + bonus);
}
14
HerançaHerança emem JavaJava
• Palavra-chave super refere-se a uma superclasse
• indica a chamada ao construtor da superclasse
• se a superclasse
não contiver o construtor padrão e o construtor
da subclasse não chamar nenhum outro construtor da
superclasse explicitamente→ compilador java vai informar um 
erro
• Em um relacionamento de herança:
• é necessário apenas indicar as diferenças entre a subclasse e 
superclasse→ o reuso é automático
• é necessário redefinir métodos→ um dos primeiros motivos
para usar herança
15
HerançaHerança emem JavaJava
• Exemplo da subclasse Gerente:
• redefinição do método aumentarSalario()
• para que ele funcione diferente para gerentes e empregados comuns
• esse método não tem acesso direto às variáveis de instância privados da
superclasse, ou seja, esse método não pode alterar diretamente a variável
de instância salario, embora cada objeto Gerente tenha uma
variável de instância salario
• somente os métodos da classe Empregado têm acesso aos atributos
de instância privados
• Resultado dessa redefinição para objetos da classe Gerente:
• Quando se dá a todos os empregados um aumento de 5%, os gerentes vão
receber um aumento maior automaticamente
16
ExemploExemplo de de HerançaHerança
((ClasseClasse PrincipalPrincipal--GerenteTeste.javaGerenteTeste.java))
import java.text.*;
public class GerenteTeste {
public static void main (String args[]){
Gerente g = new Gerente ("Carl Cracker", 7500, "Harry 
Hacker");
Empregado [] e = new Empregado [3];
e[0] = g;
e[1] = new Empregado ("Harry Hacker", 3500);
e[2] = new Empregado ("Tony Tester", 3800);
int i;
for (i = 0; i < 3; i++)
e[i].aumentarSalario(10);
for (i = 0; i < 3; i++)
e[i].imprimir();
System.out.println("O nome da secretaria do departamento e: " 
+g.getNomeSecretaria());
}
} 
17
SubclassesSubclasses
• Para saber se a herança é adequada para um programa
• ter em mente que qualquer objeto que seja uma instância de uma subclasse
precisa ser utilizável no lugar de um objeto que seja uma instância de 
superclasse
• objetos de subclasse são utilizáveis em qualquer código que use a 
superclasse
• um objeto de subclasse pode ser passado como argumento para qualquer
método que espera um parâmetro de superclasse
• um objeto de superclasse não pode geralemente ser atribuído a um objeto
de subclasse
g = e[i]; //erro
• Os atributos só podem ser adicionados, e não removidos, os objetos de uma
subclasse herdados têm, pelo menos, tantos atributos de dados quanto os
objetos de superclasse
18
SubclassesSubclasses
• Uma das regras fundamentais da herança:
• um método definido em uma subclasse com o mesmo
nome e mesma lista de parâmetros que um método em
uma de suas classes antecessoras oculta o método da
classe ancestral a partir da subclasse
4
19
RecomendaçõesRecomendações de de ProjetoProjeto parapara
HerançaHerança
1. Coloque métodos e atributos comuns na superclasse
2. Use herança para modelar uma relação de “estar contido em” (um 
objeto da subclasse é um (a) objeto da superclasse)
Exemplo: classe Empreiteiro
3. Não use herança a menos que todos os métodos herdados façam
sentido
Exemplo: classe Feriado
class Feriado extends Day { . . .}
- Um dos métodos públicos da classe Day é avancarData ( ), que permite
transformar dias feriados em dias normais, de modo que não é um método
apropriado para se fazer com dias feriados. 
Feriado natal;
natal.avancarData(10); // neste caso, um feriado é um dia
mas não um Day (objeto) 20
RecomendaçõesRecomendações de de ProjetoProjeto parapara
HerançaHerança
4. Use polimorfismo, não informação de tipo
- Sempre que você encontrar código do tipo
if (x é o tipo 1) acao1(x);
else if (x é o tipo 2) acao2(x);
- Pense em Polimorfismo
- acao1 e acao2 representam um conceito comum?
- Caso afirmativo, faça o conceito virar um método de uma superclasse. 
Assim poderá simplesmente chamar:
x.acao( );
- o ponto a ser observado aqui é que o código para usar métodos
polimórficos é muito mais fácil de se manter e estender que um código que
use múltiplos testes de tipos de dados.
21
PolimorfismoPolimorfismo
• O polimorfismo permite escrever programas de uma forma 
geral para tratar uma ampla variedade de classes 
relacionadas existentes e ainda a serem especificadas
• Polimorfismo: 
• é a capacidade de um objeto decidir que método aplicar a si
mesmo.
• embora a mensagem possa ser a mesma - os objetos podem
responder diferentemente
• aplicado a qualquer método que seja herdado de uma
superclasse
22
PolimorfismoPolimorfismo
• Comunicação entre objetos: envio de mensagens
• ao enviar uma mensagem que pede para uma subclasse aplicar
um método usando certos parâmetros
• a subclasse verifica se ela tem ou não um método com esse
nome e com exatamente os mesmos parâmetros. Se tiver, 
usa-o.
• caso contrário: a superclasse torna-se responsável pelo
processamento da mensagem e procura por um método com 
esse nome e esses parâmetros. Se encontrar, chama esse
método.
• Exemplo: 
• o método aumentarSalario() da classe Gerente é chamado em
vez do método aumentarSalario() da classe Empregado quando
se envia uma mensagem aumentarSalario ao objeto Gerente
23
PolimorfismoPolimorfismo
• a chave para fazer polimorfismo:
• ligação tardia (late binding) ou ligação dinâmica:
• o compilador não gera o código para chamar um método em tempo de 
compilação
• em vez disso, cada vez que se aplica um método a um objeto, o compilador
gera código para calcular que método deve ser chamado, usando
informações de tipo do objeto
• o mecanismo de chamada de método tradicional é chamado ligação
estática: determinada em tempo de compilação
24
Polimorfismo Polimorfismo 
• Vinculação dinâmica de objeto
• Em programação OO, cada uma dessas classes pode ser dotada da 
capacidade de desenhar a si própria.
• Cada classe tem seu próprio método desenhar e a implementação do 
método desenhar é bem diferente para cada forma
• Ao desenhar uma forma, qualquer que seja essa forma, seria ótimo se poder 
tratar genericamente como objetos da superclasse Forma
FormaForma
RetânguloRetânguloCírculoCírculo TriânguloTriângulo QuadradoQuadrado
5
25
PolimorfismoPolimorfismo
• Assim, para desenhar qualquer forma, poderíamos simplesmente 
chamar o método desenhar da superclasse Forma e deixar o 
programa determinar dinamicamente (durante a execução), com 
base no tipo de objeto real, qual é o método desenhar de 
subclasse que deve ser utilizado.
• Para permitir esse tipo de comportamento, declaramos desenhar 
na superclasse e então sobrescrevemos desenhar em cada 
uma das subclasses para desenhar a forma apropriada
• Se utilizarmos uma referência para a superclasse para fazer 
referência a um objeto da subclasse e invocarmos o método 
desenhar, o programa escolherá o método desenhar
correto da subclasse dinamicamente.
26
ExercícioExercício
Cliente
nome
endereço
saldo
void imprimir()
boolean fazerCompra(double valor)
void quitarDivida(double valor)
ClienteVip
Crédito
void imprimir()
boolean fazerCompra(double valor)
JAVA_Aula5.pdf
1
Programação Orientada a ObjetosProgramação Orientada a Objetos
em Javaem Java
Aula 5 Aula 5 –– Classes Abstratas, Classes Abstratas, 
Interfaces e Herança MúltiplaInterfaces e Herança Múltipla
Prof. Dr. Francisco Isidro Massetto
franicsico.isidro@techschool.com.br 22
Classes AbstratasClasses Abstratas
• Classes abstratas são classes que devem ser 
definidas com o propósito de criar apenas um 
modelo de implementação
• As classes abstratas não podem ter objetos 
instanciados 
• Uso: apenas para usar uma referência genérica
• Exemplo: Classe Forma Geométrica (Aula 4)
33
Classes AbstratasClasses

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais