Concurso_JavaWeb_Cap2_Abstracao (1).pdf

9
Rafael B. Pereira (http://www.rbper.com) 76 Nesse caso a cláusula this() serve para chamar o construtor da própria classe. Agora vamos supor que fosse desejado chamar um construtor da classe pai. Como isso poderia ser feito? Bastaria usar a cláusula super(). public class NovoEstoque extends Estoque { // Construtor public NovoEstoque (int qtd, int valor) { super (qtd, valor*2); } } As cláusulas this() e super() devem ser sempre as primeiras do construtor, ou então ocorrerá um erro de compilação. Além disso, no mecanismo de herança do Java, a cláusula super() já é implicitamente chamada pelo compilador sempre que não houver uma cláusula super() ou this() especificada pelo programador. Abstração Abstração é a possibilidade de esconder do usuário toda complexidade de implementação de um conceito, deixando visível somente uma interface de serviços para ser utilizada. Consiste em considerar apenas os aspectos essenciais de uma entidade, ignorando aqueles tidos por irrelevantes. É uma técnica importante para lidar com a complexidade de sistemas. Classes e Métodos abstratos Uma classe abstrata é uma classe cujo principal objetivo é servir de base para outras classes que compartilharão comportamentos e características similares. Ela é desenvolvida para representar conceitos abstratos, ao contrário das classes concretas.

Transcript of Concurso_JavaWeb_Cap2_Abstracao (1).pdf

Page 1: Concurso_JavaWeb_Cap2_Abstracao (1).pdf

Rafael B. Pereira (http://www.rbper.com)

76

Nesse caso a cláusula this() serve para chamar o construtor da própria classe. Agora vamos supor que fosse desejado chamar um construtor da classe pai. Como isso poderia ser feito? Bastaria usar a cláusula super(). public class NovoEstoque extends Estoque {

// Construtor

public NovoEstoque (int qtd, int valor)

{

super (qtd, valor*2);

}

}

As cláusulas this() e super() devem ser sempre as primeiras do construtor, ou então ocorrerá um erro de compilação. Além disso, no mecanismo de herança do Java, a cláusula super() já é implicitamente chamada pelo compilador sempre que não houver uma cláusula super() ou this() especificada pelo programador.

Abstração Abstração é a possibilidade de esconder do usuário toda complexidade de implementação de um conceito, deixando visível somente uma interface de serviços para ser utilizada. Consiste em considerar apenas os aspectos essenciais de uma entidade, ignorando aqueles tidos por irrelevantes. É uma técnica importante para lidar com a complexidade de sistemas.

Classes e Métodos abstratos

Uma classe abstrata é uma classe cujo principal objetivo é servir de base para outras classes que compartilharão comportamentos e características similares. Ela é desenvolvida para representar conceitos abstratos, ao contrário das classes concretas.

Page 2: Concurso_JavaWeb_Cap2_Abstracao (1).pdf

Capítulo 2 – Orientação a Objetos

77

Uma classe abstrata não pode ser instanciada. Qualquer tentativa de fazê-lo irá gerar um erro de compilação. Da mesma forma, uma classe que tenha algum método abstrato deverá ser declarada como abstrata. abstract class Produto

{

private String nome;

private double preco;

abstract Fabricante getFabricante();

}

A classe Produto foi modelada como abstrata, pois representa um conceito, e não um objeto real. Além disso, o seu método getFabricante() é abstrato, ou seja, deve ser implementado pelas suas subclasses. Podem existir, por exemplo, várias subclasses de Produto, como TV, DVD ou Videogame. Cada um desses objetos possui um nome e um preço, e também precisam implementar o método getFabricante(), que para uma classe pode ser fixa (todas as TVs são da Empresa X), para outra pode exigir uma consulta a um banco de dados, e assim por diante. Esse exemplo simples serve apenas para ilustrar que a classe abstrata serve de modelo para outras, mas o comportamento dos métodos abstratos será definido nas classes concretas. Uma subclasse de uma classe abstrata deve implementar os métodos abstratos da classe-pai, ou então declará-los como abstratos (mas desta forma também não poderá ser instanciada, pois será abstrata). Lembre-se de que uma classe abstrata pode definir métodos não abstratos, implementando-os normalmente. Atenção!

Uma classe abstrata pode implementar alguns métodos – mas basta que um deles seja abstrato para que a classe deva ser abstrata também. Além disso, a classe não pode ser final (se é final, não pode ser estendida!), e nem possuir métodos abstratos que também sejam estáticos. Essa combinação é inválida, pois métodos estáticos não podem ser sobrepostos (na subclasse), gerando portanto um erro de compilação.

Page 3: Concurso_JavaWeb_Cap2_Abstracao (1).pdf

Rafael B. Pereira (http://www.rbper.com)

78

Interfaces Uma interface é um agrupamento de métodos relacionados entre si. Pensando em um exemplo do mundo real, uma TV possui vários comandos em comum, como Ligar, Desligar, TrocarCanal, e assim por diante. Então nós conhecemos uma interface básica para a TV, e daí podemos criar um controle remoto universal, que embora não conheça os detalhes internos da TV, nem a sua marca, pode assumir que ela vai ter as capacidades de ligar, desligar, trocar de canal e alterar o seu volume: interface TV {

void ligar();

void desligar();

void trocarCanal(int canal);

void aumentarVol(int incremento);

void diminuirVol(int decremento);

}

A interface é diferente de uma classe, pois ela não possui corpo de métodos ou qualquer tipo de implementação. À parte disso, ela funciona de forma similar a uma classe abstrata: os seus métodos são implicitamente abstratos. Para implementar uma interface, uma classe deve utilizar a palavra-chave implements: class TVLCD42F implements TV {

int color;

public void ligar() {

...

}

public void desligar() {

...

}

...

}

A vantagem de se criar aplicações Java usando interfaces é que é mais fácil estender e integrar um sistema a medida que novas funcionalidades são incorporadas. As classes já implementadas podem ser mantidas na aplicação, e novas classes que modificam as funcionalidades do sistema podem ser

Page 4: Concurso_JavaWeb_Cap2_Abstracao (1).pdf

Capítulo 2 – Orientação a Objetos

79

criadas a partir das interfaces já existentes, mantendo a compatibilidade do código. A interface também é útil para determinar que um conjunto de objetos distintos possui um mesmo comportamento em comum, mas sem obrigar que esses objetos sejam relacionados (por herança, por exemplo). Um exemplo é a interface Comparable, que dita que um objeto que a implemente deva fornecer um método compareTo() para que instâncias desse objeto possam ser comparadas. Uma classe responsável por ordenar objetos ou imprimir de forma ordenada uma seqüência de objetos pode admitir apenas objetos que implementam a interface Comparable. A seguir estão listadas algumas classes que implementam a interface Comparable, e por isso devem implementar o método compareTo(): Byte, Double, Float, Integer, Long, Short, String, BigDecimal, BigInteger e Date. Interfaces são normalmente utilizadas para definir constantes e métodos abstratos que devem ser implementados em classes. Segue outro exemplo de uma interface, dessa vez com a definição de uma propriedade constante (final): public interface Freezer {

final double zeroAbs = -273.15;

void gelar (double temperatura);

void descongelar();

}

Atenção!

Ao contrário de uma classe abstrata, uma interface não possui nenhum tipo de implementação, mas apenas a definição (assinatura) dos métodos que devem ser implementados por uma classe. Interfaces também não podem ser instanciadas. Uma vantagem de utili-zar interfaces ao invés de classes abstratas, é que uma classe pode implementar várias interfaces, separando-as por vírgulas após a cláusula implements. Essa é uma forma de simular a “herança múltipla” em Java.

Page 5: Concurso_JavaWeb_Cap2_Abstracao (1).pdf

Rafael B. Pereira (http://www.rbper.com)

80

Interfaces são sempre implicitamente estáticas e abstratas, e todos os seus métodos são automaticamente públicos. Porém, ao implementar a interface, os métodos devem ser declarados como públicos, ou o compilador irá assumir que o programador está tentando diminuir a visibilidade do método para o acesso default (sem nenhum modificador). Ao contrário das classes, que sempre são extensões da classe Object, as interfaces não possuem um ancestral comum. Outra diferença é que uma classe pode estender apenas uma outra classe, mas pode implementar (implements) várias interfaces: class Teste implements Runnable, Comparable {

void run () {

...

}

int compareTo(Object o) {

...

}

}

Exercícios Atenção: As respostas comentadas de todos os exercícios dos capítulos e

dos simulados encontram-se no final do livro. Não deixe de conferi-los. Q2.1. (2001, ESAF - BACEN, Analista de Sistemas) Os padrões a partir dos quais os objetos são criados são denominados: a) classes b) métodos c) exceções d) entidades e) instâncias Q2.2. (2008, CESGRANRIO - BR Distribuidora, Analista de Sistemas Desenvolvimento em Java, CRM e Web) Entre os conceitos da modelagem de sistemas orientados a objeto, NÃO se inclui:

Page 6: Concurso_JavaWeb_Cap2_Abstracao (1).pdf

Capítulo 2 – Orientação a Objetos

81

a) herança simples. b) herança múltipla. c) agregação. d) normalização. e) associação. Q2.3. (2009, FUNRIO – FURNAS, Tecnologia da Informação) Na orientação a objetos, classes que NÃO geram instâncias diretas (objetos) são denominadas classes a) primárias. b) abstratas. c) virtuais. d) básicas. e) derivadoras. Q2.4. (2008, SBC - POSCOMP) Os membros de uma classe (atributos e operações) podem ser privados, protegidos ou públicos em programação orientada a objetos. Suponha agora que se tenha um dado em uma determinada classe que só deve ser acessado por instâncias dessa mesma classe. Assinale a alternativa que melhor descreve o que esse dado pode ser. a) Somente público b) Somente privado c) Somente protegido d) Privado ou público e) Privado ou protegido Q2.5. (2009, ESAF - ANA, Analista Administrativo) Se, na superclasse, um método é declarado protected, o(s) modificador(es) aplicável(is) na sobrescrita do método é(são) a) private. b) private e protected. c) “default”. d) protected, “default” e public. e) protected e public.

Page 7: Concurso_JavaWeb_Cap2_Abstracao (1).pdf

Rafael B. Pereira (http://www.rbper.com)

82

Q2.6. (2009, CESGRANRIO – Casa da Moeda, Analista de Negócios de TI) Em programação orientada a objetos, há sobrecarga (overloading) de um método de uma classe quando a) o método é utilizado em uma grande quantidade de módulos do sistema. b) o método invoca uma grande quantidade de métodos de outras classes. c) o método possui a maior complexidade ciclomática da hierarquia de classes a que pertence. d) um outro método, com o mesmo nome e parâmetros de entrada (assinatura) diferentes, existe na classe. e) um outro método, com o mesmo nome e mesmos parâmetros de entrada (assinatura), existe em uma subclasse. Q2.7. (2006, CESGRANRIO - DECEA, Técnico de Defesa Aérea e Controle de Tráfego Aéreo) Em Java, a palavra-chave que implementa uma relação de herança de classes é: a) isFatherOf. b) isChildOf. c) inherits. d) derives. e) extends.

Q2.8. (2002, UERJ – UERJ, Analista de Sistemas) Em Java, a instrução usada para fazer referência a métodos e variáveis de uma superclasse é conhecida por: a) this b) lang c) super d) container e) new Q2.9. (2005, NCE-UFRJ - BNDES, Analista de Sistemas) Observe o seguinte trecho de código em Java: interface I1 {

public void m1();

}

Page 8: Concurso_JavaWeb_Cap2_Abstracao (1).pdf

Capítulo 2 – Orientação a Objetos

83

interface I2 extends I1 {

public void m2();

}

class C1 implements I2 {

// o código da classe C1 segue aqui

}

public class Teste {

public void m3() {

// o código do método m3() segue aqui

}

public static void main(String args[]) {

I1 obj = new C1();

obj.xx(); // substitua xx pela

// resposta apropriada

}

}

Os possíveis valores para xx no código anterior são: a) somente m1; b) somente m2; c) somente m1 e m2; d) m1 e m3; e) m1, m2 e m3. QD2. Questão Discursiva. No contexto de OO, a herança é uma violação do encapsulamento? Quais são os problemas que o projetista de software pode enfrentar ao optar pelo uso da herança?

Page 9: Concurso_JavaWeb_Cap2_Abstracao (1).pdf

Rafael B. Pereira (http://www.rbper.com)

84

Referências Dicas de concurso

Livro: Thinking in Java, 3rd Edition Bruce Eckel Fundamentos da Programação Orientada a Objetos http://java.sun.com/docs/books/tutorial/java/concepts Controle de Acesso em Java http://java.sun.com/docs/books/tutorial/java/javaOO/accesscontrol.html Análise e Modelagem Orientada a Objetos:

• Unified Modeling Language (http://www.uml.org) • Martin Fowler (www.martinfowler.com)

• Livro: UML Essencial (3ª edição)

Martin Fowler, Cris Kobryn, Grady Booch, Et Al.

• Object-Oriented Analysis and Design with Applications (2nd Edition), Grady Booch

Livros são uma ferramenta indispensável para o aprendizado. Busque no edital a bibliografia reco-mendada, e de acordo com o conteúdo programático e a necessidade de estudo, compre-os. Tente evitar, em um primeiro momento, o uso de apostilas e material da internet, pois grande parte está repleta de erros, sem revisão ou relação com o edital da prova.