Aula 10EncapsulaçãoCópia de instânciasIgualdade de instâncias
Da aula anterior…Operação toStringClasses, instâncias e objectosLeituras com Scanner2010/2011Introdução à Programação - DCTI - ISCTE-IUL2
EncapsulaçãoAplica ocultação de informação a elemento de linguagemOculta implementação e revela interfaceProdutores: acesso exclusivoà implementaçãoConsumidores: acedem apenas a interfaceResultado são módulosRotinasObjectos/classesPacotes2010/2011Introdução à Programação - DCTI - ISCTE-IUL3Ou “encapsulamento”.A ver mais tarde.
Interface vs. implementaçãoInterfaceComo se usa?O que faz?Qual o contrato entre produtor e consumidor?ImplementaçãoComo funciona?Qual o mecanismo?2010/2011Introdução à Programação - DCTI - ISCTE-IUL4
Encapsulação: vantagensImplementação pode mudar sem afectar consumidoresProdutores podem garantir bom comportamento dos módulosMais fácil localizar errosMais fácil corrigir errosFacilita abstracção do consumidor!2010/2011Introdução à Programação - DCTI - ISCTE-IUL5
Encapsulação: interfaceMétodos e rotinasCabeçalho apenasClassesOperaçõesPropriedades…2010/2011Introdução à Programação - DCTI - ISCTE-IUL6
Encapsulação: implementaçãoMétodos e rotinasCorpo apenasClassesMétodos auxiliaresMétodos enquanto implementação de operaçõesAtributos…2010/2011Introdução à Programação - DCTI - ISCTE-IUL7
Encapsulação: rotinas2010/2011Introdução à Programação - DCTI - ISCTE-IUL8
{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/2011Introdução à Programação - DCTI - ISCTE-IUL9Interface: 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/2011Introdução à Programação - DCTI - ISCTE-IUL10public 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: classes2010/2011Introdução à Programação - DCTI - ISCTE-IUL11
{this.abscissa = abscissa;this.ordinate = ordinate;    }{returnabscissa;    }{returnordinate;    }{returnMath.sqrt(abscissa * abscissa + ordinate * ordinate);    }{return Math.atan2(ordinate, abscissa);    }privatefinaldoubleabscissa;privatefinaldoubleordinate;}2010/2011Introdução à Programação - DCTI - ISCTE-IUL12publicclassPoint {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.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/2011Introdução à Programação - DCTI - ISCTE-IUL13                                                               {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!Controlo de acessoPode-se controlar acesso a membros de classesUsam-se modificadores de acessopublicprotectedprivateJava tem quatro categorias de acessoPúblico – acesso sem restriçãoProtegidoPor omissão ou privado ao pacotePrivado – acesso apenas no contexto da própria classe2010/2011Introdução à Programação - DCTI - ISCTE-IUL14
Encapsulação: controlo de acesso2010/2011Introdução à Programação - DCTI - ISCTE-IUL15
Encapsulação: propriedadesPropriedades são interface (inspectores e modificadores)Exemplopublicclass Rational {    …publicintgetNumerator() { … }publicintgetDenominator() { … }    …}Rational rational = new Rational(1, 4);out.println(rational.getDenominator());2010/2011Introdução à Programação - DCTI - ISCTE-IUL16
Encapsulação: atributosAtributos são implementaçãoExemplopublicclass Rational {    …privateintnumerator;privateintdenominator;    …}Rational rational = new Rational(1, 4);rational.denominator = 0;2010/2011Introdução à Programação - DCTI - ISCTE-IUL17
Encapsulação: métodos auxiliaresMétodos auxiliares são implementaçãoExemplopublicclass 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/2011Introdução à Programação - DCTI - ISCTE-IUL18
Cópia de instânciasCópia com inicialização e atribuição afecta apenas referências!Necessário construtor por cópiapublicclass 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/2011Introdução à Programação - DCTI - ISCTE-IUL19abc(1; -2)(1; -2)
Igualdade de instânciasOperador == 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/2011Introdução à Programação - DCTI - ISCTE-IUL20Mais tarde usaremos equals().abc(1; -2)(1; -2)b == a? Sim.c == a? Não!b.isEqualTo(a)? Sim.c.isEqualTo(a)? Sim!
A reterEncapsulação em JavaAbstracçãoMódulos em JavaInterface vs. implementaçãoModificadores de acesso public eprivateVantagens da encapsulaçãoCópia de instâncias usando construtorIgualdade entre instâncias usando método2010/2011Introdução à Programação - DCTI - ISCTE-IUL21
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-62010/2011Introdução à Programação - DCTI - ISCTE-IUL22

Mais conteúdo relacionado

PPTX
Semana 3: Introdução à linguagem de programação Java
PPTX
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
PPTX
Semana 4: Atribuições especiais, matrizes, ciclos, classes pacote
PPTX
11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...
PPTX
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...
PPTX
7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...
PPTX
4. Introdução à linguagem de programação Java – Fundamentos de Programação
PDF
POO - 17 - Interfaces
Semana 3: Introdução à linguagem de programação Java
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
Semana 4: Atribuições especiais, matrizes, ciclos, classes pacote
11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...
7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...
4. Introdução à linguagem de programação Java – Fundamentos de Programação
POO - 17 - Interfaces

Mais procurados (20)

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

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

PDF
Novidades do Java 8
PPTX
Semana 2: Funções e listas, variáveis
PPTX
Programação Orientada por Objectos - Aula 4
PPTX
Programação Orientada por Objectos - Aula 4
PDF
Kotlin first
PPTX
Programação Estruturada 2 - Aula 02
PPTX
Programação Orientada por Objectos - Aula 7
PPT
Encapsulamento em oo
ODP
Paradigma Orientado a Objeto
PDF
principios_SOLID_resumo.pdf
PPTX
Dip the dependency inversion principle
PPTX
Dip the dependency inversion principle
PPTX
Algoritmos e Estrutura de Dados - Aula 03
ODP
Clean code
PPSX
TDD e Clean Code
PPTX
Semana 9: toString, classes, instâncias e objectos, Scanner
PPTX
Programação - linguagem C - uso de funções
PPT
[CLPE] Design patterns com c#
PPTX
Aplicando o poder de uma GPU no SQL Server
PPTX
TDC2016POA | Trilha .NET - O que esperar do C# 7
Novidades do Java 8
Semana 2: Funções e listas, variáveis
Programação Orientada por Objectos - Aula 4
Programação Orientada por Objectos - Aula 4
Kotlin first
Programação Estruturada 2 - Aula 02
Programação Orientada por Objectos - Aula 7
Encapsulamento em oo
Paradigma Orientado a Objeto
principios_SOLID_resumo.pdf
Dip the dependency inversion principle
Dip the dependency inversion principle
Algoritmos e Estrutura de Dados - Aula 03
Clean code
TDD e Clean Code
Semana 9: toString, classes, instâncias e objectos, Scanner
Programação - linguagem C - uso de funções
[CLPE] Design patterns com c#
Aplicando o poder de uma GPU no SQL Server
TDC2016POA | Trilha .NET - O que esperar do C# 7
Anúncio

Mais de Manuel Menezes de Sequeira (16)

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

Último (12)

PPTX
Aula 9 - Funções em Python (Introdução à Ciência da Computação)
PDF
Jira Software projetos completos com scrum
PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
PPTX
Analise Estatica de Compiladores para criar uma nova LP
PPTX
Utilizando code blockes por andre backes
PDF
Processos no SAP Extended Warehouse Management, EWM100 Col26
PPTX
Viasol Energia Solar -Soluções para geração e economia de energia
PPT
Conceitos básicos de Redes Neurais Artificiais
PDF
Manejo integrado de pragas na cultura do algodão
PPTX
Tipos de servidor em redes de computador.pptx
PDF
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
PPTX
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
Aula 9 - Funções em Python (Introdução à Ciência da Computação)
Jira Software projetos completos com scrum
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
Analise Estatica de Compiladores para criar uma nova LP
Utilizando code blockes por andre backes
Processos no SAP Extended Warehouse Management, EWM100 Col26
Viasol Energia Solar -Soluções para geração e economia de energia
Conceitos básicos de Redes Neurais Artificiais
Manejo integrado de pragas na cultura do algodão
Tipos de servidor em redes de computador.pptx
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
Proposta de Implementação de uma Rede de Computador Cabeada.pptx

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

  • 1. Aula 10EncapsulaçãoCópia de instânciasIgualdade de instâncias
  • 2. Da aula anterior…Operação toStringClasses, instâncias e objectosLeituras com Scanner2010/2011Introdução à Programação - DCTI - ISCTE-IUL2
  • 3. EncapsulaçãoAplica ocultação de informação a elemento de linguagemOculta implementação e revela interfaceProdutores: acesso exclusivoà implementaçãoConsumidores: acedem apenas a interfaceResultado são módulosRotinasObjectos/classesPacotes2010/2011Introdução à Programação - DCTI - ISCTE-IUL3Ou “encapsulamento”.A ver mais tarde.
  • 4. Interface vs. implementaçãoInterfaceComo se usa?O que faz?Qual o contrato entre produtor e consumidor?ImplementaçãoComo funciona?Qual o mecanismo?2010/2011Introdução à Programação - DCTI - ISCTE-IUL4
  • 5. Encapsulação: vantagensImplementação pode mudar sem afectar consumidoresProdutores podem garantir bom comportamento dos módulosMais fácil localizar errosMais fácil corrigir errosFacilita abstracção do consumidor!2010/2011Introdução à Programação - DCTI - ISCTE-IUL5
  • 6. Encapsulação: interfaceMétodos e rotinasCabeçalho apenasClassesOperaçõesPropriedades…2010/2011Introdução à Programação - DCTI - ISCTE-IUL6
  • 7. Encapsulação: implementaçãoMétodos e rotinasCorpo apenasClassesMétodos auxiliaresMétodos enquanto implementação de operaçõesAtributos…2010/2011Introdução à Programação - DCTI - ISCTE-IUL7
  • 8. Encapsulação: rotinas2010/2011Introdução à Programação - DCTI - ISCTE-IUL8
  • 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/2011Introdução à Programação - DCTI - ISCTE-IUL9Interface: 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/2011Introdução à Programação - DCTI - ISCTE-IUL10public 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: classes2010/2011Introdução à Programação - DCTI - ISCTE-IUL11
  • 12. {this.abscissa = abscissa;this.ordinate = ordinate; }{returnabscissa; }{returnordinate; }{returnMath.sqrt(abscissa * abscissa + ordinate * ordinate); }{return Math.atan2(ordinate, abscissa); }privatefinaldoubleabscissa;privatefinaldoubleordinate;}2010/2011Introdução à Programação - DCTI - ISCTE-IUL12publicclassPoint {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.
  • 15. Etc.Implementação:Como funciona.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/2011Introdução à Programação - DCTI - ISCTE-IUL13 {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!Controlo de acessoPode-se controlar acesso a membros de classesUsam-se modificadores de acessopublicprotectedprivateJava tem quatro categorias de acessoPúblico – acesso sem restriçãoProtegidoPor omissão ou privado ao pacotePrivado – acesso apenas no contexto da própria classe2010/2011Introdução à Programação - DCTI - ISCTE-IUL14
  • 16. Encapsulação: controlo de acesso2010/2011Introdução à Programação - DCTI - ISCTE-IUL15
  • 17. Encapsulação: propriedadesPropriedades são interface (inspectores e modificadores)Exemplopublicclass Rational { …publicintgetNumerator() { … }publicintgetDenominator() { … } …}Rational rational = new Rational(1, 4);out.println(rational.getDenominator());2010/2011Introdução à Programação - DCTI - ISCTE-IUL16
  • 18. Encapsulação: atributosAtributos são implementaçãoExemplopublicclass Rational { …privateintnumerator;privateintdenominator; …}Rational rational = new Rational(1, 4);rational.denominator = 0;2010/2011Introdução à Programação - DCTI - ISCTE-IUL17
  • 19. Encapsulação: métodos auxiliaresMétodos auxiliares são implementaçãoExemplopublicclass 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/2011Introdução à Programação - DCTI - ISCTE-IUL18
  • 20. Cópia de instânciasCópia com inicialização e atribuição afecta apenas referências!Necessário construtor por cópiapublicclass 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/2011Introdução à Programação - DCTI - ISCTE-IUL19abc(1; -2)(1; -2)
  • 21. Igualdade de instânciasOperador == 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/2011Introdução à Programação - DCTI - ISCTE-IUL20Mais tarde usaremos equals().abc(1; -2)(1; -2)b == a? Sim.c == a? Não!b.isEqualTo(a)? Sim.c.isEqualTo(a)? Sim!
  • 22. A reterEncapsulação em JavaAbstracçãoMódulos em JavaInterface vs. implementaçãoModificadores de acesso public eprivateVantagens da encapsulaçãoCópia de instâncias usando construtorIgualdade entre instâncias usando método2010/2011Introdução à Programação - DCTI - ISCTE-IUL21
  • 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-62010/2011Introdução à Programação - DCTI - ISCTE-IUL22
  • 24. SumárioEncapsulamentoCópia de instânciasIgualdade entre instâncias2010/2011Introdução à Programação - DCTI - ISCTE-IUL23