Programação Orientada a Objetos C ++ 4 Herança e Polimorfismo

Tamanho: px
Começar a partir da página:

Download "Programação Orientada a Objetos C ++ 4 Herança e Polimorfismo"

Transcrição

1 Programação Orientada a Objetos C ++ 4 Herança e Polimorfismo Departamento de Informática Prof. Anselmo C. de Paiva Herança Como vimos anteriormente, classes podem ser compostas em hierarquias, através do uso de herança. Quando uma classe herda de outra, diz-se que ela a estende ou a especializa, ou os dois. Herança implica tanto herança de interface quanto herança de código. 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva

2 Objeto Poupança Crédito Saldo 875,3 Número R. Juros Débito Estados do Objeto Poupança creditar(0) Creditar Crédito Creditar Saldo Número Saldo Número Saldo Número R. Juros R. Juros 875, , , Debitar Débito Debitar

3 Estados do Objeto Poupança R. Juros(0.01) Creditar Creditar Saldo Número Saldo Número Saldo Número R. Juros R. Juros 875, , , Debitar Debitar Débito Debitar Classe de Poupanças: Assinatura public class PoupancaD { public PoupancaD (String n) { public void creditar(double valor) { public void debitar(double valor) { public String getnumero() { public double getsaldo() { public void renderjuros(double taxa) {

4 Classe de Poupanças: Descrição public class PoupancaD { private String numero; private double saldo; public void creditar (double valor) { saldo = saldo + valor; //... public void renderjuros(double taxa) { this.creditar(saldo * taxa); Classe de Bancos: Assinatura public class BancoD { public BancoD() { public void cadastrarconta(conta c) { public void cadastrarpoupanca(poupancad p) { public void creditarconta(string numero, double valor) { public void creditarpoupanca(string numero, double valor) { //...

5 Classe de Bancos: Descrição public class BancoD { private Conta[] contas; private PoupancaD[] poupancas; private int indicep, indicec; public void cadastrarconta(conta c) { contas[indicec] = c; indicec = indicec + 1; public void cadastrarpoupanca(poupancad p) { poupancas[indicep] = p; indicep = indicep + 1;

6 private Conta procurarconta(string numero) { int i = 0; boolean achou = false; Conta resposta = null; while ((! achou) && (i < indicec)) { if (contas[i].getnumero().equals(numero)) achou = true; else i = i + 1; if (achou) resposta = contas[i]; return resposta; public void debitarconta(string numero, double valor) { Conta c; c = this.procurarconta(numero); if (c!= null) c.debitar(valor); else System.out.println( "Conta inexistente! );

7 Problemas Duplicação desnecessária de código: a definição depoupançad é uma simples extensão da definição de Conta clientes de Conta que precisam trabalhar também compoupançad terão que ter código especial para manipular poupanças Falta refletir relação entre tipos do mundo real Subtipos e Subclasses Poupança Conta

8 Herança Necessidade de extender classes alterar classes já existentes e adicionar propriedades ou comportamentos para representar outra classe de objetos criar uma hierarquia de classes que herdam propriedades e comportamentos de outra classe e definem novas propriedades e comportamentos 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 15 Subclasses Comportamento objetos da subclasse comportam-se os objetos da superclasse Substituição objetos da subclasse podem ser usados lugar de objetos da superclasse como no

9 Herança Reuso de Código a descrição da superclasse pode ser usada para definir a subclasse Extensibilidade algumas operações da superclasse podem ser redefinidas na subclasse Classe de Poupanças: Assinatura public class Poupanca extends Conta { public Poupanca (String numero) { public void renderjuros(double taxa) {

10 Classe de Poupanças: Descrição public class Poupanca extends Conta { public Poupanca (String numero) { super (numero); public void renderjuros(double taxa) { this.creditar(this.getsaldo()*taxa); Extends subclasseextends superclasse Mecanismo para definição de herança e subtipos Herança simples: só se pode herdar uma classe por vez

11 Extends: Restrições Atributos e métodos privados são herdados, mas não podem ser acessados diretamente Qualificadorprotected: visibilidade restrita ao pacote e as subclasses de outros pacotes Construtores não são herdados Construtor default só é disponível se também for disponível na superclasse Usando Poupanças... Poupanca poupanca; poupanca = new Poupanca( ); poupanca.creditar(500.87); poupanca.debitar(45.00); System.out.println(poupanca.getSaldo());...

12 Subtipos: Substituição... Conta conta; conta = new Poupanca( ); conta.creditar(500.87); conta.debitar(45.00); System.out.println(conta.getSaldo());... Subtipos: Verificação Dinâmica com Casts... Conta conta; conta = new Poupanca("1.34-7");... conta.renderjuros(0.01); ((Poupanca) conta).renderjuros(0.01); conta.imprimirsaldo();...

13 Substituição e Casts Nos contextos onde contas são usadas, podemse usar poupanças Nos contextos onde poupanças são usadas, podem-se usar contas com o uso explícito de casts Casts correspondemà verificação dinâmica de tipos e podem gerar exceções (Cuidado!) Casts não fazem conversão de tipos Classe Banco: Assinatura public class Banco { public Banco () { public void cadastrar(conta conta) { public void creditar(string numero, double valor) { public void debitar(string numero, double valor) { public double getsaldo(string numero) { public void transferir(string contaorigem, String contadestino, double valor) {

14 Subtipos: Substituição... Banco banco = new Banco(); banco.cadastrar(new Conta("13-4")); banco.cadastrar(new Poupanca( 567-8")); banco.creditar( 13-4",19.34); banco.transferir( 13-4", 567-8",9.34); System.out.print(banco.getSaldo( 567-8"));... Exercício Modifique a classe Banco para que seja possível render juros de uma poupança. Isto é, adicione um novo método que rende os juros da poupança cujo número é parâmetro deste método; a taxa de juros corrente deve ser um atributo de Banco.

15 Interface & Código Herança de interface significa que a classe que herda recebe todos os métodos declarados pela superclasse que não sejam privados. Herança de código significa que as implementações desses métodos também são herdadas. Além disso, os campos que não sejam privados também são herdados. 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 9 Visibilidade & Herança Pelo que foi dito, membros públicos são herdados, enquanto membros privados não são. Às vezes precisamos algo intermediário: um membro que não seja visto fora da classe mas que possa ser herdado. As linguagens OO tipicamente dão suporte a esse tipo de acesso. 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 30

16 Mais Visibilidade em Java Java permite declararmos um membro que, embora não seja acessível por outras classes, é herdado por suas sub-classes. Para isso usamos o modificador de controle de acesso protected. 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 31 Resumo de Visibilidade em Java Resumindo todos os tipos de visibilidade: private: membros que são vistos só pelo própria classe e não são herdados por nenhuma outra; package: membros que são vistos e herdados pelas classes do pacote; protected: membros que são vistos pelas classes do pacote e herdados por qualquer outra classe; public: membros são vistos e herdados por qualquer classe. 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 3

17 Herança de Membros Pacote P1 A int i; B int i; 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 33 Herança de Membros Pacote P1 A int i; public int j; B int i; public int j; 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 34

18 Herança de Membros Pacote P1 A int i; public int j; protected int k; B int i; public int j; protected int k; 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 35 Herança de Membros B Pacote P1 A int i; public int j; protected int k; int i; public int j; protected int k; private int l; 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 36

19 Herança de Membros B Pacote P1 A int i; public int j; protected int k; int i; public int j; protected int k; private int l; Pacote P P1.A C public int j; protected int k; 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 37 Herança em Java Quando uma classe A herda de B, diz-se que A é a sub-classe e estende B, a superclasse. Uma classe Java estende apenas uma outra classe a essa restrição damos o nome de herança simples. Para criar uma sub-classe, usamos a palavra reservada extends. 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 38

20 Exemplo de Herança Podemos criar uma classe que represente um pixel a partir da classe Point. Afinal, um pixel é um ponto colorido. public class Pixel extends Point { int color; public Pixel(int x, int y, int c) { super(x, y); color = c; 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 39 Herança de Código A classe Pixel herda a interface e o código da classe Point. Ou seja, Pixel passa a ter tanto os campos quanto os métodos (com suas implementações) de Point. Pixel px = new Pixel(1,,0); // Pixel de cor 0 px.move(1,0); // Agora px está em (,) 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 40

21 super Note que a primeira coisa que o construtor de Pixel faz é chamar o construtor de Point, usando, para isso, a palavra reservada super. Isso é necessário pois Pixel é uma extensão de Point, ou seja, ela deve inicializar sua parte Point antes de inicializar sua parte estendida. Se nós não chamássemos o construtor da superclasse explicitamente, a linguagem Java faria uma chamada ao construtor padrão da superclasse automaticamente. 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 41 Árvore Floresta As linguagens OO podem adotar um modelo de hierarquia em árvore ou em floresta. Árvore significa que uma única hierarquia compreende todas as classes existentes, isto é, existe uma superclasse comum a todas as classes. Floresta significa que pode haver diversas árvores de hierarquia que não se relacionam, isto é, não existe uma superclasse comum a todas as classes. 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 4

22 Modelo de Java Java adota o modelo de árvore. A classe Object é a raiz da hierarquia de classes à qual todas as classes existentes pertencem. Quando não declaramos que uma classe estende outra, ela, implicitamente, estende Object. 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 43 Superclasse Comum Uma das vantagens de termos uma superclasse comum, é termos uma funcionalidade comum a todos os objetos. Por exemplo, a classe Object define um método chamado tostring que retorna um texto descritivo do objeto. Um outro exemplo é o método finalize usado na destruição de um objeto, como já dito. 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 44

23 Especialização Extensão Uma classe pode herdar de outra para especializá-la redefinindo métodos, sem ampliar sua interface. Uma classe pode herdar de outra para estendêla declarando novos métodos e, dessa forma, ampliando sua interface. Ou as duas coisas podem acontecer simultaneamente... 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 45 Polimorfismo Polimorfismo é a capacidade de um objeto tomar diversas formas. O capacidade polimórfica decorre diretamente do mecanismo de herança. Ao estendermos ou especializarmos uma classe, não perdemos compatibilidade com a superclasse. 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 46

24 Polimorfismo de Pixel A sub-classe de Point, Pixel, é compatível com ela, ou seja, um pixel, além de outras coisas, é um ponto. Isso implica que, sempre que precisarmos de um ponto, podemos usar um pixel em seu lugar. 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 47 Exemplo de Polimorfismo Podemos querer criar um array de pontos. O array de pontos poderá conter pixels: Point[] pontos = new Point[5]; // um array de pontos pontos[0] = new Point(); pontos[1] = new Pixel(1,,0); // um pixel é um ponto 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 48

25 Mais sobre Polimorfismo Note que um pixel pode ser usado sempre que se necessita um ponto. Porém, o contrário não é verdade: não podemos usar um ponto quando precisamos de um pixel. Point pt = new Pixel(0,0,1); // OK! pixel é ponto. Pixel px = new Point(0,0); // ERRO! ponto não é pixel. 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 49 Conclusão Polimorfismo é o nome formal para o fato de que quando precisamos de um objeto de determinado tipo, podemos usar uma versão mais especializada dele. Esse fato pode ser bem entendido analisando-se a árvore de hierarquia de classes. 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 50

26 Objetos Materiais Animais Vegetais Mamíferos Rosas Humanos Rosas da Maria Dentistas Floricultores 10/1/00 João José 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 51 Ampliando o Exemplo Vamos aumentar a classe Point para fornecer um método que imprima na tela uma representação textual do ponto. public class Point {... public void print() { System.out.println( Point ( +p.x+, +p.y+ ) ); 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 5

27 Ampliando o Exemplo (cont.) Com essa modificação, tanto a classe Point quanto a classe Pixel agora possuem um método que imprime o ponto representado. Podemos voltar ao exemplo do array de pontos e imprimir as posições preenchidas. Point pt = new Point(); // ponto em (0,0) Pixel px = new Pixel(0,0,0); // pixel em (0,0) pt.print(); // Imprime: Point (0,0) px.print(); // Imprime: Point (0,0) 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 53 Ampliando o Exemplo (cont.) Porém, a implementação desse método não é boa para um pixel pois não imprime a cor. Vamos, então, redefinir o método em Pixel. public class Pixel extends Point {... public void print() { System.out.println( Pixel ( +p.x+, +p.y+, + p.color+ ) ); 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 54

28 Ampliando o Exemplo (cont.) Com essa nova modificação, a classe Pixel agora possui um método que imprime o pixel de forma correta. Point pt = new Point(); // ponto em (0,0) Pixel px = new Pixel(0,0,0); // pixel em (0,0) pt.print(); // Imprime: Point (0,0) px.print(); // Imprime: Pixel (0,0,0) 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 55 Late Binding Voltando ao exemplo do array de pontos, agora que cada classe possui sua própria codificação para o método print, o ideal é que, ao corrermos o array imprimindo os pontos, as versões corretas dos métodos fossem usadas. Isso realmente acontece, pois as linguagens OO usam um recurso chamado late binding. 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 56

29 Late Binding na prática Graças a esse recurso, agora temos: Point[] pontos = new Point[5]; pontos[0] = new Point(); pontos[1] = new Pixel(1,,0); pontos[0].print(); // Imprime: Point (0,0) pontos[1].print(); // Imprime: Pixel (1,,0) 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 57 Definição de Late Binding Late Binding, como o nome sugere, é a capacidade de adiar a resolução de um método até o momento no qual ele deve ser efetivamente chamado. Ou seja, a resolução do método acontecerá em tempo de execução, ao invés de em tempo de compilação. No momento da chamada, o método utilizado será o definido pela classe real do objeto. 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 58

30 Late Binding Eficiência O uso de late binding pode trazer perdas no desempenho dos programas visto que a cada chamada de método um processamento adicional deve ser feito. Esse fato levou várias linguagens OO a permitir a construção de métodos constantes, ou seja, métodos cujas implementações não podem ser redefinidas nas sub-classes. 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 59 Valores Constantes Java permite declarar um campo ou uma variável local que, uma vez inicializada, tenha seu valor fixo. Para isso utilizamos o modificador final. class A { final int ERR_COD1 = -1; final int ERR_COD = -;... 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 60

31 Métodos Constantes em Java Para criarmos um método constante em Java devemos, também, usar o modificador final. public class A { public final int f() {... 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 61 Classes Constantes em Java Uma classe inteira pode ser definida final. Nesse caso, em particular, a classe não pode ser estendida. public final class A {... 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 6

32 Conversão de Tipo Como dito anteriormente, podemos usar uma versão mais especializada quando precisamos de um objeto de certo tipo mas o contrário não é verdade. Por isso, se precisarmos fazer a conversão de volta ao tipo mais especializado, teremos que fazê-lo explicitamente. 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 63 Type Casting A conversão explícita de um objeto de um tipo para outro é chamada type casting. Point pt = new Pixel(0,0,1); // OK! pixel é ponto. Pixel px = (Pixel)pt; // OK! pt agora contém um pixel. pt = new Point(); px = (Pixel)pt; // ERRO! pt agora contém um ponto. pt = new Pixel(0,0,0); px = pt; // ERRO! pt não é sempre um pixel. 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 64

33 Mais Type Casting Note que, assim como o late binding, o type casting só pode ser resolvido em tempo de execução: só quando o programa estiver rodando é que poderemos saber o valor que uma dada variável terá e, assim, poderemos decidir se a conversão é válida ou não. 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 65 Subtipos: Verificação Dinâmica com instanceof... Conta c = this.procurar( 567-8"); if (c instanceof Poupanca) ((Poupanca) c).renderjuros(0.01); else System.out.print("Poupança inexistente!");...

34 Verificação Dinâmica de Tipos Casts einstanceof: ((Tipo) variável) variávelinstanceof Tipo O tipo de variável deve ser supertipo de Tipo O Cast ((Tipo) variável) gera uma exceção se variável instanceof Tipo retornar false Casts são essenciais para verificação estática de tipos (compilação) Objeto Conta Especial Crédito Saldo Número Bônus R. Bônus 875, ,60 Débito

35 Estados de uma Conta Especial Crédito(0) Crédito Crédito Crédito Saldo Número Bônus Saldo Número R. Bônus R. Bônus 875, ,60 875, Saldo 895,3 Número Bônus ,80 Débito Débito Débito Estados de uma Conta Especial R. Bônus() Crédito Crédito Crédito Saldo Número Bônus Saldo Número R. Bônus R. Bônus 875, ,80 875, Saldo 887,1 Número Bônus ,00 Débito Débito Débito

36 Contas Especiais: Assinatura public class ContaEspecial extends Conta { public ContaEspecial(String numero) { public void renderbonus() { public double getbonus() { public voidcreditar(double valor) { Contas Especiais: Descrição public class ContaEspecial extends Conta { private double bonus; public ContaEspecial(String numero) { super (numero); bonus = 0.0;

37 public void creditar(double valor) { bonus = bonus + (valor * 0.01); super.creditar(valor); public void renderbonus() { super.creditar(bonus); bonus = 0; public double getbonus() { return bonus; Redefinição de Métodos Preservação da assinatura: tipos dos argumentos e resultados da redefinição têm que ser iguais aos tipos da definição Semântica e Visibilidade dos métodos redefinidos deve ser preservada Só é possível acessar a definição dos métodos da superclasse imediata (via super)

38 Usando Contas Especiais... ContaEspecial contae; contae = new ContaEspecial("1.34-7"); contae.creditar(00.00); contae.debitar(100.00); contae.renderbonus(); System.out.print(contae.getSaldo());... Ligações Dinâmicas... Conta conta; conta = new ContaEspecial("1.34-7"); ((Conta)conta).creditar(00.00); conta.debitar(100.00); ((ContaEspecial) conta).renderbonus(); System.out.print(conta.getSaldo());...

39 Ligações Dinâmicas Conta conta; conta = new ContaEspecial("1.34-7"); ((Conta)conta).creditar(00.00); Como existe uma redefinição do método creditar na classe ContaEspecial,o Cast serve para informar a Java qual definição estamos interessados. 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 77 Ligações Dinâmicas Conta conta; conta = new ContaEspecial("1.34-7"); conta.debitar(100.00); Já o método debitar só existe na classe Conta, então Java acessa sua definição diretamente. 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 78

40 Ligações Dinâmicas Conta conta; conta = new ContaEspecial("1.34-7"); ((ContaEspecial) conta).renderbonus(); Finalmente, o método renderbonus só existe na classe ContaEspecial. Nesse caso, Java deve ser informado através de um Cast onde localizar sua definição. Se isso não for feito, uma exceção será gerada. 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 79 Ligações Dinâmicas Dois métodos com o mesmo nome e tipo: definição e redefinição, qual usar? O código é escolhido dinamicamente (em tempo de execução) e não estaticamente (em tempo de compilação) Escolha se dá baseado na classe do objeto associado à variável destino do método

41 Exercício Modifique a classe Banco para que seja possível computar o bônus de uma conta especial. Foi necessário redefinir algum método de Banco? Justifique a sua resposta. Classe Banco: Assinatura public class Banco { public Banco () { public void cadastrar(conta conta) { public void creditar(string numero, double valor) { public void debitar(string numero, double valor) { public double getsaldo(string numero) { public void transferir(string contaorigem, String contadestino, double valor) { 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 8

42 Classes Abstratas Ao criarmos uma classe para ser estendida, às vezes codificamos vários métodos usando um método para o qual não sabemos dar uma implementação, ou seja, um método que só subclasses saberão implementar. Uma classe desse tipo não deve poder ser instanciada pois sua funcionalidade está incompleta. Tal classe é dita abstrata. 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 83 Classes Abstratas em Java Java suporta o conceito de classes abstratas: podemos declarar uma classe abstrata usando o modificador abstract. Além disso, métodos podem ser declarados abstratos para que suas implementações fiquem adiadas para as sub-classes. Para tal, usamos o mesmo modificador abstract e omitimos a implementação. 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 84

43 Exemplo de Classe Abstrata public abstract class Drawing { public abstract void draw(); public abstract BBox getbbox(); public boolean contains(point p) { BBox b = getbbox(); return (p.x>=b.x && p.x<b.x+b.width && p.y>=b.y && p.y<b.y+b.height);... 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 85 Objeto Conta Imposto creditar saldo 875,3 numero debitar

44 Estados do Objeto Conta Imposto debitar(0) creditar Crédito creditar Crédito saldo numero getsaldo Número 875, , saldo numero getsaldo Número 854, , debitar Débito debitar Débito 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() {

45 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);

46 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...

47 Revisão/Otimização de Código... double m(conta c) { c.creditar(x); c.debitar(x); return c.getsaldo(); double m(conta c) { return c.getsaldo();... Modificação é correta? Em que contextos? 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

48 Reuso sem Subtipos Conta Poupança ContaImpostoM ContaEspecial Reuso preservando Subtipos ContaAbstrata Conta ContaImposto Poupanca ContaEspecial

49 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;

50 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);

51 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);...

52 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());...

53 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 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 105 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;... 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 106

54 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);... 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 107 Contato: Reuso e Subtipos Contato Endereco Telefone EndEletronico EndPostal

55 Contato: Projeto OO public abstract class Contato { private String tipo; public Contato (String tipo) { this.tipo = tipo;... public abstract String getinforotulo(); 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 109 Endereço: Projeto OO public abstract class Endereco extends Contato { public Endereco (String tipo) { super (tipo); 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 110

56 Endereço Eletrônico: Projeto OO public class EnderecoEletronico extends Endereco { private String ; public EnderecoEletronico(String ) { super ( EnderecoEletronico ); this. = ; public String getinforotulo() { return ( + ); 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva /1/00 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 +...); 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 11

57 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); 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 113 Pessoa: Reuso e Subtipos Pessoa PessoaJuridica PessoaFisica

58 Pessoa: Projeto OO public abstract class Pessoa { private String nome;... public abstract String getcodigo(); 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 115 Pessoa Física: Projeto OO public class PessoaFisica extends Pessoa { private String cpf;... public String getcodigo() { return cpf; 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 116

59 Pessoa Jurídica: Projeto OO public class PessoaJuridica extends Pessoa { private String cnpj;... public String getcodigo() { return cnpj; 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 117 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; 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 118

60 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

61 Interfaces 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 11 Herança: Simples Múltipla O tipo de herança que usamos até agora é chamado de herança simples pois cada classe herda de apenas uma outra. Existe também a chamada herança múltipla onde uma classe pode herdar de várias classes. 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 1

62 Herança Múltipla Herança múltipla não é suportada por todas as linguagens OO. Esse tipo de herança apresenta um problema quando construímos hierarquias de classes onde uma classe herda duas ou mais vezes de uma mesma superclasse. O que, na prática, torna-se um caso comum. 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 13 Problemas de Herança Múltipla O problema de herdar duas vezes de uma mesma classe vem do fato de existir uma herança de código. A B C D 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 14

63 Compatibilidade de Tipos Inúmeras vezes, quando projetamos uma hierarquia de classes usando herança múltipla, estamos, na verdade, querendo declarar que a classe é compatível com as classes herdadas. Em muitos casos, a herança de código não é utilizada. 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 15 Interfaces Algumas linguagens OO incorporam o conceito de duas classes serem compatíveis através do uso de compatibilidade estrutural ou da implementação explícita do conceito de interface. 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 16

64 Em Java Java não permite herança múltipla com herança de código. Java implementa o conceito de interface. É possível herdar múltiplas interfaces. Em Java, uma classe estende uma outra classe e implementa zero ou mais interfaces. Para implementar uma interface em uma classe, usamos a palavra implements. 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 17 Exemplo de Interface Ao implementarmos o TAD Pilha, poderíamos ter criado uma interface que definisse o TAD e uma ou mais classes que a implementassem. interface Stack { boolean isempty(); void push(int n); int pop(); int top(); 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 18

65 Membros de Interfaces Uma vez que uma interface não possui implementação, devemos notar que: seus campos devem ser públicos, estáticos e constantes; seus métodos devem ser públicos e abstratos. Como esses qualificadores são fixos, não precisamos declará-los (note o exemplo anterior). 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 19 Membros de Interfaces (cont.) Usando os modificadores explicitamente, poderíamos ter declarado nossa interface da seguinte forma: interface Stack { public abstract boolean isempty(); public abstract void push(int n); public abstract int pop(); public abstract int top(); 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 130

66 Pilha revisitada class StackImpl implements Stack { private int[] data; private int top_index; Stack(int size) { data = new int[size]; top_index = -1; public boolean isempty() { return (top_index < 0); public void push(int n) { data[++top_index] = n; public int pop() { return data[top_index--]; public int top() { return data[top_index]; 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 131 Auditor de Banco public class AuditorB { private final static double MINIMO = ; private String nome; /*... */ public boolean auditarbanco(banco banco) { double saldototal, saldomedio; int numerocontas; saldototal = banco.saldototal() numerocontas = banco.numerocontas(); saldomedio = saldototal/numerocontas; return (saldomedio < MINIMO);

67 Auditor de Banco Modular public class AuditorBM { private final static double MINIMO = ; private String nome; /*... */ public boolean auditarbanco(bancomodular banco){ double saldototal, saldomedio; int numerocontas; saldototal = banco.saldototal() numerocontas = banco.numerocontas(); saldomedio = saldototal/numerocontas; return (saldomedio < MINIMO); Problema Duplicação desnecessária de código O mesmo auditor deveria ser capaz de investigar qualquer tipo de banco que possua operações para calcular o número de contas, e o saldo total de todas as contas.

68 Auditor Genérico public class Auditor { private final static double MINIMO = ; private String nome; /*... */ public boolean auditarbanco(qualquerbanco banco){ double saldototal, saldomedio; int numerocontas; saldototal = banco.saldototal() numerocontas = banco.numerocontas(); saldomedio = saldototal/numerocontas; return (saldomedio < MINIMO); Definindo Interfaces public interface QualquerBanco { double saldototal(); int numcontas();

69 Interfaces Caso especial de classes abstratas... todos os métodos são abstratos provêem uma interface para serviços e comportamentos são qualificados como public por default não definem atributos definem constantes por default todos os atributos definidos em uma interface são qualificados como public, static e final não definem construtores 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 137 Interfaces Não se pode criar objetos Definem tipo de forma abstrata, apenas indicando a assinatura dos métodos Os métodos são implementados pelos subtipos (subclasses) Mecanismo de projeto podemos projetar sistemas utilizando interfaces projetar serviços sem se preocupar com a sua implementação (abstração) 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 138

70 Subtipos sem Herança de Código public class Banco implements QualquerBanco { /*... */ public class BancoModular implements QualquerBanco { /*... */ implements classe implements interface1, interface,... subtipo implements supertipo1, supertipo,... Múltiplos supertipos: uma classe pode implementar mais de uma interface (contraste com classes abstratas...)

71 implements Classe que implementa uma interface deve definir os métodos da interface: classes concretas têm que implementar os métodos classes abstratas podem simplesmente conter métodos abstratos correspondentes aos métodos da interface 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 141 Usando Auditores Banco b = new Banco(); BancoModular bm = new BancoModular(); Auditor a = new Auditor(); /*... */ boolean r = a.auditarbanco(b); boolean r = a.auditarbanco(bm); /*... */

72 Interfaces e Reusabilidade Evita duplicação de código através da definição de um tipo genérico, tendo como subtipos várias classes não relacionadas Tipo genérico pode agrupar objetos de várias classes definidas independentemente, sem compartilhar código via herança, tendo implementações totalmente diferentes Classes podem até ter mesma semântica... Definição de Classes: Forma Geral class C extends C implements I1, I,..., In { /*... */ I1 I C C... In

73 Subtipos com Herança Múltipla de Assinatura interface I extends I1, I,..., In { /*... assinaturas de novos métodos... */ O que usar? Quando? Classes (abstratas) Agrupa objetos com implementações compartilhadas Define novas classes através de herança (simples) de código Só uma pode ser supertipo de outra classe Interfaces Agrupa objetos com implementações diferentes Define novas interfaces através de herança (múltipla) de assinaturas Várias podem ser supertipo do mesmo tipo

74 Cadastro de Contas: Parametrização public class CadastroContas { private RepositorioContas contas; public CadastroContas (RepositorioContas r) { if (r!= null) contas = r; /*... */ 10/1/00 A estrutura para armazenamento das contas é fornecida na inicialização do cadastro, e pode depois ser trocada! 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 147 Repositório: Definição public interface RepositorioContas { void inserir(conta conta); Conta procurar(string numero); boolean existe(string numero); 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 148

75 Repositório: Implementações public class ConjuntoContas implements RepositorioContas {... public class ListaContas implements RepositorioContas {... public class ArrayContas implements RepositorioContas {... public class VectorContas implements RepositorioContas {... 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 149 Cadastro de Contas: Parametrização public void cadastrar(conta conta) { if (conta!= null) { String numero = conta.getnumero(); if (!contas.existe(numero)) { contas.inserir(conta); 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 150

76 Cadastro de Contas: Parametrização public void debitar(string numero, double valor){ Conta conta; conta = contas.procurar(numero); if (conta!= null) { conta.debitar(val); 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 151 Exercícios Que outros mecanismos de Java poderiam ter sido usados para definir o tipo RepositorioContas? Explique como o mecanismo de interfaces favorece reusabilidade e extensibilidade. Justifique.

77 Interfaces Resumo Cláusula interface Cláusula implements Herança de código versus herança de assinaturas Interfaces e parametrização de sistemas Parametrização de Tipos 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 154

78 Limites de Herança O mecanismo de herança que analisamos não resolve alguns problemas. Considere o TAD Pilha que implementamos: Ele define uma pilha de números inteiros mas isso não devia ser (e não é) necessário. Por exemplo, poderia ser útil ter uma pilha de inteiros e uma outra de Point. Podemos criar pilhas específicas mas não podemos criar todas as possíveis... 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 155 Herança Parametrização Uma alternativa a criar novas classes para cada diferente tipo de pilha que iremos usar é parametrizar a própria classe que implementa a pilha. Várias linguagens OO suportam parametrização de tipos. 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 156

79 Parametrização de Tipos Parametrizar um tipo significa passar o tipo a ser usada em alguma operação como um parâmetro. No caso da pilha, poderíamos passar o tipo dos elementos que pilha deveria conter como um parâmetro do construtor, por exemplo. 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 157 Tipos de Parametrização Existem dois tipos de parametrização: Irrestrita quando o tipo a ser usado é recebido e nada é assumido sobre esse tipo; Restrita quando assume-se que o tipo recebido atende a propriedade qualquer como, por exemplo, possuir uma função de comparação entre seus valores. 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 158

80 Parametrização em Java Java não provê suporte direto à construção de classes parametrizadas. Como Java adota o modelo de hierarquia em árvore, com uma superclasse comum a todas as classes, e, além disso, mantém as informações de tipo em tempo de execução, podemos simular um TAD paramétrico usando conversão de tipos. 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 159 Verificação de Tipos Para simularmos parametrização em Java podemos vir a precisar alguma forma de verificação de tipos em tempo de execução. Java mantém informações de tipo em tempo de execução e nos permite consultá-las. Point pt = new Point(); // pt contém um ponto boolean b = pt instanceof Pixel; // b = false pt = new Pixel(1,,3); // pt contém um pixel b = pt instanceof Pixel; // b = true 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 160

81 Simulando Parametrização Podemos mudar a definição do nosso TAD para especificar pilhas de objetos genéricos. interface Stack { boolean isempty(); void push(object obj); Object pop(); Object top(); 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 161 Aninhamento de Classes 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 16

82 Aninhamento de Classes Em diversas circunstâncias precisamos criar classes cujo único objetivo é auxiliar na implementação de uma outra classe. Nesses casos, podemos declarar uma classe aninhada, ou seja, declarar uma nova classe como um membro de uma outra. Diversas linguagens OO suportam esse recurso. 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 163 Aninhamento em Java Java permite dois tipos diferentes de aninhamento de tipos: Aninhamento estático; Aninhamento dinâmico. 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 164

83 Aninhamento Estático Gera classes e interfaces normais, cuja única singularidade é o nome, que passa a ser qualificado pelo nome da classe que as declara. Em particular, sendo um membro de uma classe, uma interface ou classe aninhada está sujeita aos modificadores de controle de acesso: public, private, protected e package. 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 165 Exemplo de Aninhamento Estático package p; public class A { public static class B {... p.a a = new p.a(); p.a.b b = new p.a.b(); 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 166

84 Aninhamento Dinâmico Gera classes associadas a objetos. Cada instância da classe aninhada possui uma referência para o objeto a partir do qual ela é criada. Como ela está associada a um objeto, ela tem acesso a todos os membros desse objeto. 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 167 Exemplo de Aninhamento Dinâmico class A { int i; class B { void g() {... void f() {... A void f() { B b = new B(); b.g(); B void g() { i = 1; 10/1/00 4 -Conceitos OO em Java Prof. Anselmo Cardoso de Paiva 168

Java First-Tier: Aplicações. Sobrecarga. Orientação a Objetos em Java (II) Sobrecarga de Construtores: Exemplo de Declaração

Java First-Tier: Aplicações. Sobrecarga. Orientação a Objetos em Java (II) Sobrecarga de Construtores: Exemplo de Declaração Java First-Tier: Aplicações Orientação a Objetos em Java (II) Grupo de Linguagens de Programação Departamento de Informática PUC-Rio Sobrecarga Um recurso usual em programação OO é o uso de sobrecarga

Leia mais

Programação Orientada a Objetos Classes Abstratas. Sérgio Soares

Programação Orientada a Objetos Classes Abstratas. Sérgio Soares Programação Orientada a Objetos Classes Abstratas Sérgio Soares scbs@cin.ufpe.br Até aqui Quando usar herança? Ao redefinir um método manter o comportamento herdado! 2 Adivinhem... Surge um novo requisito

Leia mais

Herança (parte 2) Redefinição de métodos AULA 11

Herança (parte 2) Redefinição de métodos AULA 11 Introdução a Programação IF669 http://www.cin.ufpe.br/~if669 Herança (parte 2) Redefinição de métodos AULA 11 Ricardo Massa F. Lima rmfl@cin.ufpe.br Sérgio C. B. Soares scbs@cin.ufpe.br Na aula passada

Leia mais

Classes Abstratas e Interfaces AULA 12

Classes Abstratas e Interfaces AULA 12 Introdução a Programação IF669 http://www.cin.ufpe.br/~if669 Classes Abstratas e Interfaces AULA 12 Ricardo Massa F. Lima rmfl@cin.ufpe.br Sérgio C. B. Soares scbs@cin.ufpe.br Até aqui Quando usar herança?

Leia mais

Java First-Tier: Aplicações. Herança: Simples Múltipla. Orientação a Objetos em Java (III) Problemas de Herança Múltipla.

Java First-Tier: Aplicações. Herança: Simples Múltipla. Orientação a Objetos em Java (III) Problemas de Herança Múltipla. Java First-Tier: plicações Orientação a Objetos em Java (III) Grupo de Linguagens de Programação Departamento de Informática PUC-Rio Herança: Simples Múltipla O tipo de herança que usamos até agora é chamado

Leia mais

Introdução à Programação. Encapsulamento e Herança

Introdução à Programação. Encapsulamento e Herança Introdução à Programação Encapsulamento e Herança Tópicos da Aula Hoje, aprenderemos conceitos mais avançados de Orientação a Objetos Encapsulamento Usando modificadores de acesso em C++ Herança Importância

Leia mais

Classe Abstrata e Interface

Classe Abstrata e Interface Orientação a objetos com Java Classe Abstrata e Interface Byron Leite byron.leite@gmail.com 1 Herança Agenda Geral Parte 04 Encapsulamento Pacotes Modificadores de Acesso private, default, protected, public

Leia mais

Paradigmas de Programação. Java First-Tier: Aplicações. Orientação a Objetos em Java (I) Nomenclatura. Paradigma OO. Nomenclatura

Paradigmas de Programação. Java First-Tier: Aplicações. Orientação a Objetos em Java (I) Nomenclatura. Paradigma OO. Nomenclatura Java First-Tier: Aplicações Orientação a Objetos em Java (I) Paradigmas de Programação Programação Funcional Programação Procedural Programação Orientada por Objetos Grupo de Linguagens de Programação

Leia mais

Classes e Objetos. Sintaxe de classe em Java

Classes e Objetos. Sintaxe de classe em Java Classes e Objetos Classes e Objetos A Programação Orientada a Objetos (POO) é uma técnica de programação que se baseia na construção de classes e utilização de objetos. Os objetos são formados por dados

Leia mais

Exceções AULA 13. Ricardo Massa F. Lima Sérgio C. B. Soares

Exceções AULA 13. Ricardo Massa F. Lima Sérgio C. B. Soares Introdução a Programação IF669 http://www.cin.ufpe.br/~if669 Exceções AULA 13 Ricardo Massa F. Lima rmfl@cin.ufpe.br Sérgio C. B. Soares scbs@cin.ufpe.br Exceções Objetivo Depois desta aula você será capaz

Leia mais

Especialização em Engenharia de Software

Especialização em Engenharia de Software Especialização em Engenharia de Software Programação Orientada a Objetos Conceitos gerais e array Sérgio Soares scbs@cin.ufpe.br Programação Orientada a Objetos Foco nos dados (objetos) do sistema, não

Leia mais

Programação. Orientada a Objetos: Herança. Objetos. Relacionamento entre classes. Análise e Projeto Orientados a. Objetos

Programação. Orientada a Objetos: Herança. Objetos. Relacionamento entre classes. Análise e Projeto Orientados a. Objetos Programação Orientada a Objetos: Herança Alexandre César Muniz de Oliveira Análise e Projeto Orientados a Objetos A análise orientada a objetos Determina o que o sistema deve fazer: Quais os atores envolvidos?

Leia mais

Programação Orientada a Objetos. Professor: André Luis Meneses Silva br.geocities.com/programacao2ufs

Programação Orientada a Objetos. Professor: André Luis Meneses Silva br.geocities.com/programacao2ufs Programação Orientada a Objetos Professor: André Luis Meneses Silva andreluis.ms@gmail.com br.geocities.com/programacao2ufs [ Conteúdo ] Objeto Mensagens Classe Encapsulamento Visibilidade Membros de Instância

Leia mais

Linguagem de Programação Orientada a Objeto Polimorfismo, Classes Abstractas e Interfaces

Linguagem de Programação Orientada a Objeto Polimorfismo, Classes Abstractas e Interfaces Linguagem de Programação Orientada a Objeto Polimorfismo, Classes Abstractas e Interfaces Professora Sheila Cáceres Polimorfismo Polimorfismo Polimorfismo é a característica única de linguagens orientadas

Leia mais

Linguagem de Programação III

Linguagem de Programação III Linguagem de Programação III Aula-7 Reutilização de Classes Prof. Esbel Tomás Valero Orellana Até Aqui Introdução a POO e sua implementação em Java Atributos, métodos e encapsulamento dos mesmos Trabalhando

Leia mais

Programação Java. Marco Fagundes. - Herança, Classes Abstratas e Interfaces Marco Fagundes -

Programação Java. Marco Fagundes. - Herança, Classes Abstratas e Interfaces Marco Fagundes - Programação Java - Herança, Classes Abstratas e Interfaces - Marco Fagundes mfagundes@tre-pa.gov.br 1 Tópicos Herança Ligação Dinâmica Polimorfismo 2 Herança Herança é um conceito que mapeia as classes

Leia mais

Herança. Herança. Herança. Herança. Herança. Programação Orientada a Objetos

Herança. Herança. Herança. Herança. Herança. Programação Orientada a Objetos e Ligação Dinâmica Programação Orientada a Objetos e Polimorfismo A é a contribuição original do paradigma de programação orientado a objetos Fundamentos chave do paradigma OO: Abstração de Dados A herança

Leia mais

Herança. Prof. Fernando V. Paulovich 23 de agosto de 2010

Herança. Prof. Fernando V. Paulovich  23 de agosto de 2010 Herança SCC0604 - Programação Orientada a Objetos Prof. Fernando V. Paulovich http://www.icmc.usp.br/~paulovic paulovic@icmc.usp.br Instituto de Ciências Matemáticas e de Computação(ICMC) Universidade

Leia mais

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação 4 Conceito de Herança Hierarquia de classes e mecanismo de ligação Herança Uma classe pode herdar operações de uma superclasse e as suas operações podem ser herdadas por subclasses. O mecanismo de herança

Leia mais

Lista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; }

Lista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; } Lista 05 Herança 1. Analisando a classe Java abaixo podemos observar que a mesma possui apenas um atributo, um construtor e dois métodos. Perceba que dentro do método main estão sendo invocados métodos

Leia mais

C com introdução a OO

C com introdução a OO ... Centro Integrado de Tecnologia da Informação C com introdução a OO ... Centro Integrado de Tecnologia da Informação Aula 9 Ronald Dener - Instrutor Matheus Soares - Monitor 17 / outubro 17 / outubro

Leia mais

Laboratório de programação II

Laboratório de programação II Laboratório de programação II Herança e Polimorfismo Edson Moreno edson.moreno@pucrs.br http://www.inf.pucrs.br/~emoreno Herança Mecanismo da Orientação a Objeto que permite criar novas classes aproveitando

Leia mais

Introdução à Programação. Conceitos Básicos de Orientação a Objetos

Introdução à Programação. Conceitos Básicos de Orientação a Objetos Introdução à Programação Conceitos Básicos de Orientação a Objetos Tópicos da Aula Aprenderemos fundamentos do paradigma orientado a objetos, mas antes veremos o que é paradigma Conceito de paradigma Diferentes

Leia mais

Introdução. LP OO desenvolvida pela Sun no início da década de 90 com sintaxe semelhente a C\C++. C C++.

Introdução. LP OO desenvolvida pela Sun no início da década de 90 com sintaxe semelhente a C\C++. C C++. Java Parte I mleal@inf.puc-rio.br 1 Introdução LP OO desenvolvida pela Sun no início da década de 90 com sintaxe semelhente a C\C++. C C++. Todos os programas Java são compilados e interpretados. O compilador

Leia mais

Programação por Objectos. Java

Programação por Objectos. Java Programação por Objectos Java Parte 6: Herança e Polimorfismo LEEC@IST Java 1/50 Herança revisão (1) A herança é um mecanismo em que a subclasse constitui uma especialização da superclasse. A superclasse

Leia mais

Revisão OO Básico. Orientação a Objetos em Java

Revisão OO Básico. Orientação a Objetos em Java Revisão OO Básico Orientação a Objetos em Java Grupo de Linguagens de Programação Departamento de Informática PUC-Rio Nomenclatura A unidade básica de programação em linguagens orientadas a objetos é a

Leia mais

Recapitulando. Construtores: (Overload assinatura) public Circle() {...} public Circle(double x, double y, double r) {... }

Recapitulando. Construtores: (Overload assinatura) public Circle() {...} public Circle(double x, double y, double r) {... } Recapitulando Orientação a objetos: programas organizados em torno da definição de classes, instanciação de objetos e troca de mensagens. Declaração de variáveis de referencia: Circle c; Criação/instanciação

Leia mais

Palavras Reservadas da Linguagem Java

Palavras Reservadas da Linguagem Java Palavras Reservadas da Linguagem Java Palavras Reservadas da Linguagem Java: Categorias Tipos de dados primitivos Literais Pseudo-variáveis Desvio e controle de fluxo Pacotes Exceções Modificadores de

Leia mais

Programação Java. - Herança e Polimorfismo - Marco Fagundes Marco Fagundes -

Programação Java. - Herança e Polimorfismo - Marco Fagundes Marco Fagundes - Programação Java - Herança e Polimorfismo - Marco Fagundes mfagundes@tre-pa.gov.br 1 Tópicos Herança Ligação Dinâmica Polimorfismo 2 Herança Herança é um conceito que mapeia as classes relacionadas entre

Leia mais

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan Introdução a classes e objetos Prof. Marcelo Roberto Zorzan Herança Aula de Hoje Problema Considere uma empresa que tenha tipos de empregados no aplicativo de folha de pagamento Um empregado tem nome,

Leia mais

4 Conceito de Herança

4 Conceito de Herança 4 Conceito de Herança Hierarquia de classes e mecanismo de ligação Herança Uma classe pode herdar operações de uma superclasse e as suas operações podem ser herdadas por subclasses. O mecanismo de herança

Leia mais

nome = n; cargo = c; salario = s; public void print() { System.out.println(nome cargo salario); public void aumento( double fator){

nome = n; cargo = c; salario = s; public void print() { System.out.println(nome cargo salario); public void aumento( double fator){ UNIVERSIDADE FEDERAL DE SANTA CATARINA - Departamento de Automação e Sistemas PROGRAMAÇÃO DE SISTEMAS AUTOMATIZADOS - 2016/2 - P2 Nome: ------------------------------------------------------------------------------------------------------

Leia mais

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Programação Orientada a Objectos - P. Prata, P. Fazendeiro 9 Classes Abstractas e Interfaces Classe Abstracta Classe em que pelo menos um dos métodos de instância não é implementado. Exemplo: public abstract class Forma{ public abstract double area(); public abstract

Leia mais

Herança. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

Herança. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno. Universidade Católica de Pernambuco Ciência da Computação Prof. Márcio Bueno poonoite@marciobueno.com Fonte: Material da Profª Karina Oliveira Possibilita o reuso de classes (código-fonte) Usar quando:

Leia mais

Programação por Objectos. Java

Programação por Objectos. Java Programação por Objectos Java Parte 7: Interfaces LEEC@IST Java 1/31 Interfaces revisão (1) Uma interface é um conjunto de protótipos de métodos (sem implementações) que especifica um serviço bem definido:

Leia mais

Modelo do Mundo Real. Abstração. Interpretação

Modelo do Mundo Real. Abstração. Interpretação Modelo do Mundo Real Mundo Real Abstração Interpretação Sistema de Software Modelo Algoritmo Abstração: O modelo precisa capturar apenas as características do mundo real que são importantes para o sistema

Leia mais

Programação Orientada a Objetos Flávio de Oliveira Silva 144

Programação Orientada a Objetos Flávio de Oliveira Silva 144 HERANÇA Herança é a capacidade de uma subclasse de ter acesso as propriedades da superclasse(também chamada classe base) relacionada a esta subclasse. Dessa forma os atributos e métodos de uma classe são

Leia mais

Introdução à Programação. Interface, Polimorfismo e Dynamic Binding

Introdução à Programação. Interface, Polimorfismo e Dynamic Binding Introdução à Programação Interface, Polimorfismo e Dynamic Binding Interface Programador Java PLENO Possuir sólida experiência em programação Desenvolvimento na linguagem JAVA Webservice, Struts ou JSF(desejável)

Leia mais

Programação Orientada a Objetos. Vagner Luz do Carmo - Vluzrmos

Programação Orientada a Objetos. Vagner Luz do Carmo - Vluzrmos Programação Orientada a Objetos Vagner Luz do Carmo - Vluzrmos Questão 1 Dada a seguinte classe na linguagem JAVA: public class Carro { public String retornacor(){ ; return Azul ; private String retornachassi(){

Leia mais

Paradigmas de Linguagens de Programação. Suporte para Programação Orientada a Objeto

Paradigmas de Linguagens de Programação. Suporte para Programação Orientada a Objeto Suporte para Programação Orientada a Objeto Cristiano Lehrer Categoria das Linguagens que Suportam POO Suporte a POO acrescentado a uma linguagem já existente: C++ (também suporta programação procedural

Leia mais

Herança Tiago Eugenio de Melo

Herança Tiago Eugenio de Melo Herança Tiago Eugenio de Melo tiago@comunidadesol.org Herança Conceito: Herança é a capacidade de especializar tipos de objetos (classes), de forma que os tipos especializados contenham, além de características

Leia mais

Linguagens de Programação Aula 12

Linguagens de Programação Aula 12 Linguagens de Programação Aula 12 Celso Olivete Júnior olivete@fct.unesp.br Na aula passada Implementando subprogramas 2 Na aula de hoje Suporte para a programação orientada a objetos 3 Roteiro Introdução

Leia mais

Ex: carro_desportivo poderá ser uma subclasse de automóvel (carro_desportivo é_um automóvel)

Ex: carro_desportivo poderá ser uma subclasse de automóvel (carro_desportivo é_um automóvel) Herança capacidade de uma classe (subclasse) herdar, adquirir atributos e funcionalidades de outra classe (superclasse), podendo juntar algumas especificidades e/ou alterar outras. Existe uma relação tipo

Leia mais

Polimorfismo e Ligação Dinâmica. Alcides Pamplona Polimorfismo e Ligação Dinâmica

Polimorfismo e Ligação Dinâmica. Alcides Pamplona Polimorfismo e Ligação Dinâmica Alcides Pamplona Linguagem de Programação CESBD 2010 Alcides Pamplona alcides.pamplona@gmail.com Tópicos Ligação Dinamica Polimorfismo Verificação Dinâmica de Tipos 2 Introdução A vinculação ou ligação

Leia mais

Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição

Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição Lista de Contas Lista de Contas: Assinatura null Quais são os métodos necessários? class ListaDeContas { void inserir (Conta c) { void retirar (Conta c) { Conta procurar (String num) { Listas de Contas:

Leia mais

Programação Orientada a Objetos C ++ 4 Conceitos de OO em Java Classes e Objetos. Departamento de Informática Prof. Anselmo C.

Programação Orientada a Objetos C ++ 4 Conceitos de OO em Java Classes e Objetos. Departamento de Informática Prof. Anselmo C. Programação Orientada a Objetos C ++ 4 Conceitos de OO em Java Classes e Objetos Departamento de Informática Prof. Anselmo C. de Paiva Classes O conjunto de requisições que um objeto pode cumprir é determinado

Leia mais

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação 4 Conceito de Herança Hierarquia de classes e mecanismo de ligação Herança Uma classe pode herdar operações de uma superclasse e as suas operações podem ser herdadas por subclasses. O mecanismo de herança

Leia mais

Estrutura de Dados Funções e Procedimentos

Estrutura de Dados Funções e Procedimentos Estrutura de Dados Funções e Procedimentos Prof. Salustiano Rodrigues de Oliveira saluorodrigues@gmail.com www.profsalu.wordpress.com Java A linguagem Java utiliza o paradigma de programação orientada

Leia mais

9 Classes Abstractas e Interfaces

9 Classes Abstractas e Interfaces 9 Classes Abstractas e Interfaces Classe Abstracta Classe em que pelo menos um dos métodos de instância não é implementado. Exemplo: public abstract class Forma{ public abstract double area(); public abstract

Leia mais

Instituto de Informática Estrutura de Dados II

Instituto de Informática Estrutura de Dados II Instituto de Informática Estrutura de Dados II Revisão de Métodos em Classes Aplicada a Estrutura de Dados Básicas 20/08/2018 Profa. Lucília Gomes Ribeiro Prof. Dirson S Campos Programação em Java q O

Leia mais

Herança. Fátima L. S. Nunes Luciano A. Digiampietri Norton T. Roman SISTEMAS DE INFORMAÇÃO 1

Herança. Fátima L. S. Nunes Luciano A. Digiampietri Norton T. Roman SISTEMAS DE INFORMAÇÃO 1 Herança Fátima L. S. Nunes Luciano A. Digiampietri Norton T. Roman 1 1 1 Motivação Você está desenvolvendo um sistema de gerenciamento de pessoal para a USP Precisa fazer: Cadastro de alunos e professores

Leia mais

Herança e Propriedades

Herança e Propriedades Herança e Propriedades 2013 O que veremos hoje? Herança e Propriedades Transparências baseadas no material do Prof. Gilbert Azevedo e Prof. Jailton Carlos Objetivos Conceito de Herança em POO Herança Herança

Leia mais

AULA 8 Polimorfismo de: coerção, overloading, inclusão e paramétrico Prof. Dr. Fernando Henrique Campos

AULA 8 Polimorfismo de: coerção, overloading, inclusão e paramétrico Prof. Dr. Fernando Henrique Campos Câmpus Santa Helena Curso: Ciência da Computação Disciplina: Programação Orientada a Objetos AULA 8 Polimorfismo de: coerção, overloading, inclusão e paramétrico Prof. Dr. Fernando Henrique Campos Tema

Leia mais

Orientação a objetos. Programação. Orientada a Objetos. Orientação a objetos. Orientação a objetos. Abstração e encapsulamento

Orientação a objetos. Programação. Orientada a Objetos. Orientação a objetos. Orientação a objetos. Abstração e encapsulamento Orientação a objetos Programação Orientada a Objetos Alexandre César Muniz de Oliveira Linguagens orientadas a procedimentos e linguagens orientadas a objetos Unidade de programação: funções e classes

Leia mais

Linguagem de Programação III

Linguagem de Programação III Linguagem de Programação III Aula-4 Construtores e Sobrecarga Prof. Esbel Tomás Valero Orellana Até Aqui Modelos e POO Classes e sua implementação em Java Encapsulamento Tipos de dados nativos em Java

Leia mais

Linguagem de Programação II Implementação

Linguagem de Programação II Implementação Linguagem de Programação II Implementação Prof. Alessandro Borges 2 Tópicos Implementação em Java Variáveis Palavras reservadas Pacotes Identificador this Acessando membros de outros objetos API Java Nossa

Leia mais

Herança e passagem de parâmetro AULA 09

Herança e passagem de parâmetro AULA 09 Itrodução a Programação IF669 http://www.ci.ufpe.br/~if669 Heraça e passagem de parâmetro AULA 09 Ricardo Massa F. Lima rmfl@ci.ufpe.br Sérgio C. B. Soares scbs@ci.ufpe.br Itrodução Imagie que temos uma

Leia mais

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Programação Orientada a Objectos - P. Prata, P. Fazendeiro 7 Classes Abstractas e Interfaces Classe Abstracta Classe em que pelo menos um dos métodos de instância não é implementado. Exemplo: public abstract class Forma{ public abstract double area(); public abstract

Leia mais

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS Departamento de Informática PUC-Rio Ivan Mathias Filho ivan@inf.puc-rio.br Programa Capítulo 5 Conversão de Tipos Polimorfismo O Modificador final O Modificador

Leia mais

Interfaces POO. Prof. Marcio Delamaro

Interfaces POO. Prof. Marcio Delamaro Interfaces POO Prof. Marcio Delamaro Programação Orientada a Objetos Prof Marcio Delamaro ICMC/USP 1/41 O que é interface É um template de classe Outras classes podem seguir esse template Chamamos isso

Leia mais

Conceitos Básicos de Orientação a Objetos e Strings AULA 08

Conceitos Básicos de Orientação a Objetos e Strings AULA 08 Introdução a Programação IF669 http://www.cin.ufpe.br/~if669 Conceitos Básicos de Orientação a Objetos e Strings AULA 08 Ricardo Massa F. Lima rmfl@cin.ufpe.br Sérgio C. B. Soares scbs@cin.ufpe.br Até

Leia mais

Computação II Orientação a Objetos

Computação II Orientação a Objetos Computação II Orientação a Objetos Fabio Mascarenhas - 2016.2 http://www.dcc.ufrj.br/~fabiom/java Classes abstratas Até agora, usamos interfaces toda vez que queríamos representar algum conceito abstrato

Leia mais

p Ja usamos, por diversas vezes, a classe String. Vimos o sistema de pacotes do Java e nunca precisamos dar um import nessa classe.

p Ja usamos, por diversas vezes, a classe String. Vimos o sistema de pacotes do Java e nunca precisamos dar um import nessa classe. Pacote java.lang 1 java.lang p Ja usamos, por diversas vezes, a classe String. Vimos o sistema de pacotes do Java e nunca precisamos dar um import nessa classe. p Isso ocorre porque ela está dentro do

Leia mais

Programação Orientada a Objetos

Programação Orientada a Objetos Programação Orientada a Objetos Herança e Polimorfismo Prof. Francisco de Assis S. Santos, Dr. São José, 2015. Herança em POO O conceito de herança torna mais rápido o desenvolvimento de softwares complexos

Leia mais

Linguagem de Programação II Programação Orientada a Objetos. Orientação a Objetos

Linguagem de Programação II Programação Orientada a Objetos. Orientação a Objetos Linguagem de Programação II Programação Orientada a Objetos Orientação a Objetos Prof. Alessandro Borges 2 Tópicos Introdução à Programação Orientada a Objetos Conceitos Objetivos Classes e Objetos Atributos

Leia mais

Programação Orientada a Objetos. SANTOS, Rafael (PLT) e Guia de Estudo SCJP. SIERRA, Kathy e BATES, Bert

Programação Orientada a Objetos. SANTOS, Rafael (PLT) e Guia de Estudo SCJP. SIERRA, Kathy e BATES, Bert Programação Orientada a Objetos. SANTOS, Rafael (PLT) e Guia de Estudo SCJP. SIERRA, Kathy e BATES, Bert Há situações em que não deve haver instâncias de determinadas classes Há modelos incompletos que

Leia mais

JAVA. Professor: Bruno Toledo

JAVA. Professor: Bruno Toledo JAVA Professor: Bruno Toledo Aplicando Orientação a Objetos com Java Abstração em Programação JAVA é Orientado a Objetos Até é possível usar Java sem OO, mas... Perderá todas as vantagens que o paradigma

Leia mais

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan Prof a. Rachel Reis

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan Prof a. Rachel Reis Introdução a classes e objetos Prof. Marcelo Roberto Zorzan Prof a. Rachel Reis Estruturas de Seleção if... else Operador condicional (? : ) switch Aula de Hoje Estruturas de Repetição: while/do... while/for

Leia mais

Conceitos de Programação Orientada a Objetos

Conceitos de Programação Orientada a Objetos Conceitos de Programação Orientada a Objetos Tatyana Bitencourt Com as técnicas de orientação a objeto, é possível obter resultados considerados impossíveis pensando de maneira estruturada. Como Java não

Leia mais

Aula 5 POO 1 Encapsulamento. Profa. Elaine Faria UFU

Aula 5 POO 1 Encapsulamento. Profa. Elaine Faria UFU Aula 5 POO 1 Encapsulamento Profa. Elaine Faria UFU - 2019 Sobre o Material Agradecimentos Aos professores José Gustavo e Fabiano, por gentilmente terem cedido seus materiais. Os slides consistem de adaptações

Leia mais

Interfaces e Classes Abstratas

Interfaces e Classes Abstratas Interfaces e Classes Abstratas José Gustavo de Souza Paiva Problema Método obterarea()? Classes Abstratas Classes que funcionam como um molde Declarada com comando abstract Contém um ou mais métodos abstratos

Leia mais

Programação Orientada a Objetos

Programação Orientada a Objetos Programação Orientada a Objetos Prof. André Gustavo Duarte de Almeida andre.almeida@ifrn.edu.br www3.ifrn.edu.br/~andrealmeida Aula VIII Herança e Interface Roteiro Herança Classes Abstratas Interface

Leia mais

Iteradores. Iteradores. Isabel Harb Manssour. Roteiro. Coleções

Iteradores. Iteradores. Isabel Harb Manssour. Roteiro. Coleções Implementação de Genéricos, Iteradores Isabel Harb Manssour Porto Alegre, maio de 2006 Roteiro Implementação de Genéricos Coleções Conceito de Genérico Implementação Iteradores Conceito Utilização ForEach

Leia mais

A B Classe Genérica D A C. Classe Especializada. Classe Especializada. Características Herdadas

A B Classe Genérica D A C. Classe Especializada. Classe Especializada. Características Herdadas Herança e Polimorfismo Prof. Bruno Gomes bruno.gomes@ifrn.edu.br Programação Orientada a Objetos Revisando -Herança Estrutura Hierárquica e modular Projeção de classes genéricas que podem ser especializadas

Leia mais

Modificadores de Acesso e Atributos de Classe

Modificadores de Acesso e Atributos de Classe Modificadores de Acesso e Atributos de Classe 1 Controlando o acesso p Um dos problemas mais simples que temos no nosso sistema de contas é que o método saca permite sacar mesmo que o limite tenha sido

Leia mais

[Desenvolvimento OO com Java] Modificadores de acesso e atributos de classe

[Desenvolvimento OO com Java] Modificadores de acesso e atributos de classe Centro Tecnológico Departamento de Informática Prof. Vítor E. Silva Souza http://www.inf.ufes.br/~vitorsouza Este obra está licenciada com uma licença Creative Commons Atribuição- CompartilhaIgual 4.0

Leia mais

POO29004 Programação Orientada a Objetos

POO29004 Programação Orientada a Objetos POO29004 Programação Orientada a Objetos Herança Prof. Emerson Ribeiro de Mello Instituto Federal de Santa Catarina IFSC campus São José mello@ifsc.edu.br http://docente.ifsc.edu.br/mello/poo 11 de setembro

Leia mais

Unidade: Classes Abstratas, Polimorfismo, Sobreposição e Interfaces

Unidade: Classes Abstratas, Polimorfismo, Sobreposição e Interfaces Unidade: Classes Abstratas, Polimorfismo, Sobreposição e Interfaces 0 Unidade: Classes Abstratas, Polimorfismo, Sobreposição e Interfaces Classes Abstratas À medida que você sobe na hierarquia de herança,

Leia mais

Unidade: sobrecarga, construtores e herança

Unidade: sobrecarga, construtores e herança Unidade: sobrecarga, construtores e herança 0 Unidade: sobrecarga, construtores e herança Sobrecarga Sobrecarregar (do inglês overload) um método é criar mais métodos com o mesmo nome, porém com assinaturas

Leia mais

Introdução. Atributos em Java. Atributos. Acesso à atributos em Java. Atributo versus variável. Atributos, métodos e encapsulamento.

Introdução. Atributos em Java. Atributos. Acesso à atributos em Java. Atributo versus variável. Atributos, métodos e encapsulamento. Introdução Atributos, métodos e encapsulamento joao@ecomp.uefs.br Atributos Ipos de acesso: private, public, protected e default Encapsulamento Métodos Construtores Criando objetos Departamento de Ciências

Leia mais

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Programação Orientada a Objectos - P. Prata, P. Fazendeiro 3 Classes e instanciação de objectos (em Java) Suponhamos que queremos criar uma classe que especifique a estrutura e o comportamento de objectos do tipo Contador. As instâncias da classe Contador devem

Leia mais

Java para Desktop. Programação Orientada à Objetos 2 JSE

Java para Desktop. Programação Orientada à Objetos 2 JSE Java para Desktop Programação Orientada à Objetos 2 JSE Encapsulamento significa "ocultar informações, ele define que cada objeto contém todos os detalhes de implementação necessários sobre como ele funciona

Leia mais

POO e C++: Herança e Polimorfismo

POO e C++: Herança e Polimorfismo POO e C++: Herança e Polimorfismo Márcio Santi Luiz Fernando Martha Conceito de Herança em POO Recurso que torna o conceito de classe mais poderoso; Permite que se construa e estenda continuamente classes

Leia mais

Herança e Polimorfismo - Parte II -

Herança e Polimorfismo - Parte II - Herança e Polimorfismo - Parte II - Programação Orientada a Objetos Java Prof. Geraldo Braz Junior A hierarquia do exemplo DoME 2 Saída incompleta O que queremos CD: A Swingin' Affair (64 mins)* Frank

Leia mais

Aula 9 Herança. Prof. Jefersson Alex dos Santos

Aula 9 Herança. Prof. Jefersson Alex dos Santos Aula 9 Herança Prof. Jefersson Alex dos Santos Roteiro Introdução Conversão de tipo explícita (Cast) Acesso Protegido A classe Object A classe Class Reflexão Recomendações de Projeto Herança Técnica necessária

Leia mais

Orientação a Objetos e Java

Orientação a Objetos e Java Orientação a Objetos e Java Daves Martins davesmartins@yahoo.com.br Mestre em Computação de Alto Desempenho pela UFRJ Especialista em Banco de Dados Analista Web Orientação a Objetos e Java Características

Leia mais

Organização do sistema em camadas. Projeto

Organização do sistema em camadas. Projeto Introdução a Programação IF669 http://www.cin.ufpe.br/~if669 Organização do sistema em camadas Projeto Ricardo Massa F. Lima rmfl@cin.ufpe.br Sérgio C. B. Soares scbs@cin.ufpe.br Separação de Preocupações

Leia mais

Polimorfismo. O que é polimorfismo?

Polimorfismo. O que é polimorfismo? O que é polimorfismo? Polimorfismo Significa que variáveis podem referenciar mais do que um tipo. Não é um conceito novo e várias linguagens de programação aplicam. Funções são polimórficas quando seus

Leia mais

Orientação a Objetos - Herança

Orientação a Objetos - Herança Orientação a Objetos - Herança 1 Repetindo Código p Todo banco tem funcionário. A classe funcionario ficaria da seguinte forma; class Funcionario { String nome; String cpf; double salario; // métodos devem

Leia mais

Notas de Aula 04: Herança e polimorfismo.

Notas de Aula 04: Herança e polimorfismo. Notas de Aula 04: Herança e polimorfismo. Objetivos da aula: Introduzir o conceito de Heranças Criar uma hierarquia de classes Rever o uso de modificadores de acesso. Apresentar o conceito de polimorfismo

Leia mais

Vejamos o seguinte exemplo public class Exemplo private int testada = 20; public void testapalavra(int testada) JOptionPane.showMessageDialog(null,"Pa

Vejamos o seguinte exemplo public class Exemplo private int testada = 20; public void testapalavra(int testada) JOptionPane.showMessageDialog(null,Pa Palavra reservada this Em Java podemos ter um parâmetro de um método e um atributo de uma classe com o mesmo nome. Caso façamos uma referência a esta variável, pelo princípio da localidade estaremos referenciando

Leia mais

UNIDADE 5 Aplicação dos Conceitos de Orientação a Objetos

UNIDADE 5 Aplicação dos Conceitos de Orientação a Objetos UNIDADE 5 Aplicação dos Conceitos de Orientação a Objetos Objetivo da Unidade*: Conhecer e aplicar os conceitos mais importantes associados a orientação a objetos. 5.1 Métodos e atributos estáticos Atributos

Leia mais

Programação por Objectos. Java

Programação por Objectos. Java Programação por Objectos Java Parte 5: Associações LEEC@IST Java 1/32 Associação revisão Uma associação representa uma referência entre objectos. Numa associação são definidos: Identificador termo descritivo

Leia mais

Tipos, Literais, Operadores

Tipos, Literais, Operadores Tipos, Literais, Operadores Identificadores São palavras utilizadas para nomear variáveis, métodos e classes Na linguagem Java, o identificador sempre começa por letra, sublinhado(_) ou cifrão ($) Não

Leia mais

Tipos, Literais, Operadores

Tipos, Literais, Operadores Tipos, Literais, Operadores Identificadores São palavras utilizadas para nomear variáveis, métodos e classes Na linguagem Java, o identificador sempre começa por letra, sublinhado(_) ou cifrão ($) Não

Leia mais

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Programação Orientada a Objectos - P. Prata, P. Fazendeiro 5 Polimorfismo Sobrecarga (overloading) de métodos: public class x { public void m1( ) {... sobrecarga do método m1 public void m1 ( int p ) {... - Diz-se que o nome de um método foi sobrecarregado ( overloaded

Leia mais

Prof. Vicente Paulo de Camargo UML - INTRODUÇÃO UML = Unified Modeling Language = linguagem de modelagem de sistemas Permite especificar, visualizar e documentar modelos de software orientados a objetos

Leia mais