• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Apresentação 10 - Fundamentos de Programação
 

Apresentação 10 - Fundamentos de Programação

on

  • 760 views

Apresentação 10 da unidade curricular de Fundamentos de Programação da Universidade Europeia. Alterações de Manuel Menezes de Sequeira sobre versão original por vários autores do DCTI do ...

Apresentação 10 da unidade curricular de Fundamentos de Programação da Universidade Europeia. Alterações de Manuel Menezes de Sequeira sobre versão original por vários autores do DCTI do ISCTE-IUL, incluindo Luís Nunes, Ricardo Ribeiro, André Santos e o próprio Manuel Menezes de Sequeira.

Statistics

Views

Total Views
760
Views on SlideShare
372
Embed Views
388

Actions

Likes
0
Downloads
24
Comments
0

3 Embeds 388

http://campusonline.europeia.pt 371
http://campusonline.isla.pt 16
http://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

CC Attribution License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Apresentação 10 - Fundamentos de Programação Apresentação 10 - Fundamentos de Programação Presentation Transcript

    • 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
    • { this.abscissa = abscissa; this.ordinate = ordinate; } { return abscissa; } { return ordinate; } { return Math.sqrt(abscissa * abscissa + ordinate * ordinate); } { return Math.atan2(ordinate, abscissa); } private final double abscissa; private final double ordinate; } 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() } { this.abscissa = abscissa; this.ordinate = ordinate; } { return abscissa; } { return ordinate; } { return Math.sqrt(abscissa * abscissa + ordinate * ordinate); } { return Math.atan2(ordinate, abscissa); } private final double abscissa; private final double ordinate; } Interface: • Como se usa. Interface em documentação (omissa): • O que representa. • Como se comporta. • Contratos. • Etc. Implementação: • Como funciona.
    • public class Point { 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; } private double theta; private double rho; } 2013/2014 Fundamentos de Programação 13 { 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; } private final double theta; private final double rho; } 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() { 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 int abscissa; private final int 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