Programação Orientada a Objetos: Reuso

Slides:



Advertisements
Apresentações semelhantes
Programação em Java Prof. Maurício Braga
Advertisements

Programação em Java Prof. Maurício Braga
Programação Orientada a Objetos*
Modificadores Marco Antonio. Introdução Em todas as linguagens de programação o acesso a classes/métodos deve seguir algumas regras.
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 3 – Introdução às classes Capitulo 3 Introdução às classes.
Herança, Polimorfismo e Classes Abstratas em Java
Interação entre objetos
Orientação a Objetos: Encapsulamento e Classificação
Java: Pacotes e Modificadores de Visibilidade
Java: Pacotes e Modificadores de Visibilidade
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.
Programação de computadores II
Generalização, Especialização e Conceitos
Iniciação ao Java – Márcio F. Campos
Programação Básica em Java
Polimorfismo e Classes Abstratas Profa
Programação Concorrente
Linguagem de Programação II
Wagner Santos C. de Jesus
Aula 8 Orientação à Objetos
Aula 6 Subprogramas Universidade do Vale do Rio dos Sinos
JAVA ENUMS © 2009 by Jorge L. de Souza Leão março de 2009 PEE - COPPE/UFRJ.
Capítulo 9 Herança 1.
Classes & Objectos em JAVA5
Métodos Programação II
Classes e objetos Arrays e Sobrecarga
Herança e Polimorfismo
Herança P. O. O. Prof. Ângela e Grace.
Classes e objetos P. O. O. Prof. Grace.
Introdução a Programação JAVA
Estrutura de Dados em Java
Paradigmas de Linguagens de Programação Paradima da Programação Orientada à Objetos Professor: Armando Hage Belém-2008.
Curso de extensão em Desenvolvimento Web
Threads: Introdução e Implementação
Programação Orientada a Objetos com Java
PLC – Introdução a POO Java
Linguagens Orientadas a Objeto
METODOLOGIA PARA DESENVOLVIMENTO DE SISTEMAS Prof. Dr. rer. nat. Daniel D. Abdala 1.
Interfaces.
Atributos, Encapsulamento e Interface em Java
Entendendo as definições de classe
Paulo Borba Centro de Informática Universidade Federal de Pernambuco Classes Abstratas e Interfaces.
Os métodos equals() e hashCode()
Professora Lucélia Oliveira
Paulo Borba Centro de Informática Universidade Federal de Pernambuco
Marcio de Carvalho Victorino
Linguagem II Exceções.
Listas Simplesmente Encadeadas
Wagner Santos C. de Jesus
Aula prática 14 Orientação a Objetos – C++ Parte 2
Programação Orientada a Objetos - Java
Programação Orientada a Objetos - Java Professor: Jean Carlo Mendes.
UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng
Prof. Gilberto Irajá Müller
Introdução às Java Threads
Orientação a Objetos usando Java
Classes Abstratas P. O. O. Prof. Ângela e Grace.
Polimorfismo.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Interfaces POO Avançado.
Classes Abstratas e Interface
Herança e Arquitetura em camadas
Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
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
Bruno Inojosa MCP .NET Framework
Implementação Orientada a Objetos – Aula 08 Herança, sobrescrita de métodos e polimorfismo Prof. Danielle Martin Universidade de Mogi das Cruzes
Classes Abstratas e Interface. 2 Classe Abstrata  Uma classe abstrata serve apenas como modelo para uma classe concreta (classe que comumente usamos);
1 Interface (o termo) » Interface (a palavra reservada): Java estendeu o conceito de interfaces à um nível ainda mais flexível que permite construir entidades.
Transcrição da apresentação:

Programação Orientada a Objetos: Reuso Alexandre César Muniz de Oliveira

Introdução Hierarquia de classes está associada a forma como se distribui conceitos (comportamentos) entre as unidades que compõem o sistema (classes) O genérico reside em um nível superior enquanto que o específico nos inferiores O genérico pode ser atribuído ao específico (truncado), mas o contrário não (inventado) Descer a hierarquia retrata a diminuição do grau de abstração

Introdução Boolean Character Croneable Class ClassLoader Compiler Double Object Math Legenda: Float Number CLASSE CLASSE ABSTRATA INTERFACE extends implements Integer Process Long Runtime SecurityManager

Classes Abstratas Servem de base para a construção de uma hierarquia de classes Representam o comportamento tão genérico quanto possível (métodos genéricos) Não admitem objetos concretos com seu comportamento (abstrato)

Classes Abstratas Não podem ser instanciadas Deixa a implementação mais específica de métodos nas subclasses que não forem abstratas Facilita o polimorfismo com métodos sobrepostos Herança de código preservando comportamento

Classes Abstratas Define uma interface comum a todos em uma hierarquia Permite a implementação progressiva de classes Permite o acesso a: Construtores Métodos public e protected É utilizada a palavra reservada abstract para sua definição

Classes Abstratas É obrigatório definir uma classe como abstrata se houver um ou mais métodos abstratos Métodos abstratos não apresentam implementação As subclasses de classes abstratas devem fornecer implementações para todos os métodos abstratos (a não ser que a subclasse também seja abstrata)

Classes Abstratas public abstract class Mensagem { private String remetente; private int status; public abstract void play(); public abstract void testaItens(); public abstract void aplicaItens(); public abstract boolean noPadrao(); public String getRemetente() { return this.remetente; } public String Formata() { this.testaItens(); if (this.noPadrao()) this.aplicaItens(); }}

Exercícios public abstract class Empregado { private String nome, sobrenome; public Empregado(String n, String s) { nome= n; sobrenome=s; } public String getNome() { return nome; public abstract double calcSalario();}

Exercícios public final class Gerente extends Empregado { private double salario; public Gerente(String n, String s) { super(n, s); this.salario = 1000.0; } public double calcSalario() { return salario; }}

Exercícios

Exercícios public abstract class ContaAbstrata { private String numero; private double saldo; public ContaAbstrata(String numero) { this.numero = numero; saldo = 0.0; } public void depositar(double valor) { saldo += valor; public abstract void sacar(double valor); protected void Saldo(double saldo) { this.saldo = saldo; public double Saldo() { return saldo; }}

Exercícios public class Conta extends ContaAbstrata { public Conta(String numero) { super (numero); } public void sacar(double valor) { this.Saldo(Saldo() - valor);

Exercícios public class Poupanca extends Conta { public Poupanca(String numero) { super (numero); } public void renderJuros(double taxa) { depositar( Saldo()*taxa);

Exercícios public class ContaEspecial extends Conta { public static final double TAXA = 0.01; private double bonus; public ContaEspecial (String numero) { super (numero); } public void depositar(double valor) { bonus = bonus + (valor * TAXA); super.depositar(valor);

Exercícios public class ContaImposto extends ContaAbstrata { public static final double TAXA = 0.001; public ContaImposto (String numero) { super (numero); } public void sacar(double valor) { double imposto = valor * TAXA; double total = valor + imposto; this.Saldo( Saldo() – total);

Exercícios public class Programa { public static void main(String [ ] args) { ContaAbstrata conta1, conta2; conta1 = new ContaEspecial(“21.342-7”); conta2 = new ContaImposto(“21.987-8”); conta1.sacar(500); conta2.sacar(500); System.out.println(conta1. Saldo()); System.out.println(conta2. Saldo()); }

Interfaces Herança múltipla pode causar conflitos de métodos iguais com implementações diferentes - Java não suporta Uma interface pode ser definida como um “protocolo” que define o comportamento de um determinado objeto Funciona como uma superclasse onde todos os métodos não estão implementados Uma classe pode “implementar” vários serviços (múltiplas interfaces) causando um efeito similar à herança múltipla

Interfaces Interfaces são também conhecidas como classes abstratas “puras” Não têm construtores Não contém atributos de dados (a não ser constantes estáticas – public, static, final) Todos os métodos são implicitamente abstratos Provêm uma interface de serviços e comportamentos Uma classe pode estender somente uma única classe, mas pode implementar várias interfaces

Interfaces Implementar uma interface é semelhante à estender uma classe, porém a classe não herda comportamentos e sim os implementa É possível chamar métodos que sejam membros da interface em qualquer objeto que implemente a interface

Interfaces Exemplo um veículo pode acelerar, frear e virar para uma direção public interface Veiculo { public freiar(); public acelerar(); public virar(direcao); } As classes caminhão, trator, carroça, ..., que implementam a interface veículo é que dizem como efetuar estas operações em cada classe Pode-se projetar sistemas e serviços utilizando interfaces sem a preocupação com sua implementação

Interfaces Provedora de serviços Forte separação entre funcionalidade e implementação. Embora parâmetros e tipos de retorno sejam obrigatórios. Clientes interagem independentemente da implementação. Mas os clientes podem escolher implementações alternativas.

Interfaces

Interfaces class ParticipanteForum implements Leitor, Programador { String pensamento; public String lendo() { return "Forum"; } public void pensando(char[] ideias) { pensamento = new String(ideias); } public String digitando() { return pensamento; // método exclusivo desta classe private String aprendendo() { return "Java"; interface Leitor { String lendo(); } interface Programador { void pensando(char[] ideias); String digitando();

Exercícios public interface Funcionario { public double calcularSalario(); public int bonus(); } class Gerente implements Funcionario { private static final int SALARIO = 40000; private static final int BONUS = 0; public double calcularSalario() { return SALARIO; public int getBonus( ) { return BONUS; }

Exercícios class Programador implements Funcionario { private static final double SALARIO = 50000; private static final int BONUS = 10000; public double calcularSalario() { return SALARIO; } public int getBonus() { return BONUS; }

Exercícios public class FolhaPagamento { public double calcularFolhaPagamento(Funcionario emp) { return emp.calcularSalario() + emp.bonus(); } public static void main(String arg[]) { FolhaPagamento fp = new FolhaPagamento(); Programador prg = new Programador(); Gerente mgr = new Gerente(); System.out.println("Salário do Programador " + fp.calcularFolhaPagamento(prg)); System.out.println("Salário do Gerente " + fp.calcularFolhaPagamento(mgr));

Exercícios public interface Transacao { public void depositar (double valor); public boolean sacar (double valor); } public class Conta implements Transacao{ private double saldo; private String numero; public void depositar (double valor){ saldo += valor; } public boolean sacar (double valor){ if (saldo >= valor){ saldo -= valor; return true; } return false; public String toString (){ return "" + numero + "-" + saldo; }

Exercícios public class TesteConta { static void teste (Transacao t){ t.depositar(500); } public static void main(String[] args) { Transacao t; Conta c = new Conta(); c.nomeia("Acmo e mia"); c.depositar(500); System.out.println(c.toString()); c.sacar(200); t = c; teste(t); System.out.println(((Conta) t).toString()); }}

Reuso de código Boolean Character Croneable Class ClassLoader Compiler Double Object Math Legenda: Float Number CLASSE CLASSE ABSTRATA INTERFACE extends implements Integer Process Long Runtime SecurityManager

Reuso de código ThreadGroup Thread Runnable System Object StringBuffer Legenda: Throwable CLASSE CLASSE ABSTRATA INTERFACE extends implements Error java.lang-erros ThreadDeath Exception java.lang-exceptions

Reuso de código Reuso da classe Exception public class NoMatchingDetailsException extends Exception { private String key;   public NoMatchingDetailsException(String key) this.key = key; }   public String getKey() return key; public String toString() return "No details matching '" + key + "' were found.";

Reuso de código class pilha{ // Pilha genérica int tam, topo; Object []vetor; // Vetor de elementos genéricos pilha(int tam){ // Construtor this.tam=tam; topo=-1; vetor=new Object[tam]; }

Reuso de código public void insere(Object elemento){ // Insere um elemento na pilha if(topo<(tam-1)){ // Verifica se pilha não está cheia topo++; vetor[topo]=elemento; } else System.out.println(“Pilha cheia!”); public Object retira(){ // Retira um elemento da pilha if(topo!=-1){ // Verifica se pilha não está vazia Object elemento=vetor[topo]; topo--; return(elemento); else{ System.out.println(“Pilha vazia!”); return(null); }}}

Reuso de código class exemplo{ public static void main(String args[]){ pilha p=new pilha(5); p.insere(new String(“Um elemento”)); p.insere(new Float(1.5)); p.insere(new Integer(1)); p.insere(new Character(‘a’)); p.insere(new pilha(10)); p.remove(); for(int i=1;i<=p.tam;i++) System.out.println(p.remove()); }

Reuso de código Reuso do código que implementa uma pilha para gerar uma classe fila Fila.insere: aproveita Pilha.insere Fila.remove: Precisa ser reescrito usando outro atributo chamado início que é incrementado quando um elemento é removido Fila.vazia: Precisa ser reescrita

Reuso de código Sem herança Modificador final Classe String é vital para a normal operação da JVM main (String args[]) Sempre se pode confiar no comportamento de uma classe final

Reuso de código

Reuso de código public class Database { public void addItem(Item theItem) ... } Video video = new Video(...); CD cd = new CD(...); database.addItem(video); database.addItem(cd);

Herança múltipla Simulador

Herança múltipla Simulador

Herança múltipla Simulador com visualização separada da atuação

Herança múltipla public interface Actor { /**   public interface Actor { /** * Realiza o comportamento diário do ator. * Transfere o ator para updatedField se ele for * participar das etapas posteriores da simulação. * @param currentField O estado atual do campo. * @param location A posição do ator no campo. * @param updatedField O estado atualizado do campo. */ void act(Field currentField, Location location, Field updatedField); }

Herança múltipla public class Fox extends Animal implements Drawable { ... } public class Hunter implements Actor, Drawable { ... }

Projeto Livraria Virtual LeiaBem ...