Você está na página 1de 9

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

com)

Nesse caso a clusula this() serve para chamar o construtor da prpria classe.
Agora vamos supor que fosse desejado chamar um construtor da classe pai.
Como isso poderia ser feito? Bastaria usar a clusula super().
public class NovoEstoque extends Estoque {
// Construtor
public NovoEstoque (int qtd, int valor)
{
super (qtd, valor*2);
}
}

As clusulas this() e super() devem ser sempre as primeiras do construtor, ou


ento ocorrer um erro de compilao. Alm disso, no mecanismo de herana
do Java, a clusula super() j implicitamente chamada pelo compilador
sempre que no houver uma clusula super() ou this() especificada pelo
programador.

Abstrao
Abstrao a possibilidade de esconder do usurio toda complexidade de
implementao de um conceito, deixando visvel somente uma interface de
servios para ser utilizada.
Consiste em considerar apenas os aspectos essenciais de uma entidade,
ignorando aqueles tidos por irrelevantes. uma tcnica importante para lidar
com a complexidade de sistemas.

Classes e Mtodos abstratos


Uma classe abstrata uma classe cujo principal objetivo servir de base para
outras classes que compartilharo comportamentos e caractersticas similares.
Ela desenvolvida para representar conceitos abstratos, ao contrrio das
classes concretas.

76

Captulo 2 Orientao a Objetos

Uma classe abstrata no pode ser instanciada. Qualquer tentativa de faz-lo


ir gerar um erro de compilao. Da mesma forma, uma classe que tenha
algum mtodo 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


no um objeto real. Alm disso, o seu mtodo getFabricante() abstrato, ou
seja, deve ser implementado pelas suas subclasses. Podem existir, por
exemplo, vrias subclasses de Produto, como TV, DVD ou Videogame. Cada
um desses objetos possui um nome e um preo, e tambm precisam
implementar o mtodo getFabricante(), que para uma classe pode ser fixa
(todas as TVs so 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 mtodos abstratos ser definido nas classes concretas.
Uma subclasse de uma classe abstrata deve implementar os mtodos
abstratos da classe-pai, ou ento declar-los como abstratos (mas desta forma
tambm no poder ser instanciada, pois ser abstrata).
Lembre-se de que uma classe abstrata pode definir mtodos no abstratos,
implementando-os normalmente.
Ateno!
Uma classe abstrata pode implementar alguns
mtodos mas basta que um deles seja abstrato para
que a classe deva ser abstrata tambm. Alm disso, a
classe no pode ser final (se final, no pode ser
estendida!), e nem possuir mtodos abstratos que
tambm sejam estticos. Essa combinao invlida,
pois mtodos estticos no podem ser sobrepostos (na
subclasse), gerando portanto um erro de compilao.

77

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

Interfaces
Uma interface um agrupamento de mtodos relacionados entre si. Pensando
em um exemplo do mundo real, uma TV possui vrios comandos em comum,
como Ligar, Desligar, TrocarCanal, e assim por diante. Ento ns
conhecemos uma interface bsica para a TV, e da podemos criar um controle
remoto universal, que embora no conhea 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
void
void
void
void

ligar();
desligar();
trocarCanal(int canal);
aumentarVol(int incremento);
diminuirVol(int decremento);

A interface diferente de uma classe, pois ela no possui corpo de mtodos


ou qualquer tipo de implementao. parte disso, ela funciona de forma
similar a uma classe abstrata: os seus mtodos so 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 aplicaes Java usando interfaces que mais fcil


estender e integrar um sistema a medida que novas funcionalidades so
incorporadas. As classes j implementadas podem ser mantidas na aplicao,
e novas classes que modificam as funcionalidades do sistema podem ser

78

Captulo 2 Orientao a Objetos

criadas a partir das interfaces j existentes, mantendo a compatibilidade do


cdigo.
A interface tambm til para determinar que um conjunto de objetos
distintos possui um mesmo comportamento em comum, mas sem obrigar que
esses objetos sejam relacionados (por herana, por exemplo). Um exemplo
a interface Comparable, que dita que um objeto que a implemente deva
fornecer um mtodo compareTo() para que instncias desse objeto possam
ser comparadas. Uma classe responsvel por ordenar objetos ou imprimir de
forma ordenada uma seqncia de objetos pode admitir apenas objetos que
implementam a interface Comparable.
A seguir esto listadas algumas classes que implementam a interface
Comparable, e por isso devem implementar o mtodo compareTo(): Byte,
Double, Float, Integer, Long, Short, String, BigDecimal, BigInteger e Date.
Interfaces so normalmente utilizadas para definir constantes e mtodos
abstratos que devem ser implementados em classes. Segue outro exemplo de
uma interface, dessa vez com a definio de uma propriedade constante
(final):
public interface Freezer {
final double zeroAbs = -273.15;
void gelar (double temperatura);
void descongelar();
}

Ateno!
Ao contrrio de uma classe abstrata, uma interface no
possui nenhum tipo de implementao, mas apenas a
definio (assinatura) dos mtodos que devem ser
implementados por uma classe. Interfaces tambm
no podem ser instanciadas. Uma vantagem de utilizar interfaces ao invs de classes abstratas, que uma
classe pode implementar vrias interfaces, separandoas por vrgulas aps a clusula implements. Essa
uma forma de simular a herana mltipla em Java.

79

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

Interfaces so sempre implicitamente estticas e abstratas, e todos os seus


mtodos so automaticamente pblicos. Porm, ao implementar a interface,
os mtodos devem ser declarados como pblicos, ou o compilador ir
assumir que o programador est tentando diminuir a visibilidade do mtodo
para o acesso default (sem nenhum modificador).
Ao contrrio das classes, que sempre so extenses da classe Object, as
interfaces no possuem um ancestral comum. Outra diferena que uma
classe pode estender apenas uma outra classe, mas pode implementar
(implements) vrias interfaces:
class Teste implements Runnable, Comparable {
void run () {
...
}
int compareTo(Object o) {
...
}
}

Exerccios
Ateno: As respostas comentadas de todos os exerccios dos captulos e
dos simulados encontram-se no final do livro. No deixe de conferi-los.

Q2.1. (2001, ESAF - BACEN, Analista de Sistemas) Os padres a partir dos


quais os objetos so criados so denominados:
a) classes
b) mtodos
c) excees
d) entidades
e) instncias

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, NO se inclui:

80

Captulo 2 Orientao a Objetos

a) herana simples.
b) herana mltipla.
c) agregao.
d) normalizao.
e) associao.

Q2.3. (2009, FUNRIO FURNAS, Tecnologia da Informao) Na


orientao a objetos, classes que NO geram instncias diretas (objetos) so
denominadas classes
a) primrias.
b) abstratas.
c) virtuais.
d) bsicas.
e) derivadoras.

Q2.4. (2008, SBC - POSCOMP) Os membros de uma classe (atributos e


operaes) podem ser privados, protegidos ou pblicos em programao
orientada a objetos. Suponha agora que se tenha um dado em uma
determinada classe que s deve ser acessado por instncias dessa mesma
classe. Assinale a alternativa que melhor descreve o que esse dado pode ser.
a) Somente pblico
b) Somente privado
c) Somente protegido
d) Privado ou pblico
e) Privado ou protegido

Q2.5. (2009, ESAF - ANA, Analista Administrativo) Se, na superclasse, um


mtodo declarado protected, o(s) modificador(es) aplicvel(is) na
sobrescrita do mtodo (so)
a) private.
b) private e protected.
c) default.
d) protected, default e public.
e) protected e public.

81

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

Q2.6. (2009, CESGRANRIO Casa da Moeda, Analista de Negcios de TI)


Em programao orientada a objetos, h sobrecarga (overloading) de um
mtodo de uma classe quando
a) o mtodo utilizado em uma grande quantidade de mdulos do sistema.
b) o mtodo invoca uma grande quantidade de mtodos de outras classes.
c) o mtodo possui a maior complexidade ciclomtica da hierarquia de
classes a que pertence.
d) um outro mtodo, com o mesmo nome e parmetros de entrada
(assinatura) diferentes, existe na classe.
e) um outro mtodo, com o mesmo nome e mesmos parmetros de entrada
(assinatura), existe em uma subclasse.

Q2.7. (2006, CESGRANRIO - DECEA, Tcnico de Defesa Area e Controle


de Trfego Areo) Em Java, a palavra-chave que implementa uma relao de
herana de classes :
a) isFatherOf.
b) isChildOf.
c) inherits.
d) derives.
e) extends.
Q2.8. (2002, UERJ UERJ, Analista de Sistemas) Em Java, a instruo
usada para fazer referncia a mtodos e variveis 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 cdigo em Java:
interface I1 {
public void m1();
}

82

Captulo 2 Orientao a Objetos

interface I2 extends I1 {
public void m2();
}
class C1 implements I2 {
// o cdigo da classe C1 segue aqui
}
public class Teste {
public void m3() {
// o cdigo do mtodo m3() segue aqui
}
public static void main(String args[]) {
I1 obj = new C1();
obj.xx();
// substitua xx pela
// resposta apropriada
}
}

Os possveis valores para xx no cdigo anterior so:


a) somente m1;
b) somente m2;
c) somente m1 e m2;
d) m1 e m3;
e) m1, m2 e m3.

QD2. Questo Discursiva. No contexto de OO, a herana uma violao do


encapsulamento? Quais so os problemas que o projetista de software pode
enfrentar ao optar pelo uso da herana?

83

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

Referncias
Dicas de concurso
Livros so uma ferramenta indispensvel para o
aprendizado. Busque no edital a bibliografia recomendada, e de acordo com o contedo programtico 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 reviso ou relao com o edital da prova.

Livro: Thinking in Java, 3rd Edition


Bruce Eckel
Fundamentos da Programao 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
Anlise e Modelagem Orientada a Objetos:

84

Unified Modeling Language (http://www.uml.org)

Martin Fowler (www.martinfowler.com)

Livro: UML Essencial (3 edio)


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

Object-Oriented Analysis and Design with Applications (2nd


Edition), Grady Booch