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

8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito
tatianehilda
 
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptxResponde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
AntonioVieira539017
 
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdf
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdfatividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdf
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdf
Autonoma
 
Expansão Marítima- Descobrimentos Portugueses século XV
Expansão Marítima- Descobrimentos Portugueses século XVExpansão Marítima- Descobrimentos Portugueses século XV
Expansão Marítima- Descobrimentos Portugueses século XV
lenapinto
 

Kürzlich hochgeladen (20)

Aula prática JOGO-Regencia-Verbal-e-Nominal.pdf
Aula prática JOGO-Regencia-Verbal-e-Nominal.pdfAula prática JOGO-Regencia-Verbal-e-Nominal.pdf
Aula prática JOGO-Regencia-Verbal-e-Nominal.pdf
 
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM  POLÍGON...Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM  POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...
 
Aula 67 e 68 Robótica 8º ano Experimentando variações da matriz de Led
Aula 67 e 68 Robótica 8º ano Experimentando variações da matriz de LedAula 67 e 68 Robótica 8º ano Experimentando variações da matriz de Led
Aula 67 e 68 Robótica 8º ano Experimentando variações da matriz de Led
 
Poesiamodernismo fase dois. 1930 prosa e poesiapptx
Poesiamodernismo fase dois. 1930 prosa e poesiapptxPoesiamodernismo fase dois. 1930 prosa e poesiapptx
Poesiamodernismo fase dois. 1930 prosa e poesiapptx
 
Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!
Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!
Apresentação | Dia da Europa 2024 - Celebremos a União Europeia!
 
classe gramatical Substantivo apresentação..pptx
classe gramatical Substantivo apresentação..pptxclasse gramatical Substantivo apresentação..pptx
classe gramatical Substantivo apresentação..pptx
 
Aula 1 - Psicologia Cognitiva, aula .ppt
Aula 1 - Psicologia Cognitiva, aula .pptAula 1 - Psicologia Cognitiva, aula .ppt
Aula 1 - Psicologia Cognitiva, aula .ppt
 
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxSlides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
 
8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito
 
3 2 - termos-integrantes-da-oracao-.pptx
3 2 - termos-integrantes-da-oracao-.pptx3 2 - termos-integrantes-da-oracao-.pptx
3 2 - termos-integrantes-da-oracao-.pptx
 
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptxResponde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
 
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdf
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdfatividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdf
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdf
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
 
Expansão Marítima- Descobrimentos Portugueses século XV
Expansão Marítima- Descobrimentos Portugueses século XVExpansão Marítima- Descobrimentos Portugueses século XV
Expansão Marítima- Descobrimentos Portugueses século XV
 
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
 
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
 
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*
 
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxSlides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
 
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdfApresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
 
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdfTCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
 

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.