SlideShare ist ein Scribd-Unternehmen logo
1 von 22
Encapsulação
Cópia de instâncias
Igualdade de instâncias
 Operação toString
 Classes, instâncias e objectos
 Leituras com Scanner
2013/2014 Fundamentos de Programação 2
 Aplica ocultação de informação a elemento de
linguagem
 Oculta implementação e revela interface
 Produtores: acesso exclusivo à implementação
 Consumidores ou clientes: acedem apenas a interface
 Resultado são módulos
 Rotinas
 Objectos/classes
 Pacotes
2013/2014 Fundamentos de Programação 3
Ou «encapsulamento».
A ver mais tarde.
 Interface
 Como se usa?
 O que faz?
 Qual o contrato entre produtor e consumidor?
 Implementação
 Como funciona?
 Qual o mecanismo?
2013/2014 Fundamentos de Programação 4
 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!
2013/2014 Fundamentos de Programação 5
 Métodos e rotinas
 Cabeçalho apenas
 Classes
 Operações
 Propriedades
 …
2013/2014 Fundamentos de Programação 6
 Métodos e rotinas
 Corpo apenas
 Classes
 Métodos auxiliares
 Métodos enquanto implementação de operações
 Atributos
 …
2013/2014 Fundamentos de Programação 7
2013/2014 Fundamentos de Programação 8
{
if (m == 0 && n == 0)
throw new 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);
int possibleGcd = Math.min(m, n);
while (m % possibleGcd != 0 || n % possibleGcd != 0)
possibleGcd--;
return possibleGcd;
}
/**
* 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)
*/
public static int gcd(int m, int n)
2013/2014 Fundamentos de Programação 9
{
if (m == 0 && n == 0)
throw new 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);
int possibleGcd = Math.min(m, n);
while (m % possibleGcd != 0 || n % possibleGcd != 0)
possibleGcd--;
return possibleGcd;
}
Interface: como se usa.
Interface: o que faz,
contrato.
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)
*/
public static int gcd(int m, int n)
2013/2014 Fundamentos de Programação 10
{
if (m == 0 && n == 0)
throw new IllegalArgumentException("Illegal call with " +
"m = 0 and n = 0.");
m = Math.abs(m);
n = Math.abs(n);
while (m != 0) {
int temporary = m;
m = n % m;
n = temporary;
}
return n;
}
/**
* 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)
*/
public static int gcd(int m, int n)
Implementação alternativa:
funcionamento diferente.
Mesma interface: usa-se da
mesma forma, faz o mesmo.
2013/2014 Fundamentos de Programação 11
private final double abscissa;
private final double ordinate;
{
this.abscissa = abscissa;
this.ordinate = ordinate;
}
{
return abscissa;
}
{
return ordinate;
}
{
return Math.sqrt(abscissa * abscissa + ordinate * ordinate);
}
{
return Math.atan2(ordinate, abscissa);
}
}
2013/2014 Fundamentos de Programação 12
public class Point {
public Point(final double abscissa, final double ordinate)
public double getAbscissa()
public double getOrdinate()
public double getRadius()
public double getAngle()
}
private final double abscissa;
private final double ordinate;
{
this.abscissa = abscissa;
this.ordinate = ordinate;
}
{
return abscissa;
}
{
return ordinate;
}
{
return Math.sqrt(abscissa * abscissa + ordinate * ordinate);
}
{
return Math.atan2(ordinate, abscissa);
}
}
Interface:
• Como se usa.
Interface em documentação (omissa):
• O que representa.
• Como se comporta.
• Contratos.
• Etc.
Implementação:
• Como funciona.
public class Point {
private double rho;
private double theta;
public Point(final double abscissa, final double ordinate) {
rho = Math.sqrt(abscissa * abscissa + ordinate * ordinate);
theta = Math.atan2(ordinate, abscissa);
}
public double getAbscissa() {
return rho * Math.cos(theta);
}
public double getOrdinate() {
return rho * Math.sin(theta);
}
public double getRadius() {
return rho;
}
public double getAngle() {
return theta;
}
}
2013/2014 Fundamentos de Programação 13
private final double rho;
private final double theta;
{
rho = Math.sqrt(abscissa * abscissa + ordinate * ordinate);
theta = Math.atan2(ordinate, abscissa);
}
{
return rho * Math.cos(theta);
}
{
return rho * Math.sin(theta);
}
{
return rho;
}
{
return theta;
}
}
public class Point {
public Point(final double abscissa, final double ordinate)
public double getAbscissa()
public double getOrdinate()
public double getRadius()
public double getAngle()
}
Implementação alternativa:
• Funcionamento diferente.
Mesma interface:
• Usa-se da mesma forma!
 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
2013/2014 Fundamentos de Programação 14
Característica de classe Tipo Acesso
Operações Interface Público
Propriedades (operações inspectoras obtêm e
operações modificadoras alteram)
Interface Público
Métodos auxiliares Implementação Privado
Métodos enquanto implementação de operações Implementação Público
Atributos Implementação Privados
2013/2014 Fundamentos de Programação 15
 Propriedades são interface (inspectores e
modificadores)
public class Rational {
…
public int getNumerator() { … }
public int getDenominator() { … }
…
}
Rational rational = new Rational(1, 4);
out.println(rational.getDenominator());
2013/2014 Fundamentos de Programação 16
Por razões históricas, os inspectores
das propriedades começam com o
horrível prefixo get.
 Atributos são implementação
public class Rational {
private int numerator;
private int denominator;
…
}
Rational rational = new Rational(1, 4);
rational.denominator = 0;
2013/2014 Fundamentos de Programação 17
 Métodos auxiliares são implementação
public class Rational {
…
public Rational(final int numerator, final int denominator) {
…
reduce();
}
…
private void reduce() {
final int gcd = IntegerUtilities.gcd(numerator, denominator);
numerator /= gcd;
denominator /= gcd;
}
…
}
Rational rational = new Rational(2, 8);
rational.reduce();
2013/2014 Fundamentos de Programação 18
 Inicializações e atribuições
afectam apenas
referências!
 Necessário construtor por
cópia
public class Point {
…
public Point(final Point
other) {
abscissa =
other.getAbscissa();
ordinate =
other.getOrdinate();
}
…
private final double abscissa;
private final double ordinate;
}
Point a = new Point(1.0, -2.0);
Point b = a;
Point c = new Point(a);
2013/2014 Fundamentos de Programação 19
a
(1; -2)
b
c
(1; -2)
 Operador == com
referências verifica
identidade e não
igualdade!
 Necessária operação!
public class Point {
…
public boolean isEqualTo(
final Point other) {
return getAbscissa() ==
other.getAbscissa()
&& getOrdinate() ==
other.getOrdinate();
}
…
}
Point a = new Point(1.0, -2.0);
Point b = a;
Point c = new Point(a);
2013/2014 Fundamentos de Programação 20
a
(1; -2)
b
c
(1; -2)
b == a? Sim.
c == a? Não!
b.isEqualTo(a)? Sim.
c.isEqualTo(a)? Sim!
Mais tarde usaremos equals().
 Encapsulação em Java
 Abstracção
 Módulos em Java
 Interface vs. implementação
 Modificadores de acesso public e private
 Vantagens da encapsulação
 Cópia de instâncias usando construtor
 Igualdade entre instâncias usando operação
2013/2014 Fundamentos de Programação 21
 Encapsulamento
 Cópia de instâncias
 Igualdade entre instâncias
2013/2014 Fundamentos de Programação 22

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (20)

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 – ...
 
7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...
7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...
7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...
 
Semana 4: Atribuições especiais, matrizes, ciclos, classes pacote
Semana  4: Atribuições especiais, matrizes, ciclos, classes pacoteSemana  4: Atribuições especiais, matrizes, ciclos, classes pacote
Semana 4: Atribuições especiais, matrizes, ciclos, classes pacote
 
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...
 
Introducao ao C#
Introducao ao C#Introducao ao C#
Introducao ao C#
 
Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#
 
Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)
 
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...
 
Semana 10: Encapsulação, cópia de instâncias, igualdade de instâncias
Semana 10: Encapsulação, cópia de instâncias, igualdade de instânciasSemana 10: Encapsulação, cópia de instâncias, igualdade de instâncias
Semana 10: Encapsulação, cópia de instâncias, igualdade de instâncias
 
Java2
Java2Java2
Java2
 
Java5
Java5Java5
Java5
 
Aula 1 | Introdução a C++
Aula 1 | Introdução a C++Aula 1 | Introdução a C++
Aula 1 | Introdução a C++
 
Funções e procedimentos
Funções e procedimentosFunções e procedimentos
Funções e procedimentos
 
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
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
Fundamentos de C#
Fundamentos de C#Fundamentos de C#
Fundamentos de C#
 
SFD - C# para a comunidade
SFD - C# para a comunidadeSFD - C# para a comunidade
SFD - C# para a comunidade
 
Boas práticas de programação em C# .NET
Boas práticas de programação em C# .NETBoas práticas de programação em C# .NET
Boas práticas de programação em C# .NET
 
Paradigmas de Linguagens de Programacao - Aula #3
Paradigmas de Linguagens de Programacao - Aula #3Paradigmas de Linguagens de Programacao - Aula #3
Paradigmas de Linguagens de Programacao - Aula #3
 
Algoritmos - Procedimentos
Algoritmos - ProcedimentosAlgoritmos - Procedimentos
Algoritmos - Procedimentos
 

Andere mochten auch

98230944 farmacotecnica-apostila
98230944 farmacotecnica-apostila98230944 farmacotecnica-apostila
98230944 farmacotecnica-apostila
KEYTIANE JVA
 
Aula 3 operações farmacêuticas
Aula 3 operações farmacêuticasAula 3 operações farmacêuticas
Aula 3 operações farmacêuticas
Talita Gonçalves
 

Andere mochten auch (16)

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...
 
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...
 
A homeopatia: algumas definições e diferenciações
A homeopatia: algumas definições e diferenciaçõesA homeopatia: algumas definições e diferenciações
A homeopatia: algumas definições e diferenciações
 
Farmacotécnica do Xarope Fitoterápico à base de açúcar mascavo
Farmacotécnica do Xarope Fitoterápico à base de açúcar mascavoFarmacotécnica do Xarope Fitoterápico à base de açúcar mascavo
Farmacotécnica do Xarope Fitoterápico à base de açúcar mascavo
 
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
 
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
 
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
 
Programação Orientada por Objectos - Aula 1
Programação Orientada por Objectos - Aula 1Programação Orientada por Objectos - Aula 1
Programação Orientada por Objectos - Aula 1
 
Programação Orientada por Objectos - Aula 3
Programação Orientada por Objectos - Aula 3Programação Orientada por Objectos - Aula 3
Programação Orientada por Objectos - Aula 3
 
Programação Orientada por Objectos - Aula 2
Programação Orientada por Objectos - Aula 2Programação Orientada por Objectos - Aula 2
Programação Orientada por Objectos - Aula 2
 
Fitoterapia racional
Fitoterapia racionalFitoterapia racional
Fitoterapia racional
 
Aula 02 fundamentos da homeopatia
Aula 02 fundamentos da homeopatiaAula 02 fundamentos da homeopatia
Aula 02 fundamentos da homeopatia
 
Programação Orientada por Objectos - Aula 5
Programação Orientada por Objectos - Aula 5Programação Orientada por Objectos - Aula 5
Programação Orientada por Objectos - Aula 5
 
98230944 farmacotecnica-apostila
98230944 farmacotecnica-apostila98230944 farmacotecnica-apostila
98230944 farmacotecnica-apostila
 
Aula 3 operações farmacêuticas
Aula 3 operações farmacêuticasAula 3 operações farmacêuticas
Aula 3 operações farmacêuticas
 
Eng.ª do Software - 3. Processos da engenharia de requisitos
Eng.ª do Software - 3. Processos da engenharia de requisitosEng.ª do Software - 3. Processos da engenharia de requisitos
Eng.ª do Software - 3. Processos da engenharia de requisitos
 

Ähnlich wie 10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos de Programação - Fundamentos de Programação

Pg sem3-1505102
Pg sem3-1505102Pg sem3-1505102
Pg sem3-1505102
csmp
 

Ähnlich wie 10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos de Programação - Fundamentos de Programação (20)

TDD e Clean Code
TDD e Clean CodeTDD e Clean Code
TDD e Clean Code
 
Programação Estruturada 2 - Aula 02
Programação Estruturada 2 - Aula 02Programação Estruturada 2 - Aula 02
Programação Estruturada 2 - Aula 02
 
Clean code
Clean codeClean code
Clean code
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completa
 
Novidades do Java 8
Novidades do Java 8Novidades do Java 8
Novidades do Java 8
 
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
 
Encapsulamento em oo
Encapsulamento em ooEncapsulamento em oo
Encapsulamento em oo
 
Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um Framework
 
Portfólio ADS- sem 4 - atividade em grupo
Portfólio ADS- sem 4 - atividade em grupoPortfólio ADS- sem 4 - atividade em grupo
Portfólio ADS- sem 4 - atividade em grupo
 
Aula 05/06 (Service)
Aula 05/06 (Service)Aula 05/06 (Service)
Aula 05/06 (Service)
 
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
 
Pg sem3-1505102
Pg sem3-1505102Pg sem3-1505102
Pg sem3-1505102
 
Pg sem3ex
Pg sem3exPg sem3ex
Pg sem3ex
 
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
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o Javascript
 
Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros
 
POO - 17 - Interfaces
POO - 17 - InterfacesPOO - 17 - Interfaces
POO - 17 - Interfaces
 
DDD > Experiências
DDD > ExperiênciasDDD > Experiências
DDD > Experiências
 

Mehr von Manuel Menezes de Sequeira

Mehr von Manuel Menezes de Sequeira (13)

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
 
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 3: Introdução à linguagem de programação Java
Semana  3: Introdução à linguagem de programação Java Semana  3: Introdução à linguagem de programação Java
Semana 3: Introdução à linguagem de programação Java
 
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
 
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
 
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
 

Kürzlich hochgeladen

A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
PatriciaCaetano18
 
Slide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemáticaSlide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemática
sh5kpmr7w7
 

Kürzlich hochgeladen (20)

LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
 
Produção de Texto - 5º ano - CRÔNICA.pptx
Produção de Texto - 5º ano - CRÔNICA.pptxProdução de Texto - 5º ano - CRÔNICA.pptx
Produção de Texto - 5º ano - CRÔNICA.pptx
 
LENDA DA MANDIOCA - leitura e interpretação
LENDA DA MANDIOCA - leitura e interpretaçãoLENDA DA MANDIOCA - leitura e interpretação
LENDA DA MANDIOCA - leitura e interpretação
 
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
 
Texto dramático com Estrutura e exemplos.ppt
Texto dramático com Estrutura e exemplos.pptTexto dramático com Estrutura e exemplos.ppt
Texto dramático com Estrutura e exemplos.ppt
 
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
 
Pesquisa Ação René Barbier Livro acadêmico
Pesquisa Ação René Barbier Livro  acadêmicoPesquisa Ação René Barbier Livro  acadêmico
Pesquisa Ação René Barbier Livro acadêmico
 
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdfPROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
 
Camadas da terra -Litosfera conteúdo 6º ano
Camadas da terra -Litosfera  conteúdo 6º anoCamadas da terra -Litosfera  conteúdo 6º ano
Camadas da terra -Litosfera conteúdo 6º ano
 
M0 Atendimento – Definição, Importância .pptx
M0 Atendimento – Definição, Importância .pptxM0 Atendimento – Definição, Importância .pptx
M0 Atendimento – Definição, Importância .pptx
 
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
 
aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.ppt
 
Sistema de Bibliotecas UCS - Cantos do fim do século
Sistema de Bibliotecas UCS  - Cantos do fim do séculoSistema de Bibliotecas UCS  - Cantos do fim do século
Sistema de Bibliotecas UCS - Cantos do fim do século
 
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
 
Slide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemáticaSlide - SAEB. língua portuguesa e matemática
Slide - SAEB. língua portuguesa e matemática
 
O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.O que é arte. Definição de arte. História da arte.
O que é arte. Definição de arte. História da arte.
 
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdfPROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
 
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
 
P P P 2024 - *CIEJA Santana / Tucuruvi*
P P P 2024  - *CIEJA Santana / Tucuruvi*P P P 2024  - *CIEJA Santana / Tucuruvi*
P P P 2024 - *CIEJA Santana / Tucuruvi*
 
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptxMonoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
 

10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos de Programação - Fundamentos de Programação

  • 2.  Operação toString  Classes, instâncias e objectos  Leituras com Scanner 2013/2014 Fundamentos de Programação 2
  • 3.  Aplica ocultação de informação a elemento de linguagem  Oculta implementação e revela interface  Produtores: acesso exclusivo à implementação  Consumidores ou clientes: acedem apenas a interface  Resultado são módulos  Rotinas  Objectos/classes  Pacotes 2013/2014 Fundamentos de Programação 3 Ou «encapsulamento». A ver mais tarde.
  • 4.  Interface  Como se usa?  O que faz?  Qual o contrato entre produtor e consumidor?  Implementação  Como funciona?  Qual o mecanismo? 2013/2014 Fundamentos de Programação 4
  • 5.  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! 2013/2014 Fundamentos de Programação 5
  • 6.  Métodos e rotinas  Cabeçalho apenas  Classes  Operações  Propriedades  … 2013/2014 Fundamentos de Programação 6
  • 7.  Métodos e rotinas  Corpo apenas  Classes  Métodos auxiliares  Métodos enquanto implementação de operações  Atributos  … 2013/2014 Fundamentos de Programação 7
  • 8. 2013/2014 Fundamentos de Programação 8
  • 9. { if (m == 0 && n == 0) throw new 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); int possibleGcd = Math.min(m, n); while (m % possibleGcd != 0 || n % possibleGcd != 0) possibleGcd--; return possibleGcd; } /** * 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) */ public static int gcd(int m, int n) 2013/2014 Fundamentos de Programação 9 { if (m == 0 && n == 0) throw new 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); int possibleGcd = Math.min(m, n); while (m % possibleGcd != 0 || n % possibleGcd != 0) possibleGcd--; return possibleGcd; } Interface: como se usa. Interface: o que faz, contrato. 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) */ public static int gcd(int m, int n) 2013/2014 Fundamentos de Programação 10 { if (m == 0 && n == 0) throw new IllegalArgumentException("Illegal call with " + "m = 0 and n = 0."); m = Math.abs(m); n = Math.abs(n); while (m != 0) { int temporary = m; m = n % m; n = temporary; } return n; } /** * 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) */ public static int gcd(int m, int n) Implementação alternativa: funcionamento diferente. Mesma interface: usa-se da mesma forma, faz o mesmo.
  • 11. 2013/2014 Fundamentos de Programação 11
  • 12. private final double abscissa; private final double ordinate; { this.abscissa = abscissa; this.ordinate = ordinate; } { return abscissa; } { return ordinate; } { return Math.sqrt(abscissa * abscissa + ordinate * ordinate); } { return Math.atan2(ordinate, abscissa); } } 2013/2014 Fundamentos de Programação 12 public class Point { public Point(final double abscissa, final double ordinate) public double getAbscissa() public double getOrdinate() public double getRadius() public double getAngle() } private final double abscissa; private final double ordinate; { this.abscissa = abscissa; this.ordinate = ordinate; } { return abscissa; } { return ordinate; } { return Math.sqrt(abscissa * abscissa + ordinate * ordinate); } { return Math.atan2(ordinate, abscissa); } } Interface: • Como se usa. Interface em documentação (omissa): • O que representa. • Como se comporta. • Contratos. • Etc. Implementação: • Como funciona.
  • 13. public class Point { private double rho; private double theta; public Point(final double abscissa, final double ordinate) { rho = Math.sqrt(abscissa * abscissa + ordinate * ordinate); theta = Math.atan2(ordinate, abscissa); } public double getAbscissa() { return rho * Math.cos(theta); } public double getOrdinate() { return rho * Math.sin(theta); } public double getRadius() { return rho; } public double getAngle() { return theta; } } 2013/2014 Fundamentos de Programação 13 private final double rho; private final double theta; { rho = Math.sqrt(abscissa * abscissa + ordinate * ordinate); theta = Math.atan2(ordinate, abscissa); } { return rho * Math.cos(theta); } { return rho * Math.sin(theta); } { return rho; } { return theta; } } public class Point { public Point(final double abscissa, final double ordinate) public double getAbscissa() public double getOrdinate() public double getRadius() public double getAngle() } Implementação alternativa: • Funcionamento diferente. Mesma interface: • Usa-se da mesma forma!
  • 14.  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 2013/2014 Fundamentos de Programação 14
  • 15. Característica de classe Tipo Acesso Operações Interface Público Propriedades (operações inspectoras obtêm e operações modificadoras alteram) Interface Público Métodos auxiliares Implementação Privado Métodos enquanto implementação de operações Implementação Público Atributos Implementação Privados 2013/2014 Fundamentos de Programação 15
  • 16.  Propriedades são interface (inspectores e modificadores) public class Rational { … public int getNumerator() { … } public int getDenominator() { … } … } Rational rational = new Rational(1, 4); out.println(rational.getDenominator()); 2013/2014 Fundamentos de Programação 16 Por razões históricas, os inspectores das propriedades começam com o horrível prefixo get.
  • 17.  Atributos são implementação public class Rational { private int numerator; private int denominator; … } Rational rational = new Rational(1, 4); rational.denominator = 0; 2013/2014 Fundamentos de Programação 17
  • 18.  Métodos auxiliares são implementação public class Rational { … public Rational(final int numerator, final int denominator) { … reduce(); } … private void reduce() { final int gcd = IntegerUtilities.gcd(numerator, denominator); numerator /= gcd; denominator /= gcd; } … } Rational rational = new Rational(2, 8); rational.reduce(); 2013/2014 Fundamentos de Programação 18
  • 19.  Inicializações e atribuições afectam apenas referências!  Necessário construtor por cópia public class Point { … public Point(final Point other) { abscissa = other.getAbscissa(); ordinate = other.getOrdinate(); } … private final double abscissa; private final double ordinate; } Point a = new Point(1.0, -2.0); Point b = a; Point c = new Point(a); 2013/2014 Fundamentos de Programação 19 a (1; -2) b c (1; -2)
  • 20.  Operador == com referências verifica identidade e não igualdade!  Necessária operação! public class Point { … public boolean isEqualTo( final Point other) { return getAbscissa() == other.getAbscissa() && getOrdinate() == other.getOrdinate(); } … } Point a = new Point(1.0, -2.0); Point b = a; Point c = new Point(a); 2013/2014 Fundamentos de Programação 20 a (1; -2) b c (1; -2) b == a? Sim. c == a? Não! b.isEqualTo(a)? Sim. c.isEqualTo(a)? Sim! Mais tarde usaremos equals().
  • 21.  Encapsulação em Java  Abstracção  Módulos em Java  Interface vs. implementação  Modificadores de acesso public e private  Vantagens da encapsulação  Cópia de instâncias usando construtor  Igualdade entre instâncias usando operação 2013/2014 Fundamentos de Programação 21
  • 22.  Encapsulamento  Cópia de instâncias  Igualdade entre instâncias 2013/2014 Fundamentos de Programação 22

Hinweis der Redaktion

  1. Este exemplo não é o melhor. Faria mais sentido numa classe cujas instâncias fossem mutáveis. Mas a boa prática é que as classes de valor/igualdade sejam imutáveis, o que elimina a necessidade de criação de cópias, pois não há qualquer problema em ter várias referências a referenciar a mesma instância, já que esta jamais poderá sofrer alterações. Atenção! Não confundir com a clonagem, que é polimórfica, aplicando-se a objectos, i.e., aplicando-se a classes de referência/identidade.
  2. Este método faz sobretudo sentido no caso de classes de valor/igualdade. Mas pode ser útil também no caso de classes de referência/identidade. O método equals() é polimórfico e difícil de implementar correctamente, ficando a sua explicação adiada para o momento em que se falar de polimorfismo.