Você está na página 1de 20

Curso Java Starter

www.t2ti.com
1

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 a 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
2

Curso Java Starter

Mdulo

07
Introduo

Orientao a Objetos
Herana, Sobreescrita e Polimorfismo

Em relao ao paradigma Orientado a Objetos ns j vimos o que uma Classe, aprendemos tambm que um objeto nada mais do que a instanciao de uma classe e que um dos pilares da Orientao a Objetos o encapsulamento. Neste mdulo e no prximo ns iremos continuar nossos estudos relacionados aos conceitos fundamentais da programao Orientada a Objetos. A seguir estudaremos Herana, Sobreescrita e Polimorfismo.

Herana
No paradigma orientado a objetos podemos definir um conjunto de classes em uma estrutura hierrquica onde cada uma das classes herda caractersticas da suas superiores nesta estrutura. No mundo real temos que uma pessoa herda caractersticas de seus pais que herdaram de seus avs e assim por diante. Respeitando as limitaes das linguagens de programao, o que acontece quando utilizamos herana no nosso cdigo uma tentativa de implementar esta propriedade da natureza. Para ficar mais claros vamos partir para um exemplo. Imagine que estivssemos implementando um programa que fosse utilizado em um concessionria de veculos. Esta concessionria vende carros de passeio, jipes e veculos utilitrios. Para implementar as classes destes veculos poderamos criar trs classes distintas, A seguir a classe Jipe:
public class Jipe { private String marca; private Double capacidadeTanqueCombustivel; public Double getTanqueCombustivel() { return capacidadeTanqueCombustivel;

www.t2ti.com
3

Curso Java Starter


} public void setTanqueCombustivel(Double capacidadeTanqueCombustivel) { this.capacidadeTanqueCombustivel = capacidadeTanqueCombustivel; } public String getMarca() { return marca; } public void setMarca(String marca) { this.marca = marca; } public void acelerar() { //Cdigo aqui } public void frear() { //Cdigo aqui } public void ligarTracao4x4() { //Cdigo aqui }

A classe que representa o nosso carro de passeio:


public class CarroPasseio { private String marca; private Double capacidadeTanqueCombustivel; public Double getTanqueCombustivel() { return capacidadeTanqueCombustivel; } public void setTanqueCombustivel(Double capacidadeTanqueCombustivel) { this.capacidadeTanqueCombustivel = capacidadeTanqueCombustivel; } public String getMarca() { return marca; } public void setMarca(String marca) { this.marca = marca; } public void acelerar() { //Cdigo aqui } public void frear() { //Cdigo aqui } public void ligarArCondicionado() { //Cdigo aqui } }

E, finalmente, a classe que representa o nosso veculo utilitrio:


public class Utilitario { private String marca; private Double capacidadeTanqueCombustivel;

www.t2ti.com
4

Curso Java Starter


public Double getTanqueCombustivel() { return capacidadeTanqueCombustivel; } public void setTanqueCombustivel(Double capacidadeTanqueCombustivel) { this.capacidadeTanqueCombustivel = capacidadeTanqueCombustivel; } public String getMarca() { return marca; } public void setMarca(String marca) { this.marca = marca; } public void acelerar() { //Cdigo aqui } public void frear() { //Cdigo aqui } public void ligarFarolMilha() { //Cdigo aqui } }

Perceba que, nas linhas destacadas em amarelo, temos as caractersticas que dizem respeito a apenas um dos tipos de veculos, isto , no nosso modelo, apenas jipes tm trao 4x4, somente os carros de passeio tm opo de ligar o ar condicionado e farol de milha uma caracterstica existente apenas nos veculos utilitrios Todas os demais estados e comportamentos voc ainda lembra o que so estado e comportamento de um objeto? so idnticos, na verdade para criar estas trs classes foi realizado uma simples cpia e cola dos membros que so iguais. Isto vlido, por enqanto, afinal de contas estas caractersticas permanecero idnticas para os trs tipos (Jipe, Carro de Passeio e Utilitrio). Agora vamos explorar um pouco mais o nosso modelo, a nossa concessionria vai comear a vender outros 5 tipos de veculos diferentes, cada um com suas peculiaridades, l vamos ns criar mais 5 classes e copiar e colar mais 5 vezes! E mais, o cliente do software identificou uma caracterstica importante dos veculos que deve ser adicionada ao modelo, o cdigo do chassi. L vamos ns de novo implementar mais 8 afinal so 5 novos veculos mais os 3 anteriores atributos com getter e setter para contemplar esta caracterstica. Na verdade nada disto seria necessrio se ns tivssemos utilizado corretamente o conceito de herana da programao Orientada a Objetos. Perceba que com exceo das caractersticas que esto grifadas em amarelo todas as demais

www.t2ti.com
5

Curso Java Starter


so comuns a todos os veculos, ou seja, possvel que tenhamos uma superclasse (classe Pai) Veiculo e que todas as demais herdem estas caractersticas comuns dela. A nossa classe Veiculo ficaria da seguinte forma:
public class Veiculo { private String marca; private Double capacidadeTanqueCombustivel; public Double getTanqueCombustivel() { return capacidadeTanqueCombustivel; } public void setTanqueCombustivel(Double capacidadeTanqueCombustivel) { this.capacidadeTanqueCombustivel = capacidadeTanqueCombustivel; } public String getMarca() { return marca; } public void setMarca(String marca) { this.marca = marca; } public void acelerar() { //Cdigo aqui } public void frear() { //Cdigo aqui } }

Tudo o que era comum a todos os veculos foi concentrado na classe Veiculo. Para que as demais classes herdem estas caractersticas ns devemos utilizar a palavra reservada extends. As novas classes tm como superclasse a classe Veiculo:
public class Jipe extends Veiculo{ public void ligarTracao4x4() { //Cdigo aqui }

public class CarroPasseio extends Veiculo{ public void ligarArCondicionado() { //Cdigo aqui } } public class Utilitario extends Veiculo { public void ligarFarolMilha() { //Cdigo aqui }

www.t2ti.com
6

Curso Java Starter


Graficamente podemos representar esta hierarquia de classes da seguinte forma:

Nesta nova hierarquia de classes toda a subclasse de Veiculo ir compartilhar as suas caractersticas, dizemos que um jipe, carro de passeio ou utilitrio so todos do tipo Veiculo. E da mesma forma toda a subclasse de Jipe ir herdar as caractersticas tanto de Veiculo quanto de Jipe. O exemplo abaixo mostra como, apesar de no ser declarado o atributo especificamente na classe Jipe, posso acessar atravs do getter

capacidadeTanqueCombustivel:
Jipe jipe = new Jipe(); Double capacidadeTanqueJipe = jipe.getCapacidadeTanqueCombustivel(); jipe.setCapacidadeTanqueCombustivel(48.0);

Percebeu!? No exemplo acima estou manipulando o atributo atravs dos mtodos (getter e setter) sem t-los declarados explicitamente na classe Jipe pois, o compilador sabe que na verdade estou herdando estas caractersticas da classe Veiculo. Esta hierarquia de classes garante que todas as mudanas efetuadas na classe Veiculo se propagam para as suas subclasses. Por exemplo, se for solicitado adicionar o comportamento buzinar, e este comportamento for uma caractersticas que todos os veculos devem ter, ento basta adicion-lo a classe Veiculo que automaticamente todas as subclasses compartilharo a mesma funcionalidade. Abaixo temos o exemplo desta modificao na classe Veiculo:

public class Veiculo { private String marca; private Double capacidadeTanqueCombustivel;

www.t2ti.com
7

Curso Java Starter


//Getters, setters e demais mtodos aqui... public void buzinar() { System.out.println("Bmmmm"); } }

E agora o meu Jipe tambm buzina:


Jipe jipe = new Jipe(); Double capacidadeTanqueJipe = jipe.getCapacidadeTanqueCombustivel(); jipe.setCapacidadeTanqueCombustivel(48.0); jipe.buzinar();

Desta forma ns evitamos aquele super-trabalho de copiar, colar e manter vrias classes cada vez que uma alterao solicitada, concentramos tudo o que possvel e pertinente na nossa classe Veiculo e realizamos a manuteno do cdigo em apenas um ponto da aplicao. Assim, a herana viabiliza o reuso do cdigo existente pois, como podemos perceber o cdigo da classe Veiculo reutilizado por todas as suas subclasses e, ainda mais, podemos ter uma hierarquia de herana de tamanho indefinido onde todas as subclasses iro sempre herdar caractersticas das superclasses at a raiz da estrutura hierrquica (classe do topo da hierarquia). Vamos brincar um pouco com o nosso modelo, imagine que fossmos vender o nosso software de gerncia de concessionrias para uma concessionria localizada em um pas que esteja em uma zona conflituosa e, alm destes veculos a concessionria vende tambm tanques de guerra - agora eu apelei! :) - portanto devemos adicionar a nossa hierarquia mais uma classe. A classe que representa um tanque de guerra fica da seguinte forma:

public class TanqueGuerra extends Veiculo { public void atirarMetralhadora() { //Cdigo aqui } public void atirarCanhao() { //Cdigo aqui } }

www.t2ti.com
8

Curso Java Starter


Graficamente a nova hierarquia de classes a seguinte:

E novamente eu sei que a minha classe TanqueGuerra tambm possui as caractersticas herdadas da classe Veiculo, ou seja, alm de atirar com a metralhadora e o canho caractersticas prprias deste tipo de veculo o nosso tanque de guerra poder buzinar, acelerar, frear e etc. Abaixo temos um exemplo do uso da classe TanqueGuerra:
TanqueGuerra osorio = new TanqueGuerra(); osorio.atirarCanhao();//derivado da classe TanqueGuerra osorio.buzinar();//derivado da classe Veiculo

Agora ns podemos pensar o seguinte, o som emitido pela buzina (Bmmmm) fica bem para um Jipe, Utilitrio e at quem sabe um Tanque de Guerra, mas nunca uma senhora de idade iria adquirir um carro de passeio com uma buzina deste tipo. Sendo assim ns precisamos modificar o som da buzina apenas para os carros de passeio de forma a deix-la mais condizente com a realidade do uso deste veculo. Para isto devemos conhecer mais um dos fundamentos da Orientao a Objetos a sobreescrita de mtodos.

Sobreescrita (override)
A sobreescrita de mtodos uma caracterstica que permite alterao do comportamento de uma superclasse pelas suas subclasses. Ao sobreescrevermos um mtodo ns estamos fornecendo uma nova implementao para o mesmo comportamento. Para exemplificar vamos alterar o comportamento da nossa buzina para que seja mais adeqada ao um carro de passeio. A classe Veiculo permanece do mesmo jeito, modificamos apenas a classe CarroPasseio conforme abaixo:

www.t2ti.com
9

Curso Java Starter

public class CarroPasseio extends Veiculo{ public void ligarArCondicionado() { //Cdigo aqui } public void buzinar()//Estamos sobreescrevendo o mtodo buzinar() da superclasse Veiculo { System.out.println("Fon fon"); } }

E ao executarmos o main abaixo:


public static void main(String[] args) { TanqueGuerra osorio = new TanqueGuerra(); osorio.buzinar(); CarroPasseio carroMadame = new CarroPasseio(); carroMadame.buzinar(); }

Obtemos a seguinte sada no console:


TanqueGuerra

CarroPasseio

Bmmmm Fon fon

Perceba que o som emitido pelo tanque de guerra continuou o mesmo, derivado da classe Veiculo, porm o som emitido pelo carro de passeio mudou, ou seja, alteramos o comportamento pr-definido para o mtodo buzinar(). Nesta situao o mtodo buzinar da classe Veiculo completamente ignorado e substitudo pelo da classe CarroPasseio, porm pode haver situao que seja interessante a manuteno da implementao existente com adio de implementao prpria. Para que isto seja possvel ns devemos, ao sobreescrever o mtodo, adicionar a palavra reservada super ao corpo do mtodo que estamos fornecendo nova implementao e invocar o mesmo mtodo da superclasse. No exemplo abaixo utilizamos a implementao do mtodo buzinar da superclasse e ao mesmo tempo adicionamos nova implementao:
public class TanqueGuerra extends Veiculo { public void atirarMetralhadora() { //Cdigo aqui } public void atirarCanhao() { //Cdigo aqui

www.t2ti.com
10

Curso Java Starter


} public void buzinar() { super.buzinar(); System.out.println("BMMMMMMM"); }

A palavra reservada super uma referncia a superclasse. Ao executarmos este mtodo a JVM ir primeiro invocar e executar o mtodo da superclasse para depois continuar a execuo local. Ao sobreescrevermos um mtodo o modificador de acesso neste caso
public

nunca pode ser mais restritivo do que o do mtodo que est sendo

sobreescrito, ou seja, no podemos alterar o modificador de acesso de forma que o mtodo tenha sua visibilidade reduzida, por exemplo, se tentarmos mudar a assinatura do mtodo buzinar, conforme abaixo, o compilador no ir permitir:

protected void buzinar()

No entanto o inverso vlido, podemos aumentar a visibilidade de um mtodo, ou seja, se um mtodo for declarado
protected

e aumentarmos a

visibilidade (public) dele ao sobreescrevermos no teremos problemas com o compilador.

Sobreescrever diferente de sobrecarregar (overload)


Sobreescrever diferente de sobrecarregar um mtodo. Um mtodo s sobreescrito se a assinatura do mesmo mantida intacta, isto , o tipo de retorno e os parmetros (inclusive a seqncia) no so alterados. Observe a classe CarroPasseio:
public class CarroPasseio extends Veiculo{ public void ligarArCondicionado() { //Cdigo aqui } public void buzinar(String som) { System.out.println(som); } }

Observe o que acontecer ao executarmos o cdigo abaixo:

www.t2ti.com
11

Curso Java Starter

public static void main(String[] args) { CarroPasseio carroMadame = new CarroPasseio(); carroMadame.buzinar(); carroMadame.buzinar("Fon! Fon!"); }

O resultado desta execuo o seguinte:


Bmmmm Fon! Fon!

Observe

que

nosso

novo

mtodo

(grifado

em

amarelo)

est

sobrecarregando o mtodo j existente, na verdade temos dois mtodos buzinar, com e sem parmetros, respectivamente, o mtodo da classe CarroPasseio e o mtodo derivado (herdado) da classe Veiculo. A sobrecarga de mtodo cria um mtodo novo na classe mantendo o mtodo existente.

Polimorfismo
O polimorfismo, que significa muitas formas, permite que uma mesma referncia se comporte de formas diferentes. Utilizando corretamente o polimorfismo ns podemos fazer o cdigo ficar mais claro, genrico e, portanto, reutilizvel. Segue abaixo um exemplo:
public class MainModulo09 { /** * @param args */ public static void main(String[] args) { Veiculo veiculo = criarVeiculo(args[0]); veiculo.buzinar(); } public static Veiculo criarVeiculo(String tipo) { if(tipo == null) { return new CarroPasseio(); }else if(tipo.equals("utilitario")) { return new Utilitario(); }else if(tipo.equals("tanque")) { return new TanqueGuerra(); }else if(tipo.equals("passeio")) { return new CarroPasseio();

www.t2ti.com
12

Curso Java Starter


} return new Utilitario(); } }

A invocao do mtodo buzinar() na varivel veiculo feita de forma polimrfica, isto , pode possuir diversos comportamentos diferentes. O resultado desta invocao ser apenas conhecido em tempo de execuo pois, dependendo do parmetro de entrada do mtodo main o objeto retornado pelo mtodo criarVeiculo() ser de tipos diferentes. Perceba que a varivel veiculo do tipo Veiculo, ou seja, ela pode referenciar objetos das classes Jipe, CarroPasseio, TanqueGuerra e Utilitario, afinal, conforme visto, todas estas classes so tambm do tipo Veiculo (Herana). A JVM s conhecer a referncia da varivel veiculo em tempo de execuo, que ser dependente do parmetro de entrada do mtodo main, ou seja, a JVM at sabe que em tempo de execuo esta varivel ir referenciar um objeto do tipo Veiculo, ou uma de suas subclasses, porm ela no sabe qual dos tipos de Veiculo ser (Jipe, TanqueGuerra, Utilitario ou CarroPasseio). Durante a execuo da aplicao a JVM ir identificar qual tipo a varivel est referenciando e assim ir invocar a implementao do mtodo buzinar() adequada. Observe abaixo a execuo do cdigo:

Veja que, conforme explicado, durante cada execuo do programa a JVM

www.t2ti.com
13

Curso Java Starter


identificou a correta implementao do mtodo buzinar() neste caso respectivamente as implementaes da classe TanqueGuerra e CarroPasseio. Se, por acaso, o mtodo buzinar() no tivesse sido sobreescrito em nenhuma das subclasses (TanqueGuerra e CarroPasseio) a JVM ento iria invocar a implementao existente na classe Veiculo. Ao declararmos a varivel veiculo utilizamos o tipo Veiculo, superclasse das demais classes, observe o trecho de cdigo abaixo:
Veiculo veiculo = criarVeiculo(args[0]); veiculo.buzinar(); veiculo.ligarArCondicionado();

A situao acima identificada resulta em erro de compilao, isto acontece porque o mtodo ligarArCondicionado() no faz parte da classe Veiculo ou de uma de suas superclasses, ou seja, o compilador verifica se o mtodo existe em tempo de compilao. Desta forma, mesmo que voc tenha certeza que naquele momento a varivel far referncia um objeto do tipo CarroPasseio, o compilador no ir aceitar este tipo de construo. No entanto existem solues para isto, a primeira e mais simples substituir o tipo da varivel, conforme abaixo:
CarroPasseio veiculo = criarVeiculo(args[0]); veiculo.buzinar(); veiculo.ligarArCondicionado();
O K

A segunda forma executando um cast, a idia a mesma do cast de tipos primitivos porm, neste caso, ns avisamos ao compilador que a varivel faz referncia a uma das subclasses da hierarquia de classes, observe a construo abaixo:
Veiculo veiculo = criarVeiculo(args[0]); veiculo.buzinar(); ((CarroPasseio)veiculo).ligarArCondicionado();

Podemos dizer que o compilador entende algo como: Opa?! Beleza! Se voc est garantindo que eu vou encontrar um CarroPasseio neste endereo ento eu deixo voc invocar este mtodo porm espero que saiba o que est fazendo pois se, em tempo de execuo, a referncia for de outro tipo a JVM ir emitir uma exceo bem espalhafatosa.

K O

www.t2ti.com
14

Curso Java Starter


Modificador final
O modificador final quando utilizado em classes ou mtodos bloqueia, respectivamente, a extenso e a sobreescrita, isto , utilizamos este modificador quando no desejamos que nossa classe tenha subclasses ou o mtodo seja sobreescrito. Devido s suas caractersticas este modificador deve ser utilizado com parcimnia e sabedoria pois ele vai contra um dos pilares da orientao a objetos: Reuso de cdigo atravs da herana e/ou sobreescrita. Abaixo segue um exemplo do uso:
public final class Jipe extends Veiculo{ public void ligarTracao4x4() { //Cdigo aqui } public void buzinar() { System.out.println("Buzina jipe"); }

Conforme dito anteriormente, ao adicionar o modificador final a declarao da classe estou inviabilizando qualquer tipo de estenso por outras classes, isto , apesar da classe Jipe estender a classe Veiculo, nenhuma outra classe poder estender, ser subclasse, da classe Jipe. Em mtodos a aplicao deste modificador feita da seguinte forma:
public

class Jipe extends Veiculo{ public void ligarTracao4x4() { //Cdigo aqui } public final void buzinar() { System.out.println("Buzina jipe"); }

Agora a classe Jipe pode ser estendida porm qualquer uma de suas subclasses no poder sobreescrever o mtodo buzinar(). Isto interessante quando desejamos que determinado comportamento no seja alterado em hiptese nenhuma. Nos pacotes bsicos da linguagem Java existem diversas classes que so modificadas pelo final, temos como exemplo a classe String e a classe Math.

www.t2ti.com
15

Curso Java Starter


Se foi dito que o modificador final vai contra os pilares da Orientao a Objetos porque as prprias classes desenvolvidas pelos gurus da SUN utilizam este modificador? A resposta a seguinte, quando estamos manipulando uma String ns devemos ter certeza que o comportamento esperado ser encontrado, isto , ao contrrio de outras classes para a classe String ns esperamos um comportamento estvel e consistente ao longo do tempo. Imagine os problemas decorrentes do uso de uma String que se comporta de maneira diferente da esperada?! Da mesma forma com a classe Math, imagine os problemas decorrentes da realizao de uma operao matemtica em que o resultado obtido seja diferente do esperado pois, um outro programador estendeu a classe e resolveu modificar as implementaes e por acaso ele no sabia tanto de matemtica quanto achava que sabia :). Nestes casos o modificador final utilizado a fim de evitar um mal maior aos programas em detrimento ao melhor uso do paradigma orientado a objetos. Quando voc for utilizar, se for utilizar, o modificador final pense sempre nas implicaes e nos objetivos que espera obter com o seu uso.

Classe Object
Para encerrar este mdulo vejamos a classe Object. Em Java todas as classes, eu disse todas as classes! String, Math, as minhas classes, as suas classes e etc. estendem a classe Object e portanto so do tipo Object tambm. Desta forma mesmo quando declaramos uma classe conforme abaixo:
public class Classe { }

Implicitamente o compilador interpreta esta classe como:


public class Classe extends Object{ }

Por isso todos os objetos objetos e no tipos primitivos! sempre iro passar (true) por um teste conforme abaixo:

www.t2ti.com
16

Curso Java Starter


if(qualquerObjeto instanceof Object) { //Sempre entrar neste bloco }

L-se: Todo objeto instncia da classe Object. A seguir temos os alguns dos principais mtodos da classe Object:

Mtodo
equals() toString() hashCode()

Descrio
Indica quando um objeto igual a este Retorna a representao textual deste objeto Retorna o cdigo hash para este objeto

Todos estes mtodos podem ser sobreescritos, e muitas vezes o so, os mtodos equals() e hashCode sero abordados no mdulo de Colees. Abaixo temos um exemplo da utilizao do mtodo toString():
public class Jipe extends Veiculo{ public void ligarTracao4x4() { //Cdigo aqui } public final void buzinar() { System.out.println("Buzina jipe"); } public String toString() { return "toString do Jipe"; } }

Observe que o mtodo toString(), da classe Object, est sendo sobreescrito pela minha classe Jipe, a seguir temos trecho de cdigo que imprime um objeto do tipo Jipe:
Veiculo veiculo = new Jipe(); System.out.println(veiculo);

O resultado deste cdigo o seguinte:


toString do Jipe

Quando imprimimos um objeto, a JVM invoca o mtodo toString() do objeto, se este mtodo no foi sobreescrito ento o mtodo toString() invocado o da

www.t2ti.com
17

Curso Java Starter


classe Object. Se no tivesse sido sobreescrito um dos possveis resultados a ser obtido seria este:
Jipe@10385c1

O que uma representao textual significativa do objeto para a JVM, mas no para ns seres humanos :).

EXERCCIOS
Aprenda com quem tambm est aprendendo, veja e compartilhe as suas respostas no nosso Frum: Exerccios Mdulo 07 Herana, Sobreescrita e Polimorfismo 1 Crie uma hierarquia de classes conforme abaixo com os seguintes atributos e comportamentos (observe a tabela), utilize os seus conhecimentos e distribua as caractersticas de forma que tudo o que for comum a todos os animais fique na classe Animal:

Cachorro
Possui Nome Possui Idade Deve emitir som Deve correr

Cavalo
Possui Nome Possui Idade Deve emitir som Deve correr

Preguica
Possui Nome Possui Idade Deve emitir som Deve subir em rvores

2 Implemente um programa que crie os 3 tipos de animais definidos no exerccio anterior e invoque o mtodo que emite o som de cada um de forma polimrfica, isto , independente do tipo de animal.

www.t2ti.com
18

Curso Java Starter


3 Implemente uma classe Veterinario que contenha um mtodo examinar() cujo parmetro de entrada um Animal, quando o animal for examinado ele deve emitir um som, passe os 3 animais com parmetro. 4 Crie uma classe Zoologico, com 10 jaulas (utilize um array) coloque em cada jaula um animal diferente, percorra cada jaula e emita o som e, se o tipo de animal possuir o comportamento, faa-o correr. 5 Resolva a seguinte situao utilizando os conceitos aprendidos. Uma empresa quer manter o registro da vida acadmica de todos os funcionrios, o modelo deve contemplar o registro das seguintes informaes, de forma incremental: 5.1 Para o funcionrio que no estudou, apenas o nome e o cdigo funcional; 5.2 Para o funcionrio que concluiu o ensino bsico, a escola; 5.3 Para o funcionrio que concluiu o ensino mdio, a escola; 5.4 Para o funcionrio que concluiu a graduao, a Universidade; 6 Estenda o modelo implementado no exerccio anterior de forma que todo funcionrio possua uma renda bsica de R$ 1000,00 e: 6.1 Com a concluso do ensino bsico a renda total renda bsica acrescentada em 10%; 6.2 Com a concluso do ensino mdio a renda total a renda do nvel anterior acrescentada em 50%; 6.3 Com a concluso da graduao a renda total a renda do nvel anterior acrescentada em 100%; 6.4 Todos os clculos so efetuados sempre sobre a ltima renda obtida. 7 Crie um programa que simule uma empresa com 10 funcionrios, utilize um array, sendo que a escolaridade dos funcionrios distribuda da seguinte forma: 40% ensino bsico, 40% ensino mdio e 20% nvel superior. Calcule os custos da empresa com salrios totais e por nvel de escolaridade, utilize a classe funcionrio desenvolvida no exerccio anterior. 8 Faa uma hierarquia de Comisses, crie as comisses de Gerente, Vendedor e Supervisor. Cada uma das comisses fornece um adicional ao salrio conforme abaixo: 8.1 Gerente: R$1500,00 8.2 Supervisor: R$600,00 8.3 Vendedor: R$250,00 9 Adicione a classe funcionrio um atributo referente as comisses desenvolvidas no exerccio anterior. Corrija o mtodo renda total de forma que ele some ao

www.t2ti.com
19

Curso Java Starter


valor da renda calculada o adicional da comisso do funcionrio. 10 Refaa o exerccio 7 considerando que 10% dos funcionrios so Gerentes, 20% so supervisores e 70% so vendedores. 11 Sobreescreva o mtodo toString de forma que ele imprima o nome do funcionrio, a comisso e o salrio total. Imprima todos os funcionrios da empresa criada no exerccio 7.

www.t2ti.com
20

Você também pode gostar