Buscar

Prévia do material em texto

Programação Orientada a Objetos
Márcio Emílio Cruz Vono de Azevedo
Conteúdo
• Paradigmas de programação
• Introdução à linguagem de programação 
orientada a objetos
• Introdução à UML
• Diagrama de classes da UML
• Mapeamento do diagrama de classes 
para linguagem de programação
Conteúdo
• Polimorfismo e classes abstratas
• Prática de programação orientada a 
objetos
• Tratamento de exceções
• Criação de interfaces gráficas de usuário
Paradigmas de Programação
• Paradigma Lógico
• Paradigma Funcional
• Paradigma Imperativo
• Paradigma Estruturado
• Paradigma Procedural
• Paradigma Orientado a Objetos
Paradigma Lógico
• Linguagens de programação baseadas em 
funções lógicas
• Exemplo de linguagens lógicas
– PROLOG
Exemplo de Programação Lógica
% X filho de Z e Y filho de Z implica X irmão de Y
irmaos(X,Y) :- filho(X,Z), filho(Y,Z).
filho(X,Y) :- pai(Y,X). % Y pai de X implica X filho de Y
filho(X,Y) :- mae(Y,X). % Y mãe de X implica X filho de Y
mae(marcia, ana). % marcia mãe de ana
pai(tomas, ana). % tomas pai de ana
pai(tomas, erica). % tomas pai de érica
pai(marcos, tomas). % marcos pai de tomas
?- irmaos(ana, erica). % ana irmão de erica?
 yes.
Paradigma Funcional
• Linguagens de programação baseadas em 
funções matemáticas
• Exemplo de linguagem funcional
– LISP
• Exemplo de programação funcional
(defun fatorial (n)
 (if (= n 0)
 1
 (* n (fatorial (- n 1)))))
Paradigma Imperativo
• Através de linguagens de programação 
imperativas, o programador dá ordens para o 
computador
• Exemplo de linguagem imperativa
– BASIC
• Nas linguagens imperativas, o programador pode 
definir saltos de um ponto a outro do programa
• Em BASIC, saltos são implementados através do 
comando GOTO (vá para)
Exemplo de Programação Imperativa
20 READ A,B,C
30 IF A=0 THEN GOTO 400
40 LET D=B*B-4*A*C
50 IF D<0 THEN GOTO 420
60 PRINT "SOLUCAO"
70 IF D=0 THEN GOTO 200
80 PRINT "PRIMEIRA SOLUCAO",(-B+SQR(D))/(2*A)
90 PRINT "SEGUNDA SOLUCAO",(-B-SQR(D))/(2*A)
100 GOTO 20
200 PRINT "SOLUCAO UNICA",(-B)/(2*A)
300 GOTO 20
400 PRINT "A DEVE SER DIFERENTE DE ZERO"
410 GOTO 20
420 PRINT "NAO HA SOLUCOES REAIS"
430 GOTO 20
490 DATA 10,20,1241,123,22,-1
500 END
Paradigma Estruturado
• Semelhante ao paradigma imperativo, porém 
não são permitidos saltos
• Os programas utilizam três estruturas básicas
– Sequência: comandos executados em sequência
– Decisão: if/then/else, switch/case etc.
– Repetição: while, for, do/while etc.
• Exemplos de linguagens estruturadas
– C, Pascal
Exemplo de Programação Estruturada
int n, first = 0, second = 1, next, c;
printf("Enter the number of terms\n");
scanf("%d",&n);
printf("First %d terms of Fibonacci series are :-\n",n);
for ( c = 0 ; c < n ; c++ ) {
 if ( c <= 1 )
 next = c;
 else {
 next = first + second;
 first = second;
 second = next;
 }
 printf("%d\n",next);
}
Paradigma Procedural
• Utilizado em linguagens de programação baseadas em 
procedimentos (ou funções)
• Exemplos de linguagens procedurais
– C, Pascal
• Pode-se combinar os paradigmas procedural e estruturado ou 
procedural e imperativo
• Exemplo de procedimento (ou função)
void sayhello(int number_of_times)
{
 int i;
 for(i=1; i <= number_of_times; i++) {
 printf("Hello!\n");
 }
}
Paradigma Orientado a Objetos
• Linguagens de programação que utilizam objetos
• Tentam trazer objetos do mundo real para a linguagem de 
programação
• Baseado em classes e objetos
– Classes: estruturas onde são definidos os estados e o 
comportamento dos objetos
– Objetos: instâncias de uma classe
– Uma vez definida a classe, vários objetos podem ser instanciados 
para aquela classe
– Várias classes podem ser criadas, definindo vários tipos de objetos
• Linguagens de programação orientadas a objetos
– Smalltalk, C++, Object Pascal, Java, C#, Objective-C, Ruby
Exemplo de Programação Orientada a Objetos
import javax.swing.JOptionPane;
 
public class OddEven {
 private int input;
 
 public OddEven() {
 }
 
 public static void main(final String[] args) {
 OddEven number = new OddEven();
 number.showDialog();
 }
 
 public void showDialog() {
 try {
 this.input = Integer.parseInt(JOptionPane.showInputDialog("Please enter a number."));
 this.calculate();
 } catch (final NumberFormatException e) {
 System.err.println("ERROR: Invalid input. Please type in a numerical value.");
 }
 }
 private void calculate() {
 if ((this.input % 2) == 0) {
 JOptionPane.showMessageDialog(null, "Even");
 } else {
 JOptionPane.showMessageDialog(null, "Odd");
 }
 }
}
Conceitos de Orientação a Objetos
• Abstração
– Definir na linguagem de programação objetos 
semelhantes aos objetos do mundo real, porém 
extraindo somente os dados que façam sentido 
para o sistema a ser desenvolvido.
– Exemplo:
• alunos possuem nome, matrícula, idade, peso, altura, 
entre outras características. Na construção de um 
sistema acadêmico, peso e altura são irrelevantes, logo, 
o objeto aluno será modelado somente com as 
características relevantes ao sistema: nome, matrícula e 
idade.
Conceitos de Orientação a Objetos
• Encapsulamento
– Primeira definição:
• Descrever em um determinado objeto apenas as 
características que sejam pertinentes ao objeto em 
questão.
• Exemplo
– um aluno está matriculado em um curso. As características do 
aluno devem ser descritas no objeto aluno e as características 
do curso devem ser descritas no objeto curso.
» Obs.: Existem mecanismos para associar um objeto aluno 
a um objeto curso que veremos posteriormente.
Conceitos de Orientação a Objetos
• Encapsulamento
– Segunda definição
• As características que representam o estado de um 
objeto devem ser protegidas de acesso externo. O 
estado do objeto somente será alterado internamente 
pelo comportamento definido para este objeto.
• Exemplo:
– A “velocidade” é um possível elemento de estado de um 
objeto carro. Não se deve permitir que a “velocidade” seja 
alterada diretamente por entidades externas ao objeto em 
questão. Ao invés disso, poderão existir definições de 
comportamento como “acelerar” e “frear” que, sempre que 
forem invocados, irão alterar o estado atual da “velocidade”.
Conceitos de Orientação a Objetos
• Classes
– Uma classe define as características que um 
objeto terá. Uma vez definida a classe, vários 
objetos poderão ser criados e suas características 
serão moldadas por sua classe.
– As classes definem as variáveis de estado e o 
comportamento que os objetos terão.
– Exemplo:
• A classe carro poderá definir a variável de estado 
“velocidade” e os comportamentos “acelerar” e 
“frear”.
Conceitos de Orientação a Objetos
• Estado de um objeto
– O estado de um objeto é definido através dos 
valores de suas variáveis membro, ou atributos.
– Os atributos do objeto são declarados na 
definição da classe.
• Comportamento de um objeto
– O comportamento de um objeto é definido 
através de suas funções membro, ou operações.
– As operações do objeto são declaradas na 
definição da classe.
Conceitos de Orientação a Objetos
• Objetos
– O objeto é uma instância de uma classe. Por exemplo, a 
classe “Cadeira” define as características de uma cadeira, 
mas a cadeira em que você está sentado é um objeto, ou 
seja, uma instância da classe “Cadeira”. A cadeira em que 
seu colega está sentado é uma outra instância da mesma 
classe “Cadeira”.
– Apesar dos atributos que representam o estado de um 
objeto estar definido na classe, é no objeto que eles 
definem seus valores específicos.Por exemplo, a classe 
“Aluno” define o atributo “idade”, mas cada objeto da classe 
“Aluno” terá um valor diferente para seu atributo “idade”.
Introdução à Linguagem Java
• Linguagem de programação que implementa o 
paradigma orientado a objetos, combinado com 
outros paradigmas
• Java é o nome de uma tecnologia centrada em uma 
linguagem de programação com o mesmo nome
• Criada em 1991 como parte de um sistema de TV 
interativa
– Na época recebia o nome de “Oak” – carvalho em inglês
• Adotou o nome “Java” em 1995
Introdução à Linguagem Java
• A tecnologia Java ganhou três edições:
– JavaSE – Java Standard Edition – utilizada para o 
desenvolvimento de aplicações desktop, 
standalone e de uso geral
• Este curso abordará a edição JavaSE
– JavaEE – Java Enterprise Edition – utilizada para o 
desenvolvimento de aplicações corporativas e 
baseadas em Web
– JavaME – Java Micro Edition – utilizada para o 
desenvolvimento de aplicações para dispositivos 
com recursos limitados, como dispositivos móveis
Anatomia de uma Classe Java
public class Carro {
private String modelo;
private int velocidade = 0;
public Carro(String modelo) {
this.modelo = modelo;
}
public void acelerar(int incremento) {
velocidade += incremento;
}
public void frear(int decremento) {
if(velocidade > decremento) {
velocidade -= decremento;
} else {
velocidade = 0;
}
}
}
Nome da classe
Atributos (ou campos)
Construtor
Operações (ou métodos)
Anatomia de uma Classe Java
• Por convenção:
– Nomes de classes são escritos com a inicial 
maiúscula e a separação entre palavras com letras 
maiúsculas (CamelCase ou CamelCaps)
– Nomes de atributos e operações são escritos com 
a inicial minúscula e a separação de palavras com 
letras maiúsculas (camelCase ou camelBack)
Objetos em Java
• A classe definida anteriormente representa as 
propriedade de um objeto do tipo “Carro”.
• A palavra reservada “new” é utilizada para 
instanciar um objeto em Java.
• É comum criar uma variável para referenciar o 
objeto e atribuir o novo objeto criado à 
variável. Assim o objeto poderá ser utilizado 
posteriormente no programa.
Instanciando um objeto
Carro esportivo = new Carro("Camaro");
esportivo.acelerar(160);
referência para um objeto criação do objeto
chamando a operação acelerar no objeto
Introdução à UML
• Sigla para Linguagem de Modelagem Unificada 
(Unified Modeling Language)
• Criada por Grady Booch, James Rumbaugh e Ivar 
Jacobson enquanto trabalhavam para a Rational 
Software Co., atualmente comprada pela IBM
• Linguagem de modelagem visual, através de 
diagramas
• A versão 2.x possui 14 diagramas utilizados para 
modelar diversos aspectos de um projeto de 
software orientado a objetos
Diagrama de Classes da UML
• É o diagrama mais utilizado da UML
• Responsável por representar as classes em um 
sistema orientado a objetos e seus 
relacionamentos
Representação de uma Classe
• No diagrama de classes, a classe é 
representada por um retângulo dividido em 
três partes
– Na parte superior é onde se localiza o nome da 
classe e seus estereótipos
– Na parte do meio é onde se localizam os atributos 
da classe
– Na parte inferior é onde se localizam as operações 
da classe
Representação de uma Classe
Nome
Atri
but
os
Ope
raçõ
es
Representação de uma Classe
• Representação de um atributo:
– idade : int = 0
• Representação de uma operação
+ dividir ( dividendo : float, divisor : float ) : float 
visibilidadevisibilidade
nomenome tipotipo
valor defaultvalor default
visibilidadevisibilidade
nomenome Parâmetros
( nome : tipo, nome : tipo)
Parâmetros
( nome : tipo, nome : tipo)
tipo de retornotipo de retorno
Representação de uma Classe
• Exemplo:
Representação de uma Classe
• A classe do slide anterior, em Java, fica:
public class Aluno {
private String nome;
private int matricula;
private int idade = 0;
public void matricular(int matricula) {
// ...
}
public float mediaGeral() {
// ...
}
public String getNome() {
// ...
}
}
Representação de uma Classe
• Caso não seja necessário expor os atributos e 
as operações de uma classe, ela poderá ser 
representada com apenas um retângulo 
contendo o nome da classe
• Exemplo:
Associação
• A associação é um relacionamento entre duas classes 
que indica que ambas se comunicam afim de prover o 
serviço necessário
• Símbolo:
• Na linguagem de programação, a associação entre as 
classes acima informa que a classe A possui um 
atributo capaz de armazenar uma instância de B e a 
classe B possui um atributo capaz de armazenar uma 
instância de A
Associação
• Em Java:
public class A {
 private B b;
}
public class B {
 private A a;
}
Associação
• Navegabilidade
– Informa que a classe A conhece a classe B, porém a 
classe B não conhece a classe A
– Na linguagem de programação, informa que a classe A 
possui um atributo capaz de armazenar uma instância 
de B, mas a classe B não possui nenhum atributo capaz 
de armazenar uma instância de A no que diz respeito a 
esta associação
Associação
• Em Java:
public class A {
 private B b;
}
public class B {
}
Associação
• Multiplicidade
– A multiplicidade informa com quantas instâncias 
de uma classe a outra está associada
– Na linguagem de programação, a multiplicidade 
informa se o atributo do tipo de uma classe que 
estará presente na outra armazenará um único 
valor (multiplicidade igual a 1) ou será um vetor 
(multiplicidade maior do que 1)
Associação
• Possíveis
multiplicidades
• Exemplo:
1 um
0..1 zero a um
* muitos
0..* zero a muitos
1..* um a muitos
4..8 quatro a oito
10..* dez a muitos
Associação
• Em Java:
public class A {
 private B[] bs;
}
public class B {
}
Associação
• Papel (role)
– Informa qual o papel que a(s) instância(s) de uma 
classe representa(m) na associação com a outra
– Na linguagem de programação, o papel informa o 
nome do atributo que será criado na outra classe
– No exemplo acima, muitas pessoas representam o 
papel de “contatos” na associação com a agenda
Associação
• Em Java:
public class Agenda {
 private Pessoa[] contatos;
}
public class Pessoa {
}
Tipos Especiais de Associação
• Existem dois tipos especiais de associação que 
representam relacionamentos todo/parte, ou 
seja, uma das classes da associação 
representa um todo e a outra representa uma 
parte desse todo:
– Agregação
– Composição
Tipos Especiais de Associação
• Agregação
– Possui a semântica de um relacionamento todo/parte, 
permitindo que uma parte possa se associar com mais de um 
todo
– No exemplo acima, as disciplinas compõem o curso, ou seja, 
são partes do curso.
– Uma mesma disciplina pode estar presente em mais de um 
curso
– O diamante fica sempre do lado do todo
Tipos Especiais de Associação
• Composição
– Possui a semântica de um relacionamento todo/parte, 
informando que uma instância da parte somente poderá se 
relacionar com uma instância do todo
– No exemplo acima, em um sistema imobiliário, apartamentos 
compõem o edifício
– Um apartamento somente poderá estar presente em um 
edifício
– O diamante fica sempre do lado do todo
Tipos Especiais de Associação
• Na linguagem Java, não existe diferença entre 
a agregação, composição ou associação 
comum
• Agregações e composições são informações 
semânticas para o programador
Classes de Associação
• Classe de associação é uma classe que 
adiciona características especiais na 
associação entre duas outras classes
Classes de Associação
• No exemplo anterior, a classe “Situacao” adiciona 
características(notas e frequência) à associação 
entre “Aluno” e “Disciplina”
• A implementação será semelhante à implementação 
das associações abaixo:
• Ou seja, a situação liga um aluno a uma disciplina
Generalização (ou Especialização)
• Quando duas ou mais classes possuem características 
em comum, tais características podem ser 
generalizadas em uma classe geral
• As classes especiais, então, herdam as características 
da classe geral Classe geral
Superclasse
Classe mãe
Classe geral
Superclasse
Classe mãe
Classe especial
Subclasse
Classe filha
Classe especial
Subclasse
Classe filha
Generalização
• O diagrama abaixo possui atributos e 
operações em comum que podem ser 
generalizados em uma classe, por exemplo, 
“Aluno”
Generalização
Generalização
• Em Java:
public class Aluno {
private String nome;
private int matricula;
private int idade;
public String getNome() {
return nome;
}
}
Generalização
public class AlunoGraduacao extends Aluno {
private float[] notas;
public float mediaGeral() {
// ...
}
}
Generalização
public class AlunoPos extends Aluno {
private char[] conceitos;
public char conceitoGeral() {
// ...
}
}
Generalização (ou Especialização)
• Pode ser necessário especializar uma classe 
em uma estrutura já existe
• Por exemplo, no diagrama do slide anterior, 
podemos adicionar a classe “AlunoMestrado” 
como uma especialização da classe 
“AlunoPos”
Generalização (ou Especialização)
Generalização (ou Especialização)
• Em Java:
public class AlunoMestrado extends AlunoPos {
private String dissertacao;
}
Classes e Operações Abstratas
• Classes abstratas são aquelas que não podem ser 
instanciadas
• Classes abstratas podem ser usadas como referência 
para objetos de usas classes filhas que sejam 
concretas (não abstratas)
• Operações abstratas não possuem implementação
• Operações abstratas de uma classe devem ser 
redefinidas nas suas subclasses concretas
• Classes que possuam operações abstratas são, 
obrigatoriamente, abstratas
• Na UML, classes e operações abstratas são 
representadas em itálico
Classes e Operações Abstratas
Operações e Classes Abstratas
• Em Java:
public abstract class Aluno {
private String nome;
private int matricula;
private int idade;
public String getNome() {
return nome;
}
public abstract boolean aprovado();
}
Classes e Operações Abstratas
public class AlunoGraduacao extends Aluno {
private float[] notas;
public float mediaGeral() {
// ...
}
public boolean aprovado() {
// ...
}
}
Classes e Operações Abstratas
public class AlunoPos extends Aluno {
private char[] conceitos;
public char conceitoGeral() {
// ...
}
public boolean aprovado() {
// ...
}
}
Interfaces
• Classes abstratas podem possuir operações 
abstratas e operações concretas (não abstratas)
• Interfaces são semelhantes a classes totalmente 
abstratas (com todas as suas operações abstratas)
• Interfaces não possuem atributos, a não ser 
constantes (public static final)
• Em UML, a interface é modelada através da 
simbologia de uma classe, utilizando o estereótipo 
<<interface>>
Interfaces
• Em Java:
public interface Pesquisador {
public String gerarHistoricoEscolar();
public String gerarCurriculo();
}
Realização
• Relacionamento entre uma classe e uma 
interface indicando que a classe implementa 
as operações da interface
Em Java:
public class C implements I {
 // ...
}
Realização
Realização
public class AlunoPos extends Aluno implements Pesquisador {
private char[] conceitos;
public char conceitoGeral() {
// ...
}
public boolean aprovado() {
// ...
}
public String gerarHistoricoEscolar() {
// ...
}
public String gerarCurriculo() {
// ...
}
}
“Static”
• Atributos ou operações “static” são considerados 
atributos ou operações da classe, não do objeto
• Para acessar os atributos ou operações “static”, não é 
necessário instanciar a classe
• Em UML, atributos e operações “static” são 
representados através de sublinhado
“Static”
• Em Java:
public class Aluno {
private String nome;
private int matricula;
public static boolean aprovado(String media) {
// ...
}
}
“Final”
• Operações que possuam o modificador “final” não 
podem ser redefinidas em classes especializadas
• Atributos que possuam o modificador “final” são 
constantes, ou seja, o seu valor deve ser definido na 
declaração do atributo e não poderá mais ser 
alterado
• Não existe representação na UML para o modificador 
“final”, mas, por convenção, atributos constantes são 
escritos com todas as letras maiúsculas e separação 
de palavras com underscore
• Atributos constantes são, na maior parte das vezes, 
declarados como “public static final”
Visibilidades
Visibilidad
e
Na UML Em Java Visível Por:
Pela 
Classe
Pelo 
Pacote
Pela 
Subclasse
Pelo 
Mundo
pública + public Sim Sim Sim Sim
protegida # protected Sim Sim Sim Não
default ~ Sim Sim Não Não
privada – private Sim Não Não Não
Exercício proposto
• Criar o código Java para o diagrama de classes abaixo
Exercício proposto
Pede-se modelar as classes de um sistema para uma locadora de veículos.
Clientes alugam veículos. O aluguel é a ligação entre um cliente e um veículo e possui data 
de início, data prevista de devolução, data de fim (data efetiva de devolução), valor previsto 
e valor pago. O aluguel pode estar nos seguintes estados: agendado, cancelado, em 
andamento e concluído (indicando que o carro já foi devolvido).
Os clientes possuem os seguintes dados: nome, endereço, CPF e telefone.
Clientes também podem ser empresariais. Os clientes empresariais, além de alugarem 
veículos, também podem utilizar serviços de viagem. No serviço de viagem, além dos dados 
de uma locação comum, possui a informação do motorista (funcionário da locadora) que 
realiza a viagem e a quantidade de passageiros.
Os clientes empresariais não possuem CPF, mas sim CNPJ, e também possuem nome e ramal 
do contato dentro da empresa.
O cliente pessoa física (não empresarial) também possui pontos de fidelidade (milhas) que 
podem ser utilizados em uma locação futura.
O veículo possui as seguintes informações: número do veículo na frota, marca, modelo, ano 
fabricação, ano modelo e placa.
Para cada veículo, o sistema deverá armazenar os dados de cada revisão que o veículo 
passou. A revisão possui data e nome da concessionária que a realizou, além de possuir a 
relação de peças trocadas (nome e modelo).
Diagrama de Sequência da UML
• Utilizado para modelar a interação entre os 
objetos em um sistema orientado a objetos
• Eventos são ordenados de acordo com a 
sequência dos acontecimentos no tempo
• Eventos mostrados mais acima no diagrama 
ocorreram mais no passado
• Eventos mostrados mais abaixo no diagrama 
ocorreram mais no futuro
Linha de Vida do Objeto
• Representa o tempo de existência do objeto
• Eventos posicionados em pontos superiores 
da linha ocorrem antes daqueles posicionados 
em pontos inferiores
Linha de Vida do Objeto
Tempo
Mensagem
• Mensagem são trocadas entre objetos ao 
longo de suas linhas de vida
• A barra retangular branca vertical representa 
o tempo da execução da mensagem
Mensagem
Mensagem
• Mensagens síncronas são representadas por 
uma seta triangular cheia
– O objeto chamador precisa esperar o fim de sua 
execução antes de executar qualquer outro evento
• Mensagens assíncronas são representadas por 
uma seta aberta
– Não há necessidade de espera, logo, o objeto 
chamador está livre para processar outros eventos 
tão logo a mensagem é enviada para o processo 
destinatárioMensagem de Retorno
• Representada por uma seta tracejada ao final 
da execução de uma mensagem síncrona
• É uma informação opcional de que a execução 
da mensagem enviada terminou no processo 
destinatário
Mensagem de Retorno
Auto-Chamadas
• Mensagens que um objeto envia para ele 
mesmo
Mensagem de Criação
• Informa que, em determinado momento, 
ocorreu uma mensagem que causou a criação 
de um determinado objeto
• Na prática, representa uma chamada a um 
construtor
Mensagem de Criação
Mensagem de Destruição
• Informa que, em determinado momento, 
ocorreu uma mensagem que causou a 
destruição de um determinado objeto
• Em linguagens de programação que possuem 
o conceito de destrutor, pode-se dizer que o 
destrutor da classe daquele objeto foi 
chamado naquele momento
Mensagem de Destruição
Uso do Diagrama de Sequência
• O Diagrama de Sequência é utilizado 
principalmente na fase de projeto do sistema, 
quando se necessita descobrir as classes que 
irão se transformar em código fonte na 
linguagem de programação
• Nesse momento, as mensagens são 
entendidas como chamada a uma operação, 
que serão implementadas como um método 
na linguagem de programação
Exemplo de Diagrama de Sequência
Diagrama de Classes Resultante
Programando em Java
• Olá Mundo:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Olá Mundo!!!");
}
}
– O pequeno programa acima apresenta uma classe com 
o método main, que é onde todo programa em Java 
inicia
– A mensagem “Olá Mundo!!!” será impressa no console
Estruturas de Decisão
If/then/else
if ( <expressão booleana> ) {
 // ...
} else {
 //...
}
Switch/case/default
switch ( <expressão inteira> ) {
case 1:
 // ...
 break;
case 2:
 // ...
 break;
default:
 // ...
 break;
}
Laços
While e do/while
while ( <expressão booleana> ) {
 // ...
}
do {
 // ...
} while ( <expressão booleana> );
For
for ( <inicialização> ;
 <condição de término> ;
 <incremento> ) {
 // ...
}
for ( <declaração de variável> :
 <vetor ou coleção> ) {
 // ...
}
Tratamento de Exceções
• Exceções são classes que representam situações de 
adversas em um código Java
try {
 < bloco de código onde pode ocorrer o erro >
} catch ( < declaração de exceção > ) {
 < bloco de tratamento de erro >
} finally {
 <bloco executado em qualquer situação >
}
• O bloco “finally” é executado mesmo que haja um 
retorno no final do método
Coleções
• Coleções são estruturas dinâmicas capazes de 
armazenar uma coleção de dados
• A imagem abaixo apresenta as principais 
interface que definem os principais tipos de 
coleções da API Java
Coleções
• A tabela abaixo apresenta as principais classes 
que representam coleções, suas categorias e 
as interfaces que elas implementam
Interfaces Implementações 
de tabelas Hash
Implementações 
de vetores 
redimensionáveis
Implementações 
de estruturas em 
árvore
Implementações de 
listas ligadas
Implementações 
de tabelas hash + 
listas ligadas
Set HashSet TreeSet LinkedHashSet
List ArrayList LinkedList
Queue LinkedList
Deque ArrayDeque
Map HashMap TreeMap LinkedHashMap
Conversão de Tipos
• Utiliza-se a conversão de tipos (cast) para realizar 
conversões de referências de uma classe para 
referências de outra classe
• A palavra chave “instanceof” verifica se a 
conversão de tipos pode ocorrer
• Exemplo:
Aluno aluno = alunos[0]; // lê o aluno de um vetor
if ( aluno instanceof AlunoPos ) { // é instância de AlunoPos?
 AlunoPos pos = (AlunoPos) aluno; // conversão de tipo
}
Exercício
• Criar uma aplicação para incluir, pesquisar e 
remover alunos (utilizando dados em 
memória)
• Alunos podem ser:
– De graduação: possuindo nome, matrícula, idade, 
período e notas
– De pós-graduação: possuindo nome, matrícula, 
idade, conceitos e orientador
Exercício Proposto
• Criar uma aplicação para criar, pesquisar e 
remover contatos em uma agenda (utilizando 
dados em memória)
• Contatos podem ser:
– Pessoas físicas: possuindo nome, endereço, 
telefone e CPF
– Pessoas jurídicas: possuindo nome, endereço, 
telefone, CNPJ e nome fantasia
Criação de Interface Gráfica
• JFC/Swing
– Biblioteca de criação de interface gráfica
– Não precisa de ferramenta, o código das interfaces 
gráficas podem ser criado em qualquer outro 
editor de texto
– Extensão do AWT – Abstract Window Toolkit
Confecção de Interface Gráficas
• Olá Mundo em JFC/Swing:
JFrameJFrame
JTextFieldJTextFieldJLabelJLabel JButtonJButton
Tratamento de Eventos
• Tratamento de evento de clique em botão 
realizado através da interface ActionListener
Tratamento de Eventos
• Utilização de classe anônima
JButton button = new JButton(“OK”);
button.addActionListener(new ActionListener() {
 public void actionPerformed(ActionEvent e) {
 // código de tratamento de evento
 }
});
Confecção de Interface Gráfica
• JOptionPane
– Classe responsável por exibir caixas de mensagem 
ou diálogo simples
JOptionPaneJOptionPane
Confecção de Interface Gráfica
• Tela de login:
TitledBorderTitledBorder
JPasswordFieldJPasswordField
Layouts
• GridLayout
– Os componentes são dispostos em um grid
• FlowLayout
– Os componentes são dispostos em fluxo (enfileirados 
e mudando de linha ao acabar o espaço)
– Layout padrão do Jpanel
• BorderLayout
– Os componentes são dispostos nas bordas ou no 
centro do container (em cima, à esquerda, em baixo, 
à direita ou no centro)
Menus
Menus
• JMenuBar
– Responsável pela criação da barra de menus
• JMenu
– Responsável pela criação dos menus 
intermediários
• JMenuItem
– Responsável pela criação dos itens de menu
– O tratamento de eventos é realizado da mesma 
forma que no JButton, ou seja, através da 
interface ActionListener
Confecção de Interface Gráfica
JComboBoxJComboBox
Layout
• GridBagLayout
– Um dos layouts mais flexíveis da API JFC/Swing
– Utiliza GridBagConstraints para posicionar os componentes no 
container
• Principais campos do GridBagConstraints:
– gridx, gridy – responsável pelo posicionamento dos componentes 
no grid
– gridwidth, gridheight – informa quantos grids de largura ou de 
altura o componente ocupará
– fill – informa como o componente preencherá o grid
– ipadx, ipady – configura o tamanho mínimo do componente no 
grid
– Insets – distância entre o componente e a borda do grid
– anchor – responsável pelo alinhamento do componente no grid
Exercício Proposto
• Criar a interface gráfica abaixo
FIM!
Obrigado!
	Slide 1
	Conteúdo
	Conteúdo
	Paradigmas de Programação
	Paradigma Lógico
	Exemplo de Programação Lógica
	Paradigma Funcional
	Paradigma Imperativo
	Exemplo de Programação Imperativa
	Paradigma Estruturado
	Exemplo de Programação Estruturada
	Paradigma Procedural
	Paradigma Orientado a Objetos
	Exemplo de Programação Orientada a Objetos
	Conceitos de Orientação a Objetos
	Conceitos de Orientação a Objetos
	Conceitos de Orientação a Objetos
	Conceitos de Orientação a Objetos
	Conceitos de Orientação a Objetos
	Conceitos de Orientação a Objetos
	Introdução à Linguagem Java
	Introdução à Linguagem Java
	Anatomia de uma Classe Java
	Anatomia de uma Classe Java
	Objetos em Java
	Instanciando um objeto
	Introdução à UML
	Diagrama de Classes da UML
	Representação de uma Classe
	Representação de uma Classe
	Representação de uma Classe
	Representação de uma Classe
	Representação de uma Classe
	Representação de uma Classe
	Associação
	Associação
	Associação
	Associação
	AssociaçãoAssociação
	Associação
	Associação
	Associação
	Tipos Especiais de Associação
	Tipos Especiais de Associação
	Tipos Especiais de Associação
	Tipos Especiais de Associação
	Classes de Associação
	Classes de Associação
	Generalização (ou Especialização)
	Generalização
	Generalização
	Generalização
	Generalização
	Generalização
	Generalização (ou Especialização)
	Generalização (ou Especialização)
	Generalização (ou Especialização)
	Classes e Operações Abstratas
	Classes e Operações Abstratas
	Operações e Classes Abstratas
	Classes e Operações Abstratas
	Classes e Operações Abstratas
	Interfaces
	Interfaces
	Realização
	Realização
	Realização
	“Static”
	“Static”
	“Final”
	Visibilidades
	Exercício proposto
	Exercício proposto
	Diagrama de Sequência da UML
	Linha de Vida do Objeto
	Linha de Vida do Objeto
	Mensagem
	Mensagem
	Mensagem
	Mensagem de Retorno
	Mensagem de Retorno
	Auto-Chamadas
	Mensagem de Criação
	Mensagem de Criação
	Mensagem de Destruição
	Mensagem de Destruição
	Uso do Diagrama de Sequência
	Exemplo de Diagrama de Sequência
	Diagrama de Classes Resultante
	Programando em Java
	Estruturas de Decisão
	Laços
	Tratamento de Exceções
	Coleções
	Coleções
	Conversão de Tipos
	Exercício
	Exercício Proposto
	Criação de Interface Gráfica
	Confecção de Interface Gráficas
	Tratamento de Eventos
	Tratamento de Eventos
	Confecção de Interface Gráfica
	Confecção de Interface Gráfica
	Layouts
	Menus
	Menus
	Confecção de Interface Gráfica
	Layout
	Exercício Proposto
	Slide 112

Mais conteúdos dessa disciplina