Você está na página 1de 16

Curso Profissional Tcnico de Gesto e Programao de Sistemas Informticos Nvel 4

Ano: 2
Ano Letivo: 2016-2017
Disciplina: Programao e Sistemas de Informao
Mdulo:
8 Conceitos Avanados de Programao
Formador: Milton Aguiar

Programao e Sistemas de
Informao
M10 Programao Orientada a Objetos

Mod. 011

Curso Profissional Tcnico de Gesto e Programao de Sistemas Informticos Nvel 4

Objetivos
Compreender os conceitos de herana, sobrescrita e polimorfismo

Venncio Camacho

2007/2008

Curso Profissional Tcnico de Gesto e Programao de Sistemas Informticos Nvel 4

Exerccio
1. Crie um projeto no BlueJ denominado Exerccio 8 e copie para
dentro deste as classes Carro e Condutor que desenvolveu no
Projeto Exercicio 2;
Desloque-se para a pasta onde se encontra o projeto Exercicio 2 , copie os ficheiros
Carro e Condutor e cole-os na pasta referente ao projeto Exerccio 8;

a) Defina os mtodos da classe Carro como public;


public void ligar ()
public void desligar ()
public void acelerar ()
public void travar (int intensidadeTravagem)

Curso Profissional Tcnico de Gesto e Programao de Sistemas Informticos Nvel 4

Exerccio
b) Acrescente classe Carro o mtodo seguinte:
public void buzinar () {
System.out.println (Buzina do Carro );
}

Defina as classes Citadino , Familiar e Jipe dentro do projeto onde esto as


classes Carro e Condutor:
Classe Citadino
Public class Citadino extends Carro {
//Construtores
public Citadino () {
}
//Mtodos
public void ligarACManual () {
System.out. println (AC LIGADO!);
}
}
4

Curso Profissional Tcnico de Gesto e Programao de Sistemas Informticos Nvel 4

Exerccio
Classe Familiar
public class Familiar extends Carro {
//Construtores
public Familiar () {
}
//Mtodos
public void desligarAirbagPassageiro () {
System.out. println (Airbag Desligado!);
}
}

Curso Profissional Tcnico de Gesto e Programao de Sistemas Informticos Nvel 4

Exerccio
Classe Jipe
public class Jipe extends Carro {
//Construtores
public Jipe () {
}
//Mtodos
public void ligarTracao4x4 () {
System.out. println (Trao Ligada!);
}
}

Curso Profissional Tcnico de Gesto e Programao de Sistemas Informticos Nvel 4

Exerccio
Desenvolva a classe TestaBuzinar1 que deve criar uma instncia de cada uma
das subclasses de Carro e invocar o mtodo buzinar() sobre cada uma delas.
Execute a classe e analise o resultado.
public class TestaBuzinar1 {
public static void main (String[] args) {
Citadino citadino = new Citadino ();
Familiar familiar = new Familiar ();
Jipe jipe = new Jipe ();
citadino.buzinar();
familiar.buzinar();
jipe.buzinar();
}
}

Curso Profissional Tcnico de Gesto e Programao de Sistemas Informticos Nvel 4

Exerccio
Sobrescreva o mtodo buzinar em cada uma das subclasses de Carro
Classe Citadino
//Redefinio do mtodo buzina sobrescrita (override)
public void buzinar() {
System.out.println(Buzina do Citadino);
Classe Familiar
//Redefinio do mtodo buzina sobrescrita (override)
public void buzinar() {
System.out.println(Buzina do Familiar);

Classe Jipe
//Redefinio do mtodo buzina sobrescrita (override)
public void buzinar() {
System.out.println(Buzina do Jipe);
8

Curso Profissional Tcnico de Gesto e Programao de Sistemas Informticos Nvel 4

Exerccio
Execute novamente a classe TestaBuzinar1 e verifique a diferena nos
resultados obtidos.
Neste caso, cada instncia criada buzina de forma
diferente, ou seja, devolve mensagens diferentes, uma vez
que cada uma delas utiliza o mtodo buzinar da sua classe,
e no o da superclasse Carro, como acontecia
anteriormente.
Tal deve-se ao facto de o mtodo ter sido sobrescrito em
cada uma das subclasses de Carro;

Curso Profissional Tcnico de Gesto e Programao de Sistemas Informticos Nvel 4

Exerccio
Acrescente a linha de cdigo seguinte no mtodo buzinar de cada uma das
subclasses de Carro (classes Citadino, Familiar e Jipe)
super.buzinar ();
Execute novamente a classe TestaBuzinar1 e verifique a diferena nos
resultados obtidos.

10

Curso Profissional Tcnico de Gesto e Programao de Sistemas Informticos Nvel 4

Exerccio
Altere a classe TestaBuzinar1, de forma a que, antes da invocao do mtodo
buzinar de cada subclasse de Carro, aparea a representao textual de cada um
dos trs objetos criados. Execute a classe e analise o resultado.
O cdigo dever ficar da seguinte forma:
public class TestaBuzinar1 {
public static void main (String[] args) {
Citadino citadino = new Citadino ();
Familiar familiar = new Familiar ();
Jipe jipe = new Jipe ();
System.out.println(citadino);
citadino.buzinar();
System.out.println(familiar);
familiar.buzinar();
System.out.println(jipe);
jipe.buzinar();
}
}

11

Curso Profissional Tcnico de Gesto e Programao de Sistemas Informticos Nvel 4

Exerccio
Execute o programa no BlueJ;
Neste caso, a representao textual de cada um dos trs objetos est a utilizar o
mtodo toString que as subclasses de Carro herdaram da superclasse Object.
Como se trata de um mtodo genrico , devolve uma representao que s
entendida pela JVM e no pelo ser humano.
Para contornar este problema, deve-se sobrescrever o mtodo toString em cada
uma das subclasses de Carro.

12

Curso Profissional Tcnico de Gesto e Programao de Sistemas Informticos Nvel 4

Exerccio
Classe Citadino
//redefinio do mtodo toString sobrescrita (override)
public String toString (){
return Este objeto do tipo Citadino;
}

Classe Familiar
//redefinio do mtodo toString sobrescrita (override)
public String toString (){
return Este objeto do tipo Familiar;
}

Classe Jipe
//redefinio do mtodo toString sobrescrita (override)
public String toString (){
return Este objeto do tipo Jipe;
}

Execute novamente a classe TestaBuzinar1 e verifique a diferena nos


resultados obtidos
13

Curso Profissional Tcnico de Gesto e Programao de Sistemas Informticos Nvel 4

Exerccio
Desenvolva a classe TestaBuzinar2 que deve criar uma instncia da subclasse
Carro, de acordo com a preferncia manifestada pelo utilizador
(citadino,familiar ou jipe), e invocar o mtodo buzinar sobre essa mesma
instncia.
import java.util.Scanner;
public class TestaBuzinar2 {
public static void main (String args[]){
Scanner s = new Scanner(System.in);
/*Solicita ao utilizador a introduo do tipo de carro que
pretende: citadino, familiar ou jipe*/
System.out.print(Insira o tipo de carro (citadino, familiar ou
jipe): );
String tipoCarro = s.nextLine();
/*declara o objeto carro mas no o cria pois, para isso, seria
necessrio ter a linha de cdigo : Carro carro = new carro
();*/
Carro carro;
14

Curso Profissional Tcnico de Gesto e Programao de Sistemas Informticos Nvel 4

Exerccio
Continuao
/*Compara o tipo de carro inserido pelo utilizador com as
subclasses de carro e cria uma instncia de uma delas */
if (tipoCarro.equals(citadino))
carro = new Citadino();
else if (tipoCarro.equals (familiar))
carro = new Familiar ();
else if (tipoCarro.equals (jipe))
carro = new Jipe();
else {
carro = new Carro ();
System.out.println( O tipo de carro que inseriu no
existe, por isso foi criada uma instncia genrica de
carro);
}
/*Invoca o mtodo buzina implementadona subclasse
correspondente ao tipo de carro inserido pelo utilizador */
carro.buzinar();
}
}

15

Curso Profissional Tcnico de Gesto e Programao de Sistemas Informticos Nvel 4

Exerccio
Altere a classe TestaBuzinar2 invocando o mtodo ligarACManual,
desligarAirbagPassageiro ou ligarTracao4x4, consoante o tipo de carro criado,
Para isso deve acrescentar o seguinte cdigo na classe:
//cdigo anterior
/*Verifica o tipo de carro selecionado e invoca o mtodo
correspondente*/
if (carro instanceof Citadino)
((Citadino)carro).ligarACManual();
else if (carro instanceof Familiar)
((Familiar)carro).desligarAirbagPassageiro();
else if (carro instanceof Jipe
((Jipe)carro).ligarTracao4x4();
}
}

16