Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota

Slides:



Advertisements
Apresentações semelhantes
Programação Orientada a Objeto
Advertisements

Modificadores Marco Antonio. Introdução Em todas as linguagens de programação o acesso a classes/métodos deve seguir algumas regras.
Java Básico Orientação a Objeto Marco Antonio Software Architect Fev/2008.
Herança, Polimorfismo e Classes Abstratas em Java
Orientação a Objetos: Modificador Final para Métodos e Classes
Herança, sobrecarga e ligação dinâmica zHerança zReferência super zSobrecarga de métodos zSobreposição zLigação dinâmica de métodos zfinal.
De 17 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes Aula.
Generalização, Especialização e Conceitos
Iniciação ao Java – Márcio F. Campos
Polimorfismo e Classes Abstratas Profa
Linguagem de Programação II
Wagner Santos C. de Jesus
Capítulo 9 Herança 1.
Classes & Objectos em JAVA5
Métodos Programação II
Paradigmas de Linguagens de Programação Paradima da Programação Orientada à Objetos Professor: Armando Hage Belém-2008.
CRIANDO OBJETOS EM JAVA
Programação Orientada a Objetos com Java
PLC – Introdução a POO Java
JAVA Orientação a Objetos
Padrão de Projeto Visitor
Interfaces.
Atributos, Encapsulamento e Interface em Java
Programação I Aula 2 (Métodos)
Classes, Objetos, Atributos e Métodos JAVA
Paulo Borba Centro de Informática Universidade Federal de Pernambuco Classes Abstratas e Interfaces.
Cap2. Conceitos de orientação a objetos
Orientação a Objetos e Java Graduação em Ciência da Computação
Professora Lucélia Oliveira
Paulo Borba Centro de Informática Universidade Federal de Pernambuco
UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng. da Computação IF62C - Fundamentos de Programação Semana 12 – Overloading X Overriding Prof.a.
Programação Orientada a Objetos: Reuso
Linguagem II Exceções.
Wagner Santos C. de Jesus
Aula Prática 1 Monitoria IP/CC (~if669). Verificação Dinâmica de Tipos Métodos de superclasses e subclasses: Uso de métodos de subclasses quando se é.
Programação Orientada a Objetos - Java
UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng
Prof. Gilberto Irajá Müller
Orientação a Objetos usando Java
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Java Kickstart, day 2 Semelhanças com linguagem C.
Classes Abstratas P. O. O. Prof. Ângela e Grace.
Aula Prática 4 Monitoria IP/CC (~if669).
Implementação Orientada a Objetos – Aula 05 Construtores e sobrecarga de métodos Prof. Danielle Martin Universidade de Mogi das Cruzes
Polimorfismo.
Endereco String rua, bairro, cidade, estado, cep; int numero; getEndereco() setEndereco() Observação: Todos os atributos devem ser pivados.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota (com material da Qualiti Software Process)
Decorator POO - Avançado.
Classes Abstratas e Interface
Vendo o código como um bolo... com várias camadas! Interface com o usuário (GUI) Comunicação Negócio Dados.
Herança e Arquitetura em camadas
Programação Orientada a Objetos - Java Professor: Jean Carlo Mendes.
Aula Prática 5 05/05/2010. //Estrutura do método public int subtrair (int a, int b){ //Calcule a operação desejada. int resultado = a – b; //Retorne o.
Herança Modelagem e Programação Orientada a Objetos
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
Paradigmas da Programação – Semestre 1 – Aula 8 Professor: Eduardo Mantovani )
Bruno Inojosa MCP .NET Framework
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Paulo Borba Centro de Informática Universidade Federal de Pernambuco Exceções.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Implementação Orientada a Objetos – Aula 08 Herança, sobrescrita de métodos e polimorfismo Prof. Danielle Martin Universidade de Mogi das Cruzes
Implementação Orientada a Objetos – Aula 04 Métodos, parâmetros e retorno Prof. Danielle Martin/Marcia Bissaco Universidade de Mogi das Cruzes
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Classes Abstratas e Interface. 2 Classe Abstrata  Uma classe abstrata serve apenas como modelo para uma classe concreta (classe que comumente usamos);
Polimorfismo com Interfaces Pacotes em Java Prof. Gustavo Wagner (Alterações) Prof. Tiago Massoni (Slides Originais) Desenvolvimento de Sistemas FATEC-PB.
Herança e Polimorfismo Prof. Gustavo Wagner (Alterações) Prof. Tiago Massoni (Slides Originais) Desenvolvimento de Sistemas FATEC-PB  Centro de Informática,
Introdução à Orientação a Objetos em Java Prof. Gustavo Wagner (Alterações) Slides originais: Prof. Tiago Massoni Desenvolvimento de Sistemas FATEC-PB.
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal.
Transcrição da apresentação:

Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota

Classes Abstratas Objetivo Depois desta aula você será capaz de desenvolver sistemas mais reusáveis e extensíveis, através da utilização de classes abstratas que permitem relacionar classes que compartilham parte dos seus códigos mas que se comportam de forma radicalmente diferente em alguns casos.

Classes Abstratas Leitura prévia essencial Seções 7.13 a 7.20 do livro Java: how to program (de Harvey e Paul Deitel)

numerosaldo ,32 Objeto Conta Imposto creditar debitar

Número getSaldo ,32 Crédito Débito Estados do Objeto Conta Imposto numerosaldo ,00 debitar(20) creditar debitar Número getSaldo ,32 Crédito Débito numerosaldo ,98 creditar debitar

Conta Imposto: Assinatura public class ContaImposto { public ContaImposto (String numero) {} public void creditar(double valor) {} public void debitar(double valor) {} public String getNumero() {} public double getSaldo() {} }

Conta Imposto: Assinatura public class ContaImpostoM extends Conta { public ContaImpostoM(String numero) {} public void debitar(double valor) {} }

Conta Imposto: Descrição public class ContaImpostoM extends Conta { private static final double taxa = ; public ContaImpostoM (String numero) { super (numero); } public void debitar(double valor) { double imposto = (valor * taxa); super.debitar(valor + imposto); }

Subtipos e Subclasses ContaImposto Conta

Subclasses e Comportamento Objetos da subclasse comportam-se como os objetos da superclasse Redefinições de métodos devem preservar o comportamento (semântica) do método original Grande impacto sobre manutenção/evolução de software...

Revisão/Otimização de Código... double m(Conta c) { c.creditar(x); c.debitar(x); return c.getSaldo(); }... Modificação é correta? Em que contextos?... double m(Conta c) { return c.getSaldo(); }...

Subclasses e Evolução de Software Deveria ser possível raciocinar sobre o código usando-se apenas a definição dos tipos das variáveis envolvidas ( Conta ) O comportamento do código deveria ser independente do tipo do objeto ( Conta, ContaEspecial, ContaImposto ) associado a uma dada variável em tempo de execução

Reuso sem Subtipos Conta PoupançaContaImpostoM ContaEspecial

Reuso preservando Subtipos ContaAbstrata ContaImposto Conta PoupancaContaEspecial

Definindo Classes Abstratas public abstract class ContaAbstrata { private String numero; private double saldo; public ContaAbstrata (String numero) { this.numero = numero; saldo = 0.0; } public void creditar(double valor) { saldo = saldo + valor; }

Definindo Classes Abstratas public double getSaldo() { return saldo; } public String getNumeto() { return numero; } public abstract void debitar(double valor); protected void setSaldo(double saldo) { this.saldo = saldo; }

Classes Abstratas Possibilita herança de código preservando comportamento (semântica) Métodos abstratos: – geralmente existe pelo menos um – são implementados nas subclasses Não se criam objetos: –mas podem (devem) ter construtores, para reuso –métodos qualificados como protected para serem acessados nas subclasses

Contas: Descrição Modificada public class Conta extends ContaAbstrata { public Conta(String numero) { super (numero); } public void debitar(double valor) { this.setSaldo(getSaldo() - valor); }

Poupanças: Descrição Original public class Poupanca extends Conta { public Poupanca(String numero) { super (numero); } public void renderJuros(double taxa) { this.creditar(getSaldo() * taxa); }

Conta Especial: Descrição Original public class ContaEspecial extends Conta { public static final double TAXA = 0.01; private double bonus; public ContaEspecial (String numero) { super (numero); } public void creditar(double valor) { bonus = bonus + (valor * TAXA); super.creditar(valor); }... }

Conta Imposto: Descrição public class ContaImposto extends ContaAbstrata { public static final double TAXA = ; public ContaImposto (String numero) { super (numero); } public void debitar(double valor) { double imposto = valor * TAXA; double total = valor + imposto; this.setSaldo(getSaldo() – total); }

Substituição e Ligações Dinâmicas... ContaAbstrata ca, ca’; ca = new ContaEspecial(¨ ¨); ca’ = new ContaImposto(¨ ¨); ca.debitar(500); ca’.debitar(500); System.out.println(ca.getSaldo()); System.out.println(ca’.getSaldo());...

Classes Abstratas: Utilização Herdar código sem quebrar noção de subtipos, preservando o comportamento do supertipo Generalizar código, através da abstração de detalhes não relevantes Projetar sistemas, definindo as suas arquiteturas e servindo de base para a implementação progressiva dos mesmos

Contas: Projeto OO public abstract class ContaProjeto { private String numero; private double saldo; public abstract void creditar(double valor); public abstract void debitar(double valor); public String getNumero() { return numero; protected setSaldo(double saldo) { this.saldo = saldo; }... }

Cliente: Projeto OO public abstract class Cliente { private String nome; private RepositorioContatos contatos;... public void incluirContato(Contato contato) { contatos.incluir(contato); } public abstract Endereco getEndereco(); public abstract Contato getContato(String tipo);... }

Contato: Reuso e Subtipos Contato Telefone Endereco EndEletronico EndPostal

Contato: Projeto OO public abstract class Contato { private String tipo; public Contato (String tipo) { this.tipo = tipo; }... public abstract String getInfoRotulo(); }

public abstract class Endereco extends Contato { public Endereco (String tipo) { super (tipo); } Endereço: Projeto OO

Endereço Eletrônico: Projeto OO public class EnderecoEletronico extends Endereco { private String ; public EnderecoEletronico(String ) { super (“EnderecoEletronico”); this. = ; } public String getInfoRotulo() { return (“ ” + ); }

Endereço Residencial: Projeto public class EnderecoPostal extends Endereco { private String rua; private String cidade;... public EnderecoPostal(String cidade, String rua,...) { super (“EnderecoPostal”); this.cidade = cidade; this.rua = rua;... } public String getInfoRotulo() { return (“Rua: ” + rua +...); }

Telefone: Projeto public class Telefone extends Contato { private String ddd; private String numero; public Telefone(String ddd, String numero) { super (“Telefone”); this.numero = numero; this.ddd = ddd; } public String getInfoRotulo() { return (“DDD: ” + ddd + “Numero: “ + numero); }

Pessoa: Reuso e Subtipos Pessoa PessoaFisica PessoaJuridica

Pessoa: Projeto OO public abstract class Pessoa { private String nome;... public abstract String getCodigo(); }

public class PessoaFisica extends Pessoa { private String cpf;... public String getCodigo() { return cpf; } Pessoa Física: Projeto OO

public class PessoaJuridica extends Pessoa { private String cnpj;... public String getCodigo() { return cnpj; } Pessoa Jurídica: Projeto OO

public class RepositorioPessoasArray { private Pessoa[] pessoas;... public Pessoa procurar(String codigo) { Pessoa p = null; boolean achou = false; for (int i=0; i<indice && !achou; i++) { p = pessoas[i]; if (p.getCodigo().equals(codigo)) achou = true; else p = null; } return p; }

Exercícios Modifique a classe Banco para que seja possível armazenar todos os tipos de contas vistos em aula.

Classes Abstratas Resumo Importância de redefinir métodos preservando a semântica dos métodos originais Cláusula abstract para classes Cláusula abstract para métodos Classes abstratas e projeto e estruturação de sistemas

Classes Abstratas Leitura adicional Capítulo 7 do livro Thinking in Java (de Bruce Eckel) Seções 4.7 e 4.10 do livro A Programmer’s Guide to Java Certification (de Khalid Mughal e Rolf Rasmussen)