Você está na página 1de 86

www.cruzeirodosulvirtual.com.

br

Programao Orientada a objeto

ACEF S/A Trabalho realizado pela Universidade de Franca (SP)


Todos os direitos reservados. proibida a reproduo ou transmisso total ou parcial por qualquer forma
ou qualquer meio (eletrnico ou mecnico, incluindo fotocpia e gravao) ou arquivamento em qualquer
sistema de banco de dados sem permisso do Ncleo de Educao a Distncia Unifran.

UNIVERSIDADE DE FRANCA
Chancelaria: Dr. Clovis Eduardo Pinto Ludovice
Reitoria: Prof.a Dr.a Ester Regina Vitale
Pr-Reitoria de Ensino: Prof. M.e Arnaldo Nicolella Filho
Pr-Reitoria de Pequisa: Prof.a Dr.a Katia Jorge Ciuffi
Pr-Reitoria de Extenso: Prof.a M.a Elisabete Ferro de Sousa Touso

COORDENAO EAD
Coordenao Geral de EAD: Prof.a Dr.a Ana Paula do Carmo Marcheti Ferraz
Coordenao Acadmica: Prof.a Dr.a Alessandra Aparecida Campos
Coordenao Pedaggica: Prof.a M.a Carmen Lucia Tozzi Mendona Conti

EDITORA UNIFRAN EDIFRAN


Direo de Publicaes: Prof. M.e Everton de Paula
Assistncia Administrativa Snior: Paula Andrea Ziga Muoz
Assistncia Administrativa II: Munira Rochlle Nambu
Reviso de Textos: Isabella Araujo Oliveira

Karina Barbosa

Thala de Sousa Orlando
Diagramao: Ana Lvia de Matos
Renan Oliveira Laudares Morais
Projeto Grfico: Srgio Ribeiro

Universidade de Franca Av. Dr. Armando Salles Oliveira, 201 Parque Universitrio 14.404-600
Franca SP PABX: (16) 3711-8888 FAX (16) 3711-8886 0800 34 12 12 www.unifran.edu.br
Editora Unifran (16) 3711-8736/8842 editora@unifran.br

UNIDADE 1
FUNDAMENTOS DA LINGUAGEM DE PROGRAMAO JAVA
Nesta Unidade voc conhecer os fundamentos da linguagem de programao
Java. A linguagem Java uma das principais linguagens de programao que
adota o paradigma de programao orientado a objetos.
Introduo
A linguagem de programao Java foi criada por James Gosling na dcada de
90 e se tornou muito popular quando comeou a ser utilizada no cenrio da
internet. Atualmente, Java no representa apenas uma linguagem de
programa, mas uma plataforma completa para o desenvolvimento de
aplicaes nos mais variados contextos. Os programas desenvolvidos nesta
plataforma utilizam a filosofia write once, run anywhere, em outras palavras
escreva uma vez, execute em qualquer lugar.
A plataforma Java organizada em mdulos, os quais so escolhidos
pelo programador de acordo com o tipo de aplicao que ser desenvolvida.
Os trs mdulos da plataforma so denominados:

Java Standard Edition: utilizado para construo de aplicaes simples


(desktop), as quais sero executadas localmente, ou acessando dados
armazenados em um servidor.

Java Enterprise Edition: empregado no desenvolvimento de aplicaes


corporativas que utilizam principalmente a internet para comunicao.
Neste contexto, esto as aplicaes e os servios web.

Java Micro Edition: destinado a elaborao de aplicaes para


dispositivos com pequeno poder de armazenamento e processamento.
O principal foco o desenvolvimento de aplicaes para celulares.
As aplicaes desenvolvidas com a linguagem Java so executadas e

gerenciadas por uma mquina virtual conhecida como Java Virtual Machine, ou
simplesmente JVM. Essas aplicaes so executadas independentemente do
sistema operacional utilizado pelo usurio. Esta caracterstica torna a

2
linguagem de programao Java multiplataforma. Assim, cada operacional
capaz de executar uma aplicao Java possui a sua prpria mquina virtual.
A maneira mais simples de obter e instalar a mquina virtual Java
realizando download do Java Runtime Environment (JRE). Para isso, voc
pode acessar o endereo <java.com> e clicar no boto Download Gratuito do
Java, conforme ilustrado na Figura 1.

Figura 1: Instalao do Java Runtime Environment

Para o desenvolvimento de aplicaes utilizando a linguagem Java


necessrio obter o kit de desenvolvimento integrado conhecido como Java
Development Kit, ou simplesmente JDK. Este kit possui todas as bibliotecas
que podero ser utilizadas na construo das aplicaes, alm do compilador
da linguagem Java. Para realizar o download do kit de desenvolvimento voc
dever acessar o seguinte endereo:
<http://www.oracle.com/technetwork/java/javase/downloads/index.html>
Ao acessar a pgina voc visualizar a opo para download da
plataforma. Para isso, clique no boto download Java Plataform (JDK),
conforme ilustrado na Figura 2a. Em seguida, voc ser direcionado para
pgina Java SE Developmenti Kit Download. Neste momento, voc dever
concordar com os termos de licena clique sobre o item Accept License

3
Agreement, em seguida, dever selecionar qual a verso do kit de
desenvolvimento mais adequada para o seu sistema operacional. A Figura 2b
ilustra as verses disponveis do Java Development Kit (JDK).

(a)

(b)

Figura 2: Obtendo o Java Development Kit (JDK): (a) Seleo do kit de


desenvolvimento; (b) Escolha da verso do kit de acordo com o sistema
operacional utilizado pelo programador.
O prximo passo antes de iniciar o desenvolvimento de aplicaes com
a linguagem Java a obteno de um ambiente de desenvolvimento integrado.
Atualmente, os dois principais ambientes para codificao de aplicaes com a
linguagem Java so o Eclipse <eclipse.org> e o NetBeans<netbeans.org>.
Nesta disciplina ser adotado o ambiente NetBeans, assim, voc dever
realizar o download do ambiente no endereo indicado. Na pgina de download
do ambiente NetBeans voc poder optar pela instalao de qualquer uma das
distribuies disponveis. No entanto, para simplificar o processo de obteno
voc pode escolher a opo completa denominada Tudo.
Criando e Executando uma Aplicao Java
Para o desenvolvimento de aplicaes utilizando a plataforma voc precisar
instalar no seu computador os seguintes softwares:

Java Runtime Environment (JRE)

Java Development Kit (JDK)

Ambiente Integrado NetBeans

4
Finalizada a instalao dos softwares necessrios, o prximo passo a
criao de um novo projeto utilizando o ambiente NetBeans. Para isso, voc
dever iniciar o ambiente NetBeans e acessar o menu Arquivo Novo
Projeto...Na tela Novo Projeto, selecione a categoria Java e em Projetos
escolha Aplicao Java.Em seguida, clique no boto prximo. Neste momento
voc dever especificar o nome do projeto. Alm disso, voc poder informar a
localizao em que o projeto ser gravado. Utilizaremos o seguinte nome do
projeto ProgOrientObjetos. Por fim, voc dever remover a seleo do item
Criar Classe Principal, e clicar no boto Finalizar. A Figura 3 ilustra o ambiente
de desenvolvimento integrado NetBeans aps a criao do novo projeto.

Figura 3: Ambiente de desenvolvimento integrado NetBeans.

Para demonstrar a execuo de uma aplicao no ambiente NetBeans,


vamos criar o clssico exemplo Hello World!. Para isso, j nela Projeto, clique
com o boto direito do mouse sobre o item Pacotes de Cdigos-Fonte e

5
selecione NovoClasse Java. No campo Nome da Classe especifique o nome
OlaMundo e, no campo Pacote define olamundo. Muita ateno para
definio dos nomes na linguagem Java. Uma conveno importante est
relacionada a nomeao de classes, em que o primeiro caractere de cada
palavra presente no nome da classe dever possuir a letra maiscula. Alm
disso, os nomes de pacotes devero sempre ser especificados com letras
minsculas. A Figura 4 ilustra a criao de uma nova classe no ambiente
NetBeans.

Figura 4: Criao de uma nova classe no ambiente NetBeans.


Na janela Cdigo-Fonte voc dever completar a classe criada de
acordo com o cdigo apresentado na listagem Cdigo 1. Para execuo deste
exemplo, voc dever utilizar o menuExecutarExecutar Arquivo, ou
simplesmente pressionar a tecla de atalho Shift+F6.
1

package olamundo;

2
3

public class OlaMundo {

4
5

public static void main(String[] args) {

6
6

System.out.println("Ol Mundo!");

8
9

O resultado da execuo visualizado na Janela de Sada. Assim, a


Figura 5 apresenta o resultado da execuo da listagem Cdigo 1.

Figura 5: Resultado da execuo da aplicao.


Estrutura Bsica
A estrutura bsica de um programa na linguagem Java definida por meio de
uma classe. Assim, todos os programas devem iniciar a especificao public
class, seguido do nome da classe. Outro fato importante a definio do bloco
principal de instrues, o qual denominado public static void main. O bloco
principal o primeiro mtodo a ser executado quando a aplicao colocada
em funcionamento. A listagem Cdigo 2 apresenta a estrutura bsica de um
programa na linguagem de programao Java.
1

public class Teste {

2
3

//

// BLOCO PRINCIPAL

//

public static void main(String[] args) {

7
8

// Instrues do programa

7
9
10

11
12

O conceito de Pacotes, do ingls Package, tem como objetivo organizar


os diversos arquivos de cdigo-fonte da aplicao. Assim, em termos prticos
um pacote uma pasta na estrutura do projeto utilizada para armazenar os
arquivos de cdigo fonte que tenham algum tipo de relao.

Comandos de Entrada e Sada


Os comandos de entrada e sada so fundamentais em qualquer linguagem de
programao. Os comandos de entrada so responsveis por receber dados
fornecidos pelo usurio, enquanto os comandos de sada so empregados na
exibio de informaes. Na linguagem Java os comandos de entrada e sada
podem ser utilizados em modo texto e modo grfico. No modo texto a entrada e
sada de dados so efetuadas no console e, no modo grfico so criadas
caixas de dilogo para incluso e exibio de informaes.
No modo texto o principal comando para exibio de informaes na tela
denominado System.out.println. Este comando permite a visualizao de
informaes textuais, bem como, a apresentao de valores contidos em
variveis. Para entrada de dados, a maneira mais empregada a utilizao de
uma classe denominada Scanner. Essa classe contm mtodos especficos
para leitura dos mais variados tipos de dados. A classe Scanner faz parte do
pacote java.util, assim, para sua utilizao necessrio incluir a instruo de
importao import java.util.Scanner(DEITEL & DEITEL, 2005). A listagem
Cdigo 3 demonstra a utilizao dos comandos de entrada e sada no modo
texto. O resultado da execuo pode ser visualizado na Figura 6.
Cdigo 3

8
1

package fundamentos;

2
3

import java.util.Scanner;

4
5

public class ComandosEntradaSaida1 {

6
7

public static void main(String[] args) {


Scanner entrada = new Scanner(System.in);

8
9

double a, b;

10
11

//comandos de sada

12

System.out.println("=== Comandos de Entrada e Sada ===");

13

System.out.print("Este

um

exemplo

de

mensagem

utilizando\n");
14

System.out.print("comandos de sada no modo texto.\n\n");

15
16

//comandos de entrada

17

System.out.println("Entre com os valores indicados");

18

System.out.print("A= ");

19
20

a = entrada.nextDouble();
System.out.print("B= ");
b = entrada.nextDouble();

21
22

System.out.println(String.format("Soma

b)));
23

24

%.2f

\n", (a

Figura 6: Resultado da execuo da aplicao.


A listagem Cdigo 4 demonstra a entrada e sada de informaes
utilizando o modo grfico. Neste modo so criadas caixas de dilogo com a
classe JOptionPane para leitura e exibio das informaes. Essas caixas
pertencem ao pacote javax.swing. O resultado da execuo da aplicao
ilustrado na Figura 7
Cdigo 4
1 package fundamentos;
2
3

import javax.swing.JOptionPane;

4
5

public class ComandosEntradaSaida2 {

6
7

public static void main(String[] args) {

double a, b;

9
10

//comandos de sada

11

JOptionPane.showMessageDialog(null,

12

"Este

um

exemplo

de

mensagem

utilizando\n"
13

+ "comandos de sada no modo grfico.\n\n",

14

"Comandos de Entrada e Sada",

15
16

JOptionPane.INFORMATION_MESSAGE);

10
17
18

//comandos de entrada
a

Double.parseDouble(JOptionPane.showInputDialog("Entre

com o valor de A"));


19

Double.parseDouble(JOptionPane.showInputDialog("Entre

=
com

JOptionPane.showMessageDialog(null,String.format("Soma

valor de B"));
20

%.2f \n", (a + b)));


21

22

Figura 7: Resultado da execuo da aplicao.


Estruturas Condicionais
As estruturas condicionais permitem controlar o fluxo de execuo dos
programas. Na linguagem Java, as condicionais podem ser definidas com as
instrues if e switch(DEITEL & DEITEL, 2005). A listagem Cdigo 5 demonstra
e utilizada de estruturas condicionais na linguagem Java. O resultado da
execuo da aplicao pode ser visualizado na Figura 8.
Cdigo 5
1
2

package fundamentos;

11
3

public class EstruturasCondicionais {

4
5

public static void main(String[] args) {

6
7

// IF

int a=10, b=8, c=12;

if (a>b && a>c){

10

System.out.println("A o maior valor");

11

}else if (b>c){

12

System.out.println("B o maior valor");

13

}else{

14

System.out.println("C o maior valor");

15

16
17

//SWITCH

18

int diasemana=2;

19

switch(diasemana){

20

case 1: System.out.println("Segunda-Feira"); break;

21

case 2: System.out.println("Tera-Feira"); break;

22

case 3: System.out.println("Quarta-Feira"); break;

23

case 4: System.out.println("Quinta-Feira"); break;

24

case 5: System.out.println("Sexta-Feira"); break;

25

case 6: System.out.println("Sbado"); break;

26

case 7: System.out.println("Domingo"); break;

27

default:

28

System.out.println("ERRO: dia invlido!");

29

30

31

12

Figura 8: Resultado da execuo da aplicao.


Estruturas de Repetio
As estruturas de repetio so empregadas para especificar blocos de
instrues que devero ser executados sucessivas vezes. Na linguagem Java
as

repeties

podem

ser

definidas

pelos

comandos

for,

while

do...while(DEITEL & DEITEL, 2005). A listagem Cdigo 6 ilustra a utilizao


das estruturas de repetio. A Figura 9 apresenta o resultado da execuo da
aplicao.
Cdigo 6
1

package fundamentos;

2
3

public class EstruturasRepeticao {

4
5

public static void main(String[] args) {

6
7

//FOR

int num = 4;

for (int i = 1; i <= 10; i++) {

10

System.out.println(String.format("%d

%d",i,num,(i*num)));
11

12
13

//WHILE

%d

13
14

int cont = 1;

15

while(cont < 3){

16

System.out.println("Joo da Silva");

17

cont++;

18

19
20

//DO..WHILE

21

double soma = 0;

22

cont = 1;

23

do {

24

soma += Math.random()*100;

25

cont++;

26

} while (cont < 100);

27

System.out.println(String.format("Soma= %.2f",soma));

28
29

30
31

Figura 9: Resultado da execuo da aplicao.


Com isso, voc conheceu os aspectos essenciais da linguagem de
programao Java. Voc aprendeu como obter e instalar os softwares
necessrios para o desenvolvimento utilizando a plataforma Java, alm das
principais caractersticas da linguagem.

14
Referncias Bibliogrficas
DEITEL, Harvey M; DEITEL, Paul, J. Java: Como Programar. So Paulo:
Prentice-Hall, 2005.
ORACLE.

Java

SE

Technical

Documentation.

Disponvel

em

<http://docs.oracle.com/javase/>. Acesso em Janeiro de 2013.


Consideraes Finais
Nesta Unidade voc conheceu as principais caractersticas da linguagem de
programao Java. Alm disso, voc aprendeu por meio de exemplos prticos
e funcionais os conceitos essenciais da linguagem Java.

15

UNIDADE 2
CLASSES, OBJETOS, ATRIBUTOS E MTODOS
Nesta Unidade voc iniciar o estudo sobre os principais conceitos do
paradigma de programao orientado a objetos. Para isso, sero definidos e
apresentados exemplos dos conceitos de classes, de objetos, de atributos e de
mtodos.
Fundamentos da Programao Orientada a Objetos
O paradigma de programao orientado a objetos pode ser definido como uma
metodologia formal par ao desenvolvimento de software. Neste contexto, o
paradigma constitudo de um conjunto de especificaes formais que devem
ser adotadas pelos programas na construo dos projetos.
Este paradigma possui muitas diferenas em relao ao paradigma de
programao estruturado. A principal mudana est relacionada a organizao
do cdigo fonte. Enquanto na programao estruturada a aplicao
estruturada em um projeto monoltico em que os dados e as funes do
programa fazem parte de um nico processo, na programao orientada a
objetos a estrutura modular e todos os componentes do programa so
manipulados por objetos em memria.
Outro detalhe importante que merece destaque a reutilizao de
cdigo fonte. Este recurso facilmente implementado no paradigma orientado
a objetos por meio do conceito de herana. Este conceito ser apresentado nas
Unidades seguintes. No entanto, na programao estruturada a reutilizao de
cdigo dificultada, de forma que os cdigos construdos tendem a ser
empregados unicamente nos projetos.
Classes
O conceito fundamental da orientao a objetos denominado classe. Uma
classe representa um modelo formal para criao de objetos. Comumente as

16
classes so definidas como moldes para objetos. Assim, com a definio de
uma classe possvel criar inmeros objetos. Em termos dos paradigmas de
programao, uma classe pode ser definida como um tipo abstrato de dados
definido pelo usurio.
A especificao de uma classe realizada por meio da abstrao do
problema, em termos de suas caractersticas e comportamentos. Estes
conceitos so conhecidos em programao orientada a objetos como atributos
e mtodos.
Por exemplo, considere como problema a criao de uma classe para
descrever as caractersticas e comportamentos de um carro. Neste contexto,
as principais caractersticas de um carro podem ser: cor, potncia do motor,
ano de fabricao, modelo e fabricante. Alm disso, os comportamentos
essenciais de um carro podem ser: ligar o motor, desligar o motor, acelerar,
frear e trocar de marcha. Este problema pode ser modelado por meio de uma
representao grfica, conforme ilustrado na Figura 1.
Carro
Cor
Potncia do motor
Ano de fabricao

Caractersticas

Modelo
Fabricante
Ligar o motor
Desligar o motor
Acelerar

Comportamentos

Frear
Trocar de marcha

Figura 1: Representao grfica de uma classe.


A listagem Cdigo 1 apresenta a especificao da classe Carros
utilizando a linguagem de programao Java. Neste exemplo, foram utilizados
diversos conceitos do paradigma orientado a objetos, os quais sero
detalhados nas sees e Unidades seguintes.

17
Cdigo 1
1

public class Carro {

2
3

private String cor;

private double potencia;

private int ano;

private String modelo;

private String fabricante;

8
9

public Carro() {

10

11
12

public void ligar(){

13

System.out.println("Carro ligado");

14

15
16

public void desligar(){

17

System.out.println("Carro desligado");

18

19
20

public void acelerar(){

21

System.out.println("Acelerando...");

22

23
24

public void frear(){

25

System.out.println("Freando...");

26

27
28

public void trocarmarcha(){

29

System.out.println("Trocar marcha");

30

31
32

18
Objetos
Na programao orientada a objetos o conceito de objeto est relacionado a
instanciao de uma classe. Dessa forma, um objeto representa a
transformao da descrio formal da classe em um modelo lgico e funcional,
o qual denominado objeto.
Os

objetos

podem

caracterizados

por

meio

das

informaes

armazenadas em seus atributos. Alm disso, os comportamentos relativos aos


objetos so definidos em subprogramas conhecidos como mtodos.
Na linguagem Java a criao de um objeto, ou a instncia de uma
classe, realizada utilizando a palavra reservada new. A listagem Cdigo 2
demonstra a criao de um conjunto de objetos da classe Carro.
Cdigo 2
1

public class TesteCarro {

2
3

public static void main(String[] args) {

Carro c1 = new Carro();

Carro c2 = new Carro();

Carro c3 = new Carro();

7
8

c1.ligar();

c1.trocarmarcha();

10

c1.desligar();

11
12

c2.ligar();

13

c2.acelerar();

14
15

c3.ligar();

16

c3.acelerar();

17

c3.frear();

18
19

19
20

Atributos
Os atributos so responsveis pelo armazenamento dos dados dos objetos. As
caractersticas dos dados so definidas na descrio da classe. Para cada
atributo contido na classe necessrio especificar o tipo de dados que ser
armazenado. Na linguagem os tipos de dados primitivos so boolean, char, int,
float e double. Alm disso, um atributo pode manipular dados abstratos como,
por exemplo, objetos de outras classes.
A listagem Cdigo 3 apresenta alguns atributos que podem ser definidos
para manipular dados a respeito de pessoas.
Cdigo 3
1

public class Pessoa {

2
3

private String nome;

private Date datanascimento;

private char sexo;

private double altura;

7
8

Mtodos
Os mtodos so utilizados para definir os comportamentos que sero
executados pelos objetos. A especificao de um mtodo realizada no
contexto da classe, assim, possvel definir quais aes sero realizadas
quando o mtodo for invocado.
A listagem Cdigo 4 demonstra a criao de uma classe para
manipulao de dados referente a pessoas. Neste exemplo, foram utilizados os
atributos apresentados no Cdigo 3 e foram includos os mtodos. Alm disso,

20
importante notar a definio de um mtodo especial denominado toString, o
qual retorna os atributos do objeto em formato texto.
Cdigo 4
1 public class Pessoa {
2
3

private String nome;

private Date datanascimento;

private char sexo;

private double altura;

7
8

public void andar(){

System.out.println("Andando...");

10

11
12

public void falar(){

13

System.out.println("Falando...");

14

15
16

public double retornarAltura(){

17

return altura;

18

19
20

@Override

21

public String toString() {

22

return "Pessoa{" + "nome=" + nome + ", datanascimento=" +

datanascimento + ", sexo=" + sexo + ", altura=" + altura + '}';


23

24
25

21
Referncias Bibliogrficas
DEITEL, Harvey M; DEITEL, Paul, J. Java: Como Programar. So Paulo:
Prentice-Hall, 2005.

Consideraes Finais
Nesta Unidade voc conheceu os aspectos fundamentais da metodologia
orientada a objetos. Por meio de definies claras e exemplos prticos voc
aprendeu os conceitos de classes, objetos, atributos e mtodos.

22

UNIDADE 3
ENCAPSULAMENTO
Nesta Unidade voc aprender sobre o conceito de encapsulamento e como
essa tcnica pode ser empregada na construo de programas baseado no
paradigma de programao orientado a objetos. Voc estudar tambm os
mecanismos utilizados para definir a visibilidade dos atributos e mtodos
presentes nas classes.
Introduo
Uma das principais caractersticas do paradigma de programao orientado a
objetos a possibilidade de ocultao dos dados e comportamentos presentes
nos objetos. Com isso, possvel preservar as caractersticas dos objetos, bem
como, a maneira que os comportamentos foram implementados.
O conceito de encapsulamento pode ser definido como uma tcnica de
organizao dos atributos e mtodos que previne o acesso no-autorizado as
informaes ou funcionalidades contidas no objeto.
Um objeto pode ser caracterizado pelas operaes que ele realiza e,
pelos dados que ele armazena. Assim, um objeto contm uma interface de
comunicao que expe as aes que ele pode executar e a implementao,
que contm o armazenamento e a manipulao dos dados.
O encapsulamento permite criar regras de acesso a interface e a
implementao do objeto. Com isso, possvel impedir o acesso por qualquer
outro meio que no seja os mecanismos especificados. Alm disso, a tcnica
de encapsulamento garante a integridade dos dados contidos no objeto.
Em termos de programao, a especificao de classes utilizando a
tcnica de encapsulamento tem como objetivo ocultar os dados que so
manipulados pelo objeto e disponibilizar as funcionalidades por meio de
mtodos. Assim, o acesso aos atributos pode ser restrito ao objeto e os

23
mtodos podem ter acesso liberado de forma que os objetos possam se
comunicar.
Visibilidade (Restries de Acesso)
A definio de atributos ou mtodos encapsulados em uma classe utiliza como
base o conceito de visibilidade. A visibilidade determina quais restries de
acesso sero empregadas ao objeto a partir de trs nveis de acesso, os quais
so denominados (DEITEL & DEITEL, 2005):

pblico (public)

protegido (protected)

privado (private)

O nvel de acesso pblico permite que todos os elementos presentes na


classe sejam acessveis em qualquer parte da aplicao. Assim, do ponto de
vista do objeto a visibilidade pblica expe todos os atributos e mtodos
disponveis no objeto. Dessa forma, este o nvel mais fraco de proteo das
informaes.
A restrio com o modo protegido determina que o acesso s informaes
seja realizado apenas pela prpria classe e por suas respectivas classes
derivadas. O conceito de classes derivadas ser apresentado nas prximas
Unidades de maneira mais detalhada, este conceito denominado herana.
O nvel de acesso privado define o grau mais alto de proteo. Neste nvel a
restrio mxima, assim, os atributos e mtodos podem ser acessados
apenas na prpria classe.
Simbolicamente os nveis de restrio de acesso podem ser includos ao
lado da definio de cada atributo e mtodo. Com isso, possvel visualizar
claramente qual a visibilidade do elemento. A Tabela 1 apresenta os smbolos
empregados na especificao da visibilidade de acesso. Estes smbolos so
comumente utilizados em representaes grficas de classes e so
empregados na linguagem unificada de modelagem orientada a objetos
conhecida como UML, do ingls Unified Modeling Language.

24
Smbolo

Visibilidade

pblico (public)

protegido (protected)

privado (private)

Tabela 1: Smbolos utilizados para representa a visibilidade de um atributo ou


mtodo.
Mtodos Manipuladores de Acesso: Get e Set
O objetivo do encapsulamento proteger as informaes e os comportamentos
associados aos objetos. No entanto, necessrio fornecer mecanismos que
possam ser utilizados para acessar determinados elementos contidos no
objeto. Essa necessidade fundamental, por exemplo, quando definimos um
atributo como privado, uma vez que a restrio de acesso a este elemento
total.
Neste contexto, devemos criar mtodos acessveis para manipulao
das informaes contidas nos atributos. Geralmente estes mtodos so
especificados como pblicos, assim, podem ser utilizados por qualquer objeto
da aplicao. Porm, mesmo os mtodos sendo pblicos possvel garantir a
integridade das informaes dos atributos.
Os mtodos manipuladores de acesso conhecidos com o set e get
fornecem um meio de comunicao entre objetos. Um mtodo definido como
set utilizado para modificar a informao contida em um atributo, enquanto
um mtodo especificado como get empregado no retorno da informao
contida no atributo. A listagem Cdigo 1 demonstra a utilizao de
manipuladores de acesso na especificao da classe Pessoa.
Cdigo 1
1

public class Pessoa {

2
3

//ATRIBUTOS

private String nome;

private int idade;

25
6

private char sexo;

private double peso;

private double altura;

9
10

//MTODOS MANIPULADORES

11

public String getNome() {

12

return nome;

13

14
15

public void setNome(String nome) {

16

this.nome = nome;

17

18
19

public int getIdade() {

20

return idade;

21

22
23

public void setIdade(int idade) {


this.idade = idade;

24
25

26
27

public char getSexo() {

28

return sexo;

29

30
31

public void setSexo(char sexo) {

32

this.sexo = sexo;

33

34
35

public double getPeso() {

36

return peso;

37
38

26
39

public void setPeso(double peso) {

40

this.peso = peso;

41

42
43

public double getAltura() {

44

return altura;

45

46
47

public void setAltura(double altura) {

48

this.altura = altura;

49

50
51

Para demonstrar a utilizao da classe Pessoa, uma nova classe foi


criada e nomeada como TestePessoa. Esta classe contm o bloco principal
(main), alm da criao do objeto da classe Pessoa. Na listagem Cdigo 2
apresentada a codificao da classe TestePessoa. O resultado da execuo
deste arquivo pode ser visualizado na Figura 1.
Cdigo 2
1

public class TestePessoa {

2
3

public static void main(String[] args) {

4
5

//Criao dos Objetos

Pessoa p1 = new Pessoa();

Pessoa p2 = new Pessoa();

8
9

//Preenchimento dos dados

10

p1.setNome("Joo da Silva");

11

p1.setIdade(25);

12

p1.setSexo('M');

27
13

p1.setPeso(75);

14

p1.setAltura(1.85);

15
16

p2.setNome("Ana Maria");

17

p2.setIdade(34);

18

p2.setSexo('F');

19

p2.setPeso(62);

20

p2.setAltura(1.66);

21
22

//Exibio de informaes

23

System.out.println("Nome: " + p1.getNome());

24

System.out.println("Nome: " + p2.getNome());

25
26

27

Figura 1: Resultado da execuo da aplicao.

A classe Pessoa demonstrada na listagem Cdigo 1 pode ser


representada graficamente conforme ilustrado na Figura 2. Na Figura
possvel identificar os atributos e mtodos, bem como as restries de acesso.
Pessoa
Nome
Idade
Sexo
Peso

atributos

28
altura
+

getNome

setNome

getIdade

setIdade

getSexo

setSexo

getPeso

setPeso

getAltura

setAltura

mtodos

Figura 2: Representao grfica da classe Pessoa, evidenciando as restries


de acesso aos atributos e mtodos.
A listagem Cdigo 3 apresenta um novo exemplo de encapsulamento
em que foi criada uma classe para manipular dados referentes a produtos. Na
codificao importante notar a utilizao de um operador denominado this.
Este operador usado quando precisamos referenciar atributos ou mtodos
contidos no prprio objeto. Assim, o operador this representa uma referncia
ao prprio objeto. Alm disso, neste exemplo foram criados dois mtodos
adicionais, um nomeado getTotal que calcula o preo total do produto em
funo da quantidade em estoque, o outro o mtodo chamado toString. A
codificao do mtodo toString tem como objetivo retornar todas as
informaes contidas no objeto em uma string. Com isso, possvel visualizar
facilmente os dados do objeto utilizando um comando de sada.
Cdigo 3
1

public class Produto {

2
3

private int codigo;

private String nome;

private int quantidade;

private double preco;

private boolean ativo;

29
9

public int getCodigo() {

10

return codigo;

11

12
13

public void setCodigo(int codigo) {

14

this.codigo = codigo;

15

16
17

public String getNome() {

18

return nome;

19

20
21

public void setNome(String nome) {

22

this.nome = nome;

23

24
25

public int getQuantidade() {

26

return quantidade;

27

28
29

public void setQuantidade(int quantidade) {

30

this.quantidade = quantidade;

31

32
33

public double getPreco() {

34

return preco;

35

36
37

public void setPreco(double preco) {

38

this.preco = preco;

39

40
41

public boolean isAtivo() {

30
42

return ativo;

43

44
45

public void setAtivo(boolean ativo) {

46

this.ativo = ativo;

47

48
//MTODOS

49
50

public double getTotal(){

51

return (preco*quantidade);

52

53
@Override

54
55

public String toString() {

56

return "Produto"

57

+ "\nCdigo....= " + codigo

58

+ "\nNome......= " + nome

59

+ "\nQuantidade= " + quantidade

60

+ "\nPreo.....= " + preco

61

+ "\nTotal.....= " + getTotal()

62

+ "\nAtivo.....= " + ativo + "\n";

63

64
65

Para demonstrar as funcionalidades da classe Produto uma classe de


teste foi criada. Na classe TesteProduto so instanciados um conjunto de
objetos da classe Produto. A listagem Cdigo 4 apresenta a definio da classe
TesteProduto.
Cdigo 4
1
2

public class TesteProduto {

31
3

public static void main(String[] args) {

Produto prod1 = new Produto();

Produto prod2 = new Produto();

Produto prod3 = new Produto();

7
8

prod1.setCodigo(1);

prod1.setNome("Mouse sem-fio");

10

prod1.setQuantidade(12);

11

prod1.setPreco(38.50);

12

prod1.setAtivo(true);

13
14

prod2.setCodigo(2);

15

prod2.setNome("Monitor 21''");

16

prod2.setQuantidade(20);

17

prod2.setPreco(395.00);

18

prod2.setAtivo(true);

19
20

prod3.setCodigo(3);

21

prod3.setNome("Impressora Laser");

22

prod3.setQuantidade(5);

23

prod3.setPreco(450.80);

24

prod3.setAtivo(false);

25
26

System.out.println(prod1.toString());

27

System.out.println(prod2.toString());

28

System.out.println(prod3.toString());

29

30

A Figura 3 apresenta o resultado da execuo da aplicao. Na sada


possvel visualizar a utilizao do mtodo toString, em que todas as
informaes do objeto foram exibidas.

32

Figura 3: Resultado da execuo da aplicao.

Dessa forma, voc aprendeu como elaborar classes utilizando o


paradigma orientado a objetos e o conceito de encapsulamento.

Referncias Bibliogrficas
DEITEL, Harvey M; DEITEL, Paul, J. Java: Como Programar. So Paulo:
Prentice-Hall, 2005
Consideraes Finais
Nesta Unidade voc conheceu a tcnica de encapsulamento empregada na
definio dos atributos e mtodos da classe. Alm disso, aprendeu sobre a
visibilidade das caractersticas e comportamentos dos objetos, por meio de
regras de restrio de acesso.

33

UNIDADE 4
CONSTRUTORES
Nesta Unidade voc aprender sobre a utilizao dos construtores. Os
construtores representam um conceito muito importante do paradigma de
programao orientado a objetos e so utilizados na especificao da maioria
das classes.
Introduo
No paradigma de programao estruturado o primeiro bloco de instrues a ser
executado em um programa o bloco principal, geralmente conhecido como
main. Analogamente, no paradigma de programao orientado a objetos o
primeiro bloco de instrues a ser executado quando um objeto instanciado
um mtodo conhecido como construtor.
Os construtores podem ser definidos como mtodos especiais que so
responsveis por especificar aes necessrias para a existncia de um objeto
(DEITEL & DEITEL, 2005). Neles possvel, por exemplo, realizar a
inicializao dos atributos da classe. O nome do mtodo construtor deve ser
exatamente igual ao nome da classe, respeitando caracteres definidos como
maisculo ou minsculo.
A listagem Cdigo 1 apresenta a definio da classe Java contendo um
mtodo construtor. A classe tem como objetivo manipular dados a respeito de
Veculos. Note na especificao que o mtodo construtor possui o mesmo
nome da classe. Alm disso, o objetivo do mtodo construtor inicializar os
atributos do objetivo com os valores padro.
Cdigo 1
1

public class Veiculo {

2
3

//ATRIBUTOS

34
4

private String marca;

private String modelo;

private String cor;

private int ano;

8
9

//CONSTRUTOR

10

public Veiculo() {

11

System.out.println("Executando construtor");

12

this.marca = "";

13

this.modelo = "";

14

this.cor = "";

15

this.ano = 0;

16

17
18

//MTODOS

19

public String getMarca() {

20

return marca;

21

22
23

public void setMarca(String marca) {

24

this.marca = marca;

25

26
27

public String getModelo() {

28

return modelo;

29

30
31

public void setModelo(String modelo) {

32

this.modelo = modelo;

33

34
35

public String getCor() {

36

return cor;

35
37

38
39

public void setCor(String cor) {

40

this.cor = cor;

41

42
43

public int getAno() {

44

return ano;

45

46
47

public void setAno(int ano) {

48

this.ano = ano;

49

50
51

@Override

52

public String toString() {

53

return "Veiculo"

54

+ "\nMarca.= " + marca

55

+ "\nModelo= " + modelo

56

+ "\nCor...= " + cor

57

+ "\nAno...= " + ano + '\n';

58

59

Para demonstrar a utilizao da classe Veiculo foi criada uma classe


denominada TesteVeiculo. A listagem Cdigo 2 apresenta a codificao da
classe de teste. A Figura 1 ilustra o resultado da execuo da classe
TesteVeiculo. importante destacar as mensagens que so exibidas na sada
quando o mtodo construtor de cada objeto executado. Como no exemplo
foram criados dois objetos, so exibidas na tela duas mensagens.
Cdigo 2
1

public class TesteVeiculo {

36
2
3

public static void main(String[] args) {

4
5

Veiculo v1 = new Veiculo();

v1.setMarca("Fiat");

v1.setModelo("Uno");

v1.setCor("Prata");

v1.setAno(2002);

10

System.out.println(v1.toString());

11
12

Veiculo v2 = new Veiculo();

13

v2.setMarca("Ford");

14

v2.setModelo("Fiesta");

15

v2.setCor("Preto");

16

v2.setAno(2005);

17

System.out.println(v2.toString());

18

19

Figura 1: Resultado da execuo da aplicao.


Sobrecarga de Construtores
No paradigma de programao orientado a objetos possvel especificar vrios
construtores para mesma classe. Assim, durante o processo de instncia da

37
classe o programador pode escolher qual construtor mais adequado para
utilizar na criao do objeto. Este conceito conhecido como sobrecarga de
construtores.
A sobrecarga de construtores uma caracterstica da orientao a
objetos e possibilita a definio de vrios mtodos construtores com o mesmo
nome. No entanto, para que os mtodos construtores sejam definidos como
sobrecarregados necessrio especificar parmetros diferentes para cada um
deles. Assim, a declarao da classe pode conter vrios construtores com o
mesmo nome, porm, com os parmetros diferentes.
Este conceito de sobrecarga de construtores tambm pode ser aplicado
para mtodos simples da classe. Por exemplo, possvel definir duas funes
responsveis pela soma de nmeros. Na primeira definio, a funo soma
pode receber como parmetro dois nmeros do tipo inteiro e, na segunda
definio, os parmetros da funo podem ser nmeros do tipo double.
Na listagem Cdigo 3 apresentado o conceito de sobrecarga de
construtores. No exemplo foram criados cinco construtores sobrecarregados,
cada qual, contendo uma lista de parmetros diferente.
Cdigo 3
1

public class Funcionario {

2
3

private String nome;

private int idade;

private String funcao;

private double salario;

7
8

public Funcionario() {

this.nome = "";

10

this.idade = 0;

11

this.funcao = "";

12

this.salario = 0;

13

38
14
15

public Funcionario(String nome) {

16

this.nome = nome;

17

18
19

public Funcionario(String nome, int idade) {

20

this.nome = nome;

21

this.idade = idade;

22

23
24

public Funcionario(String nome, int idade, String funcao) {

25

this.nome = nome;

26

this.idade = idade;

27

this.funcao = funcao;

28

29
30

public Funcionario(String nome, int idade, String funcao,

double salario) {
31

this.nome = nome;

32

this.idade = idade;

33

this.funcao = funcao;

34

this.salario = salario;

35

36
37

public String getNome() {

38

return nome;

39

40
41

public void setNome(String nome) {

42

this.nome = nome;

43

44
45

public int getIdade() {

39
46

return idade;

47

48
49

public void setIdade(int idade) {

50

this.idade = idade;

51

52
53

public String getFuncao() {

54

return funcao;

55

56
57

public void setFuncao(String funcao) {

58

this.funcao = funcao;

59

60
61

public double getSalario() {

62

return salario;

63

64
65

public void setSalario(double salario) {

66

this.salario = salario;
}

67
68
69

@Override

70

public String toString() {

71

return "Funcionrio"

72

+ "\nNome...= " + nome

73

+ "\nIdade..= " + idade

74

+ "\nFuno.= " + funcao

75

"\nSalrio=

%.2f",salario)
76
77

+ '\n';
}

"

String.format("R$

40
78
79

A listagem Cdigo 4 apresenta a classe de teste criada para demonstrar


a utilizao dos construtores sobrecarregados da classe funcionrio. O
resultado da execuo dos testes pode ser visualizado na Figura 2.
Cdigo 4
1

public class TesteFuncionario {

2
3

public static void main(String[] args) {

4
5

Funcionario f1 = new Funcionario();

Funcionario f2 = new Funcionario("Ariane Maria");

Funcionario f3 = new Funcionario("Carlos Jos",48);

Funcionario

f4

new

Funcionario("Antnio

Lima",36,"Msico");
9

Funcionario

f5

Santos",42,"Turismlogo",2200.00);
10
11

f1.setNome("Joo da Silva");

12

f1.setIdade(25);

13

f1.setFuncao("Economista");

14

f1.setSalario(3850.00);

15
16

f2.setIdade(36);

17

f2.setFuncao("Arquiteta");

18

f2.setSalario(2600.00);

19
20

f3.setFuncao("Gegrafo");

21

f3.setSalario(4000.00);

22
23

f4.setSalario(3000);

new

Funcionario("Aldo

41
24
25

System.out.println(f1.toString());

26

System.out.println(f2.toString());

27

System.out.println(f3.toString());

28

System.out.println(f4.toString());

29

System.out.println(f5.toString());

30
31

32
33

Figura 2: Resultado da execuo da aplicao.


Com isso, voc aprendeu como utilizar o recurso dos construtores na definio
de classes com o paradigma de programao orientado a objetos.
Referncias Bibliogrficas

42
DEITEL, Harvey M; DEITEL, Paul, J. Java: Como Programar. So Paulo:
Prentice-Hall, 2005
Consideraes Finais
Nesta Unidade voc aprendeu sobre os construtores do paradigma de
programao orientado a objetos. Voc conheceu a tcnica utilizada para
especificao de construtores, bem como, a metodologia usada para definio
de construtores sobrecarregados.

43

UNIDADE 5
HERANA
Nesta Unidade voc aprender como utilizar um dos principais conceitos do
paradigma de programao orientado a objetos denominado herana. Este
recurso utilizado na especificao de classes com o foco na reutilizao de
software.
Introduo
Na rea de desenvolvimento de software um dos principais desafios
encontrados pelos programadores a reutilizao de software. Em termos de
programao, o reuso de software tem como objetivo incorporar em um novo
projeto as codificaes de projetos j realizados. Em outras palavras, um novo
projeto criado a partir de fragmentos de projetos j existentes.
O processo de reutilizao de software depende essencialmente das
tcnicas de programao que foram empregadas no desenvolvimento.
Dependendo das tcnicas utilizadas a utilizao pode ser invivel. No
paradigma de programao estruturado, por exemplo, uma maneira de
reutilizar software especificar as funcionalidades do cdigo por meio de
mdulos utilizando a tcnica de programao modular. No entanto, os mdulos
precisam ser generalistas, e utilizar fundamentalmente a passagem de
parmetros, o que pode ser impraticvel dependendo do projeto.
O paradigma de programao orientado a objetos possui uma
metodologia clara e objetiva para reutilizao de software. Essa metodologia
conhecida como herana e permite a especificao de novas classes a partir
de definies de classes existentes. Neste contexto, as novas classes criadas
herdam caractersticas e funcionalidades de classes previamente especificadas
(DEITEL & DEITEL, 2005).

44
Na especificao de classes utilizando herana, o programador pode
construir novas classes a partir de definies existentes, alm disso, possvel
aprimorar as novas classes adicionando novos recursos.
No paradigma orientado a objetos a tcnica de herana pode ser
entendida como uma relao pai e filho. Em que a classe filha herda as
caractersticas e funcionalidades da classe pai.
Outra nomenclatura comumente utilizada a relao superclasse e
subclasse. Neste caso, a subclasse estende os recursos da superclasse.
Algumas linguagens de programao tambm utilizam da terminologia classe
base e classe derivada para determinar a herana.
A Figura 1 apresenta graficamente a relao de herana entre classes. A
superclasse contm os atributos e mtodos que sero compartilhados entre as
classes derivadas, as quais so denominadas subclasses.

Superclasse
atributos

classe pai

mtodos

Subclasse
atributos

mtodos

Subclasse
classes filhas

atributos

mtodos

Figura 1: Especificao de herana no paradigma orientado a objetos.

45

Para definir uma relao de herana entre classes, o paradigma de


programao orientado a objetos dispe de duas categorias, as quais so
conhecidas como:

Herana simples: quando uma classe derivada, ou classe filha,


estende caractersticas e funcionalidades de um nico pai. Essa
codificao est presente em grande parte das linguagens de
programao que adotam o paradigma orientado a objetos como,
por exemplo, as linguagens Java, C++ e C#.

Herana mltipla: ocorre quando uma subclasse herda recursos


originrios

de

mais

de

uma

superclasse.

Este

tipo

de

especificao no est disponvel na linguagem de programao


Java, porm pode ser definido na linguagem de programao
C++. Na linguagem Java possvel implementar o conceito de
herana mltipla utilizando um recurso conhecido como interface,
este tipo de codificao ser discutido com mais detalhes nas
Unidades seguintes.
Na linguagem de programao Java a relao de herana entre duas
classes definida por meio da palavra reservada extends. Assim, durante a
especificao de uma classe filha (ou subclasse) necessrio indicar que essa
nova classe estende de uma classe pai (ou superclasse).
Para demonstrar a codificao do conceito de herana considere o
problema de especificar classes para manipular dados a respeito de pessoas
fsicas e jurdicas. O primeiro passo para construir uma relao de herana
identificar quais atributos e mtodos podem ser comuns a classes derivadas.
Os recursos genricos devem ser declarados na classe pai e os recursos
especficos nas classes filhas.
A Figura 2 apresenta uma possvel especificao de classes entre
pessoas fsicas e jurdicas.

46

Pessoa
- Nome
- Endereo
+ setNome()
+ getNome()
+ set Endereo()
+getEndereo()

PessoaFisica

PessoaJuridica

- CPF
- CNH

- CNPJ
- IE

+ setCPF()
+ getCPF()
+ setCNH()
+ getCNH()

+ setCNPJ()
+ getCNPJ()
+ setIE()
+ getIE()

Figura 2: Especificao de herana entre pessoas fsicas e jurdicas.


Na Figura 2 possvel visualizar que os atributos genricos nome e
endereo foram definidos na superclassePessoa. Estes atributos sero
compartilhados com as classes derivadas, e no precisaro ser definidos
novamente nas subclasses. Na classe PessoaFisica foram definidos os
atributos especficos CPF (Cadastro Pessoa Fsica) e CNH (Carteira Nacional
de Habilitao). Estes atributos so exclusivos de pessoas fsicas. Por outro
lado, na classe PessoaJuridica foram especificados os atributos CNPJ
(Cadastro Nacional de Pessoa Jurdica) e IE (Inscrio Estadual), os quais so
restritos a pessoas jurdicas.
A listagem Cdigo 1 apresenta a codificao da superclasse Pessoa. Em
seguida, na listagem Cdigo 2 demonstra a codificao da subclasse
PessoaFisica. Note que na definio da classe utilizada a representao de
herana com a palavra reservada extends. Por fim, a listagem Cdigo 3 ilustra

47
a declarao da classe PessoaJuridica, a qual tambm herda as caractersticas
e funcionalidades da classe Pessoa.
Na codificao das classes derivadas comum utilizar referncias aos
recursos da classe pai. Na linguagem de programao Java essas invocaes
so realizadas por meio da palavra reservada super.
Cdigo 1
1

public class Pessoa {

2
3

private String nome;

private String endereco;

5
6

public Pessoa() {

this.nome = "";

this.endereco = "";

10
11

public Pessoa(String nome, String endereco) {

12

this.nome = nome;

13

this.endereco = endereco;

14

15
16

public String getNome() {

17

return nome;

18

19
20

public void setNome(String nome) {

21

this.nome = nome;

22

23
24

public String getEndereco() {

25

return endereco;

26

48
27
28

public void setEndereco(String endereco) {

29

this.endereco = endereco;

30

31
32

@Override

33

public String toString() {

34

return

"\nNome....= " + nome

35
36

+ "\nEndereo= " + endereco;


}

37
38

Cdigo 2
1

public class PessoaFisica extends Pessoa{

2
3

private String cpf;

private String cnh;

5
6

public PessoaFisica() {

super();

this.cpf = "";

9
10

//chamada construtor classe pai

this.cnh = "";
}

11
12

public PessoaFisica(String nome, String endereco, String

cpf, String cnh) {


13

super(nome, endereco); //chamada construtor classe pai

14

this.cpf = cpf;

15
16
17

this.cnh = cnh;
}

49
18

public String getCpf() {

19

return cpf;

20

21
22

public void setCpf(String cpf) {

23

this.cpf = cpf;

24

25
26

public String getCnh() {

27

return cnh;

28

29
30

public void setCnh(String cnh) {

31

this.cnh = cnh;

32

33
34

@Override

35

public String toString() {

36

return

super.toString() //chamada classe pai

37

+ "\nCPF.....= " + cpf

38

+ "\nCNH.....= " + cnh;

39

40
41

Cdigo 3
1

public class PessoaJuridica extends Pessoa {

2
3

private String cnpj;

private String ie;

5
6

public PessoaJuridica() {

50
7

super(); //chamada construtor classe pai

this.cnpj = "";

this.ie = "";

10

11
12

public PessoaJuridica(String nome, String endereco, String

cnpj, String ie) {


13

super(nome, endereco); //chamada construtor classe pai

14

this.cnpj = cnpj;

15

this.ie = ie;

16

17
18

public String getCnpj() {

19

return cnpj;

20

21
22

public void setCnpj(String cnpj) {

23

this.cnpj = cnpj;

24

25
26

public String getIe() {

27

return ie;

28

29
30

public void setIe(String ie) {

31

this.ie = ie;

32

33
34
35

@Override

36

public String toString() {

37

return

38

super.toString() //chamada classe pai


+ "\nCNP.....= " + cnpj

51
39
40

+ "\nIE......= " + ie;


}

41
42

Para demonstrar as funcionalidades das classes implementadas, foi


definida uma classe de testes denominada TestePessoa. Na classe possvel
visualizar a utilizao da superclasse subclasse, bem como, o acesso as
caractersticas e funcionalidades compartilhadas atravs da relao de herana
entre as classes. A especificao da classe de teste apresentada na listagem
Cdigo 4.
A Figura 3 apresenta o resultado da execuo da classe de teste. Na
Figura possvel notar que as informaes apresentadas na tela so
originrias de recursos especficos das subclasses e recursos genricos da
superclasse.
1

public class TestePessoa {

2
3

public static void main(String[] args) {

4
5

//Objeto Pessoa Fsica

PessoaFisica pf = new PessoaFisica();

7
8

pf.setNome("Joo da Silva");

pf.setEndereco("Rua Jao Carlos da Silva, 123");

10

pf.setCpf("123.456.789-00");

11

pf.setCnh("012345789");

12
13

//Objeto Pessoa Jurdica

14

PessoaJuridica pj = new PessoaJuridica(

15

"Ana Maria",

16

"Av. Maria dos Santos, 1234",

17

"01.234.567/0001-89",

52
18

"012134567-8");

19
20

//Exibir dados na tela

21

System.out.println(pf.toString());

22

System.out.println(pj.toString());

23
24

25

Figura 3: Resultado da execuo da aplicao.

Referncias Bibliogrficas
DEITEL, Harvey M; DEITEL, Paul, J. Java: Como Programar. So Paulo:
Prentice-Hall, 2005
Consideraes Finais
A Unidade apresentou o conceito de herana e como esta metodologia pode
ser aplicada em projetos orientados a objetos. Voc aprendeu como especificar
classes com herana, alm de declarar objetos de classes derivadas.

UNIDADE 6

53

POLIMORFISMO
Nesta Unidade voc conhecer a utilizao, codificao e importncia do
conceito de polimorfismo. Este recurso faz parte do paradigma de programao
orientado a objetos e comumente utilizado em projetos de aplicaes
baseadas neste paradigma.
Introduo
O termo polimorfismo pode ser traduzido literalmente como algo contendo
muitas formas. Em programao de computadores, o conceito de polimorfismo
utilizado para referenciar objetos que contm caractersticas distintas para
cada filho e pode ser implementado de trs maneiras (DEITEL & DEITEL,
2005):

Polimorfismo por Sobrecarga

Polimorfismo por Sobreposio

Polimorfismo por Generalizao

Polimorfismo por Sobrecarga


A sobrecarga o tipo mais comum de especificao de projetos orientados a
objetos que utilizando polimorfismo. Neste tipo de polimorfismo, tem como
principal caractersticas a definio de mtodos como o mesmo nome, porm
como lista de parmetros diferentes. A diferena entre os mtodos
identificada em tempo de execuo e, realizada pela alterao dos nomes e
dos tipos definidos na lista de parmetros.
A listagem Cdigo 1 demonstra a codificao do conceito de
polimorfismo por sobrecarga. Neste exemplo foi definida uma classe
denominada Soma capaz de realizar a soma de diversos tipos de valores. Note
que os mtodos getSoma so exemplos de polimorfismo por sobreposio.
Cdigo 1

54
1

public class Soma {

2
3

public int getSoma(int valor1, int valor2){

return (valor1+valor2);

6
7

public int getSoma(int valor1, int valor2, int valor3){

return (valor1+valor2+valor3);

10
11

public double getSoma(double valor1, double valor2){

12

return (valor1+valor2);

13

14
15

public double getSoma(double valor1, double valor2, double

valor3){
16

return (valor1+valor2+valor3);

17

18
19

public String getSoma(String valor1, String valor2){

20

double v1 = Double.parseDouble(valor1);

21

double v2 = Double.parseDouble(valor2);

22

return String.valueOf(v1+v2);

23

24
25

public String getSoma(String valor1, String valor2, String

valor3){
26

double v1 = Double.parseDouble(valor1);

27

double v2 = Double.parseDouble(valor2);

28

double v3 = Double.parseDouble(valor3);

29

return String.valueOf(v1+v2+v3);

30

31

55
32

Na listagem Cdigo 2 definida a classe de teste que demonstra a


utilizao da classe Soma. A Figura 1 apresenta o resultado da execuo da
aplicao.
Cdigo 2
1

public class TesteSoma {

public static void main(String[] args) {

3
4

//Declarao do objeto

Soma soma = new Soma();

6
7

//Chamada dos mtodos sobrecarregados

8
9

int res1;

10

res1 = soma.getSoma(10,20);

11

System.out.println("Resultado= " + res1);

12
13

res1 = soma.getSoma(10,20,30);

14

System.out.println("Resultado= " + res1);

15
16

double res2;

17

res2 = soma.getSoma(8.50, 3.25);

18

System.out.println("Resultado= " + res2);

19

res2 = soma.getSoma(8.50, 3.25,6.90);

20

System.out.println("Resultado= " + res2);

21
22

String res3;

23

res3 = soma.getSoma("12.50", "6.80");

24

System.out.println("Resultado= " + res3);

25

res3 = soma.getSoma("12.50", "6.80","25.20");

26

System.out.println("Resultado= " + res3);

56
27

28

Figura 1: Resultado da execuo da aplicao.

Polimorfismo por Sobreposio


A tcnica de polimorfismo por sobreposio tem como objetivo especificar
mtodos que contem nomes e lista de parmetros comuns, porm tenham
funcionalidades diferentes. Assim, neste tipo de polimorfismo possvel definir
mtodos com funcionalidades diferentes nas classes derivadas.
No polimorfismo por sobreposio um mtodo definido em uma
superclasse pode ser reescrito, ou sobreposto, pelas classes derivadas de
forma que cada classe derivada possa realizar uma especificao diferente.
Em termos de programao, este tipo de polimorfismo identificado pela
notao @Override.
As listagens Cdigo 3, Cdigo 4 e Cdigo 5 demonstram a especificao
de um conjunto de classes utilizando o polimorfismo por sobreposio. Neste
exemplo, a superclasse denominada Aluno contm um mtodo para calcular a
mdia que sobreposto pelas classes derivadas: AlunoGraduacao e
AlunoPosGraduacao. Na classe AlunoGraduacao o clculo da mdia
realizado de maneira pondera, em que 40% da nota originria da primeira
prova e 60% da nota obtida com a segunda prova. Na classe
AlunoPosGraduacao, o clculo da mdia final leva em considerao a
realizao de duas provas, um projeto prtico e uma monografia.

57
Cdigo 3
1

public class Aluno {

2
3

private double nota1;

private double nota2;

5
6

public Aluno() {

this.nota1 = 0;

this.nota2 = 0;

10
11

public Aluno(double nota1, double nota2) {

12

this.nota1 = nota1;

13

this.nota2 = nota2;

14

15
16

public double getNota1() {

17

return nota1;

18

19
20

public void setNota1(double nota1) {

21

this.nota1 = nota1;

22

23
24

public double getNota2() {

25

return nota2;

26

27
28

public void setNota2(double nota2) {

29

this.nota2 = nota2;

30

31
32

/*

58
33

* MTODO: getMedia

34

* Definio do mtodo getMedia que ser

35

* sobreposto pelas classes derivadas.

36

*/

37

public double getMedia(){

38

return (this.nota1+this.nota2)/2;

39

40
41

@Override

42

public String toString() {

43

return "Mdia= "+String.format("%.1f", getMedia());

44

45
46

Cdigo 4
1

public class AlunoGraduacao extends Aluno{

2
3

public AlunoGraduacao() {

super();

6
7

public AlunoGraduacao(double nota1, double nota2) {

super(nota1, nota2);

10
11
12

/**

13

* POLIMORFISMO POR SOBREPOSIO

14

* Reescrita do mtodo getMedia de acordo

15

* com os critrios adotados para o clculo

16

* da mdia dos alunos da graduao

59
17

*/

18
19

@Override

20

public double getMedia(){

21

return (super.getNota1()*0.40

22

+super.getNota2()*0.60);

23

24
25

@Override

26

public String toString() {

27

return "\nAluno de Graduao \n" +

28

super.toString();

29

30
31

Cdigo 5
1

public class AlunoPosGraduacao extends Aluno{

2
3

private double notaProjeto;

private double notaMonografia;

5
6

public AlunoPosGraduacao() {

super();

this.notaProjeto = 0;

this.notaMonografia = 0;

10

11
12

public AlunoPosGraduacao(double nota1, double nota2, double

notaProjeto, double notaMonografia) {


13

super(nota1, nota2);

14

this.notaProjeto = notaProjeto;

60
15

this.notaMonografia = notaMonografia;

16

17
18

public double getNotaProjeto() {

19

return notaProjeto;

20

21
22

public void setNotaProjeto(double notaProjeto) {

23

this.notaProjeto = notaProjeto;

24

25
26

public double getNotaMonografia() {

27

return notaMonografia;

28

29
30

public void setNotaMonografia(double notaMonografia) {

31

this.notaMonografia = notaMonografia;

32

33
34

/**

35

* POLIMORFISMO POR SOBREPOSIO

36

* Reescrita do mtodo getMedia de acordo

37

* com os critrios adotados para o clculo

38

* da mdia dos alunos da ps-graduao

39

*/

40
41

@Override

42

public double getMedia(){

43

return ((super.getMedia())*0.50)

44

+ this.getNotaProjeto()*0.35

45

+ this.getNotaMonografia()*0.15;

46
47

61
48

@Override

49

public String toString() {

50

return "\nAluno de Ps-Graduao \n" +

51

super.toString();

52

53

Na listagem Cdigo 6 demonstrada a classe de teste para este


exemplo de polimorfismo por sobreposio. Na Figura 2 possvel visualizar o
resultado da execuo do exemplo.
Cdigo 6
1

public class TesteAluno {

2
3

public static void main(String[] args) {

4
5

Aluno a1 = new Aluno();

a1.setNota1(8.50);

a1.setNota2(9.20);

System.out.println(a1.toString());

9
10

AlunoGraduacao a2 = new AlunoGraduacao();

11

a2.setNota1(6.80);

12

a2.setNota2(7.40);

13

System.out.println(a2.toString());

14
15

AlunoPosGraduacao a3 = new AlunoPosGraduacao();

16

a3.setNota1(9.30);

17

a3.setNota2(8.60);

18

a3.setNotaProjeto(9.80);

19

a3.setNotaMonografia(9.20);

20

System.out.println(a3.toString());

21

62
22

Figura 2: Resultado da execuo da aplicao.


Polimorfismo por Generalizao
Na tcnica de polimorfismo por generalizao, a representao de objetos com
muitas formas realizada por meio da coero entre objetos. Dessa forma, um
objeto pode assumir formas diferentes da sua origem a partir da sua coero.
Na programao de computadores, o termo coero comumente conhecido
como casting.
Um detalhe importante que merece destaque sobre o polimorfismo por
generalizao que a tcnica somente pode ser empregada em objetos
derivados de uma mesma superclasse. Caso contrrio, a tcnica no pode ser
utilizada.
Para demonstrar este tipo de tcnica, considere a hierarquia de classes
especificadas anteriormente: Aluno, AlunoGraduacao e AlunoPosGraduacao. A
listagem Cdigo 7 apresenta uma nova classe de teste que ilustra a tcnica de
polimorfismo por generalizao. Neste exemplo, foi utilizado um vetor genrico
de cinco alunos, o qual possui instncia das classes AlunoGraduacao e
AlunoPosGraduacao. Alm disso, possvel visualizar na codificao o
processo de coero dos objetos genricos, de maneira que as funcionalidades
especficas de cada classe possam ser acessadas. O resultado da execuo
deste exemplo pode ser visualizado na Figura 3.
Cdigo 7

63
1

public class TesteAlunoGeneralizacao {

2
3

public static void main(String[] args) {

4
5

Aluno[] aluno = new Aluno[5];

6
7

/*

* CRIAO DOS OBJETOS

* A criao dos objetos utilizou a tcnica de

10

* polimorfismo por generalizao

11

*/

12

aluno[0] = new AlunoGraduacao(8.50, 7.80);

13

aluno[1] = new AlunoPosGraduacao(9.50,6.90,8.40,8.80);

14

aluno[2] = new AlunoPosGraduacao(8.20,9.40,6.50,7.30);

15

aluno[3] = new AlunoGraduacao(6.20, 9.90);

16

aluno[4] = new AlunoGraduacao(9.50, 5.90);

17
18

/*

19

* COERO

20

* Utilizao da coero (casting) para acessar

21

* funcionalidades epecficas de cada objeto. Neste

22

* caso, a coero foi empregada para alterar as

23

* notas dos projetos e monografias dos alunos de

24

* ps-graduao.

25

*/

26
27

// Aluno 1

28
((AlunoPosGraduacao)aluno[1]).setNotaMonografia(9.50);
29

((AlunoPosGraduacao)aluno[1]).setNotaProjeto(9.90);

30
31
32

//Aluno 2

64
((AlunoPosGraduacao)aluno[2]).setNotaMonografia(8.80);
33

((AlunoPosGraduacao)aluno[2]).setNotaProjeto(9.20);

34
35
36
37

// Exibio dos resultados na tela


for (int i = 0; i < aluno.length; i++) {

38
39

System.out.println(aluno[i].toString());

40

System.out.println("Nota 1= " + aluno[i].getNota1());

41

System.out.println("Nota 2= " + aluno[i].getNota2());

42
43

if (aluno[i] instanceof AlunoPosGraduacao){

44

System.out.println("Nota

do

projeto...=

"

"

((AlunoPosGraduacao)aluno[i]).getNotaProjeto());
45

System.out.println("Nota

da

monografia=

((AlunoPosGraduacao)aluno[i]).getNotaMonografia());
46

47
48

49

50

65

Figura 3: Resultado da execuo da aplicao.

Com isso, voc aprendeu as diferentes tcnicas de polimorfismo e suas


codificaes na linguagem de programao Java.
Referncias Bibliogrficas
DEITEL, Harvey M; DEITEL, Paul, J. Java: Como Programar. So Paulo:
Prentice-Hall, 2005

Consideraes Finais
Nesta Unidade voc aprendeu como construir classes polimrficas. Esta
tcnica utilizada em projetos baseados no paradigma orientado a objetos e
pode ser implementada de trs formas: sobrecarga, sobreposio e
generalizao.

66

UNIDADE 7
CLASSES E MTODOS ABSTRATOS
Nesta Unidade voc aprender como criar classes e mtodos abstratos. Este
conceito faz parte do paradigma de programao orientado a objetos e pode
ser empregado na soluo de diversos tipos de problemas.
Introduo
Em projetos baseados no paradigma de programao orientado a objetos
comum criarmos classes que sero utilizadas como base para outras classes.
Essas classes so conhecidas como superclasses so herdadas por outras
classes denominadas subclasses. Este conceito conhecido como herana e
foi estudado na Unidade 5.
Geralmente a definio de uma superclasse serve de referncia para as
classes derivadas, as quais herdam os atributos e mtodos especificados na
classe base. A tcnica de classes abstratas permite ao programador declarar
classes que nunca sero instanciadas. Dessa forma, uma classe abstrata pode
ser utilizada apenas em situaes de herana e, no permitem que objetos
sejam diretamente criados.
Em termos de programao, uma classe abstrata utilizada para
oferecer as classes derivadas uma superclasse com total integridade em
relao aos seus atributos e mtodos. Com isso, as classes filhas podem
acessar as propriedades da classe pai de maneira apropriada. A especificao
de uma classe abstrata realizada por meio da palavra reservada
abstract(DEITEL & DEITEL, 2005).
Uma classe abstrata pode conter mtodos que sero utilizados como
base para as classes derivadas. Estes mtodos so conhecidos como
mtodos abstratos. Um mtodo abstrato no possui implementao, assim,

67
na definio da classe abstrata especificada apenas a assinatura do mtodo
abstrato. As classes que herdarem a classe abstrata devero realizar a
codificao do mtodo
A listagem Cdigo 1 apresenta a codificao de uma classe abstrata, a
qual contm mtodo abstratos que devero ser implementados pelas classes
derivadas. Neste exemplo, foi definida uma superclasse abstrata denominada
Funcionario.
Cdigo 1
1

public abstract class Funcionario {

2
3

private String nome;

protected double salario;

// salrio base

5
6

public Funcionario() {

this.nome = "";

this.salario = 0.0;

10
11

public Funcionario(String nome, double salario) {

12

this.nome = nome;

13

this.salario = salario;

14

15
16

public String getNome() {

17

return nome;

18

19
20

public void setNome(String nome) {

21

this.nome = nome;

22

23
24

public void setSalario(double salario) {

68
25

this.salario = salario;

26

27
28

/*

29

* MTODO ABSTRATO

30

* Definio do mtodo abstrato getSalario, o

31

* qual dever ser implementado pelas classes

32

* derivadas.

33

*/

34

public abstract double getSalario();

35
36

@Override

37

public String toString() {

38

return

"\nNome...= " + nome

39

+ "\nSalrio= "

40

+ String.format("%.2f",getSalario());

41

42
43

As listagens Cdigo 2 e Cdigo 3 apresentam as definies das classes


derivadas Vendedor e Gerente. Essas classes herdam os atributos e mtodos
da superclasse Funcionario, alm disso, realizam a codificao do mtodo
abstrato getSalario(). O salrio de um funcionrio calculado em funo do
salrio base acrescido de um percentual de 8% sobre o total de vendas. Por
outro lado, o salrio do gerente calculado a partir do salrio base, incluindo
um percentual de 1% sobre o montante de vendas da loja.
Cdigo 3
1

public class Vendedor extends Funcionario {

2
3
4

private double totalvendas; //total de vendas funcionrio

69
5

public Vendedor() {

super();

this.totalvendas = 0;

9
10

public

Vendedor(String

nome,

double

salario,double

totalvendas) {
11

super(nome, salario);

12

this.totalvendas = totalvendas;

13

14
15

public double getTotalvendas() {

16

return totalvendas;

17

18
19

public void setTotalvendas(double totalvendas) {

20

this.totalvendas = totalvendas;

21

22
23
24

/**

25

* IMPLEMENTAO DO MTODO ABSTRATO

26

* Clculo do salrio do funcionrio em funo do

salrio
27

* base acrescido de um percentual de 8% sobre o total

28

* de vendas do funcionrio.

29

*/

30
31

@Override

32

public double getSalario() {

33

return super.salario +

34
35

(this.totalvendas*0.08);
}

70
36
37

Cdigo 4
1

public class Gerente extends Funcionario{

2
3

private double volumevendas;

// volume de vendas loja

4
5

public Gerente() {

super();

this.volumevendas = 0.0;

9
10

public

Gerente(String

nome,

double

salario,

double

volumevendas) {
11

super(nome, salario);

12

this.volumevendas = volumevendas;

13

14
15

public double getVolumevendas() {

16

return volumevendas;

17

18
19

public void setVolumevendas(double volumevendas) {

20

this.volumevendas = volumevendas;

21

22
23

/**

24

* IMPLEMENTAO DO MTODO ABSTRATO

25

* Clculo do salrio do funcionrio em funo do

salrio
26

* base acrescido de um percentual de 1% sobre o total

71
27

* de vendas da loja.

28

*/

29

@Override

30

public double getSalario() {

31

return super.salario + (this.getVolumevendas()*0.01);

32

33
34

Para ilustrar o funcionamento das classes criadas uma nova classe foi
definida como TesteFuncionario. A listagem Cdigo 4 apresenta o contedo
dessa classe. Alm disso, a Figura 1 demonstra o resultado da execuo da
aplicao.
Cdigo 4
1

public class TesteFuncionario {

2
3

public static void main(String[] args) {

4
5

Vendedor ved = new Vendedor();

ved.setNome("Joo da Silva");

ved.setSalario(1000);

ved.setTotalvendas(15000);

System.out.println(ved.toString());

10
11
12

Gerente ger = new Gerente();

13

ger.setNome("Ana Maria");

14

ger.setSalario(1500);

15

ger.setVolumevendas(355800);

16

System.out.println(ger.toString());

17
18

72
19

Figura 1: Resultado da execuo da aplicao.

Com isso voc aprendeu como construir projetos baseados no


paradigma orientado a objetos utilizando o conceito de classes e mtodos
abstratos.

Referncias Bibliogrficas
DEITEL, Harvey M; DEITEL, Paul, J. Java: Como Programar. So Paulo:
Prentice-Hall, 2005

Consideraes Finais
Nesta Unidade voc aprendeu como criar classes e mtodos abstratos. Alm
disso, voc conheceu detalhes especficos da codificao dessa tcnica
utilizando a linguagem de programao Java.

73

UNIDADE 8
INTERFACES E HERANA MLTIPLA
Nesta Unidade voc aprender como elaborar classes utilizando o conceito de
herana mltipla. No paradigma orientado a objetos a herana mltipla tem
como objetivo criar classes que sejam derivadas de mltiplos pais.
Introduo
Uma das principais caractersticas do paradigma de programao orientado a
objetos a possibilidade de reutilizao de software. Este recurso realizado
por meio da especificao de projetos que utilizam o conceito de herana. Na
orientao objetos a herana permite que classes sejam criadas a partir de
definies previamente existentes. Em outras palavras, as classes derivadas
podem ser definidas em funo de classes conhecidas como superclasses.
No paradigma orientado a objetos o conceito de herana pode ser
definido de duas maneiras denominadas: herana simples e herana mltipla.
No entanto, algumas linguagens de programao orientadas a objetos no
implementam nativamente a herana mltipla, como o caso da linguagem de
programao Java e C#. Para essas linguagens, a herana mltipla pode ser
definida utilizando um recurso denominado interfaces.
Interfaces
As interfaces so recursos das linguagens de programao que permitem a
especificao de mtodos que sero definidos por outras classes. Em outras
palavras, as interfaces permitem a definio de assinaturas de mtodos que
sero codificados por classes que implementam essas interfaces. Na
linguagem de programao Java este procedimento indicado no incio da
definio da classe com a palavra reservada implements(DEITEL & DEITEL,
2005). A listagem Cdigo 1 apresenta a especificao de uma interface na
linguagem de programao Java. Em seguida, a listagem Cdigo 2 demonstra

74
a implementao da interface criada e a codificao dos seus respectivos
mtodos.
Cdigo 1
1

public interface ICalculadora {

2
3

public double getSoma();

public double getSubtracao();

public double getDivisao();

public double getMultiplicacao();

public void exibirResultados();

8
9

Cdigo 2
1

public class Calculadora implements ICalculadora{

2
3

private double valor1;

private double valor2;

5
6

public Calculadora() {

this.valor1 = 0;

this.valor2 = 0;

10
11

public Calculadora(double valor1, double valor2) {

12

this.valor1 = valor1;

13

this.valor2 = valor2;

14

15
16

public double getValor1() {

17

return valor1;

75
18

19
20

public void setValor1(double valor1) {

21

this.valor1 = valor1;

22

23
24

public double getValor2() {

25

return valor2;

26

27
28

public void setValor2(double valor2) {

29

this.valor2 = valor2;
}

30
31
32

@Override

33

public double getSoma() {

34

return this.valor1+this.valor2;

35

36
37

@Override

38

public double getSubtracao() {

39

return this.valor1-this.valor2;

40

41
42

@Override

43

public double getDivisao() {

44

return this.valor1/this.valor2;
}

45
46
47

@Override

48

public double getMultiplicacao() {

49

return this.valor1*this.valor2;

50

76
51
52

@Override

53

public void exibirResultados() {

54

System.out.println("Resultados");

55

System.out.println("Soma.........= " + getSoma());

56

System.out.println("Subtrao....= " + getSubtracao());

57

System.out.println("Diviso......= " + getDivisao());

58

System.out.println("Multiplicao= " + getMultiplicacao());

59

60
61

}
A listagem Cdigo 3 ilustra a codificao da classe de teste para

demonstrar as funcionalidades das classes criadas. A Figura 1 apresenta o


resultado da execuo da aplicao.
Cdigo 3
1

public class TesteCalculadora {

2
3

public static void main(String[] args) {

Calculadora calc = new Calculadora();

calc.setValor1(8);

calc.setValor2(10);

calc.exibirResultados();

9
10

Figura 1: Resultado da execuo da aplicao.

77
Herana Mltipla
O conceito de herana mltipla no paradigma orientado a objeto representa a
especificao de subclasses a partir da herana de mltiplas superclasses. Na
linguagem de programao Java este recurso implementado utilizando
interfaces.
As listagens Cdigo 4, Cdigo 5 e Cdigo 6 demonstram a
implementao de herana mltipla na linguagem de programao Java. Note
que as subclasses (Cdigo 6 e Cdigo 7) herdam uma superclasse (Cdigo 4)
e implementa uma interface (Cdigo 5), caracterizando assim o conceito de
herana mltipla.
Cdigo 4
1

public class Pessoa {

2
3

protected String nome;

protected double salario;

5
6

public Pessoa() {

this.nome = "";

this.salario = 0;

10
11

public Pessoa(String nome, double salario) {

12

this.nome = nome;

13

this.salario = salario;

14

15
16

public void setNome(String nome) {

17

this.nome = nome;

18

19
20

public String getNome() {

78
21

return nome;

22

23
24

public void setSalario(double salario) {

25

this.salario = salario;

26

27
28

public double getSalario() {

29

return this.salario;

30

31
32

@Override

33

public String toString() {

34

return

35

+ "\nSalrio= " + String.format("%.2f",getSalario());

36

"\nNome...= "+ getNome()

37
38

Cdigo 5
1

public interface IEmpregado {

2
3

public final double HORAEXTRA = 15.80;

public final double COMISSAO = 0.03;

5
6

public double getSalario();

public String getNome();

8
9

Cdigo 6

79
1

public class Gerente extends Pessoa implements IEmpregado{

2
3

private double volumevendas;

4
5

public Gerente() {

super();

this.volumevendas = 0;

9
10

public

Gerente(String

nome,

double

salario,

double

volumevendas) {
11

super(nome, salario);

12

this.volumevendas = volumevendas;

13

14
15

public double getVolumevendas() {

16

return volumevendas;

17

18
19

public void setVolumevendas(double volumevendas) {

20

this.volumevendas = volumevendas;
}

21
22
23

@Override

24

public double getSalario() {

25

return (super.salario)+(this.volumevendas*(COMISSAO/2));

26

27
28

@Override

29

public String getNome() {

30

return super.nome + " (Gerente)";

31

32

80
33

Cdigo 7
1

public

class

Vendedor

extends

Pessoa

implements

IEmpregado{
2
3

private double totalvendas;

private double horasextras;

5
6

public Vendedor() {

super();

this.totalvendas = 0;

this.horasextras = 0;

10

11
12

public

Vendedor(String

nome,

double

salario,

totalvendas, double horasextras) {


13

super(nome, salario);

14

this.totalvendas = totalvendas;

15

this.horasextras = horasextras;

16

17
18

public double getTotalvendas() {

19

return totalvendas;

20

21
22

public void setTotalvendas(double totalvendas) {

23

this.totalvendas = totalvendas;

24

25
26

public double getHorasextras() {

27

return horasextras;

double

81
28

29
30

public void setHorasextras(double horasextras) {

31

this.horasextras = horasextras;

32

33
34

@Override

35

public double getSalario() {

36

return (super.salario)+(this.totalvendas*COMISSAO)

37
38

+(this.horasextras*HORAEXTRA);
}

39
@Override

40
41

public String getNome() {

42

return super.nome + " (Vendedor)";

43

44
45

A listagem Cdigo 8 apresenta a classe de teste. O resultado da


execuo da aplicao pode ser visualizado na Figura 2. Na Figura possvel
notar a instncia de uma classe baseada no conceito de herana mltipla.
Cdigo 8
1

public class TesteHerancaMultipla {

2
3

public static void main(String[] args) {

4
5

Pessoa p[] = new Pessoa[3];

6
7

p[0] = new Gerente("Ana Maria",2000,180000);

82
8

p[1] = new Vendedor("Joo da Silva",850,26500,16);

p[2] = new Vendedor("Carlos Santos",850,22800,22);

10
11

for (int i = 0; i < p.length; i++) {

12

System.out.println(p[i].toString());

13

14

15

Figura 2: Resultado da execuo da aplicao.

Neste ponto, voc conclui o estudo dos principais conceitos do


paradigma de programao orientado a objetos. Com isso, voc conheceu as
principais caractersticas da herana mltipla e aprendeu como implementar
esta tcnica utilizando interfaces.

Referncias Bibliogrficas
DEITEL, Harvey M; DEITEL, Paul, J. Java: Como Programar. So Paulo:
Prentice-Hall, 2005

Consideraes Finais

83
Nesta Unidade voc aprendeu, por meio de exemplos de cdigos funcionais,
como elaborar projetos orientados a objeto utilizando o recurso de herana
mltipla. Alm disso, voc estudo como criar interfaces que podem ser
implementadas por outras classes.

www.cruzeirodosulvirtual.com.br

www.cruzeirodosulvirtual.com.br
Campus Liberdade
Rua Galvo Bueno, 868
CEP 01506-000 - So Paulo/SP Brasil
Tel: (55 11) 3385-3000

Você também pode gostar