0
Aula 10
Encapsulação
Cópia de instâncias
Igualdade de instâncias
Da aula anterior…
Operação toString
Classes, instâncias e objectos
Leituras com Scanner
2010/2011
Introdução à Programação...
Encapsulação
Aplica ocultação de informação a elemento de linguagem
Oculta implementação e revela interface
Produtores: ac...
Interface vs. implementação
Interface
Como se usa?
O que faz?
Qual o contrato entre produtor e consumidor?
Implementação
C...
Encapsulação: vantagens
Implementação pode mudar sem afectar consumidores
Produtores podem garantir bom comportamento dos ...
Encapsulação: interface
Métodos e rotinas
Cabeçalho apenas
Classes
Operações
Propriedades
…
2010/2011
Introdução à Program...
Encapsulação: implementação
Métodos e rotinas
Corpo apenas
Classes
Métodos auxiliares
Métodos enquanto implementação de op...
Encapsulação: rotinas
2010/2011
Introdução à Programação - DCTI - ISCTE-IUL
8
{
if (m == 0 && n == 0)
thrownew IllegalArgumentException("Illegal call with " +
"m = 0 and n = 0.&...
/**
 * Returns the greatest common divisor (GCD) of two integer numbers.
 *
 * @param m first of the two integer numbers w...
Encapsulação: classes
2010/2011
Introdução à Programação - DCTI - ISCTE-IUL
11
{
this.abscissa = abscissa;
this.ordinate = ordinate;
    }
{
returnabscissa;
    }
{
returnordinate;
    }
{
returnMath.s...
publicclassPoint {
publicPoint(finaldoubleabscissa, finaldoubleordinate) {
rho = Math.sqrt(abscissa * abscissa + ordinate ...
Controlo de acesso
Pode-se controlar acesso a membros de classes
Usam-se modificadores de acesso
public
protected
private
...
Encapsulação: controlo de acesso
2010/2011
Introdução à Programação - DCTI - ISCTE-IUL
15
Encapsulação: propriedades
Propriedades são interface (inspectores e modificadores)
Exemplo
publicclass Rational {
    …
p...
Encapsulação: atributos
Atributos são implementação
Exemplo
publicclass Rational {
    …
privateintnumerator;
privateintde...
Encapsulação: métodos auxiliares
Métodos auxiliares são implementação
Exemplo
publicclass Rational {
public Rational(final...
Cópia de instâncias
Cópia com inicialização e atribuição afecta apenas referências!
Necessário construtor por cópia
public...
Igualdade de instâncias
Operador == com referências verifica identidade e não igualdades!
Necessária operação!
publicclass...
A reter
Encapsulação em Java
Abstracção
Módulos em Java
Interface vs. implementação
Modificadores de acesso public eprivat...
A ler...
Capítulos 8 e 9 do livro:
Y. Daniel Liang, Introduction to Java Programming, 8.ª edição, Prentice-Hall, 2010. ISB...
Sumário
Encapsulamento
Cópia de instâncias
Igualdade entre instâncias
2010/2011
Introdução à Programação - DCTI - ISCTE-IU...
Upcoming SlideShare
Loading in...5
×

Semana 10: Encapsulação, cópia de instâncias, igualdade de instâncias

1,200

Published on

Apresentação da semana 10 da unidade curricular de Introdução à Programação do DCTI do ISCTE-IUL. Alterações de Manuel Menezes de Sequeira sobre versão original por vários autores do DCTI, incluindo Luís Nunes e André Santos.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,200
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
75
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Transcript of "Semana 10: Encapsulação, cópia de instâncias, igualdade de instâncias"

  1. 1. Aula 10 Encapsulação Cópia de instâncias Igualdade de instâncias
  2. 2. Da aula anterior… Operação toString Classes, instâncias e objectos Leituras com Scanner 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 2
  3. 3. Encapsulação Aplica ocultação de informação a elemento de linguagem Oculta implementação e revela interface Produtores: acesso exclusivoà implementação Consumidores: acedem apenas a interface Resultado são módulos Rotinas Objectos/classes Pacotes 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 3 Ou “encapsulamento”. A ver mais tarde.
  4. 4. Interface vs. implementação Interface Como se usa? O que faz? Qual o contrato entre produtor e consumidor? Implementação Como funciona? Qual o mecanismo? 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 4
  5. 5. Encapsulação: vantagens Implementação pode mudar sem afectar consumidores Produtores podem garantir bom comportamento dos módulos Mais fácil localizar erros Mais fácil corrigir erros Facilita abstracção do consumidor! 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 5
  6. 6. Encapsulação: interface Métodos e rotinas Cabeçalho apenas Classes Operações Propriedades … 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 6
  7. 7. Encapsulação: implementação Métodos e rotinas Corpo apenas Classes Métodos auxiliares Métodos enquanto implementação de operações Atributos … 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 7
  8. 8. Encapsulação: rotinas 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 8
  9. 9. { if (m == 0 && n == 0) thrownew IllegalArgumentException("Illegal call with " + "m = 0 and n = 0."); m = Math.abs(m); n = Math.abs(n); if (m == 0 || n == 0) return Math.max(m, n); intpossibleGcd = Math.min(m, n); while (m % possibleGcd != 0 || n % possibleGcd != 0) possibleGcd--; returnpossibleGcd; } /** * Returns the greatest common divisor (GCD) of two integer numbers. * * @param m first of the two integer numbers whose GCD will be returned. * @param n second of the two integer numbers whose GCD will be returned. * @return the greatest common divisor of m and n. * @pre m ≠ 0 ∨n ≠ 0 * @post gcd = gcd(m, n) */ publicstaticintgcd(intm, intn) 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 9 Interface: o que faz, contrato. { if (m == 0 && n == 0) thrownew IllegalArgumentException("Illegal call with " + "m = 0 and n = 0."); m = Math.abs(m); n = Math.abs(n); if (m == 0 || n == 0) return Math.max(m, n); intpossibleGcd = Math.min(m, n); while (m % possibleGcd != 0 || n % possibleGcd != 0) possibleGcd--; returnpossibleGcd; } Interface: como se usa. Implementação: como funciona.
  10. 10. /** * Returns the greatest common divisor (GCD) of two integer numbers. * * @param m first of the two integer numbers whose GCD will be returned. * @param n second of the two integer numbers whose GCD will be returned. * @return the greatest common divisor of m and n. * @pre m ≠ 0 ∨n ≠ 0 * @post gcd = gcd(m, n) */ publicstaticintgcd(intm, intn) 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 10 public staticintgcd(int m, intn) { if (m == 0 && n == 0) thrownew IllegalArgumentException("Illegal call with " + "m = 0 and n = 0."); m = Math.abs(m); n = Math.abs(n); while (m != 0) { inttemporary = m; m = n % m; n = temporary; } returnn; } /** * Returns the greatest common divisor (GCD) of two integer numbers. * * @param m first of the two integer numbers whose GCD will be returned. * @param n second of the two integer numbers whose GCD will be returned. * @return the greatest common divisor of m and n. * @pre m ≠ 0 ∨n ≠ 0 * @post gcd = gcd(m, n) */ publicstaticintgcd(intm, intn) Implementação alternativa: funcionamento diferente. Mesma interface: usa-se da mesma forma, faz o mesmo.
  11. 11. Encapsulação: classes 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 11
  12. 12. { this.abscissa = abscissa; this.ordinate = ordinate; } { returnabscissa; } { returnordinate; } { returnMath.sqrt(abscissa * abscissa + ordinate * ordinate); } { return Math.atan2(ordinate, abscissa); } privatefinaldoubleabscissa; privatefinaldoubleordinate; } 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 12 publicclassPoint { publicPoint(finaldoubleabscissa, finaldoubleordinate) publicdoublegetAbscissa() publicdoublegetOrdinate() publicdoublegetRadius() publicdoublegetAngle() } { this.abscissa = abscissa; this.ordinate = ordinate; } { returnabscissa; } { returnordinate; } { returnMath.sqrt(abscissa * abscissa + ordinate * ordinate); } { return Math.atan2(ordinate, abscissa); } privatefinaldoubleabscissa; privatefinaldoubleordinate; } Interface: Como se usa. Interface em documentação (omissa): O que representa. Como se comporta. Contratos. Etc. Implementação: Como funciona.
  13. 13. publicclassPoint { publicPoint(finaldoubleabscissa, finaldoubleordinate) { rho = Math.sqrt(abscissa * abscissa + ordinate * ordinate); theta = Math.atan2(ordinate, abscissa); } publicdoublegetAbscissa() { returnrho * Math.cos(theta); } publicdoublegetOrdinate() { returnrho * Math.sin(theta); } publicdoublegetRadius() { returnrho; } publicdoublegetAngle() { returntheta; } privatedoubletheta; privatedoublerho; } 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 13 { rho = Math.sqrt(abscissa * abscissa + ordinate * ordinate); theta = Math.atan2(ordinate, abscissa); } { returnrho * Math.cos(theta); } { returnrho * Math.sin(theta); } { returnrho; } { returntheta; } privatefinaldoubletheta; privatefinaldoublerho; } publicclassPoint { publicPoint(finaldoubleabscissa, finaldoubleordinate) publicdoublegetAbscissa() publicdoublegetOrdinate() publicdoublegetRadius() publicdoublegetAngle() } Implementação alternativa: Funcionamento diferente. Mesma interface: Usa-se da mesma forma!
  14. 14. Controlo de acesso Pode-se controlar acesso a membros de classes Usam-se modificadores de acesso public protected private Java tem quatro categorias de acesso Público – acesso sem restrição Protegido Por omissão ou privado ao pacote Privado – acesso apenas no contexto da própria classe 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 14
  15. 15. Encapsulação: controlo de acesso 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 15
  16. 16. Encapsulação: propriedades Propriedades são interface (inspectores e modificadores) Exemplo publicclass Rational { … publicintgetNumerator() { … } publicintgetDenominator() { … } … } Rational rational = new Rational(1, 4); out.println(rational.getDenominator()); 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 16
  17. 17. Encapsulação: atributos Atributos são implementação Exemplo publicclass Rational { … privateintnumerator; privateintdenominator; … } Rational rational = new Rational(1, 4); rational.denominator = 0; 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 17
  18. 18. Encapsulação: métodos auxiliares Métodos auxiliares são implementação Exemplo publicclass Rational { public Rational(finalintnumerator, finalintdenominator) { … reduce(); } … privatevoid reduce() { intgcd = NumberUtilities.gcd(numerator, denominator); numerator /= gcd; denominator /= gcd; } … } Rational rational = new Rational(2, 8); rational.reduce(); 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 18
  19. 19. Cópia de instâncias Cópia com inicialização e atribuição afecta apenas referências! Necessário construtor por cópia publicclass Point { … public Point(final Point aPoint) { abscissa= aPoint.getAbscissa(); ordinate= aPoint.getOrdinate(); } … privatefinalintabscissa; privatefinalintordinate; } Point a = newPoint(1.0, -2.0); Point b = a; Point c = new Point(a); 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 19 a b c (1; -2) (1; -2)
  20. 20. Igualdade de instâncias Operador == com referências verifica identidade e não igualdades! Necessária operação! publicclass Point { … publicbooleanisEqualTo( final Point aPoint) { returngetAbscissa() == aPoint.getAbscissa() && getOrdinate() == aPoint.getOrdinate(); } … } Point a = newPoint(1.0, -2.0); Point b = a; Point c = new Point(a); 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 20 Mais tarde usaremos equals(). a b c (1; -2) (1; -2) b == a? Sim. c == a? Não! b.isEqualTo(a)? Sim. c.isEqualTo(a)? Sim!
  21. 21. A reter Encapsulação em Java Abstracção Módulos em Java Interface vs. implementação Modificadores de acesso public eprivate Vantagens da encapsulação Cópia de instâncias usando construtor Igualdade entre instâncias usando método 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 21
  22. 22. A ler... Capítulos 8 e 9 do livro: Y. Daniel Liang, Introduction to Java Programming, 8.ª edição, Prentice-Hall, 2010. ISBN: 978-0-13-213080-6 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 22
  23. 23. Sumário Encapsulamento Cópia de instâncias Igualdade entre instâncias 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 23
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×