SlideShare une entreprise Scribd logo
1  sur  23
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 - DCTI - ISCTE-IUL 2
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.
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
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
Encapsulação: interface Métodos e rotinas Cabeçalho apenas Classes Operações Propriedades … 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 6
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
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."); 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.
/**  * 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.
Encapsulação: classes 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 11
{ 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: ,[object Object],Interface em documentação (omissa): ,[object Object]
Como se comporta.
Contratos.
Etc.Implementação: ,[object Object],[object Object],[object Object]
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 {     … publicintgetNumerator() { … } publicintgetDenominator() { … }     … } Rational rational = new Rational(1, 4); out.println(rational.getDenominator()); 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 16
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
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
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)
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!
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
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

Contenu connexe

Tendances

Java orientação a objetos (interfaces)
Java   orientação a objetos (interfaces)Java   orientação a objetos (interfaces)
Java orientação a objetos (interfaces)
Armando Daniel
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas Interfaces
Regis Magalhães
 
Java recursos avançados - socket connection
Java   recursos avançados - socket connectionJava   recursos avançados - socket connection
Java recursos avançados - socket connection
Armando Daniel
 

Tendances (20)

Semana 1: Programação como arte de resolver problemas, algoritmos e problema...
Semana  1: Programação como arte de resolver problemas, algoritmos e problema...Semana  1: Programação como arte de resolver problemas, algoritmos e problema...
Semana 1: Programação como arte de resolver problemas, algoritmos e problema...
 
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
 
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
 
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
 
Funções e procedimentos
Funções e procedimentosFunções e procedimentos
Funções e procedimentos
 
Java orientação a objetos (interfaces)
Java   orientação a objetos (interfaces)Java   orientação a objetos (interfaces)
Java orientação a objetos (interfaces)
 
A linguagem java
A linguagem javaA linguagem java
A linguagem java
 
Introdução ao C#
Introdução ao C#Introdução ao C#
Introdução ao C#
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas Interfaces
 
Java 06
Java 06Java 06
Java 06
 
Programação Orientada por Objectos - Aula 6
Programação Orientada por Objectos - Aula 6Programação Orientada por Objectos - Aula 6
Programação Orientada por Objectos - Aula 6
 
2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...
2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...
2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...
 
Java recursos avançados - socket connection
Java   recursos avançados - socket connectionJava   recursos avançados - socket connection
Java recursos avançados - socket connection
 
Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2
 
Algoritmos Aula 03
Algoritmos Aula 03Algoritmos Aula 03
Algoritmos Aula 03
 
Web2py: Desenvolvimento Ágil de Aplicações Web com Python
Web2py: Desenvolvimento Ágil de Aplicações Web com PythonWeb2py: Desenvolvimento Ágil de Aplicações Web com Python
Web2py: Desenvolvimento Ágil de Aplicações Web com Python
 
Trabalhando com as views do Web2Py
Trabalhando com as views do Web2PyTrabalhando com as views do Web2Py
Trabalhando com as views do Web2Py
 
Java5
Java5Java5
Java5
 
Programação orientada a objetos em delphi
Programação orientada a objetos em delphiProgramação orientada a objetos em delphi
Programação orientada a objetos em delphi
 
02 introdução ao open gl
02 introdução ao open gl02 introdução ao open gl
02 introdução ao open gl
 

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

[CLPE] Design patterns com c#
[CLPE] Design patterns com c#[CLPE] Design patterns com c#
[CLPE] Design patterns com c#
Felipe Pimentel
 

Similaire à Semana 10: Encapsulação, cópia de instâncias, igualdade de instâncias (20)

Novidades do Java 8
Novidades do Java 8Novidades do Java 8
Novidades do Java 8
 
Semana 2: Funções e listas, variáveis
Semana  2: Funções e listas, variáveisSemana  2: Funções e listas, variáveis
Semana 2: Funções e listas, variáveis
 
Programação Orientada por Objectos - Aula 4
Programação Orientada por Objectos - Aula 4Programação Orientada por Objectos - Aula 4
Programação Orientada por Objectos - Aula 4
 
Programação Orientada por Objectos - Aula 4
Programação Orientada por Objectos - Aula 4Programação Orientada por Objectos - Aula 4
Programação Orientada por Objectos - Aula 4
 
Kotlin first
Kotlin firstKotlin first
Kotlin first
 
Programação Estruturada 2 - Aula 02
Programação Estruturada 2 - Aula 02Programação Estruturada 2 - Aula 02
Programação Estruturada 2 - Aula 02
 
Programação Orientada por Objectos - Aula 7
Programação Orientada por Objectos - Aula 7Programação Orientada por Objectos - Aula 7
Programação Orientada por Objectos - Aula 7
 
Encapsulamento em oo
Encapsulamento em ooEncapsulamento em oo
Encapsulamento em oo
 
Paradigma Orientado a Objeto
Paradigma Orientado a ObjetoParadigma Orientado a Objeto
Paradigma Orientado a Objeto
 
principios_SOLID_resumo.pdf
principios_SOLID_resumo.pdfprincipios_SOLID_resumo.pdf
principios_SOLID_resumo.pdf
 
Dip the dependency inversion principle
Dip   the dependency inversion principleDip   the dependency inversion principle
Dip the dependency inversion principle
 
Dip the dependency inversion principle
Dip   the dependency inversion principleDip   the dependency inversion principle
Dip the dependency inversion principle
 
Algoritmos e Estrutura de Dados - Aula 03
Algoritmos e Estrutura de Dados - Aula 03Algoritmos e Estrutura de Dados - Aula 03
Algoritmos e Estrutura de Dados - Aula 03
 
Clean code
Clean codeClean code
Clean code
 
TDD e Clean Code
TDD e Clean CodeTDD e Clean Code
TDD e Clean Code
 
Semana 9: toString, classes, instâncias e objectos, Scanner
Semana  9: toString, classes, instâncias e objectos, ScannerSemana  9: toString, classes, instâncias e objectos, Scanner
Semana 9: toString, classes, instâncias e objectos, Scanner
 
[CLPE] Design patterns com c#
[CLPE] Design patterns com c#[CLPE] Design patterns com c#
[CLPE] Design patterns com c#
 
Aplicando o poder de uma GPU no SQL Server
Aplicando o poder de uma GPU noSQL ServerAplicando o poder de uma GPU noSQL Server
Aplicando o poder de uma GPU no SQL Server
 
TDC2016POA | Trilha .NET - O que esperar do C# 7
TDC2016POA | Trilha .NET - O que esperar do C# 7TDC2016POA | Trilha .NET - O que esperar do C# 7
TDC2016POA | Trilha .NET - O que esperar do C# 7
 
Android DevConference - Dagger 2: uso avançado em projetos Android
Android DevConference - Dagger 2: uso avançado em projetos AndroidAndroid DevConference - Dagger 2: uso avançado em projetos Android
Android DevConference - Dagger 2: uso avançado em projetos Android
 

Plus de Manuel Menezes de Sequeira

Plus de Manuel Menezes de Sequeira (16)

12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
 
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
 
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
 
1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...
1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...
1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...
 
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
 
Semana 8: Classes e instâncias, cadeias de caracteres
Semana  8: Classes e instâncias, cadeias de caracteresSemana  8: Classes e instâncias, cadeias de caracteres
Semana 8: Classes e instâncias, cadeias de caracteres
 
Semana 6: Matrizes multidimensionais, estratégias de resolução de problemas
Semana  6: Matrizes multidimensionais, estratégias de resolução de problemasSemana  6: Matrizes multidimensionais, estratégias de resolução de problemas
Semana 6: Matrizes multidimensionais, estratégias de resolução de problemas
 
Semana 5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
Semana  5: Caracteres, tipos char e int, tipos de valor vs. tipos de referênciaSemana  5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
Semana 5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
 
Semana 0: Computadores, linguagens e linguagens de programação, Noções de al...
Semana  0: Computadores, linguagens e linguagens de programação, Noções de al...Semana  0: Computadores, linguagens e linguagens de programação, Noções de al...
Semana 0: Computadores, linguagens e linguagens de programação, Noções de al...
 
Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)
Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)
Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)
 
Eng.ª do Software - 10. Testes de software
Eng.ª do Software - 10. Testes de softwareEng.ª do Software - 10. Testes de software
Eng.ª do Software - 10. Testes de software
 
Introdução à programação orientada para aspectos
Introdução à programação orientada para aspectosIntrodução à programação orientada para aspectos
Introdução à programação orientada para aspectos
 
Eng.ª do Software - 9. Verificação e validação
Eng.ª do Software - 9. Verificação e validaçãoEng.ª do Software - 9. Verificação e validação
Eng.ª do Software - 9. Verificação e validação
 
Eng.ª do Software - 8. Desenho de interfaces com o utilizador
Eng.ª do Software - 8. Desenho de interfaces com o utilizadorEng.ª do Software - 8. Desenho de interfaces com o utilizador
Eng.ª do Software - 8. Desenho de interfaces com o utilizador
 
Eng.ª do Software - 7. Desenho arquitectónico
Eng.ª do Software - 7. Desenho arquitectónicoEng.ª do Software - 7. Desenho arquitectónico
Eng.ª do Software - 7. Desenho arquitectónico
 
Eng.ª do Software - 6. Gestão de projectos
Eng.ª do Software - 6. Gestão de projectosEng.ª do Software - 6. Gestão de projectos
Eng.ª do Software - 6. Gestão de projectos
 

Dernier

Dernier (9)

Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 

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

  • 1. Aula 10 Encapsulação Cópia de instâncias Igualdade de instâncias
  • 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. 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. 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. 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. 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. 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. Encapsulação: rotinas 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 8
  • 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. /** * 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. Encapsulação: classes 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 11
  • 12.
  • 15.
  • 16. Encapsulação: controlo de acesso 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 15
  • 17. 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
  • 18. 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
  • 19. 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
  • 20. 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)
  • 21. 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!
  • 22. 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
  • 23. 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
  • 24. Sumário Encapsulamento Cópia de instâncias Igualdade entre instâncias 2010/2011 Introdução à Programação - DCTI - ISCTE-IUL 23