SlideShare uma empresa Scribd logo
1 de 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

Mais conteúdo relacionado

Mais procurados

Mais procurados (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
 

Destaque

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
 

Destaque (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
 

Semelhante a 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
 

Semelhante a 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
 

Mais de Manuel Menezes de Sequeira

Mais de 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
 

Último

19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf
marlene54545
 
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
 
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
 
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
 
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
HELENO FAVACHO
 
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
 

Último (20)

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
 
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf
 
migração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenosmigração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenos
 
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
 
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
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
 
6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.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
 
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
 
GÊNERO CARTAZ - o que é, para que serve.pptx
GÊNERO CARTAZ - o que é, para que serve.pptxGÊNERO CARTAZ - o que é, para que serve.pptx
GÊNERO CARTAZ - o que é, para que serve.pptx
 
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfPROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
 
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
 
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfRecomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
 
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdfPROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
 
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
 
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
 
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.
 
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...
 
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
 
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
 

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

Notas do Editor

  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.