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