Você está na página 1de 48

Linguagens Orientadas por Objetos

Licenciatura em Informtica de Gesto


Ano letivo 2014/2015

Dora Melo
dmelo@iscac.pt
Setembro de 2014

Contedo
1 Introduo Programao Orientada por Objetos

1.1 Programao Orientada por Objetos . . . . . . . . . . . . . . . . . . . . .

1.2 Origens e Benefcios do modelo POO . . . . . . . . . . . . . . . . . . . .

1.3 Classes, Objetos e Mensagens . . . . . . . . . . . . . . . . . . . . . . . .

1.4 Abstrao e Encapsulamento . . . . . . . . . . . . . . . . . . . . . . . . .

1.5 Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2 Linguagem de Programao Java

10

2.1 Introduo Histrica . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10

2.2 Vantagens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11

2.3 Applets e Aplicaes Java . . . . . . . . . . . . . . . . . . . . . . . . . . .

12

2.3.1

Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

14

2.4 Sintaxe e Semntica da Linguagem de Programao Java . . . . . . . . .

15

2.4.1

Declaraes e Atribuies . . . . . . . . . . . . . . . . . . . . . .

15

2.4.2

Comentrios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17

2.4.3

Literal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

18

2.4.4

Expresses e Operaes . . . . . . . . . . . . . . . . . . . . . . . .

19

2.4.4.1

Operadores Numricos . . . . . . . . . . . . . . . . . .

19

2.4.4.2

Operadores de Atribuio . . . . . . . . . . . . . . . . .

20

2.4.4.3

Incrementao e Decrementao . . . . . . . . . . . . .

20

2.4.4.4

Operadores de Comparao . . . . . . . . . . . . . . . .

20

Dora Melo dmelo@iscac.pt

2
2.4.4.5

Operadores Lgicos . . . . . . . . . . . . . . . . . . . .

21

2.4.4.6

Precedncia dos Operadores . . . . . . . . . . . . . . .

21

2.4.5

Funes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

22

2.4.6

Bloco de Instrues . . . . . . . . . . . . . . . . . . . . . . . . . .

23

2.4.7

Estruturas Condicionais . . . . . . . . . . . . . . . . . . . . . . .

23

2.4.8

Estruturas de Repetio . . . . . . . . . . . . . . . . . . . . . . .

24

2.4.9

Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

25

2.5 Algumas caractersticas do Java . . . . . . . . . . . . . . . . . . . . . . .

27

3 Programao Orientada por Objetos e a Linguagem Java

30

3.1 A linguagem Java - Packages . . . . . . . . . . . . . . . . . . . . . . . . .

30

3.2 Exerccios - Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

31

3.3 Classes e Instncias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

31

3.4 Exerccios - Classes e Instncias . . . . . . . . . . . . . . . . . . . . . . .

33

3.5 Mtodos Construtores . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

34

3.6 Polimorfismo de Mtodos (Overloading) . . . . . . . . . . . . . . . . . .

35

3.7 Exerccios - Mtodos Construtores e Polimorfismo de Mtodos . . . . .

35

3.8 Gesto de Memria - Garbage Collector . . . . . . . . . . . . . . . . . . .

36

3.9 Exerccios - finalize() . . . . . . . . . . . . . . . . . . . . . . . . . . . .

38

3.10 Mtodos Modificadores e Seletores . . . . . . . . . . . . . . . . . . . . .

38

3.11 Exerccios - Mtodos Modificadores e Seletores . . . . . . . . . . . . . .

39

3.12 A palavra reservada this . . . . . . . . . . . . . . . . . . . . . . . . . . .

39

3.13 Exerccios - this . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

41

3.14 O mtodo toString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

41

3.15 Exerccios - toString . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

41

3.16 Array (vetor) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

42

3.17 Exerccios - Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

43

3.18 BlueJ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

43

Dora Melo dmelo@iscac.pt

3
3.19 Exerccios - BlueJ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Referncias bibliogrficas

44
47

Dora Melo dmelo@iscac.pt

Captulo 1
Introduo Programao Orientada
por Objetos
1.1

Programao Orientada por Objetos

A orientao a objetos um paradigma de anlise, projeto e programao de sistemas


de software baseado na composio e interao entre diversas unidades de software
chamadas de OBJETOS.
Em alguns contextos, prefere-se usar modelao orientada aos objetos, em vez de programao. De fato, o paradigma orientado a objetos tem bases conceituais e origem no
campo de estudo da cognio (ato de adquirir um conhecimento), que influenciou a
rea de Inteligncia Artificial e da Lingustica, no campo da abstrao de conceitos do
mundo real.
Na qualidade de mtodo de modelao, tida como a melhor estratgia para se eliminar o fosso semntico, i.e., a dificuldade recorrente no processo de modelar o mundo
real, de acordo com o domnio do problema, num conjunto de componentes de software e que seja o mais fiel na representao desse domnio. Facilita a comunicao do
profissional modelador e do utilizador da rea alvo, na medida em que a correlao da
simbologia e conceitos abstratos do mundo real e da ferramenta de modelao (conceitos, terminologia, smbolos, grafismo e estratgias) a mais bvia, natural e exata
possvel.
Na Programao Orientada a Objetos (POO), uma aplicao vista como uma rede dinmica de objetos que colaboram e interagem (se relacionam) entre si. Desta forma, os
programadores de software podem gerir de uma forma mais fcil a complexidade do
domnio do problema, bem como, desenvolver softwares mais flexveis, com manuteno mais facilitada, alm de melhorar as possibilidades de reutilizao do cdigo.

Dora Melo dmelo@iscac.pt

5
Deste modo, utilizando o paradigma orientado a objetos, modelamos e construmos
sistemas, baseado nos objetos que compem o mesmo. Como exemplo, poderamos
pensar numa aplicao de uma agncia bancria como sendo implementada atravs de
objetos cliente, conta corrente, aplicao financeira e assim por diante que se relacionam mutuamente.
Muitos softwares a serem desenvolvidos no futuro usaro algum nvel de Orientao a
Objetos.
Atualmente, o Paradigma Orientado a Objetos engloba uma srie de disciplinas, tais
como: Programao Orientado a Objetos, Modelao e Design Orientado a Objetos,
Banco de dados Orientado a Objetos, Interfaces Orientadas a Objetos , Metodologias
Orientadas a Objetos de desenvolvimento de software, . . .
C++, C#, VB.NET, Java, Object Pascal, Objective-C, Python, SuperCollider, Ruby e
Smalltalk so exemplos de linguagens de programao orientadas por objetos.
ActionScript, ColdFusion, Javascript, PHP (a partir da verso 4.0), Perl (a partir
da verso 5) e Visual Basic (a partir da verso 4) so exemplos de linguagens de
programao com suporte orientado a objetos.

1.2

Origens e Benefcios do modelo POO

A necessidade de, para efeitos de simulao e anlise de sistemas, desenvolver uma linguagem de programao com a capacidade de modelar facilmente sistemas (Nygaard,
61).
Na dcada de 1960, o contrato entre a NCC (Norwegian Computing Center) e a UNIVAC
resultou o desenvolvimento da linguagem SIMULA I (Nygaard e Dahl, 65), linguagem
de programao de simulao. Esta linguagem considerada a primeira linguagem
orientada por objetos.
Vrios melhoramentos deram origem ao SIMULA 67 que introduziu a grande maioria
dos principais conceitos da Programao Orientada por Objetos: classes, objetos, herana, mtodos virtuais. O mais recente standard o SIMULA 87.
Em 1988, nos laboratrios BELL, Bjarne Stroustrup desenvolveu uma extenso linguagem C ANSI, destinada a suportar todos os conceitos chaves do SIMULA, e que tomou a designao de C++.
No incio da dcada de 1990, um pequeno grupo de engenheiros da Sun Microsystems (Sun), chamado Green Team e liderado por James Gosling, criou a linguagem de
programao orientada por objetos Java.
A POO , atualmente, o paradigma predominante na implementao de programas
Dora Melo dmelo@iscac.pt

6
complexos, caracterizados pela interao de um largo nmero de componentes.
Entre as muitas linguagens orientadas por objectos encontram-se o Smalltalk (Xerox),
Eiffel (B. Meyer), CLOS (D. Bobrow e G. Ziczales), SELF (D. Ungar), JAVA (SUN) e C#
(Microsoft).
De entre todos os benefcios da utilizao do modelo orientado por objetos, destacamse:
Reutilizao de cdigo
Modelao dos objetos do mundo real
Polimorfismo
Simplificao dos processos de teste e debugging (localizar e eliminar os erros)
Facilidade de manuteno do cdigo

1.3

Classes, Objetos e Mensagens

da natureza humana realizar modelaes a partir da maneira como interpreta a natureza. No contexto da POO, consiste em modelar e implementar sistemas utilizando-se
objetos.
O foco da POO no est nos procedimentos do universo e sim nos objetos que existem
nele, j que eles formam um elemento natural para o modelo e o mundo composto
por objetos.
Definio 1.3.1 (Objeto) O conceito OBJETO representa uma abstrao de algo no domnio do problema que reflete os recursos de um sistema de reter informaes sobre ele, interagir
com ele, ou ambas as coisas (Richard C. Lee e Willian M. Tepfenhart em UML e C++ Guia
Prtico de Desenvolvimento Orientado a Objetos).
Definio 1.3.2 Na POO implementa-se um conjunto de classes que definem os objetos
presentes no sistema de software. Cada CLASSE determina o comportamento (operaes,
definidas nos mtodos) e estados possveis (atributos) de seus objetos, assim como o relacionamento (interao) com outros objetos. Todo objeto possui atributos e pode prestar algum
tipo de servio. Estes atributos e servios so conhecidos, respetivamente, como membros de
dados e mtodos.
Os objetos na POO so ento gerados a partir de uma estrutura conhecida como classe,
que define conjunto de dados e rotinas para processar estes dados. Estas classes podem
Dora Melo dmelo@iscac.pt

7
ser vistas como moldes (modelos, padres) que representam o conjunto de objetos que
compartilham os mesmos atributos, operaes e relacionamentos.
Cada classe contm todas as informaes que ela precisa para executar qualquer processamento exigido pelo objeto que ela representa. Desde modo, para termos um objeto para utilizao pelo nosso programa, temos que ger-lo a partir da classe desejada.
Podemos fazer uma analogia com o tipo de dado inteiro das linguagens de programao. Para armazenarmos em nosso programa um valor inteiro, precisamos declarar
com o nome que desejarmos, uma varivel deste tipo no programa.
Resumindo, objetos podem ser vistos como instncias de classes.
Na POO o programador responsvel por moldar o mundo dos objetos, e explicar para
estes objetos como eles devem interagir entre si. Os objetos "conversam"uns com os
outros atravs do envio de mensagens, e o papel principal do programador especificar
quais sero as mensagens que cada objeto pode receber, e tambm qual a ao que
aquele objeto deve realizar ao receber aquela mensagem em especfico.
Definio 1.3.3 Uma mensagem uma chamada a um objeto para invocar uma das suas
operaes, ativando um comportamento descrito por sua classe. A resposta a uma mensagem
o resultado da execuo da operao invocada para o estado do objeto.

1.4

Abstrao e Encapsulamento

Um modelo orientado por objetos constitudo por um conjunto de Classes, que correspondem a definies de conceitos, e pelas relaes que possvel estabelecer entre elas, num determinado contexto associado ao problema. Ou seja, na forma mais
simples, um problema orientado por objetos representado pela interao entre as
diferentes instncias (objetos) das classes.
A abstrao e o encapsulamento da definio de um problema consiste no mtodo de
anlise que examina os requisitos sob a perspetiva das classes e objetos encontrados no
vocabulrio do domnio do problema.
A abstrao e o encapsulamento so dois elementos fundamentais do modelo de objetos.
Definio 1.4.1 (Abstrao) A abstrao a habilidade de concentrar nos aspetos essenciais de um contexto qualquer, ignorando caractersticas menos importantes ou acidentais.
Em modelao orientada a objetos, uma classe uma abstrao de entidades existentes
no domnio do sistema de software.
Dora Melo dmelo@iscac.pt

8
Definio 1.4.2 (Encapsulamento) O encapsulamento consiste na ocultao do estado
de um objeto, i.e., existe informao associado a um objeto que de ndole privado e por
conseguinte o seu acesso ter de ser protegido.
O principal objetivo da abstrao e do encapsulamento criar a iluso de simplicidade, protegendo o utilizador da vasta e frequente arbitrria complexidade externa,
em particular da implementao.
Desta forma a abstrao caracterizada pela forma de se concentrar nos aspetos que
so relevantes para determinado propsito, ignorando aqueles que no o so. A abstrao permite modelar o mundo real, est menos sujeito a alteraes e permite simplificar o tratamento de informao complexa.
As boas abstraes so difceis de encontrar. A procura faz-se de forma evolutiva e
iterativa. Podemos definir que uma boa abstrao caracteriza por ser apropriada
(corresponder a uma necessidade e ser capaz de a satisfazer) e possuir o nvel adequado.
As vantagens do encapsulamento consistem na
independncia das caractersticas de implementao duma entidade relativamente
s outras - modularidade;
possibilidade de mudar a implementao sem alterar o interface;
o utilizador da entidade no precisa de conhecer os detalhes da sua implementao;
Na POO o programador responsvel por moldar o mundo dos objetos, e explicar para
estes objetos como eles devem interagir entre si. Os objetos conversam/interagem
uns com os outros atravs do envio de mensagens, e o papel principal do programador
especificar quais sero as mensagens que cada objeto pode receber, e tambm qual a
ao que aquele objeto deve realizar ao receber aquela mensagem em especfico.

1.5

Exerccios

1. Imagine que pretende desenvolver uma aplicao de uma aula como sendo implementada atravs de objetos, i.e, tendo por base a modelao orientada por
objetos. Tendo em conta o contexto do problema, estabelea os conceitos que
podem ser considerados como Classes, Objetos, Atributos, Operaes e Relacionamentos.

Dora Melo dmelo@iscac.pt

9
2. Imagine que pretende desenvolver uma aplicao de uma agncia bancria como
sendo implementada atravs de objetos, i.e, tendo por base a modelao orientada por objetos. Tendo em conta o contexto do problema, estabelea os conceitos
que podem ser considerados como Classes, Objetos, Atributos, Operaes e Relacionamentos.

Dora Melo dmelo@iscac.pt

Captulo 2
Linguagem de Programao Java
2.1

Introduo Histrica

No incio dos anos 90, ampliar o poder da computao em rede para as atividades
da vida quotidiana era uma viso radical. A World Wide Web (www) iniciou o seu
crescimento efetivo durante a segunda metade da dcada de 1990, quando se verificou
uma expanso em grande escala dos servidores www e do aparecimento de aplicaes
comerciais na web.
Em 1991, um pequeno grupo de engenheiros da Sun Microsystems (Sun), chamada
Green Team, acreditava que a prxima gerao na computao era a unio dos dispositivos digitais de consumo e computadores. Liderada por James Gosling, a equipa
criou a linguagem de programao orientada por objectos que iria revolucionar o nosso
mundo e que foi intitulada de Java.
Em 1997, a Sun tentou submeter a linguagem a padronizao pelos rgos ISO/IEC e
ECMA, mas acabou por desistir. O Java ainda se mantm como uma linguagem padro,
que controlada atravs da Java Community Process (JCP).
Em 13 de Novembro de 2006, a Sun lanou a maior parte do Java como software livre,
sob os termos da GNU General Public Licence (GPL).
Em 8 de Maio de 2007, a Sun finalizou o processo, tornando praticamente todo o cdigo
Java como software de cdigo aberto.
A utilizao do Java veio mudar a forma como a interao ocorria na web. Pequenos
programas (Applets) podem ser integrados em pginas www e assim realizar as mais variadas aes. Uma vez que se trata de um ficheiro executvel, as Applets Java podem
realizar todo o tipo de tarefas numa pgina web, tais como: animao, interao com o
utilizador, processamento de dados, e tudo o que possvel um programa realizar.

Dora Melo dmelo@iscac.pt

11
O tipo de interatividade que estava disponvel antes do aparecimento do Java era baseado em aplicaes CGI (Common Gateway Interface)1 que corriam nos servidores
www. A comunicao entre o cliente www e o servidor baseado no HTML (HyperText
Markup Language)2 , o protocolo de comunicaes na web.
A linguagem Java diferencia-se das linguagens convencionais por ser compilada para
um bytecode que executado por uma mquina virtual Java Virtual Machine (JVM),
ver Figuras 2.1 e 2.2.

Figura 2.1: Processo de compilao de um programa na linguagem Java.

2.2

Vantagens

A linguagem Java foi projetada tendo em vista os seguintes objetivos:


Orientao por objetos - Baseado no modelo de Simula67;
Portabilidade - Independncia de plataforma write once, run anywhere;
Recursos de Rede - Possui extensa biblioteca de rotinas que facilitam a cooperao com protocolos TCP/IP (Transmission Control Protocol/Internet
1 CGI

o mtodo padro utilizado para gerar contedos dinmicos nas pginas e aplicaes web. O
mtodo CGI, quando implementada num servidor web, fornece um interface entre o servidor web e os
programas que geram os contedos dinmicos.
2 HTML a linguagem padro de Marcao utilizada para criar pginas web.
Dora Melo dmelo@iscac.pt

12

Figura 2.2: Processo de compilao de um programa na linguagem Java.


Protocol)3 , como HTTP e FTP (File Transfer Protocol)4 ;
Segurana - Pode executar programas via rede com restries de execuo.
Destacam-se ainda outras vantagens, tais como:
Sintaxe similar ao C/C++;
Facilidades de Internacionalizao Suporta de forma natural caracteres Unicode;
Simplicidade na especificao, tanto da linguagem como do ambiente de execuo (JVM);
Disponibiliza um vasto conjunto de bibliotecas (ou APIs, Application Programming Interface);

2.3

Applets e Aplicaes Java

Os programas em Java dividem-se em dois grupos principais: Applets e Aplicaes.


Definio 2.3.1 (Applets) Os Applets so programas Java transferidos pela internet entre um servidor e um cliente WWW e executados no browser da mquina do cliente.
3 TCP/IP

um conjunto de protocolos de comunicao entre computadores em rede.


uma forma bastante rpida e verstil de transferir arquivos (ficheiros), sendo uma das mais
usadas na Internet.
4 FTP

Dora Melo dmelo@iscac.pt

13
Os Applets s podem ser executadas utilizando browsers (navegadores de internet)
capazes de interpretar Java (Appletviewer)
O desenvolvimentos de Applets segue o seguinte conjunto de polticas de segurana:
No podem ler ou escrever no disco da mquina do cliente (exceo para alguns
browsers);
No pode haver comunicao entre a Applet e outros servidores www;
Nenhuma Applet pode executar outros programas existentes na mquina do cliente.
Definio 2.3.2 (Aplicaes Java) As aplicaes Java so programas mais gerais escritos
na linguagem Java e executadas localmente. As aplicaes Java no necessitam de um browser para serem executadas, pois o cdigo resultante ele prprio um executvel e independente da plataforma.
Definio 2.3.3 (Programas Java) Um programa Java pode ser um Applet ou uma aplicao, ou ambos, dependendo da forma como se escreve esse programa e os recursos que o
programa utiliza.
Exemplo 2.3.1 (Primeiro Progama Java)
Primeiro exemplo de um programa
/* *
* @( # ) F i r s t P r o g r a m . j a v a
*
* F i r s t j a v a program
*
* @author Dora Melo
*
* @ v e r s i o n 1 . 0 30/09/2014
*/
public c l a s s F i r s t P r o g r a m {
/* *
* @param a r g s
*/
public s t a t i c void main ( S t r i n g [ ] a r g s ) {
/ / TODO, add your program c o d e
System . out . p r i n t l n ( " Hello World ! " ) ;
}

Dora Melo dmelo@iscac.pt

14
}

Exemplo 2.3.2 (Primeira Applet em Java)


Primeiro exemplo de um Applet
/* *
* @( # ) F i r s t A p p l e t . j a v a
*
* First java applet
*
* @author Dora Melo
*
* @ v e r s i o n 1 . 0 30/09/2014
*/
import j a v a . a p p l e t . * ;
import j a v a . awt . * ;
public c l a s s F i r s t A p p l e t extends Applet {
public void i n i t ( ) { }
public void s t o p ( ) { }
public void p a i n t ( Graphics g ) {
g . s e t C o l o r ( Color . BLUE ) ;
g . f i l l R e c t ( 0 , 0 , 400 , 4 0 0 ) ;
g . s e t C o l o r ( Color .CYAN ) ;
g . drawRect ( 2 0 , 20 , 30 , 3 0 ) ;
g . s e t C o l o r ( Color . RED ) ;
g . f i l l O v a l ( 6 0 , 70 , 20 , 5 0 ) ;
}
}

2.3.1

Exerccios

1. Crie uma pasta denominada aulas na sua zona de trabalho.


2. Execute a aplicao Eclipse.
3. Altere o seu atual espao de trabalho (workspace) para a pasta aulas, criada
anteriormente.
4. Crie o seu primeiro projeto Java, intitulado PrimeiroPrograma.

Dora Melo dmelo@iscac.pt

15
5. Crie o seu primeiro programa, transcreva-o do Exemplo 2.3.1.
6. Adicione ao programa anterior uma instruo que imprima para o standard output uma mensagem diferente.
7. Sabendo que os caracteres \n representam uma quebra de linha, acrescente ao
programa uma instruo que imprima para o standard output duas linhas de
texto.

2.4

2.4.1

Sintaxe e Semntica da Linguagem de Programao


Java
Declaraes e Atribuies

Definio 2.4.1 (Declarao) Uma declarao a instruo mais simples que pode ser
feita em Java. Toda a instruo terminada com o caracter ;.

Exemplo 2.4.1 (Declaraes em Java)


int i = 1;
import j a v a . awt . Font ;
System . out . p r i n t l n ( " This  motorcycle  i s a " + c o l o r + "  " + make ) ;
m. e n g i n e S t a t e = true ;

Para se utilizarem variveis numa aplicao em Java necessrio a sua declarao prvia.
Definio 2.4.2 (Declarao de variveis) A declarao de uma varivel consiste numa
instruo constituda por um tipo de dados seguido do nome para a varivel.
Definio 2.4.3 (Regras e convenes de nomenclatura: Nome de atributos ou variveis)
Os nomes dos atributos (variveis) podem comear com qualquer letra e os caracteres $ ou
_, porm no podem comear com nmeros.
Caso o nome de um atributo (varivel) seja composto por mais de uma palavra, a primeira
letra de cada palavra deve ser em maiscula, exceto a primeira palavra.

Dora Melo dmelo@iscac.pt

16

Figura 2.3: Tipos de Dados Primitivos na Linguagem Java.


Exemplo 2.4.2 (Declarao de variveis)
i n t myAge ;
S t r i n g myName ;
boolean i s T i r e d ;

Definio 2.4.4 (Tipos de dados das variveis) Em adio ao nome da variveis, cada
declarao de uma varivel deve ter um tipo, que define os possveis valores que a varivel
pode tomar.
O tipo de dados de uma varivel pode ser um dos seguintes tipos:
Um dos 8 tipos de dados simples (inteiros, reais, caracteres e lgicos), ver Figura 2.3;
O nome de uma classe ou interface;
Um array.

Definio 2.4.5 (Instruo de Atribuio) Uma atribuio uma instruo que permite definir um determinado valor para uma varivel. Depois de uma varivel estar declarada possvel atribuir-lhe valores. O operador de atribuio o smbolo =.

Exemplo 2.4.3 (Instrues de atribuio)


s i ze = 14;
tooMuchCaffeine = true ;

Dora Melo dmelo@iscac.pt

17

2.4.2

Comentrios

O Java permite definir 3 tipos de comentrios.


Os smbolos /* e */ limitam o incio e o fim de um longo comentrio, respetivamente.
Exemplo 2.4.4 (Comentrio longo)
/ * I don t know how I w r o t e t h i s n e x t p a r t ; I was working
r e a l l y l a t e one n i g h t and i t j u s t s o r t o f a p p e a r e d . I
s u s p e c t t h e c o d e e l v e s d i d i t f o r me . I t might be w i s e
n o t t o t r y and c h a n g e i t .
*/

O smbolo // utilizado para uma nica linha de comentrio.


Exemplo 2.4.5 (Comentrio de uma linha)
int vices = 7; / / are there r e a l l y only 7 v i c e s ?

Os smbolos /** e */ limitam o incio e o fim de um longo comentrio (idntico ao


primeiro). So utilizados para comentar o incio dos documentos, de uma classe ou de
uma funo, quando colocados imediatamente antes da sua definio. Estes comentrios aparecem como informao explicativa do conceito definido e que includa na
documentao do programa.
Exemplo 2.4.6 (Comentrio de cabealho de um documento ou de um mtodo)
/* *
* @( # ) F i r s t P r o g r a m . j a v a
*
* F i r s t j a v a program
*
* @author Dora Melo
*
* @ v e r s i o n 1 . 0 21/02/2014
*/

ou
/* *
* @param a r g s
*/
public s t a t i c void main ( S t r i n g [ ] a r g s ) {
...
}

No possvel definir comentrios dentro de comentrios.


Dora Melo dmelo@iscac.pt

18

2.4.3

Literal

Definio 2.4.6 (Literal) Um valor constante definido num programa denominado de


literal. Os literais representam valores numricos (inteiros ou reais), caracteres, booleanos
ou strings.
Os literais Booleanos ou Lgicos correspondem aos valores pr-definidos true e false.
Os literais inteiros representam os nmeros inteiros e podem ser de base octal, decimal,
ou hexadecimal:
Literais Inteiros Decimais - so nmeros na base decimal que representam um
valor inteiro. Eles podem ser tanto byte, como short, int ou long. Para escrever
um literal inteiro na base decimal, basta digitar o seu valor com um desses dgitos
0, 1, 2, 3, 4, 5, 6, 7, 8 e 9.
Literais Inteiros Octais - so nmeros na base octal que representam um valor
inteiro. Para representar este tipo de literal, basta escrever os seus dgitos colocando 0 (dgito zero) antes. Os dgitos para este tipo so 0, 1, 2, 3, 4, 5, 6 e
7.
Literais Inteiros Hexadecimais - so nmeros na base hexadecimal que representam um valor inteiro. Para representar este tipo de literal, basta escrever os seus
dgitos normalmente precedidos pelos caracteres 0x (zero xis) ou 0X. Os dgitos
permitidos so o 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, a, B, b, C, c, D, d, E, e, F, f.
Literais Fracionrios (virgula flutuante) - correspondem aos nmeros racionais.
Para represent-los, basta escrever um nmero inteiro seguido por um ponto e
por sua parte decimal - o ponto faz o lugar da vrgula. Outra opo seria escrever o nmero em notao cientfica, escrevendo primeiro o valor da mantissa,
seguido do caracter e e do valor do expoente (de base 10).
Os literais Caracteres correspondem a um caracter. Para represent-los, basta
escrever o caracter cercado por apstrofos. Tambm podem armazenar caracteres
de controle de formatao (quebra de linha, etc.) e tambm caracteres no formato
Unicode.
Os literais de cadeias de caracteres (denominados de Strings) correspondem a
sequncias de caracteres. Para represent-los, escreva o(s) caracter(es) cercado(s)
por aspas.
O literal nulo representa a ausncia de tipo e de dado (valor). Para representar
utiliza-se a palavra null.

Dora Melo dmelo@iscac.pt

19
Exemplo 2.4.7 (Literais)
boolean r e s u l t = true ;
char c a p i t a l C = C ;
byte b = 1 0 0 ;
s h o r t s = 10000;
i n t i = 100000;
double d1 = 1 2 3 . 4 ;
double d2 = 1.234 e2 ; / / mesmo v a l o r
f l o a t f1 = 123.4 f ;
i n t decVal = 2 6 ;
/ / o numero 26
int octVal = 032;
/ / o numero 26
i n t hexVal = 0x1a ;
/ / o numero 26

que d1 , mas na n o t a c a o c i e n t i f i c a
na b a s e d e c i m a l
na b a s e o c t a l
na b a s e h e x a d e c i a m l

S t r i n g minhaString = "Como e s t a s ? " ,


vazia = " " ,
/ / String vazia
s1 = " \ " " ,
/ / s t r i n g que contem o c a r a c t e r "
s2 = " I s t o  e uma s t r i n g " ,
/ / s t r i n g que contem 17 c a r a c t e r e s
s3 = " I s t o  e uma s t r i n g  " + / / na v e r d a d e o v a l o r f i n a l da s t r i n g e formado
" de duas  l i n h a s " ;
/ / p e l a c o n s t i t u i c a o de d o i s l i t e r a i s s t r i n g ,
/ / onde o s i m b o l o + r e p r e s e n t a a c o n c a t e n a c a o
/ / d a s duas s t r i n g s

2.4.4

Expresses e Operaes

Definio 2.4.7 As expresses so a forma mais simples de declaraes em Java que realmente faz algo.
As expresses so declaraes que retornam valores.
Os operadores so smbolos especiais que so utilizados nas expresses.
2.4.4.1

Operadores Numricos

Na Figura 2.4 est representados o conjunto de operadores numricos que fazem parte
da linguagem Java.

Figura 2.4: Operadores Numricos.

Dora Melo dmelo@iscac.pt

20
2.4.4.2

Operadores de Atribuio

Na Figuras 2.5 est representado o conjunto de operadores de atribuio que fazem


parte da linguagem Java.

Figura 2.5: Operadores de Atribuio.

2.4.4.3

Incrementao e Decrementao

Tal como na linguagem C, os operadores ++ e so utilizados para incrementar e


decrementar, respectivamente, um valor de uma unidade.
Exemplo 2.4.8 (Incrementar e Decrementar)
x ++; / / o mesmo que x = x + 1 ;
Y ; / / o mesmo que y = y 1 ;

2.4.4.4

Operadores de Comparao

Os operadores de comparao so simbolos utilizados para a comparao entre expresses numricas e cujo resultado um valor lgico, i.e., true ou false. A Figura
2.6 apresenta o conjunto de operadores numricos que existem na linguagem Java.

Figura 2.6: Operadores de Comparao.

Dora Melo dmelo@iscac.pt

21
2.4.4.5

Operadores Lgicos

Os operadores lgicos so simbolos utilizados em expresses lgicas. A Figura 2.7


apresenta os vrios operadores lgicos que existem no Java.

Figura 2.7: Operadores Lgicos.

2.4.4.6

Precedncia dos Operadores

As seguintes Figuras 2.8 apresenta por ordem decrecente a prioridade, na libguagem


Java, entre os diferentes operadores.

Figura 2.8: Precedncia dos Operadores.


Para alterar a ordem natural da avaliao de expresses, basta colocar parnteses a
envolver a expresso que se pretende avaliar em primeiro.

Dora Melo dmelo@iscac.pt

22

2.4.5

Funes

Definio 2.4.8 Funes so rotinas ou sub-rotinas automatizadas.


Sintaxe:
v i s i b i l i d a d e tipoDadosRetorno nomeFuncao ( tipoDados1 arg1 , tipoDados1 arg2 ,
codigo da funcao
( corpo da funcao , c o n j un t o de i n s t r u c o e s a serem e x e c u t a d a s )
}

...){

A visibilidade corresponde ao tipo de acesso (permisses de acesso): pblico, privado ou


protegido (no prximo captulo abordaremos este assunto mais detalhadamente).
Sempre que se pretende utilizar a mesma codificao para algo especfico, define-se
uma funo. Dessa forma, sempre que se queira utilizar aquela codificao, ao invs
de repetirmos o cdigo inteiro novamente, basta invocar a funo. As funes so
extremamente teis e adaptveis.
Exemplo 2.4.9 (Funes)
public c l a s s ExemploFuncao {
/ / criando a funcao
public s t a t i c void mostrarMensagem ( ) {
System . out . p r i n t l n ( " MinhaMensagem " ) ;
}
public s t a t i c boolean ePrimo ( long nr ) {
i f ( nr < 2 ) return f a l s e ;
f o r ( long i = 2 ; i <= ( nr / 2 ) ; i ++) {
i f ( nr % i == 0 ) return f a l s e ;
}
return true ;
}
public s t a t i c void main ( S t r i n g [ ] a r g s ) {
/ / chamando a f u n c a o d e n t r o do programa
mostrarMensagem ( ) ;
long x = 5 ;
i f ( ePrimo ( x ) ) / / s e f o r primo
System . out . p r i n t l n ( x + "  e primo " ) ;
e l s e / / s e nao f o r primo
System . out . p r i n t l n ( x + " nao e primo " ) ;
}
}

Dora Melo dmelo@iscac.pt

23

2.4.6

Bloco de Instrues

Definio 2.4.9 Um bloco de instrues um conjunto de instrues rodeado pelos smbolos


{ e }.
Exemplo 2.4.10 (Bloco de Instrues)
void b l o c o T e s t e ( ) {
/ / i n i c i o do c o r p o da f u n c a o
int i = 10;
{
/ / i n i c i o do b l o c o ( c o n j u n t o ) de i n s t r u c o e s
int i = 50;
System . out . p r i n t l n ( " dentro do b l o c o : " ) ;
System . out . p r i n t l n ( " x= " + x ) ;
System . out . p r i n t l n ( " y= " + y ) ;
}
/ / f i m do b l o c o de i n s t r u c o e s
}

2.4.7

Estruturas Condicionais

Definio 2.4.10 (Estrutura if) A estrutura condicional if semelhante utilizada nas


linguagens C. No entanto, o teste condicional tem de retornar um valor lgico, no poder
retornar um inteiro como acontece na linguagem C.
Sintaxe:

Definio 2.4.11 (Estrutura Switch) A estrutura condicional switch na linguagem Java


tem o mesmo comportamento e sintaxe da linguagem C
Sintaxe:

Dora Melo dmelo@iscac.pt

24
Exemplo 2.4.11 (Estruturas Condicionais)
i n t a = 10 , b = 20 , c = 3 0 ;
i n t s t a t u s = 1;
i f ( a > b && a > c ) {
status = 1;
}
else if (b > c ) {
status = 2;
}
else {
status = 3;
}
switch ( s t a t u s ) {
case 1 :
System . out . p r i n t l n ( " a e o maior " ) ;
break ;
case 2 :
System . out . p r i n t l n ( " b e o maior " ) ;
break ;
case 3 :
System . out . p r i n t l n ( " c  e o maior " ) ;
break ;
default :
System . out . p r i n t l n ( " Nao e  p o s s i v e l  determinar " ) ;
}

2.4.8

Estruturas de Repetio

Definio 2.4.12 (Estrutura for) A estrutura de repetio for semelhante utilizada


na linguagem C, repete uma instruo ou um bloco de instrues um determinado nmero
de vezes at uma condio ser alcanada.
Sintaxe:

Definio 2.4.13 (Estruturas while e do) As estruturas de repetio while e do tal como
o for, permitem que um bloco de instrues possa ser executado repetidamente at que uma
determinada condio seja alcanada. No entanto, na linguagem Java a condio de teste
tem de ser um booleano.
Sintaxe:

Dora Melo dmelo@iscac.pt

25

Exemplo 2.4.12 (Estruturas de repetio)


f o r ( i n t i = 1 ; i <= 1 0 ; i ++){
System . out . p r i n t l n ( i ) ;
} / / e s c r e v e no s t d o u t o s numeros de 1 a 10
int contar = 1;
while ( c o n t a r <= 1 0 ) {
System . out . p r i n t l n ( c o n t a r + + ) ;
} / / e s c r e v e no s t d o u t o s numeros de 1 a 10
int j = 1;
do {
System . out . p r i n t l n ( " c i c l o numero " + j ) ;
j ++;
} while ( j <= 1 0 ) ; / / e s c r e v e no s t d o u t o numero da v o l t a do c i c l o

2.4.9 Exerccios
1. Crie um novo projeto denominado funcoes, e utilize o cdigo apresentado no
exerccio 2.4.9 para criar um novo programa.
2. (a) Crie um novo projeto denominado estruturas, e neste crie o programa (a
classe) principal (contendo a funo main), transcrevendo o cdigo apresentado no Exemplo 2.4.11.
(b) Acrescente ao programa anterior o cdigo apresentado no Exemplo 2.4.12.
(c) Reorganize o cdigo de forma que o cdigo do programa anterior esteja definido dentro de funes, e estas a serem invocadas na funo principal.
3. (a) Numa determinada empresa, existem tabelas que descrevem e controlam o
quanto foi gasto em cada ms. Para fechar o balano do primeiro trimestre, precisamos somar o gasto total. Sabendo que, em janeiro, foram gastos
15.000 , em fevereiro, 23.000 e em maro, 17.000 , construa um programa que calcule e imprima o gasto total no trimestre. Siga os seguintes
passos:
i. Crie um novo projeto Java denominado balanco;
ii. Crie a classe principal denominada BalancoTrimestral;
iii. Na funo principal (main), declare uma varivel inteira chamada
gastosJaneiro e inicialize-a com o valor 15000;
Dora Melo dmelo@iscac.pt

26
iv. Crie tambm as variveis gastosFevereiro e gastosMarco , inicializandoas com os valores 23000 e 17000, respectivamente, utilize uma linha
para cada declarao;
v. Crie uma varivel chamada gastosT rimestre e inicialize-a como a soma
das outras 3 variveis:
int gastosT rimestre = gastosJaneiro + gastosFevereiro + gastosMarco;
vi. Imprima para o standard output o valor da varivel gastosT rimestre.
(b) Adicione cdigo (sem alterar as linhas que j existem) na classe anterior para
imprimir a mdia trimestral de gasto junto com uma mensagem adequada,
criando para o efeito a varivel mediaT rimestral. Para isso, a mensagem a
escrever no standard output ser a concatenao de uma String com o valor
da varivel, por exemplo, Valor da mdia trimestral = + mediaT rimestral.
(c) Construa uma funo que inclua todo o cdigo escrito anteriormente e na
funo principal invoque-a. Verifique o resultado obtido.
4. Crie um novo projeto Java denominado exercicios. Dentro deste, crie a classe
principal denominada ExerciciosDeJava. Construa uma funo que responda
a cada um dos seguintes exerccios. Na funo principal dever colocar o cdigo
necessrio para que o resultado de cada funo seja mostrado no standard output.
(a) Imprima todos os nmeros de 150 a 300.
(b) Imprima a soma total de todos os nmeros de 1 at 1000.
(c) Imprima todos os mltiplos de 3, entre 1 e 100.
(d) Altere as funes criadas nos exerccios das alneas anteriores, de forma que
os valores necessrios para o clculo sejam passados por argumentos.
(e) Imprima o fatorial de 10, utilizando o mtodo iterativo.
O fatorial de um nmero n n (n 1) (n 2) ... 1. O fatorial de 0 1. O
fatorial de 1 (0!) 1 = 1. O fatorial de 2 (1!) 2 = 2, etc.
(f) No cdigo do exerccio anterior, altere-o de forma que o valor do fatorial a
calcular possa ser enviado por parmetro para a funo.
(g) Imprima o fatorial de qualquer nmero, utilizando o mtodo recursivo.
(h) Crie uma funo que calcule os fatoriais de 20 a 30 e depois imprima os
seus resultados. Para o clculo dos fatoriais utilize uma das funes criadas
anteriormente.
(i) Altere a funo criada na alnea anterior de forma que os valores, mnimos
e mximos dos fatoriais a calcular, sejam passados por argumento funo.

Dora Melo dmelo@iscac.pt

27
5. Construa um novo projeto denominado metodos. Dentro deste, crie a classe
principal denominada ExerciciosDeJava. Construa uma funo que responda
a cada um dos seguintes exerccios. Na funo principal dever colocar o cdigo
necessrio para que o resultado de cada funo seja mostrado no standard output.
(a) Escreva uma funo que, dada uma varivel x com algum valor inteiro, temos um novo x de acordo com a seguinte regra:
se x par, x = x/2;
se x mpar, x = 3 x + 1;
imprime x;
a funo deve parar quando x tiver o valor final de 1. Por exemplo, para
x = 40, a sada ser:
40 > 20 > 10 > 5 > 16 > 8 > 4 > 2 > 1
(b) Construa uma funo que desenhe para o standard output a seguinte pirmide de nmeros.
01
02
03
04
05
06
07
08
09
10
11

2.5

02
03
04
05
06
07
08
09
10
11

03
04
05
06
07
08
09
10
11

04
05
06
07
08
09
10
11

05
06
07
08
09
10
11

06
07
08
09
10
11

07
08
09
10
11

08
09 09
10 10 10
11 11 11 11

Algumas caractersticas do Java

O Java no tem um tipo ponteiros explcito.


Todas as referncias a objetos, atribuies de variveis, argumentos passados para os
mtodos e os elementos de matriz so realizados usando referncias implcitas.
As referncias e os ponteiros so essencialmente a mesma coisa, exceto na impossibilidade de se poder fazer a aritmtica de ponteiro sobre as referncias.
As referncias permitem definir facilmente estruturas em Java, como listas ligadas, sem
explicitar ponteiros. Basta criar um n de lista ligada com as variveis que apontam

Dora Melo dmelo@iscac.pt

28
para o seguinte e anterior n. Para inserir itens na lista, atribuir a essas variveis os
objetos correspondentes a outro n.
No Java, as strings so objetos da classe String, e todos os mtodos que operam sobre
as strings, tratam-nas como verdadeiras entidades. As strings no so terminadas com
o caracter nulo e o seu tamanho obrigatoriamente cumprido.
No Java, toda a gesto de memria automtica. A reserva de memria feita automaticamente aquando da criao de um objeto. Em runtime, o Garbage Collector (gc)
liberta a memria atribuda a um objeto quando este j no necessrio. As funes
tais como malloc() e free()s da linguagem C, no existem no Java.
No Java no existem tipos de dados sem sinal (unsigned data types). exceo dos
caracteres que so por definio 16-bit unsigned integer.
No Java, os valores booleanos no so tratados como inteiros. O tipo de dados boolean
contm apenas 2 valores - true, false.
O agrupamento de dados feito exclusivamente atravs da definio de classes. Termos como struct, enum, typedef foram excludos da linguagem Java.
As precedncias e associaes dos operadores comportam-se como na linguagem C.
As estruturas de controlo if e de repetio while e do funcionam como no C. excepo de que a condio de controlo uma expresso lgica.
O Java no suporta mecanismos de listas de argumentos de comprimento varivel para
funes, como na linguagem C. Todas as definies de mtodo devem ter um nmero
especfico e explcito de argumentos. No Java, os argumentos da linha de comando
Java tm um comportamento diferente dos do C. O primeiro elemento do vector de
argumentos argv[0] no C/C++ o nome do prprio programa. No Java, o primeiro
elemento corresponde ao primeiro dos restantes argumentos. Ou seja, no Java argv[0]
corresponde ao argv[1] na linguagem C/C++. No Java no existe forma de dentro do
programa se saber o seu nome.
O Java no contm um pr-processador, e por esta razo no contm #defines ou
macros.
As constantes podem ser criadas utilizando o modificador final, quando se declara
classes e instncias variveis.
O Java no contm a palavra chave const ou a capacidade da passagem de referncias
constantes, como no C/C++;
No Java, s existe a relao de herana simples entre classes. Poder eventualmente
existir um conceito semelhante herana mltipla quando estabelecida atravs de interfaces.

Dora Melo dmelo@iscac.pt

29
Todas as funes so definidas como mtodos. No existem funes fora do mbito de
classes.
O termo goto no existe no Java.

Dora Melo dmelo@iscac.pt

Captulo 3
Programao Orientada por Objetos e a
Linguagem Java
3.1

A linguagem Java - Packages

Um programa na linguagem Java , simplesmente, a representao e construo de


um conjunto de classes. A execuo de um programa em Java consiste na criao,
interao e destruio de instncias dessas classes.
O ambiente Java disponibiliza uma biblioteca de classes que implementam uma srie
de comportamentos bsicos - Java Class Library (JCL).
As caractersticas da biblioteca de classes so acedidas atravs de classes agrupadas em
Packages (java.lang; java.math; java.io, etc.).
Definio 3.1.1 As Packages em Java so uma forma de agrupar classes e interfaces. Um
nome de uma package o mesmo que o nome da diretoria (pasta) que contm os ficheiros
*.java. As package so criadas quando se define um programa em Java, e cujo nome se
pretende usar a partir de outras bibliotecas atravs de uma declarao de importao.

Exemplo 3.1.1 (Packages)


package b i b l i o t e c a ; / / d e c l a r a a d e f i n i c a o a t u a l como f a z e n d o
/ / parte desta package
import b i b l i o t e c a . C o n s t r a i n t ; / / i m p o r t a r a c l a s s e C o n s t r a i n t que
/ / f a z p a r t e da p a c k a g e b i b l i o t e c a
import b i b l i o t e c a . V a r i a b l e ;

As Packages permitem:
Dora Melo dmelo@iscac.pt

31
Que os mdulos dos grupos de classes estejam disponveis, apenas quando forem
necessrios;
Eliminar potenciais conflitos entre nomes de classes em diferentes grupos de
classes.
As bibliotecas de classes do Java Developers esto contidas numa package chamada
java. A package java contm as packages de classes que definem a prpria linguagem
(java.lang), as classes input e output (java.io), alguns servios bsicos de rede e a
window toolkit functions.
As classes definidas noutras packages (tais como: sun e netscape) podem estar disponveis apenas em implementaes especficas.
Por defeito, as classes do utilizador tm acesso automtico apenas s classes do java.lang.
O uso de classes contidas noutras packages obriga referncia explcita do nome da
classe ou a importao da classe no ficheiro fonte do utilizador.

3.2

Exerccios - Packages

1. No projeto metodos, criado em 5, defina uma funo que imprima 50 nmeros


inteiros gerados aleatoriamente de 1 a 100 e teste a sua execuo. Para tal, dever
utilizar o mtodo nexInt(intn), includo na biblioteca java.util.Random. Consulte:
http://docs.oracle.com/javase/6/docs/api/java/util/Random.html
http://www.tutorialspoint.com/java/util/random_nextint_inc_exc.htm.

2. Generalize a funo anterior, de forma que os valores importantes para o clculo


sejam passados por argumento. Teste as alteraes efetuadas.

3.3

Classes e Instncias

Na Programao Orientada aos Objetos (POO), uma aplicao vista como uma rede
dinmica de objetos que colaboram e interagem entre si. Esta visualizao permite aos
implementadores de software gerir mais facilmente a complexidade do domnio do
problema e desenvolver aplicaes mais flexveis, para alm de melhorar as possibilidades de reutilizao do cdigo desenvolvido.
Deste modo, utilizando o paradigma Orientado a Objetos, modelamos e construmos
sistemas, baseado nos objetos que compem o mesmo. Como exemplo, poderamos
pensar numa aplicao de uma agncia bancria como sendo implementada atravs de
Dora Melo dmelo@iscac.pt

32
objetos que se relacionam mutuamente, tais como cliente, conta corrente, aplicao
financeira, etc.
Muitos aplicaes atuais, e a serem desenvolvidas no futuro, usam algum nvel de Orientao aos Objetos. Atualmente, o Paradigma Orientado aos Objetos engloba uma
srie de disciplinas, tais como: Programao Orientado aos Objetos, Modelao e Desenho Orientado aos Objetos, Base de dados Orientado aos Objetos, Interfaces Orientadas aos Objetos, Metodologias Orientadas aos Objetos de desenvolvimento de software,
etc.
Na verdade, da natureza humana realizar modelaes a partir da maneira como interpreta a natureza. Neste caso, modelar e implementar sistemas utilizando-se objetos.
O foco da POO no est nos procedimentos do universo e sim nos objetos que existem
nele, j que eles formam um elemento natural para o modelo, e o mundo composto
por objetos. O conceito de objeto representa uma abstrao de algo no domnio do
problema, que reflete os recursos de um sistema de reter informaes sobre ele, interagir com ele, ou ambas as coisas (Richard C. Lee e Willian M. Tepfenhart em UML e
C++ Guia Prtico de Desenvolvimento Orientado aos Objetos).
Todo objeto possui atributos (caractersticas prprias que os distinguem de outros) e
pode prestar algum tipo de servio (funcionalidades, mtodos, comportamentos prprios). Estes atributos e servios so conhecidos como membros de, respetivamente,
dados e mtodos.
Os objetos na POO so gerados a partir de uma estrutura conhecida como
classe, que define um conjunto de dados e mtodos para processar estes
dados. Estas classes podem ser vistas como modelos (templates), representando um conjunto de objetos que compartilham os mesmos atributos, operaes e relacionamentos.
Cada classe contm todas as informaes que ela precisa para executar qualquer processamento exigido pelo objeto que ela representa. Desde modo, para termos um objeto a ser utilizado pelo nosso programa, temos que ger-lo a partir da classe desejada.
Por exemplo, relativamente ao exemplo do sistema bancrio, se precisamos trabalhar
com um objeto conta corrente de um cliente, precisamos instanciar um objeto da classe
que representa a conta corrente (ContaCorrente) e realizar, com ele, as operaes que
se mostrarem necessrias e/ou desejadas. Ou seja, declararamos uma instncia da
classe ContaCorrente em nosso programa. Nesta instncia, conhecida como objeto,
pode-se executar todas as operaes que tenhamos no perfil do seu utilizador.
Podemos fazer uma analogia com o tipo de dados inteiro das linguagens de programao. Para armazenarmos no nosso programa um valor inteiro, precisamos declarar no
programa uma varivel deste tipo, com o nome que desejarmos. Resumindo, objetos
podem ser vistos como instncias de classes.
Dora Melo dmelo@iscac.pt

33
Definio 3.3.1 A definio de uma Classe na linguagem Java caracterizada por

Todas as funes membro da classe devem ser declaradas e definidas dentro da declarao da classe. A especificao de visibilidade, que representa o controle de acesso,
deve ser feita para cada membro, incluindo a prpria classe.
Definio 3.3.2 (Utilizao de uma Classe) A definio de uma Classe traduz-se na declarao de um novo Tipo de Dados que traduz um conjunto de atributos com determinados comportamentos. Assim, a utilizao dos conceitos definidos pelas classes so utilizados
atravs da criao de instncias da classe, tambm denominados de objetos.
No Java, a criao de um objeto faz-se sempre com recurso utilizao da palavra
reservada new.
Exemplo 3.3.1 Criao de uma instncia da classe Account: o objeto acc1

Note-se o acesso a pub_data_mem do objeto acc1: tal s possvel porque o membro


est declarado public.

3.4

Exerccios - Classes e Instncias

1. Na plataforma Eclipse, crie um novo projeto denominado exemplos.


Dora Melo dmelo@iscac.pt

34
(a) Defina a classe denominada Account, apresentada na Definio 3.3.1.
(b) Crie uma classe denominada Principal e teste as instrues apresentadas
no Exemplo 3.3.1.

3.5

Mtodos Construtores

Definio 3.5.1 (Construtor) Quando se cria uma nova instncia de uma classe (um novo
objeto) usando a palavra chave new, um construtor para essa classe invocado.
O construtor garante que um determinado objeto seja adequadamente inicializado antes de
ser utilizado.
O Java contm a implementao do conceito de construtor.
O construtor, quando declarado, tem que ser public, possuir o mesmo
nome da classe e no pode devolver qualquer tipo de dados, porque resulta sempre na criao de um objeto dessa classe.
Um construtor pode ter argumentos.
A linguagem Java especifica a visibilidade (quando omitida) dos membros de uma
classe como pblicos.
Quando um construtor no explicitamente declarado, o Java utiliza o default parameterless constructor . criado um objeto, atravs da invocao do default constructor do
seu pai (identificado na linguagem Java por super()) que inicializa todos os seus atributos aos respetivos valores por defeito (zero para os nmeros, null para as referncias
e false para os booleanos).
Quando declarado um construtor, o default constructor deixa de estar disponvel.
Exemplo 3.5.1 Construtor da Classe

Utilizao do Construtor

Dora Melo dmelo@iscac.pt

35

3.6

Polimorfismo de Mtodos (Overloading)

No mbito da Programao Orientada por Objetos, por vezes existem comportamentos


de um determinado objeto cuja concretizao depende do contexto, i.e., a execuo de
uma determinada funcionalidade depende do contexto do instante em que invocada
e por conseguinte a tarefa associada ser diferente. Por exemplo, a tarefa de somar nmeros inteiros e a tarefa de somar caracteres diferente. No entanto, a funcionalidade
somar (adio, concatenao) representam a
O termo polimorfismo originrio do grego e significa muitas formas (poli = muitas,
morphos = formas).
O polimorfismo de mtodos (denominado de overloading de mtodos) uma caracterstica definida em vrias linguagens de programao, em especial, as orientadas por
objetos, e que permite criar vrios mtodos com o mesmo nome e que diferem uns dos
outros pela lista de argumentos e pelo tipo de retorno. Ou seja, caracteriza simplesmente a capacidade de definir-se uma determinada funcionalidade capaz de executar
diferentes tarefas.

3.7

Exerccios - Mtodos Construtores e Polimorfismo de


Mtodos

1. Acrescente classe Account, do Exerccio 3.4, dois mtodos construtores. O primeiro construtor sem argumentos, predefinindo os valores dos atributos id_no
= 1, balance = 50.0 e rate = 0.15, e o segundo construtor com os argumentos
balance e rate e o atributo id_no inicializado a 2.
2. Na classe Principal defina algumas instrues de forma a testar os mtodos
construtores definidos.

Dora Melo dmelo@iscac.pt

36

3.8

Gesto de Memria - Garbage Collector

A utilizao incorreta de memria por parte das aplicaes pode influenciar a eficincia e eficcia de uma aplicao. Uma boa gesto de memria pode ser suficiente para
otimizar a utilizao de uma aplicao.
Na gesto de memria um dos problemas mais comuns a libertao de memria, que
ocorre quando uma quantidade de memria reservada e no disponibilizada para
futuras utilizaes, quando j no necessria.
De forma a melhorar e a tornar mais eficiente a gesto de memria, libertando o programador de se preocupar com estes aspetos, o Java contm um mecanismo prprio
que suporta toda a gesto de memria, denominado de Garbage Collector. Assim, ao
contrrio de outras linguagens, o Java no tem (nem necessita de) um destrutor de
objetos.
O Garbage Collector disponibilizado pelo servio JVM e o seu funcionamento impercetvel. Este mecanismo tem como principal objetivo libertar de forma automtica os
blocos de memria que no sero mais utilizados e disponibiliz-los para utilizao
futura.
Uma das vantagens desse sistema para o programador a no obrigao de manipular diretamente o acesso memria do computador. O mecanismo funciona como um
vigia relativamente ao comportamento dos objetos e quando estes no so mais referenciados na continuao da execuo de uma programa, a memria utilizada por estes
objetos libertada. Porm o Garbage Collector funciona aleatoriamente sendo imprescindvel que o programador garanta a otimizao do cdigo desenvolvido atravs da
adequada anlise da utilizao de memria do sistema.
Desta forma, o Garbage Collector do Java responsvel por libertar a memria de objetos que no so mais usados, desde que o objeto seja criado utilizando a palavra chave
new. Quando se declara um objeto sem a utilizao da palavra chave new, ele pode no
ser recolhido pelo Garbage Collector, condicionando a adequada gesto de memria.
A linguagem Java disponibiliza um mtodo denominado finalize() que permite ao
Garbage Collector saber como tratar os objetos instanciados sem a utilizao da palavra chave new. Todas as classes herdam o mtodo finalize() da classe principal
java.lang.Object. O mtodo invocado pelo Garbage Collector quando se verifica
que no existem mais referncias para o objeto. Na figura 3.1 apresentado uma linha
do tempo relativo a um objeto que finalizado.
Definio 3.8.1 (Mtodo finalize()) O mtodo finalize() permite gerir de forma adequada
a memria ocupada por objetos que no so criados utilizando o termo new.
O mtodo finalize() pode ser declarado como membro das classes, no tem qualquer arguDora Melo dmelo@iscac.pt

37

Figura 3.1: Tempo de vida de um objeto finalizado.


mento, retorna o tipo de dados void, e deve ser declarado como protected.
Quando se declara o mtodo finalize(), este sobrepe-se ao mtodo predefinido do Java.

Exemplo 3.8.1 (Redefinio e utilizao do mtodo finalize())

Dora Melo dmelo@iscac.pt

38

3.9

Exerccios - finalize()

1. Na plataforma Eclipse, crie um novo projeto denominado exemploFinalize.


2. Defina as classes necessrias de forma a testar o cdigo apresentado no Exemplo
3.8.1.

3.10

Mtodos Modificadores e Seletores

Definio 3.10.1 (Mtodos Modificadores (setters)) Os mtodos modificadores (setters)


so mtodos que permitem adicionar ao interface da classe uma forma de modificar os valores dos atributos, permitindo garantir o princpio de encapsulamento. Normalmente, estes
mtodos so definidos da seguinte forma, para serem de fcil identificao:
public void setNomeDoAtributo(tipoDeDadosdoAtributo nomeDoAtributo){
this.nomeDoAtributo = nomeDoAtributo;
}

Dora Melo dmelo@iscac.pt

39
Definio 3.10.2 (Mtodos Seletores (getters)) Os mtodos seletores (getters) so mtodos que permitem adicionar ao interface da classe uma forma de retornar os valores dos
atributos, permitindo garantir o princpio de encapsulamento. Normalmente, estes mtodos
so definidos da seguinte forma, para serem de fcil identificao:
public tipoDeDadosdoAtributo getNomeDoAtributo(){
return nomeDoAtributo;
}

3.11

Exerccios - Mtodos Modificadores e Seletores

1. Acrescente classe Account, do Exerccio 3.4, os mtodos modificadores e seletores adequados a todos os atributos.
2. Na classe Principal defina algumas instrues de forma a testar os mtodos
modificadores e seletores.

3.12

A palavra reservada this

Definio 3.12.1 (this) Dentro de um mtodo de instncia ou um construtor, this uma


referncia ao objeto atual, ao qual o mtodo ou construtor invocado. possvel referirse a qualquer membro do corrente objeto de dentro de qualquer mtodo da instncia ou
construtor utilizando a palavra reservada this.
Um dos principais motivos para a utilizao da palavra reservada this quando um
campo ocultado por um parmetro de um mtodo ou construtor.
Exemplo 3.12.1 (Campo ocultado por um parmetro)
public c l a s s Ponto {
public i n t x = 0 ;
public i n t y = 0 ;
// constructor
public Ponto ( i n t a , i n t b ) {
x = a;
y = b;
}
}

mas deve ser escrito como:


Dora Melo dmelo@iscac.pt

40
public c l a s s Ponto {
public i n t x = 0 ;
public i n t y = 0 ;
// constructor
public Ponto ( i n t x , i n t y ) {
this . x = x ;
this . y = y ;
}
}

Cada argumento do construtor oculta cada um dos campos do objeto - dentro do


construtor x uma cpia local do primeiro argumento do construtor. Para nos
referirmos ao campo x do Ponto, o construtor deve utilizar a expresso this.x.
Na definio de um construtor tambm possvel utilizar a palavra reservada this
para invocar outro construtor. Desta forma, o construtor invocado de forma explcita.
Quando necessrio invocar outro construtor, esta instruo deve ser a
primeira instruo do construtor.
Exemplo 3.12.2 (Utilizao do termo this na definio de um construtor)
public c l a s s Retangulo {
private int x , y ;
p r i v a t e i n t l a r g u r a , comprimento ;
public Retangulo ( ) {
this (0 , 0 , 1 , 1 ) ;
}
public Retangulo ( i n t l a r g u r a , i n t comprimento ) {
t h i s ( 0 , 0 , l a r g u r a , comprimento ) ;
}
public Retangulo ( i n t x , i n t y , i n t l a r g u r a , i n t comprimento ) {
this . x = x ;
this . y = y ;
this . largura = largura ;
t h i s . comprimento = comprimento ;
}
...
}

Esta classe contm um conjunto de construtores. Cada construtor inicializa alguns


ou todos os membros atributos do retngulo. Os construtores definem o valor

Dora Melo dmelo@iscac.pt

41
por defeito para qualquer membro atributo cujo valor inicial no fornecido por
argumento. O compilador determina qual o construtor que ir executar, baseado
no nmero e no tipo de argumentos.

3.13

Exerccios - this

1. Altere o cdigo da classe Account, do Exerccio 3.4, os mtodos modificadores e


seletores adequados a todos os atributos. Teste na classe principal as alteraes
efetuadas.
2. No projeto definido para o exerccio anterior, construa as classes correspondentes
aos Exemplos 3.12.1 e 3.12.2.
3. Atualize as classes definidas, de forma a incluir um mtodo que permita mostrar
as suas caractersticas.

3.14

O mtodo toString

Definio 3.14.1 O mtodo toString devolve uma String que representa o objeto.
O mtodo toString um mtodo predefinido na classe Object e permite definir a
representao em String das instncias de uma classe. O mtodo predefinido quando
invocado por um objeto mostra uma String que contm informao sobre a classe a
que pertence e a sua referncia interna.
O valor devolvido pelo mtodo toString pode ser qualquer coisa mas tipicamente
organizado de modo a devolver uma representao que facilite a nossa leitura. Por
exemplo, uma classe que represente um ponto poder devolver as coordenadas sob a
forma (x, y), uma classe que represente uma pessoa poder devolver o nome, etc.
O mtodo toString pode ser invocado de forma explcita, como outro mtodo pblico
de um objeto, ou de forma implcita, para tal basta invocar o objeto a partir de uma
instruo que obrigue a sua interpretao corresponda a uma String.

3.15

Exerccios - toString

1. Atualize o cdigo das classes Account, Ponto e Retangulo, do Projeto exemplos,


de forma a incluir o mtodo toString adequado a uma possvel representao
das caractersticas das classes.

Dora Melo dmelo@iscac.pt

42
2. Teste na classe principal as alteraes efetuadas. Utilize as duas formas de invocao do mtodo toString.
3. Qual (ou quais) os mtodos definidos nas referidas classes j no fazem sentido
com a definio do mtodo toString?

3.16

Array (vetor)

Definio 3.16.1 Os arrays (vetores) so estruturas de dados que permitem agrupar um


conjunto de elementos pertencentes ao mesmo tipo de dados. Na linguagem Java, um array
sempre um objeto. Quando se declara uma varivel array, a linguagem Java interpreta-o
como sendo uma referncia.
Para criar um Array em Java, deve-se:
1. Declarar uma varivel que o represente;
2. Criar um novo objeto array e atribui-lo varivel array;
3. Armazenar valores dentro do array.
Exemplo 3.16.1 (Declarao de um array)
i n t i d a d e s [ ] ; / / o mesmo que i n t [ ] i d a d e s d e c l a r a c a o da v a r i a v e l a r r a y i d a d e s
i d a d e s = new i n t [ 1 0 ] ; / / c r i a r um a r r a y de i n t de 10 p o s i c o e s e a t r i b u i r o e n d e r e c o
/ / no q u a l e l a f o i c r i a d a
i d a d e s [ 3 ] = 2 5 ; / / a t u a l i z a a p o s i c a o 3 do a r r a y i d a d e s p a r a o v a l o r 25

No Java, os ndices do array vo de 0 a n 1, onde n o tamanho dado no momento em


que se cria o array. Se se tentar aceder uma posio fora desse valor, ocorrer um erro
durante a execuo.
A partir do momento que um array for criado, o seu tamanho no poder ser alterado.
Se for necessrio aumentar o nmero de elementos de um array, a forma correta criar
um novo array, e copiar os elementos do array inicial antes de o utilizar.
Exemplo 3.16.2 (Percorrer os elementos de um array)
/ / c r i a r o a r r a y i d a d e s de dimensao 10 e c u j o s e l e m e n t o s s a o i n t e i r o s
i n t [ ] i d a d e s = new i n t [ 1 0 ] ;
/ / preencher o array
f o r ( i n t i = 0 ; i < 1 0 ; i ++) {
idades [ i ] = i * 10;
}
/ / e s c r e v e r no s t d o u t o s e l e m e n t o s do a r r a y
f o r ( i n t i = 0 ; i < 1 0 ; i ++) {
System . out . p r i n t l n ( i d a d e s [ i ] ) ;
}

Dora Melo dmelo@iscac.pt

43

As referncias aos arrays e seu contedo realizada atravs de referncias implcitas e


no atravs de aritmtica de ponteiros.
Os limites de um array so rigorosamente aplicados.
Tal como acontece com outros objetos, a passagem de um array para um mtodo atravs do argumento faz-se atravs da passagem de uma referncia para o array original.
Alterar o contedo do array de referncia muda o objeto do array original.
Arrays de objetos so matrizes de referncias que no so inicializados automaticamente.
O Java no suporta arrays multidimensionais. necessrio criar arrays que contm
objetos arrays.

3.17

Exerccios - Array

1. Na plataforma Eclipse, no projeto anteriormente criado "exemplos". Copie, para


o mtodo main, o cdigo apresentado no Exemplo 3.16.2 e teste-o.
2. Elabore um conjunto de instrues que permitam guardar num vetor 5 instncias
das classes Account, Ponto e Retangulo e depois mostre essas instncias para o
standard output.

3.18

BlueJ

BlueJ (http://www.bluej.org/) um ambiente de programao que permite desenvolver programas na Linguagem Java de uma forma fcil e rpida. As suas principais
caractersticas so:
Um interface agradvel e mais simples que os ambientes profissionais;
Desenhado para ser utilizado como uma ferramenta de ensino;
A sua utilizao independente da plataforma;
A integrao do ambiente grfico do modelo orientado por objetos e do respetivo cdigo permitem uma mais fcil compreenso dos conceitos subjacentes ao
paradigma.

Dora Melo dmelo@iscac.pt

44

3.19

Exerccios - BlueJ

1. Defina no BlueJ um novo projeto denominado classes.


2. Defina o package com o nome classes.automoveis.
3. Automveis
(a) Crie uma classe Automovel com os atributos marca, cor e matricula.
(b) Crie os mtodos seletores e modificadores relativos a cada um dos atributos.
(c) Crie um mtodo que permita mostrar as caractersticas dos automveis.
(d) Crie um mtodo construtor que permita a criao de um novo automvel
com valores para as caractersticas.
(e) Crie dois automveis (objetos), com os seguintes valores: a1 - ferrari, Vermelho, 23-AD-23; a2 - Opel, Azul, 34-ER-45.
(f) Invoque o mtodo em cada um dos objetos que mostra as caratersticas dos
mesmos.
(g) Altere a cor do a1 para amarelo e a cor do a2 para verde.
(h) Volte a invocar para cada automvel o mtodo que mostra as suas caractersticas.
4. Defina o package com o nome classes.operacoes.
5. Soma
(a) Defina uma nova classe Soma com dois atributos a e b inteiros.
(b) Crie os mtodos modificadores relativos a cada um dos atributos.
(c) Crie dois mtodos construtores, um que coloca os valores de a = 0 e b = 0 e
outro que coloque os valores de a e b iguais a dois parmetros de entrada a
e b.
(d) Crie um mtodo soma que devolve a soma de dois valores a e b.
(e) Crie um mtodo mostraSoma que utilize a funo anterior para mostrar o
resultado da soma de dois valores.
(f) Crie dois objetos, s1 e s2, um com o construtor sem parmetros e outro com
os valores 2 e 3.
(g) Invoque o mtodo mtodo mostraSoma nos dois objetos e veja o seu resultado.
(h) Altere no objeto s1 o valor de a para 4 e b para 5 invocando os mtodos
apropriados. Invoque novamente o mostraSoma.
6. Defina o package com o nome classes.maquinaBilhetes.
Dora Melo dmelo@iscac.pt

45
7. Mquina de bilhetes
(a) Pretende-se criar uma mquina de tirar bilhetes com um determinado preo.
(b) A mquina tem como caractersticas o preo do bilhete, o dinheiro j inserido para tirar um bilhete e o nmero de bilhetes j tirados pela mquina.
(c) Crie um construtor que permita criar uma mquina para tirar bilhetes com
um determinado preo.
(d) Crie um mtodo que permita ao saber o preo do bilhete.
(e) Crie um mtodo que permita inserir as moedas para comprar os bilhetes.
(f) Crie um mtodo que permita imprimir o bilhete.
(g) A mquina criada no permite validar se as quantias introduzidas so valores positivos. Adicione as instrues necessrias a esta validao.
(h) Altere o mtodo de impresso de bilhetes para que este s imprima caso o
dinheiro inserido o permita e que d troco caso o utilizador tenha inserido
dinheiro a mais.
(i) Crie um mtodo que permita devolver o dinheiro caso o utilizador assim o
deseje.
8. Defina o package com o nome classes.relogio.
9. Relgio
Pretende-se criar um objeto relgio que utilize dois objetos numero para mostrar
as horas e os minutos, da seguinte forma 20:22.
(a) Definir uma classe Numero com dois atributos inteiros, o valor que comea
em 0 e o limite superior (23 ou 59).
(b) Crie o mtodo incrementa para incrementar em 1 o atributo valor. Quando
chegar ao limite superior deve voltar ao inicio.
(c) Definir uma classe Relogio com trs atributos, dois objetos Numero e um
terceiro String para mostrar as horas.
10. Defina o package com o nome classes.turmaAlunos.
11. Turma de alunos
(a) Defina uma nova classe Aluno com os atributos nome e numero.
(b) A classe Aluno dever ter um construtor que recebe o nome e o numero de
aluno.
(c) A classe Aluno dever ter os mtodos para ler e alterar o nome do aluno e
ler o numero de aluno.

Dora Melo dmelo@iscac.pt

46
(d) Crie uma classe Turma, com os seguintes atributos, nome do professor, nmero da sala de aula, numero de alunos da turma e um vetor com os estudantes da turma.
i. Na primeira verso utilizar um vetor atravs da declarao de vetor;
ii. Na segunda verso utilizar a classe ArrayList disponvel na package
java.util.*.
(e) A classe dever ter o mtodo construtor que permita criar um objeto turma
com os dados necessrios, nomeadamente, nome do professor, nmero da
sala de aula e o nmero de estudantes por turma.
(f) Crie um mtodo que permita adicionar alunos turma. Este mtodo dever
verificar se j se atingiu a capacidade mxima da turma.
(g) Crie um mtodo que devolva o nmero de alunos da turma.
(h) Crie um mtodo que permita listar todos os alunos da turma.
(i) Crie quatro objetos aluno e dois objetos turma.
(j) Adicione dois dos alunos a uma turma e o outro dois a outra turma.
(k) Liste os alunos da turma 1 e da turma 2.

Dora Melo dmelo@iscac.pt

Referncias Bibliogrficas
1. Fernando Mrio Junqueira Martins, JAVA6 e Programao Orientada pelos Objectos, 4 Edio, FCA, 978-972-722-624-5
2. Joo Cortez, Henrique Mamede, Introduo s Tcnicas de Programao, Editorial Presena.
3. Antnio Adrego da Rocha / Osvaldo Manuel da Rocha Pacheco, Introduo Programao em Java, FCA, 978-972-722-623-8
4. Antnio Adrego da Rocha, Estruturas de Dados e Algoritmos em Java, FCA, 978972-722-704-4
5. Pedro Coelho, Programao em Java - Curso Completo, FCA, 978-972-722-361-9
6. Adelaide Carvalho, Exerccios de Java: Algoritmia e Programao Estruturada,
FCA, 978-972-722-723-5
7. Richard C. Lee e Willian M. Tepfenhart, UML e C++ Guia Prtico de Desenvolvimento Orientado a Objetos
8. The Java Tutorials -> Trail: Learning the Java Language
http://docs.oracle.com/javase/tutorial/java/index.html
data 29/setembro/2014.
9. The Java Tutorials
http://docs.oracle.com/javase/tutorial/index.html
data 29/setembro/2014.
10. Packages
http://docs.oracle.com/javase/tutorial/java/package/index.html
data 06/outubro/2014.

Dora Melo dmelo@iscac.pt