Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Programação Orientada a Eventos
Alexandre Marcos C. Gitirana
amcgitirana@yahoo.com.br
2013.1
Geral
Da aula anterior, vimos:
• Paradigmas
• Evolução das Linguagens
• Tipos de Linguagens: vantagens x desvantagens
• POO x POE
• Boas Práticas de Programação
Conforme prometido, nossa avaliação:
• 1 Prova Escrita (10,0) – 03/04
• 1 Trabalho(7,0) – 22/05
• 1 Prova Prática (10,0) – 05/06
• Exercícios de sala de aula(3,0)
Antes de Prosseguir, quero saber
o que vocês acham da proposta
de curso
• Manipulação de Tipos
• Manipulação de Arquivos
• Integração com Banco
• Swing e eventos
• Padrões de Projeto
Conhecendo Java
• 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). A
portabilidade do código Java é obtida à medida que máquinas virtuais Java estão
disponíveis para diferentes plataformas.
• A 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.
• Executa os bytecodes, convertendo-os em programas executáveis
• Todas as JVMs executarão programas da mesma forma
Proporciona portabilidade
• Execução em ambiente próprio
Proporciona segurança
• A arquitetura da JVM possui como principais componentes:
Classloader
Execution Engine
Runtime Data Areas
Native Method Interface
Garbage Collector
Vantagens da JVM
[Exercício] Para o dia
06/03, trazer o
conceito destes
componentes.
• Orientada a Objetos
– Objetos e Classes
– Encapsulamento de dados e operações
– Polimorfismo
– Reutilização de código (herança)
– Facilidade de extensão e manutenção de código
– Provê extensa biblioteca de classes (API)
• Segurança
– A JVM oferece um ambiente de execução seguro
– Os bytecodes são verificados antes de serem executados
– Inexistência de ponteiros
– A coleta automática de lixo evita erros que os programadores
cometem quando são obrigados a gerenciar diretamente a
memória.
Java
• Robustez
– Presença de mecanismos de tratamento de exceções
• Coleta de Lixo
– Sem necessidade de liberar memória alocada
– Objetos sem referências são liberados da Memória
• Eficiência
– Criada para ser utilizada em computadores com pouca
capacidade de processamento
Java
Portabilidade
Portabilidade
Revisão de Orientação a Objeto
10
Orientação a Objetos em Java
• O ser humano se relaciona com o mundo através do conceito de objetos.
• Estamos sempre identificando qualquer objeto ao nosso redor.
• Para isso os nomeamos, e de acordo com suas características , os
classificamos em grupos, ou seja, classes.
• Conceitos:
– Identidade.
– Classificação.
– Hereditariedade.
– Encapsulamento.
– Polimorfismo.
– Ligação Dinâmica.
11
Classe
Aluno
Nome
Matrícula
Nota Média
João
193.31.098-7
7,6
Maria
195.31.022-5
8,7
Orientação a Objetos em Java
12
• Objetos do mundo real possuem duas características: estado e
comportamento.
• Exemplos:
cachorros :estado: nome, cor, raça
comportamento: latir, correr
Bicicletas : estado: marcha atual, velocidade atual
comportamento: trocar marcha, aplicar freios
Orientação a Objetos em Java
13
• Identificar o estado e o comportamento de objetos do mundo
real é o primeiro passo para começar a pensar em
programação OO.
• Observe um objeto e pergunte:
Quais os possíveis estados que esse objeto pode estar?
Quais os possíveis comportamentos que ele pode
executar?
Orientação a Objetos em Java
14
• A unidade fundamental de programação em orientação a
objetos (POO) é a classe.
• Classes contém:
– Atributos: determinam o estado do objeto;
– Métodos: semelhantes a procedimentos em linguagens
convencionais, são utilizados para manipular os atributos.
Orientação a Objetos em Java
15
• As classes provêem a estrutura para a construção de objetos -
estes são ditos instâncias das classes
Classe
Aluno
Nome
Matrícula
Nota Média
setNome(nome)
getNome()
...
atributos
métodos
Instâncias
João
193.31.098-7
7,6
Maria
195.31.022-5
8,7
Orientação a Objetos em Java
16
• Objetos
– São instâncias da classe.
– Sob o ponto de vista da programação orientada a objetos,
um objeto não é muito diferente de uma variável normal.
• Um programa orientado a objetos é composto por um
conjunto de objetos que interagem entre si
Orientação a Objetos em Java
17
• Objetos
– Um objeto armazena seu estado em campos (variáveis) e expõe seu
comportamento através de métodos (funções).
– Encapsulamento: princípio de projeto pelo qual cada componente de
um programa deve agregar toda a informação relevante para sua
manipulação como uma unidade (uma cápsula).
– Ocultação da Informação: princípio pelo qual cada componente deve
manter oculta sob sua guarda uma decisão de projeto única. Para a
utilização desse componente, apenas o mínimo necessário para sua
operação deve ser revelado (tornado público)
Orientação a Objetos em Java
18
Bicicleta
Marcha atual
Velocidade atual
mudarMarcha()
mudarVelocidade()
...
campos
(atributos)
métodos
Instâncias
3ª
20 km/h
Bibicleta A
7ª
35 km/h
Bibicleta B
Orientação a Objetos em Java
19
Bibicleta B
7º
35 km/h
Métodos operam no estado interno de um objeto e servem como
mecanismo de comunicação entre objetos.
João
João
30 anos
mudarMarcha
Orientação a Objetos em Java
20
Qualificador_de_acesso class Nome_Da_Classe
{
// atributos da classe
// métodos da classe
}
// Class Lampada
public class Lampada
{
// Atributos
boolean acesa;
// Métodos
public void ligar()
{ acesa = true; }
public void desligar()
{ acesa = false; }
}
Orientação a Objetos em Java
21
class Bicicleta {
int velocidade = 0;
int marcha = 1;
void mudarMarcha(int novoValor) {
marcha = novoValor;
}
void aumentarVelocidade(int incremento) {
velocidade = velocidade + incremento;
}
void aplicarFreios(int decremento) {
velocidade = velocidade - decremento;
}
}
Orientação a Objetos em Java
22
• É um princípio fundamental da OO:
– Esconder o estado interno (valores dos atributos).
– Obrigar que interações com os atributos sejam executadas
através de métodos.
• Com o encapsulamento um objeto determina a permissão que
outros objetos terão para acessar seus atributos (estado).
Encapsulamento
23
Proteger os
atributos
Permitir acesso
aos atributos
através dos
métodos
Encapsulamento
24
• Permite a uma classe herdar o estado (atributos) e o
comportamento (métodos) de outra classe.
• Herança : entre diferentes classes podem existir diversas
semelhanças, ou seja, duas ou mais classes poderão
compartilhar os mesmos atributos e/ou os mesmos métodos
Herança
25
Pessoa
------------------------------------------------
nome
idade
Professor
------------------------------------------------------------------------------------
formação
área de interesse
Aluno
-------------------------------------------------------------------
curso
cr
Herança
26
Herança
27
Herança
28
Herança
29
João
25
Sistemas de Informação
Instâncias de
Aluno
Maria
20
Sistemas de Informação
Herança
30
// SuperClass.java
public class SuperClass
{
// Atributos e métodos
}
// SubClass.java
public class SubClass EXTENDS SuperClass
{
// Atributos e métodos
}
class Aluno extends Pessoa {
...
}
Herança
31
class Pessoa {
String nome;
int idade;
void definirNome(String valor) {
nome = valor;
}
String retornarNome() {
return nome;
}
void definirIdade(int valor) {
idade = valor;
}
int retornarIdade() {
return idade;
}
}
class Aluno extends Pessoa {
String curso;
void definirCurso(String valor) {
curso = valor;
}
String retornarCurso() {
return curso;
}
}
Herança
32
Aluno joao = new Aluno();
joao.definirNome(“João”);
joao.definirIdade(25);
joao.definirCurso(“Sistemas de
Informação”);
Aluno maria = new Aluno();
maria.definirNome(“Maria”);
maria.definirIdade(20);
maria.definirCurso(“Sistemas de
Informação”);
João
25
Sistemas de Informação
Maria
20
Sistemas de Informação
Herança
33
ELETRODOMÉSTICO
Voltagem
Garantia
Ligar
Desligar
Liquidificador
Fabricante
Cor
Auto Limpeza
Velocidade
Herança
Classes Abstratas e Interfaces
De forma objetiva, uma classe abstrata serve apenas como modelo para uma
classe concreta (classe que comumente usamos).
Como classes abstratas são modelos de classes, então, não podem ser instanciadas
diretamente com o new, elas sempre devem ser herdadas por classes concretas.
Outro fato importante de classes abstratas é que elas podem conter ou não
métodos abstratos, que tem a mesma definição da assinatura de método
encontrada em interfaces. Ou seja, uma classe abstrata pode implementar ou não
um método.
Os métodos abstratos definidos em uma classe abstrata devem obrigatoriamente
ser implementados em uma classe concreta. Mas se uma classe abstrata herdar
outra classe abstrata, a classe que herda não precisa implementar os métodos
abstratos.
Herança
• Classes Abstratas X Classes Concretas
– Uma classe abstrata é uma classe que não tem instâncias diretas, mas
cujas classes descendentes podem ter instâncias diretas.
– Uma classe concreta é uma classe que pode ser instanciada.
• Classes Abstratas X Interfaces
– A classe abstrata pode possuir métodos não abstratos, bastando ter
apenas um método abstrato para ser considerada como tal.
– Um interface apenas propõe os métodos que devem ser
implementados pelas classes que desejarem.
– Uma interface define um tipo.
Herança
Interfaces:
· Uma interface não é considerada uma Classe e sim uma Entidade.
· Não possui implementação, apenas assinatura, ou seja, apenas a definição dos seus métodos
sem o corpo.
· Todos os métodos são abstratos.
· Seus métodos são implicitamente Públicos e Abstratos.
· Não há como fazer uma instância de uma Interface e nem como criar um Construtor.
· Funcionam como um tipo de "contrato", onde são especificados os atributos, métodos e
funções que as classes que implementem essa interface são obrigadas a implementar.
· Já que Java não suporta Heranças Múltiplas, as Interfaces são usadas para implementá-las.
Classes Abstratas:
· As classes abstratas devem conter pelo menos um método abstrato, que não tem corpo.
· É um tipo especial de classe que não há como criar instâncias dela.
· É usada apenas para ser herdada, funciona como uma super classe.
· Uma grande vantagem é que força a hierarquia para todas as sub-classes.
· É um tipo de contrato que faz com que as sub-classes contemplem as mesmas hierarquias
e/ou padrões.
Herança
public abstract class Empregado {
public Empregado (String nome, double salario) {
this.numero = ++contador;
this.nome = nome;
this.salario = salario; }
public abstract void aumentaSalario(double percentual);
}
public class Vendedor extends Empregado{
public void aumentaSalario (double percentualDeAumento)
{ percComissao = percComissao * (1+percentualDeAumento/100);}
}
public class Gerente extends Empregado {
public void aumentaSalario(double percentual) {
double novoSalario = getSalario() * (1+2 * percentual/100);
setSalario(novoSalario); }
}
Herança
public interface Ordenavel {
public int comparar(Ordenavel b);
}
public class Empregado implements Ordenavel {
...
public int comparar(Ordenavel b) {
Empregado e = (Empregado)b;
if (salario < e.salario) return -1;
if (salario > e.salario) return 1;
return 0;
} ...
}
public class Ordenacao {
public static void ordena(Ordenavel[] a)
{ ... if (a[i].comparar(a[i+]) > ) ...}
}
Herança
• Polimorfismo é o termo definido em linguagens orientadas a objeto -
como o Java - para a possibilidade de se usar o mesmo elemento de forma
diferente.
• Especificamente em Java, polimorfismo se encontra no fato de
podemos modificar totalmente o código de um método herdado de
uma classe diferente, ou seja, sobrescrevemos o método da classe
pai.
• Em linguagens fortemente tipadas o polimorfismo é implementado
através de herança ou implementação de interfaces.
Polimorfismo
Polimorfismo
• Determinam se atributos e métodos poderão ser acessados
por outras classes
– public (público)
– private (privado)
– protected (protegido)
– modificador não explícito (package-private)
Modificadores de Acesso
• Uma classe pode ser:
– public – acessado por qualquer outra classe.
– nenhum modificador (package-private) – acessada
somente dentro do seu pacote.
Modificadores de Acesso
• Atributos e métodos podem ser:
– public – acessados por qualquer outra classe.
– nenhum modificador (package-private) – acessados
somente dentro do seu pacote
– private – acessados somente dentro de suas próprias
classes.
– protected – acessados somente dentro do seus pacotes e
por suas subclasses.
Modificadores de Acesso
Não Não Não Sim
private
Não Não Sim Sim
nenhum
Não Sim Sim Sim
protected
Sim Sim Sim Sim
public
todos subclasse pacote
Classe/
Atributos ou
métodos
modificador
Modificadores de Acesso
Não Não Não Sim
private
Não Não Sim Sim
nenhum
Não Sim Sim Sim
protected
Sim Sim Sim Sim
public
todos subclasse pacote
Classe/
Atributos ou
métodos
modificador
Modificadores de Acesso
Não Não
Não
Sim private
Não Não Sim Sim nenhum
Não Sim Sim Sim protected
Sim Sim Sim Sim public
Gamma AlphaSub Beta Alpha modificador
Modificadores de Acesso
47
• Utilizados para a construção de objetos
class Pessoa {
String nome;
int idade;
public Pessoa (String nome, int
idade) {
this.nome = nome;
this.idade = idade;
}
public Pessoa () {
this.nome
= “João”;
this.idade = 25;
}
}
Pessoa maria =
new Pessoa(“Maria”, 20);
Pessoa joao = new
Pessoa();
Construtores
48
• Devem ter o mesmo nome da classe que inicializam.
• Podem ter parâmetros.
• Não tem retorno.
• Se não é declarado nenhum construtor, a linguagem provê um
construtor padrão sem argumentos que não faz nada.
Construtores
49
import java.util.*;
public class AloMundo {
private String mensagem = “ ”;
public AloMundo () {
Date data = new Date();
mensagem = "Alô, Mundo” + data.toString() ;
}
public void mostrarMensagem () {
System.out.println( mensagem );
}
}
Classe
Pacotes
Métodos
Variáveis
Construtores
Construtores
50
public class Pessoa {
private String nome;
private int idade;
void definirNome(String valor)
{
nome = valor;
}
String retornarNome() {
return nome;
}
void definirIdade(int valor) {
idade = valor;
}
int retornarIdade() {
return idade;
}
public static void main (String[] args) {
Pessoa p1 = new Pessoa();
p1.definirNome(“João”);
p1.definirIdade(25);
System.out.println( p1.retornarNome()
+
“ “ + p1.retornarIdade());
Pessoa p2 = new Pessoa();
p2.definirNome(“Maria”);
p2.definirIdade(20);
System.out.println(p2.retornarNome()
+
“ “ + p2.retornarIdade());
}
} // fim da classe Pessoa
Construtores
51
• Exercício1: Escreva um programa que implemente as
classes abaixo conforme o diagrama de classes em UML
Exercícios
• Exercício2: Escreva um programa que implemente as classes abaixo conforme
o diagrama de classes em UML
Exercícios
class Funcionario {
protected String nome;
protected String cpf;
protected double salario;
public double getBonificacao() {
return this.salario * 1.2;
} // outros métodos aqui
}
Boa semana para a todos !
Até quarta-feira que vem !
Programação Orientada a Eventos