Você está na página 1de 21

Curso Java Starter

www.t2ti.com
1

Curso Java Starter

www.t2ti.com
2

Curso Java Starter


Apresentao
O Curso Java Starter foi projetado com o objetivo de ajudar quelas pessoas
que tm uma base de lgica de programao e desejam entrar no mercado de
trabalho sabendo Java,
A estrutura do curso formada por mdulos em PDF e por mini-cursos em
vdeo. O aluno deve baixar esse material e estud-lo. Deve realizar os exerccios
propostos. Todas as dvidas devem ser enviadas para a lista de discusso que est
disponvel para inscrio na pgina do Curso Java Starter no site www.t2ti.com. As
dvidas sero respondidas pelos instrutores Albert Eije, Cludio de Barros e Miguel
Kojiio, alm dos demais participantes da lista.
Nosso objetivo que aps o estudo do Curso Java Starter o aluno no tenha
dificuldades

para

acompanhar

um

curso

avanado

onde

poder

aprender

desenvolver aplicativos para Web, utilizando tecnologias como Servlets e JSP e


frameworks como Struts e JSF, alm do desenvolvimento para dispositivos mveis.
Albert Eije trabalha com informtica desde 1993. Durante esse perodo j
trabalhou com vrias linguagens de programao: Clipper, PHP, Delphi, C, Java, etc.
Atualmente mantm o site www.alberteije.com.
Cludio de Barros Tecnlogo em Processamento de Dados.
Miguel Kojiio bacharel em Sistemas de Informao, profissional certificado
Java (SCJP 1.5).
O curso Java Starter surgiu da idia dos trs amigos que trabalham juntos em
uma instituio financeira de grande porte.

www.t2ti.com
3

Curso Java Starter

Mdulo

08

Classes Abstratas, Interfaces


e
Excees

Introduo
Estamos alcanando o fim da nossa trilha que apenas o incio do
maravilhoso mundo que Java nos oferece e este momento bastante adeqado
para introduzirmos os conceitos de classes Abstratas, Interfaces e Excees. Classes
Abstratas e Interfaces so estruturas muito importantes quando programamos
Orientado a Objetos com Java e, visto que j conhecemos os demais fundamentos da
linguagem (reuso, herana, polimorfismo, encapsulamento, mtodos, etc.), est na
hora de aplicarmos estes recursos existentes na linguagem.
Uma das diferenas mais evidentes entre um bom e um mal programa o
tratamento de excees, isto , a capacidade que o seu programa tem de responder a
situaes inesperadas. Quando o tratamento de excees feito adeqadamente o
seu programa fica mais robusto e ao mesmo tempo a usabilidade usabilidade nada
mais do que a facilidade que um usurio tem em utilizar o programa aumenta
sensivelmente.
Porm antes de iniciarmos o novo contedo vamos conhecer uma
importante caracterstica do construtor com parmetros levando em conta o uso de
herana.

Herana - continuao
Ns j vimos que uma classe herda de sua classe pai as suas caractersticas
porm a subclasse no herda o construtor, isto , o construtor individual para cada
classe.
Sempre que o construtor de uma classe invocado ele invoca , quando no
explicitado, implicitamente o construtor da superclasse. Desta forma o construtor da

www.t2ti.com
4

Curso Java Starter


classe Object sempre invocado, pois todas as classes estendem dela. Observe o
cdigo abaixo referente a classe Veiculo:
public class Veiculo {
private String marca;
private Double capacidadeTanqueCombustivel;
public Veiculo(String marca) {
this.marca = marca;
}
//Demais membros...

Quando o compilador gerar o bytecode o que ns teremos o seguinte:


public class Veiculo {
private String marca;
private Double capacidadeTanqueCombustivel;
public Veiculo(String marca) {
super();
this.marca = marca;
}
//Demais membros...

Observe que a declarao super()


construtor public e sem parmetros

indica que o construtor default

da superclasse est sendo invocado. Isto

acontece de forma automtica, ns no precisamos nos preocupar.


O construtor default adicionado pelo compilador quando no h construtor
declarado explicitamente, isto , se o programador no declarar um construtor o
compilador ir adicionar, implicitamente, um pblico e sem parmetros.
No entanto se for adicionado explicitamente um construtor o compilador
no ir adicionar implicitamente o construtor default, o que significa que se ns
criarmos um construtor com parmetros e estendermos a classe, obrigatoriamente
teremos que, explicitamente, invocar o construtor da superclasse passando os
parmetros.
Para ficar mais claro vamos estender a classe Veiculo que possui um
construtor com parmetros:
public class Jipe extends Veiculo{
public Jipe() {
}

//Demais membros...

O cdigo acima demonstrado no compila. Imagine o compilador tentando

www.t2ti.com
5

Curso Java Starter


adicionar a declarao super() porm sem sucesso. Isto acontece pois no existe
construtor sem parmetros na superclasse, existe apenas um construtor com o
parmetro marca do tipo String.
Podemos solucionar o problema apresentado de diversas maneiras, a
primeira seria invocando o construtor da superclasse e encaminhando um parmetro
padro para todas as instncias da classe Jipe:
Construtor sem parmetro
public class Jipe extends Veiculo{
public Jipe() {
super("Marca padro de jipe");
}
//Demais membros...

Invocao do construtor da superclasse

Perceba que no construtor da classe Jipe estamos invocando o construtor da


classe Veiculo e passando uma String ("Marca padro de jipe"), ou seja, todas
as instncias desta classe Jipe possuiro a mesma marca.
Outra soluo seria a implementao de um construtor na classe Jipe que
receba o mesmo parmetro repassando-o para a superclasse:
Construtor com parmetro
public class Jipe extends Veiculo{
public Jipe(String marca) {
super(marca);
}
//Demais membros...

Invocao do construtor da superclasse


com repasse do parmetro recebido

Desta forma mantida a lgica implementada pela superclasse. E por fim,


uma terceira abordagem seria a mais de um construtor, observe que neste caso os
dois construtores desenvolvidos anteriormente foram mantidos:
public class Jipe extends Veiculo{
private String modelo;
public Jipe(){
super("Marca padro de jipe");
}
public Jipe(String marca) {
super(marca);
}
public Jipe(String marca, String modelo) {
super(marca);
this.modelo = modelo;
}

Construtor novo com dois parmetros

//Demais membros...

Observe que, neste ltimo caso, temos um construtor sem parmetros, um

www.t2ti.com
6

Curso Java Starter


construtor que recebe o mesmo parmetro da superclasse e outro que recebe dois
parmetros (marca e modelo), ou seja, poderamos ter N-construtores, um para cada
situao.

Classes Abstratas
At este momento todas as classes que havamos desenvolvido eram
classes concretas, isto todas as nossas classes podem originar objetos. Classes
concretas so estruturas definidas e prontas para instanciarem objetos.
Uma classe abstrata se comporta de forma diferente de uma classe
concreta. Uma classe abstrata nunca pode ser instanciada de forma direta, seu
maior propsito, a razo da sua existncia, ser estendida.
Para que serve esta classe ento? Imagine a seguinte situao, ns temos
uma hierarquia de classe conforme abaixo:

Todos os animais (cachorro, cavalo e preguia) estendem da classe Animal,


no entanto, no nosso, programa a classe Animal por si s no representa nenhum tipo
de animal. Isto , esta classe representa apenas um animal genrico e ela existe
apenas para ser estendida dando origem a um animal de fato.
Nesta situao mais adeqado que seja feita a mudana na classe Animal
a fim de torn-la abstrata e inviabilizar a sua instanciao por qualquer parte do
programa. Isto realizado adicionando-se o modificador abstract conforme abaixo:
public abstract class Animal {
//corpo da classe
}

Observe que agora a classe Animal no pode ser instanciada indevidamente


em nenhum trecho do nosso programa, o exemplo abaixo ir produzir um erro de

www.t2ti.com
7

Curso Java Starter


compilao:
Animal animal = new Animal();

Desta forma ns temos certeza que durante a execuo do programa nunca


haver um objeto da classe Animal e sim, sempre, de uma de suas subclasses.
Uma classe abstrata pode possuir mtodos concretos um mtodo
concreto todo aquele possui corpo veja o exemplo abaixo:
public abstract class Animal {
private String nome;
//getters e setters...

Mtodo concreto

public void emitirSom()


{
System.out.println("Animal emitindo som");
}
}

Perceba que o mtodo emitirSom() na verdade dever ser sobreescrito por

cada uma das subclasses da classe Animal a fim de que forneam um comportamento
adeqado pois, cada tipo de animal emite um som diferente dos demais.
Porm, da forma como foi feito, esta condio no garantida pois,
podemos ter uma subclasse da classe Animal que no sobreescreve o mtodo emitir
som, no entanto existem formas de forarmos esta condio. Ao modificarmos o
mtodo com abstract

impedimos que alguma das subclasses no implementem o

mtodo. Segue exemplo abaixo:


public abstract class Animal {
private String nome;
//getters e setters...

Mtodo abstrato

public abstract void emitirSom();


}

Agora todas as subclasses da classe Animal iro obrigatoriamente ter que


fornecer uma implementao para o mtodo emitirSom(). Alm da palavra reservada
abstract devemos encerrar o mtodo sem as chaves para que seja um mtodo

abstrato vlido.
Uma classe abstrata pode conter apenas mtodos abstratos, concretos ou
ambos. No entanto a presena de um mtodo abstrato torna, obrigatoriamente, a
classe abstrata tambm.

www.t2ti.com
8

Curso Java Starter


A extenso de uma classe Abstrata feita da mesma forma que a extenso
realizada por classes concretas:

public class Cachorro extends Animal {


public void emitirSom() {
System.out.println("au! au!");
}
}

Em Java no existe o conceito de herana mltipla, isto , cada classe pode


estender (extends) apenas uma superclasse de cada vez. Por exemplo, a seguinte
situao no permitida:
public class Cachorro extends Animal, Mamifero {

No entanto podemos ter hierarquia de classes de qualquer tamanho o que


viabilizaria a extenso de diversas classes nesta estrutura.

Interfaces
Pense em uma interface como sendo uma classe totalmente abstrata, isto
que no possui mtodos concretos. Desta forma, quando uma classe implementa uma
interface ela obrigatoriamente deve implementar o conjunto de mtodos definidos
pela interface.
Do site da SUN, implementar uma interface permite a uma classe tornarse mais formal em relao ao comportamento que ela promete fornecer. Interfaces
formam um contrato entre a classe e o mundo exterior, e este contrato garantido
em tempo de compilao pelo compilador. Se a sua classe deseja implementar uma
interface, todos os mtodos definidos pela interface devem aparecer no corpo antes
da sua classe ser compilada.
Em sntese, quando uma classe concreta implementa uma interface ela est
garantindo que possui os mtodos especificados bem como a implementao destes,
mesmo que o corpo do mtodo seja vazio. Aqui cabe uma observao: O uso de
interfaces garante a existncia do comportamento porm no garante a sua correta
implementao.
Da mesma forma que classes, a definio de uma interface cria um novo

www.t2ti.com
9

Curso Java Starter


tipo e ns devemos utilizar interfaces quando existem determinados comportamentos
que sejam similares entre hierarquias de classes diferentes.
Veja o mtodo emitirSom() da classe abstrata Animal, agora suponha que
no mesmo programa eu tenha uma classe Bola, que por sinal tambm emite som. Em
um determinado momento do programa eu desejo invocar o mtodo emitirSom para
alguns objetos conforme a situao abaixo:
public void limpar(Object obj)
{
//Cdigo para limpar uma bola ou um animal...

if(obj instanceof Bola)


{
((Bola)obj).emitirSom();
} else if(obj instanceof Animal)
{
((Animal)obj).emitirSom();
}

Neste programa ns temos um mtodo que efetua a limpeza de qualquer


objeto, seja ele um animal ou uma bola, porm caso o objeto seja de um dos dois
tipos, Bola ou Animal, estes devero emitir seus sons caractersticos.
Esta situao no pode ser resolvida atravs do uso de herana j que a
classe Bola e a classe Animal no esto na mesma hierarquia de classes na verdade
at poderia ser resolvida com herana e sobreescrita, mas havemos de convir que
colocar a classe Bola e a classe Animal na mesma hierarquia um erro de projeto
logo, a soluo seria a criao da interface EmiteSom conforme abaixo:
public abstract interface EmiteSom {
}

public abstract void emitirSom();

Observe que o uso do abstract opcional tanto na classe quanto no


mtodo pois toda interface obrigatoriamente abstrata e seus mtodos tambm o
so.
A classe Animal e a classe Bola ficariam da seguinte forma:
public class Bola implements EmiteSom{

Implementao do mtodo abstrato

public void emitirSom()


{
System.out.println("Boing, boing...");
}
}

www.t2ti.com
10

Curso Java Starter

public abstract class Animal implements EmiteSom{


private String nome;
}

//getters e setters...

Cad a implementao?

Perceba o uso da palavra reservada implements que informa ao compilador


que esta classe est implementando uma interface. A classe Animal no fornece uma
implementao para o mtodo emitirSom(), ao contrrio da classe Bola, isto acontece
porque a classe Animal do tipo abstract.
Quando uma classe abstrata implementa uma interface ela pode ou no
fornecer a implementao dos mtodos oriundos da interface. Caso a classe abstrata
no fornea a implementao destes mtodos (situao existente na classe Animal),
obrigatoriamente cada subclasse concreta da classe abstrata ir ter que fornecer a
implementao.
Por exemplo, a classe Cachorro fica da seguinte forma:
public class Cachorro extends Animal {
public void emitirSom() {
System.out.println("au! au!");
}
}

Implementao do mtodo

Ento, podemos interpretar a situao da seguinte forma: A classe Animal

implementa a interface EmiteSom, mas deixou a responsabilidade pela implementao


do mtodo para a classe concreta Cachorro.
E agora o nosso mesmo mtodo limpar() utilizando a interface:
public void limpar(Object obj)
{
//Cdigo para limpar uma bola ou um animal...

if(obj instanceof EmiteSom)


{
((EmiteSom)obj).emitirSom();
}

Perceba que independente do tipo de objeto que vier como parmetro,


desde que ele seja do tipo EmiteSom, eu sei que ir possuir a implementao do
mtodo emitirSom() e que portanto o cdigo ser executado sem problemas, isto
tambm nos permite acabar com aquelas cadeias indesejveis de if's deixando o
cdigo mais legvel.

www.t2ti.com
11

Curso Java Starter


Excees
At agora ns criamos pequenos programas sem nos preocuparmos em
tratar possveis erros. No entanto todos aqueles que programam h algum tempo
sabem que o tratamento de erros (excees) parte fundamental da programao.
Vamos comear os nossos estudos conhecendo a forma como uma exceo
apresentada e o seu significado, observe as duas classes abaixo:

public class modulo10Main {


public static void main(String[] args)
{
new RecebeArray(args);
System.out.println("Trmino do programa!");
}

public class RecebeArray {

!
}

public RecebeArray(String[] array)


{
imprimirPosicao0(array);
}
public void imprimirPosicao0(String[] array)
{
System.out.println(array[0]);
}

As setas indicam o fluxo de execuo at o ponto onde ir acontecer a


exceo (estrela) o que ocasiona a quebra no fluxo normal da aplicao. Esta
execuo pode ser entendida da seguinte forma:
Ao invocar o mtodo main, sem o envio de parmetros, instanciado um
novo objeto RecebeArray e passado como parmetro do construtor o array vazio, o
construtor por sua vez invoca um mtodo desta mesma classe (imprimirPosicao0())
repassando o parmetro recebido, este mtodo tenta imprimir o elemento da posio
0, primeira posio, e o resultado obtido uma exceo, j que o array est vazio.
Quando esta exceo acontece o programa encerrado de forma
inesperada, perceba que a ltima linha a ser executada (linha grifada em amarelo)
no percorrida devido ao trmino inesperado.
Podemos observar a visualizao da execuo desta aplicao na figura a
seguir:

www.t2ti.com
12

Curso Java Starter

A exceo foi do tipo java.Lang.ArrayIndexOutOfBoundsException que


significa a tentativa de acesso a uma posio fora dos limites do array, a seguir ele
informa que posio foi, neste caso o ndice 0 (zero).
Embaixo da definio da exceo ns temos a stacktrace que contm a
seqncia da pilha de execuo. Pela stacktrace possvel perceber quais caminhos a
execuo percorreu at alcanar a exceo.
A primeira linha da stacktrace contm a definio da exceo, a segunda
linha contm o ltimo trecho de cdigo executado com o nmero da linha no cdigo
fonte, neste caso foi a invocao

do mtodo imprimirPosicao0() da classe

RecebeArray, que no cdigo fonte (arquivo RecebeArray.java) refere-se a linha 10.


A fim de construirmos programas mais robustos, poderamos tratar
situaes como esta. Para isto iremos utilizar o bloco try/catch:
try{
//Cdigo perigoso
}catch(Exception e)
{
//tratamento da exceo
}

O bloco try/catch define dois trechos de cdigo, um sujeito a erros (try) e


outro que responsvel pelo tratamento do erro caso acontea (catch). Vamos
modificar agora a nossa classe RecebeArray e adicionar este bloco ao mtodo
imprimirPosicao0():
public class RecebeArray {
public RecebeArray(String[] array)
{
imprimirPosicao0(array);
}
public void imprimirPosicao0(String[] array)
{
try{
System.out.println(array[0]);
}catch(ArrayIndexOutOfBoundsException e)
{
System.out.println("Erro: Array vazio, execute o programa novamente" +
" passando ao menos um parmetro.");
}

www.t2ti.com
13

Curso Java Starter


}

E agora ao executarmos novamente este mesmo programa o usurio ir


receber uma mensagem mais significativa, observe a execuo abaixo:

Pronto! Agora ao executar o programa sem parmetros o usurio saber o


que fazer. Porm o mais interessante o seguinte, uma vez que a exceo foi tratada,
o programa continua o fluxo de execuo e termina normalmente.
Devemos observar o seguinte, esta no a nica exceo que pode
acontecer neste mtodo, vamos modificar o mtodo main() de forma que ele
encaminhe como parmetro um valor nulo (null).
public class modulo10Main {
public static void main(String[] args)
{
new RecebeArray(null);
System.out.println("Termino do programa!");
}
}

Repare que agora a nova instncia da classe RecebeArray est recebendo


como parmetro uma referncia nula, isto ocasionar uma exceo do tipo
java.lang.NullPointerException.
Vejamos o resultado da execuo deste cdigo:

Ok! O programa encerrou de forma inesperada a mensagem Termino do

www.t2ti.com
14

Curso Java Starter


programa! no foi apresentada por uma exceo pois o nosso bloco try/catch no
foi capaz de captur-la, isto aconteceu pois ele foi construdo de forma que apenas
excees do tipo java.lang.ArrayIndexOutOfBoundsException sejam tratadas.
Para corrigir este problema podemos encadear mais um bloco catch que
capture todos os tipos de excees, vejamos:
public class RecebeArray {
public RecebeArray(String[] array)
{
imprimirPosicao0(array);
}
public void imprimirPosicao0(String[] array)
{
try{
System.out.println(array[0]);
}catch(ArrayIndexOutOfBoundsException e)
{
System.out.println("Erro: Array vazio, execute o programa novamente" +
" passando ao menos um parametro.");
}catch(Throwable t)
{
System.out.println("Mensagem do erro: "+t.getMessage());
t.printStackTrace();
}
}
}

Perceba agora que, no cdigo destacado, adicionamos mais um bloco de


catch que captura todos os tipos de excees veremos mais a frente como est
estruturada a hierarquia de classes de excees desta forma caso seja uma exceo
do tipo java.lang.ArrayIndexOutOfBoundsException ser tratado no primeiro bloco,
todos os demais tipos sero tratados no segundo bloco.
O cdigo destacado ir imprimir a mensagem (getMessage()) e na
seqncia ir imprimir a stacktrace, importante perceber novamente que aps o
tratamento da exceo pelo segundo bloco o programa encerrado normalmente.
A seguir temos a execuo do novo programa:

www.t2ti.com
15

Curso Java Starter

Todas as excees em Java derivam da classe Throwable conforme


hierarquia a seguir:

Observe que, conforme dito em mdulos anteriores, todas as classes em


Java estendem de alguma forma direta ou indiretamente da classe Object.
Nesta imagem esto representadas as trs modalidades de excees
existentes na linguagem Java: Unchecked Exception, Checked Exception e Error.

Error:

Hierarquia

em

laranja na

imagem,

representam

situaes

incomuns, que no so causadas pelo programa, indicam situaes que


no acontecem usualmente durante a execuo de um programa (Ex:
Estouro da pilha de execuo StackOverflowError);

Checked Exception: Hierarquia em cinza, representam situaes que,


geralmente, no so erros de programao e sim indisponibilidade de
recursos ou condio necessria para a correta execuo inexistente (Ex:
Em aplicaes distribudas existe dependncia externa de rede de

www.t2ti.com
16

Curso Java Starter


comunicao NoRouteToHostException).

Unchecked Exception (RuntimeException): Hierarquia em turquesa


(azul escuro), representam situaes que, geralmente, identificam erros
de programao (programa no robusto) ou mesmo situaes
incomuns/difceis de tratar (Ex: Acessar ndice invlido em um array
ArrayIndexOutOfBoundsException);

As checked exceptions so tratadas obrigatoriamente, isto , o compilador


s compila a classe se houver um tratamento (bloco try/catch) para aquele tipo de
exceo.
Segue quadro com relao de algumas das mais comuns excees:

Exceo

Quando acontece

ArrayIndexOutOfBounds

Tentativa de acesso a posio inexistente no array.

Exception
ClassCastException

Tentativa de efetuar um cast em uma referncia que no classe


ou subclasse do tipo desejado.

IllegalArgumentException

Argumento formatado de forma diferente do esperado pelo


mtodo.

IllegalStateException

O estado do ambiente no permite a execuo da operao


desejada.

NullPointerException

Acesso a objeto que referenciado por uma varivel cujo valor


null.

NumberFormatException

Tentativa de converter uma String invlida em nmero.

StackOverflowError

Normalmente acontece quando existe uma chamada recursiva


muito profunda.

NoClassDefFoundError

Indica que a JVM no conseguiu localizar uma classe necessria


a execuo.

Jogando (throw) excees


Possivelmente em algum trecho do nosso programa, se uma determinada
condio acontecer, ns queiramos lanar uma exceo por incrvel que possa
parecer para informar que a situao esperada no aconteceu.

www.t2ti.com
17

Curso Java Starter


Vejamos um exemplo, suponha o mtodo abastecer() pertencente a uma
classe que representa um veculo. Este mtodo recebe como parmetro um Double
que representa o valor que est sendo abastecido, logo no pode haver situaes
onde o valor seja negativo. Caso esta situao acontea ns iremos lanar uma
IllegalArgumentException.
public void abastecer(Double litros)
{
if(litros < 0)
{
throw new IllegalArgumentException("Era esperado um valor maior que 0:
"+litros);
}else
{
tanque += litros;
}
}

A seta indica o uso da palavra reservada throw que responsvel por


jogar

exceo,

logo

seguir

ns

instanciamos

um

objeto

do

tipo

IllegalArgumentException e passamos como parmetro do mtodo construtor o texto


que dever aparecer quando a stacktrace for impressa.
Veja o resultado da execuo deste mtodo passando o valor -1 (um
negativo):
Exception in thread "main" java.lang.IllegalArgumentException: Valor indevido
era esperado um valor maior que 0: -1.0
at Veiculo.abastecer(Veiculo.java:10)
at modulo10Main.main(modulo10Main.java:6)

Criando sua prpria exceo


Suponha que ao invs de utilizar a IllegalArgumentException no mtodo
abastecer(), caso o valor recebido seja negativo, ns desejemos jogar uma exceo
prpria chamada QuantidadeLitrosException, neste caso basta que utilizemos os
nossos

conhecimentos

em

herana

faamos

uma

extenso

da

classe

RuntimeException conforme abaixo:


public class QuantidadeLitrosException extends RuntimeException
{

QuantidadeLitrosException(String mensagem)
{
super(mensagem);
}

www.t2ti.com
18

Curso Java Starter


A linha em destaque significa que estou invocando o construtor da
superclasse (Exception) e enviando o parmetro mensagem para ela. O novo mtodo
abastecer fica da seguinte forma:

public void abastecer(Double litros)


{
if(litros < 0)
{
throw new QuantidadeLitrosException("Valor indevido. Era esperado um valor
maior que 0: "+litros);
}else
{
tanque += litros;
}
}

A execuo deste mtodo com um valor negativo resulta em:


Exception in thread "main" QuantidadeLitrosException: Valor indevido. Era esperado um valor maior
que 0: -1.0
at Veiculo.abastecer(Veiculo.java:10)
at modulo10Main.main(modulo10Main.java:6)

Na prtica, so poucos os motivos que nos levam a criar as nossas prprias


excees, normalmente as excees existentes nas bibliotecas Java so suficientes
para a maioria das ocorrncias.

Exerccios
Aprenda com quem tambm est aprendendo, veja e compartilhe as suas
respostas no nosso Frum:
Exerccios Mdulo 08 Classes Abstratas, Interfaces e Excees
1. Crie uma classe abstrata que represente um quadriltero e receba como
parmetros do construtor os quatro valores referentes a cada lado.
2. Estenda a classe criada no exerccio 1, a subclasse deve representar um
quadrado e portanto receber como parmetro um nico valor referente aos
seus lados.
3. Estenda novamente a classe criada no exerccio 1, a subclasse deve representar
um retngulo e portanto deve receber como parmetros dois valores
diferentes.
4. Crie uma interface denominada FiguraGeometrica, adicione os mtodos calcular
rea e calcular permetro.

www.t2ti.com
19

Curso Java Starter


5. Modifique a classe abstrata criada no exerccio 1 de forma que ela implemente a
interface FiguraGeomtrica.
6. Implemente os mtodos definidos na interface FiguraGeometrica nas classes
Quadrado e Retangulo.
7. Modifique o construtor da classe Quadrado de forma que caso seja recebido um
valor

igual

zero

ou

negativo

seja

jogada

uma

exceo

do

tipo

IllegalArgumentException com o seguinte texto: Valor invlido, o valor


esperado maior que 0 (zero).
8. Modifique o construtor da classe Retangulo de forma que caso seja recebido
como parmetro um valor igual a zero ou negativo ou ambos os valores
positivos idnticos porm idnticos seja jogada duas excees do tipo
IllegalArgumentException com os seguintes textos respectivamente: Valor
invlido, os valores esperados so maior que 0 (zero) e Valor invlido,
modifique um dos valores a fim de torn-los diferentes.
9. Crie um programa que solicite a entrada de 2 parmetros, crie um Quadrado e
imprima a rea e o permetro.
10.Modifique o programa desenvolvido no exerccio 9. Adicione o tratamento de
excees e caso acontea uma exceo imprima a stacktrace. Execute o
programa forando uma exceo e observe a stacktrace.
11.Modifique novamente o programa desenvolvido no exerccio 9 de forma que
caso sejam passados valores invlidos ele trate a exceo e exiba a mensagem
em um dilogo (JoptionPane).
12.Crie uma classe abstrata denominada conta corrente. Adicione os mtodos
sacar, depositar e obter saldo, adicione o atributo saldo total.
13.Estenda a classe desenvolvida no exerccio anterior. Crie a classe conta corrente
especial que contenha um atributo que represente um limite extra da conta
corrente convencional de forma que:
1. O saque debita primeiro o saldo total, na seqncia deve-se debitar o limite
do cheque especial;
2. O depsito primeiro deve creditar o limite do cheque especial, at cobrir, e
somente aps o saldo total.
14.Crie uma exceo que represente o estouro da conta corrente, modifique a
classe desenvolvida no exerccio 13 de forma que caso seja extrapolado o limite
do extra esta exceo seja lanada.
15.Crie um programa que, utilizando as classes desenvolvidas nos exerccios

www.t2ti.com
20

Curso Java Starter


anteriores (12, 13 e 14), efetue alguns saques e depsitos, tanto sobre o limite
extra quanto sobre saldo total, e ainda faa um saque que extrapole todo o
valor disponvel (limite extra + saldo total).

www.t2ti.com
21

Você também pode gostar