Mtodos de Programao II Mestrado Integrado em Engenharia
- Slides: 18
Métodos de Programação II (Mestrado Integrado em Engenharia de Comunicações) 1º Ano, 2º Semestre Tipos Genéricos, a classe Array. List, Hierarquias de classes e Herança em Java Métodos Programação II 1
Tipos genéricos em Java 1. 5 • Uma classe pode ser definida à custa de um tipo genérico. Este é definido usando parâmetros de “tipo” (i. e. não primitivos). • Usando este conceito, podemos ter uma infinidade de variantes de uma classe. Exemplo: public class Ponto<T> { // tipo genérico Ponto<T> private T x; private T y; // Métodos public Ponto(T cx, T cy) { this. x = cx; this. y = cy; } public T get. X() { return this. x; } public T get. Y() { return this. y; } public void set. X(T cx) { this. x = cx }. . . } • Podemos declarar: Ponto<Integer> c = new Ponto<Integer>(); • Ou então: Ponto<Double> d = new Ponto<Double>(); • Usando assim tipos parametrizados… Métodos Programação II 2
Primeiras Colecções – a classe Array. List<E> Tipo referenciado • O Java 1. 5. oferece um conjunto de classes (que implementam estruturas de dados tradicionais) para armazenamento de objectos. • Estas, agrupam os objectos em unidades compactas e estruturadas, implementando também as necessárias operações para a correcta manipulação e organização dos dados. • Um exemplo é a classe Array. List que implementa a estrutura de dados vector de dados (array dinâmico) mas sem restrições de crescimento. • Um Array. List é uma sequência de elementos (tem uma ordem definida pela adição de novos elementos) Métodos Programação II 3
Construção & métodos de Array. List<E> • Construção: – Array. List<Ponto> lista = new Array. List<Ponto>(); • Operações e seus métodos – Adição de uma novo elemento ao fim da lista: lista. add(new Ponto(1, 2)); – Adição numa posição definida: lista. add(3, new Ponto(1, 2)); Implica que equals() esteja implementado – Eliminar um elemento: lista. remove(p); em Ponto – Eliminar uma posição: lista. remove(1); – Obter um obj numa posição: Ponto p 2 = lista. get(2); – Saber a posição de um obj: int index = lista. index. Of(p 2); – Saber tamanho da lista: int len = lista. size(); – Substituir uma posição: lista. set(2, new Ponto(3, 4)); – Criar um array cópia do Array. List: Object a[] = lista. to. Array(); Métodos Programação II 4
Exercício: class Banco usando Array. List class Banco { private Array. List<Conta> lista; private String nome; private double saldo; Banco(String n) { this. nome = n; this. lista = new Array. List<Conta>(); this. saldo = 0. 0; } public void taxas(double valor) { for(Conta c: this. lista) c. debito(valor); } public double saldo_banco() { double temp = 0. 0; for(Conta c: this. lista) temp += c. get. Saldo(); return(temp); } } Métodos Programação II 5
Herança • Um grande trunfo da programação orientada aos objectos é a sua capacidade de reutilização de código. • Reutilização por duas vias: – Composição de classes: Definir uma nova classe usando objectos de classes já pré definidas – Hierarquia de classes: Definir uma nova classe que é uma especialização da uma classe pré definida: Assim, todo o código da classe geral é herdade pela nova classe. – Temos assim, não um plano de classes mas uma hierarquia Métodos Programação II 6
Herança: Exemplo • Temos a classe Ponto (2 dimensões) que passamos a chamar Ponto 2 D. • Queremos agora definir uma nova classe para trabalhar no espaço tridimensional (Ponto 3 D) • Esta nova classe de reutilizar todo o código de Ponto 2 D adicionando nova informação (neste caso uma terceira dimensão). Em Java define-se: Keyword para definir subclasse class Ponto 3 D extends Ponto 2 D { private double z; Ponto 3 D(double x, double y, double z) { super(x, y); this. z = z; } Referência à super classe Public double get. Z() // método local a Ponto 3 D { return this. z; } } Métodos Programação II 7
Herança em Java • Definição de uma subclasse implica a definição de um subtipo! • Herança simples (uma classe tem um só “progenitor”) • Herdar e ter “acesso” não é necessariamente a mesma coisa (pelas questões de visibilidade) • Três pontos a resolver: – Redefinição (reescrita) de métodos e variáveis – Procura de métodos (lookup de métodos dinâmico) – Criação das instâncias das subclasses. • Há sempre forma de parar a hierarquia, pela keyword final. Uma classe definida usando “final class” não pode ter subclasses. Uma variável ou método final não pode ser reescrito. Métodos Programação II 8
Redefinição de métodos • Um método na subclasse reescreve o método herdado se tiver a mesma assinatura. • Exemplo do método to. String() em Ponto 3 D. class Ponto 3 D extends Ponto 2 D { …. public String to. String() { return super. to. String() + “, ” + this. z; } } • Criação de instâncias: – – Ponto 2 D p 1 = new Ponto 2 D(1, 2); Ponto 2 D p 2 = new Ponto 3 D(1, 2, 3); Ponto 3 D p 3 = new Ponto 3 D(3, 2, 1); String t = p 2. to. String(); Métodos Programação II Dynamic Binding: compilador atribui o tipo à variável; o interpretador pode ter de decidir o tipo de uma variável. 9
Redefinição de variáveis public class A { int i = 0; int m() { return this. i; } } public class B extends A { int this. i = 1; // i de A é “shadowed” int m() { return this. i; } // m é “overriden” } …. A a = new A(); A b = new B(); b. m() // dá como resultado 1 e não 0 !! Por exemplo, um método de B poderia ter o seguinte código: public int mb() { this. i = super. i + 10; return this. i + this. m() + super. m(); } i -> local super. i -> i da superclasse this. m() -> local super. m() -> m() da superclasse Métodos Programação II 10
Redefinição: Exemplo public static void main(String args[]) { public class C extends A public class A A a 1, a 2, a 3, a 4; { a 3 = new C(); a 4 = new D(); { private int a; a 1 = new A(); a 2 = new B(); private a 4. metd(); int c; a 1. metd(); public A() { this. a = 1; } a 2. metd(); a 3. metd(); C() { this. c = 3; } out. println("a 1. metd() = " +public a 1. da. Val()); public int da. Val() { return this. a; } int da. Val() { return this. c; } out. println("a 2. metd() = " +public a 2. da. Val()); public void metd() { this. a += 10; } void metd() { this. c += 30 ; } out. println("a 3. metd() = " +public a 3. da. Val()); } out. println("a 4. metd() = "}+ a 4. da. Val()); public class B extends A public class D extends C } { { private int b; private int d; public B() { this. b = 2; } public D() { this. d = 33; } public int da. Val() { return this. b; } public int da. Val() { return this. d; } public void metd() { this. b += 20 ; } public void metd() { this. d = this. d * 10 + 3 ; } } } Métodos Programação II 11
Exemplo EMPREGADO GESTOR MOTORISTA Métodos Programação II 12
Exemplo public class Empregado { // Variáveis de Classe public static double sal. Dia = 50. 00; public static double get. Sal. Dia() { return sal. Dia; } // Variáveis de Instância private String nome; private int dias; // dias de trabalho no mês // Construtores public Empregado(String nome, int dias) { this. dias = dias; this. nome = nome; } // Métodos de Instância public int get. Dias() { return dias; } public double salario() { return dias * get. Sal. Dia(); } public String get. Nome() { return nome; } } public class Motorista extends Empregado { // Variáveis de Classe public static double valor. Km = 0. 98; public class Gestor extends Empregado public static double muda. Val. Km(double nv. Km) { // Variáveis de Instância e Construtores { valor. Km = nv. Km; } // Variáveis de Instância e Construtores private double bonus; public Gestor(String nm, int dias, double bon) private int km; { super(nm, dias); bonus = bon; } public Motorista(String nm, int dias, double bon, int km) // Métodos de Instância {super(nm, dias); bonus = bon; this. km = km; } public double get. Bonus() { return bonus; } // Métodos de Instância public double salario() public double get. Bonus() { return bonus; } { return get. Sal. Dia()*this. get. Dias()*bonus; } public double salario() { return get. Sal. Dia()*this. get. Dias()*bonus + (valor. Km*km); } } Métodos Programação II 13 }
Interpretação de this em hierarquias de classes Invocar a. teste() (sendo a uma instância de Sub. A) : A interpretação de this refere-se sempre ao objecto para onde a mensagem é enviada. Neste caso, como teste() é um método herdado, ele é invocado em Super. No entanto como teste() refere a this. get. X(), a procura do método faz-se na subclass Sub. A. Aqui acontece simplesmente o return x, sendo x a variável de Sub. A. Assim o resultado desta mensagem é x = 20. Em geral, a expressão this. m() onde quer que seja encontrada no código de um método de instância de uma dada classe da hierarquia, corresponderá sempre à execução do método m() da classe do receptor da mensagem que despoletou o algoritmo de procura Métodos Programação II 14
Hierarquia em Java: classe Object • A classe Object representa o topo da hierarquia de classes em Java. • Uma variável do tipo Object pode fazer referência para qualquer tipo referenciado. • Especificam os métodos clone(), equals() e to. String(). • Contém o método get. Class() que retorna a classe a que um objecto pertence. • Com get. Class(). get. Name() obtemos o nome da classe. Métodos Programação II 15
Notas finais sobre Herança • Só podemos user a keyword super uma vez numa expressão e. g. a expressão super. m() é inválida. • Variáveis e métodos de classe não são herdadas mas as variáveis podem ser redefinidas. Aos métodos static acontece o inlining (o compilador substitui invocação por código efectivo) em cada subclasse. • Pelo facto de uma variável de um dado tipo estático poder possuir diferentes tipos dinâmicos (ou formas) em tempo de execução, ela diz-se polimórfica. • Polimorfismos das variáveis = princípio da substituição. • Algoritmo de procura dinâmica de métodos e associação dinâmica! Permite ao interpretador decidir (em situações de herança) qual o método a executar. Métodos Programação II 16
Exercícios • Definir uma classe Forma. • Definir a seguinte hierarquia de classes: • Implementar os métodos apresentados. • Definir a classe Fig. Geo que guarda um conjunto de figuras geométricas. • Adicionar a classe Quadrado e Elipse (subclasse de Círculo) • Implementar um método que determina a figura com a maior área e qual o seu tipo e outro método para o maior perímetro. • Um método para contabilizar o número de figuras por tipo. Métodos Programação II 17
Exercícios • Criar um banco que guarda as contas num Array. List • Definir vários novos tipos de conta: conta a prazo, conta jovem, conta ordenado e conta Capital. – Prazo, tem uma taxa e um número de dias – Jovem, tem taxa fixa de 1% ao ano – Ordenado, dá um plafond de um valor pré definido. Isto é, permite estar com saldo devedor até ao montante estabelecido. – Conta Capital, que contém uma taxa de juro variável, indexada por períodos. A rentabilidade é calculada sobre estes períodos. • Calcular os juros que o banco tem de pagar aos seus clientes. • Calcular o nº de contas por tipo bem como o saldo total depositado no banco referente a contas Capital. Métodos Programação II 18
- Gynefix diu
- Mtodos
- Mtodos
- Mtodos
- Mtodos
- Mtodos
- Mtodos
- Mtodos
- Parche anticonceptivo
- Mtodos
- Mestrado utfpr londrina
- Passei no mestrado
- Economia internacional e estudos europeus
- Direito forense e arbitragem
- Agradecimento tese doutorado
- Instituto integrado francisco serrano muñoz
- Relatorio integrado o que é
- Sisaresp
- Que es un integrado