Você está na página 1de 136

MANUAL DO CURSO DE LICENCIATURA EM

GESTÃO DE SISTEMAS DE
INFORMAÇÃO

1º Ano

Disciplina: Programação I
Código: ISCED1-GSI06

Total Horas/1o Semestre:


Créditos (SNATCA): 5
Número de Temas:

INSTITUTO SUPERIOR DE CIÊNCIAS E EDUCAÇÃO A DISTÂNCIA - ISCED


ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

Direitos de autor (copyright)

Este manual é propriedade do Instituto Superior de Ciências e Educação a Distância (ISCED),


e contém reservados todos os direitos. É proibida a duplicação ou reprodução parcial ou
total deste manual, sob quaisquer formas ou por quaisquer meios (electrónicos, mecânico,
gravação, fotocópia ou outros), sem permissão expressa da entidade editora (Instituto
Superior de Ciências e Educação a Distância (ISCED).

A não observância do acima estipulado o infractor é passível a aplicação de processos


judiciais em vigor no País.

Instituto Superior de Ciências e Educação a Distância (ISCED)


Direção Académica
Rua Dr. Almeida Lacerda, No 212 Ponta - Gêa
Beira - Moçambique
Telefone: +258 23 323501
Cel: +258 82 3055839

Fax: 23323501
E-mail: isced@isced.ac.mz
Website: www.isced.ac.mz

i
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

Agradecimentos

O Instituto Superior de Ciências e Educação a Distância (ISCED) e o autor do presente manual


agradecem a colaboração dos seguintes indivíduos e instituições na elaboração deste
manual:

Pela Coordenação Direção Académica do ISCED

Pelo design Direção de Qualidade e Avaliação do ISCED

Financiamento e Logística
Instituto Africano de Promoção da Educação
a Distância (IAPED)

Adjelo Garfo, Licenciado em Informática.


Pela Revisão
Programador.

Elaborado Por: Solomone Rumhungwe (MSc. IT)

ii
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

Índice

Visão geral 1

Bem-vindo à Disciplina/Módulo de Programação I .......................................................... 1


Objectivos do Módulo....................................................................................................... 1
Quem deveria estudar este módulo ................................................................................. 1
Como está estruturado este módulo ................................................................................ 2
Ícones de actividade ......................................................................................................... 4
Habilidades de estudo ...................................................................................................... 4
Precisa de apoio? .............................................................................................................. 7
Tarefas (avaliação e auto-avaliação) ................................................................................ 8
Avaliação ........................................................................................................................... 9
TEMA I: FUNDAMENTOS BÁSICOS DE PROGRAMAÇÃO ................................................. 11
Unidade 1.1: Introdução à programação........................................................................ 11
Unidade 1.2: Algoritmos ................................................................................................. 14
TEMA II: CONCEITOS E FUNDAMENTOS BÁSICOS DE PROGRAMAÇÃO JAVA ................ 22
Unidade 2.1: Tecnologia JAVA ........................................................................................ 22
Unidade 2.2: Introdução Prática ..................................................................................... 32
Exercícios de AUTO-AVALIAÇÃO (Com respostas):......................................................... 35
Exercícios de AVALIAÇÃO: .............................................................................................. 37
TEMA III: TIPOS DE DADOS ............................................................................................. 38
Unidade 3.1: Tipos primitivos ......................................................................................... 39
Unidade 3.2: Operadores................................................................................................ 41
Unidade 3.3: Caracteres especiais e palavras reservadas .............................................. 48
Exercícios de AUTO-AVALIAÇÃO (Com Respostas): ........................................................ 51
Exercícios de AVALIAÇÃO................................................................................................ 53
TEMA IV: ESTRUTURAS DE CONTROLO ........................................................................... 56
Unidade 4.1: Estruturas de Controlo .............................................................................. 57
Exercícios de AUTO-AVALIAÇÃO (com respostas) .......................................................... 69
Exercícios de AVALIAÇÃO................................................................................................ 70

iii
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

TEMA V: UMA INTRODUÇÃO ÀS ESTRUTURAS DE DADOS COMO ARRAY E MATRIZES


(ARRAYS BIDIMENSIONAIS)............................................................................................. 74
Unidade 5.1: Array (Vector) ............................................................................................ 75
Exercícios de AUTO-AVALIAÇÃO (com respostas) .......................................................... 79
Exercícios de AVALIAÇÃO................................................................................................ 80
TEMA VI: INTRODUÇÃO AO PARADIGMA DE PROGRAMAÇÃO ORIENTADA A OBJECTOS
(POO) ............................................................................................................................... 83
Unidade 6.1: Objectos, Classes, Atributos e Métodos ................................................... 85
Unidade 6.2: Métodos .................................................................................................... 88
Exercícios de AUTO-AVALIAÇÃO (Com Respostas) ......................................................... 93
Exercícios de AVALIAÇÃO................................................................................................ 95
TEMA VII: NETBEANS IDE ................................................................................................ 97
Unidade 7.1: NetBeans IDE ............................................................................................. 97
Exercícios ............................................................................................................. 103
TEMA VIII: ORIENTAÇÃO A OBJECTOS (CONTINUAÇÃO) .............................................. 104
Unidade 8.1: Modificadores de acesso e atributos de classe ...................................... 104
Unidade 8.2: Herança, Reescrita e Polimorfismo ......................................................... 107
Unidade 8.3: Pacotes (packages): ................................................................................. 123
Exercícios de AUTO-AVALIAÇÃO (Com Respostas) ....................................................... 126
Exercícios de AVALIAÇÃO.............................................................................................. 126

iv
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

Visão geral

Bem-vindo à Disciplina/Módulo de Programação I

Objectivos do Módulo

Ao terminar o estudo deste módulo de Programação I deverá ser


capaz de:

 Apresentar o domínio dos principais conceitos de


Programação e suas aplicações.

 Desenvolver pequenos aplicativos em Java.

 Implementar algoritmos na resolução de casos práticos no


contexto do curso frenquentado.

 Definir os principais conceitos de programação, tais como


os tipos de dados, variáveis, estruturas de controlo e de
decisão, e paradigma de orientação a objectos;

Objectivos  Analisar problemas, delinear e implementar algoritmos;


Específicos
 Desenvolver pequenos programas em Java;

 Conhecer os fundamentos básicos da programação


orientada a objectos.

Quem deveria estudar este módulo

Este módulo foi concebido para estudantes do 1º ano do curso de


licenciatura em Gestão de Sistemas de Informação do ISCED.
Poderá ocorrer, contudo, que haja leitores que queiram se
actualizar e consolidar seus conhecimentos nessa disciplina, esses

1
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

serão bem-vindos, não sendo necessário para tal se inscrever. Mas


poderá adquirir o manual.

Como está estruturado este módulo

Este módulo de Programação I, para estudantes do 1º ano do


curso de Licenciatura em Gestão de Sistemas de Informação, à
semelhança dos restantes do ISCED, está estruturado como se
segue:

Páginas introdutórias

 Um índice completo;

 Uma visão geral detalhada dos conteúdos do módulo,


resumindo os aspectos-chave que você precisa conhecer
para melhor estudar. Recomendamos vivamente que leia
esta secção com atenção antes de começar o seu estudo,
como componente de habilidades de estudos.

Conteúdo desta Disciplina/Módulo

Este módulo está estruturado em temas. Cada tema, por sua vez
comporta certo número de unidades temáticas ou simplesmente
unidades. Cada unidade temática se caracteriza por conter uma
introdução, objectivos e conteúdos.

No final de cada unidade temática ou do próprio tema, são


incorporados antes o sumário, exercícios de auto-avaliação e só
depois é que aparecem os exercícios de avaliação.

Os exercícios de avaliação têm as seguintes características: puros


exercícios teóricos/práticos, problemas não resolvidos e
actividades práticas algumas incluíndo estudo de caso.

2
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

Outros recursos

A equipa dos académicos e pedagogos do ISCED, pensando em si,


num cantinho recôndito deste nosso vasto Moçambique e cheio
de dúvidas e limitações no seu processo de aprendizagem,
apresenta uma lista de recursos didácticos adicionais ao seu
módulo para que possas explorar. Para tal o ISCED disponibiliza na
biblioteca do seu centro de recursos mais material de estudos
relacionado ao seu curso como: livros e/ou módulos, CD, CD-ROM,
DVD.

Para além deste material físico ou electrónico disponível na


biblioteca, pode ter acesso à Plataforma digital Moodle para
alargar mais ainda as possibilidades dos seus estudos.

Auto-avaliação e Tarefas de avaliação

Tarefas de auto-avaliação para este módulo encontram-se no final


de cada unidade temática e de cada tema. As tarefas dos
exercícios de auto-avaliação apresentam duas características:
primeiro apresentam exercícios resolvidos com detalhes. Segundo,
exercícios que mostram apenas respostas.

Tarefas de avaliação devem ser semelhantes às de auto-avaliação


mas sem mostrar os passos e devem obedecer o grau crescente de
dificuldades do processo de aprendizagem, umas a seguir a outras.
Parte das tarefas de avaliação será objecto dos trabalhos de
campo a serem entregues aos tutores/docentes para efeitos de
correcção e subsequentemente nota. Também constará do exame
do fim do módulo. Pelo que, caro estudante, fazer todos os
exercícios de avaliação é uma grande vantagem.

3
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

Comentários e sugestões

Use este espaço para dar sugestões valiosas, sobre determinados


aspectos, quer de natureza científica, quer de natureza didáctico-
Pedagógica, etc, sobre como deveriam ser ou estar apresentadas.
Pode ser que graças as suas observações que, em goso de
confiança, classificamo-las de úteis, o próximo módulo venha a ser
melhorado.

Ícones de actividade

Ao longo deste manual irá encontrar uma série de ícones nas


margens das folhas. Estes ícones servem para identificar
diferentes partes do processo de aprendizagem. Podem indicar
uma parcela específica de texto, uma nova actividade ou tarefa,
uma mudança de actividade, etc.

Habilidades de estudo

O principal objectivo deste campo é o de ensinar aprender a


aprender. Aprender aprende-se.

Durante a formação e desenvolvimento de competências, para


facilitar a aprendizagem e alcançar melhores resultados, implicará
empenho, dedicação e disciplina no estudo. Isto é, os bons
resultados apenas se conseguem com estratégias eficientes e
eficazes. Por isso é importante saber como, onde e quando
estudar. Apresentamos algumas sugestões com as quais esperamos
que caro estudante possa rentabilizar o tempo dedicado aos
estudos, procedendo como se segue:

1º. Praticar a leitura. Aprender à distância exige alto domínio de


leitura.

4
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

2º. Fazer leitura diagonal aos conteúdos (leitura corrida).

3º. Voltar a fazer leitura, desta vez para a compreensão e


assimilação crítica dos conteúdos (ESTUDAR).

4º. Fazer seminário (debate em grupos), para comprovar se a sua


aprendizagem confere ou não com a dos colegas e com o padrão.

5º. Fazer TC (Trabalho de Campo), algumas actividades práticas ou


as de estudo de caso se existirem.

IMPORTANTE: Em observância ao triângulo modo-espaço-tempo,


respectivamente como, onde e quando estudar.

Como foi referido no início deste item, antes de organizar os seus


momentos de estudo reflicta sobre o ambiente de estudo que seria
ideal para si: estudo melhor em casa/biblioteca/café/ ou noutro
lugar? Estudo melhor à noite/de manhã/de tarde/fins-de-
semana/ao longo da semana? Estudo melhor com música/num
sítio sossegado/num sítio barulhento!? Preciso de intervalo em
cada 30 minutos, em cada hora, etc.

É impossível estudar numa noite tudo o que devia ter sido


estudado durante um determinado período de tempo; Deve
estudar cada ponto da matéria em profundidade e passar só ao
seguinte quando achar que já domina bem o anterior.

Privilegia-se saber bem (com profundidade) o pouco que puder ler


e estudar, que saber tudo superficialmente! Mas a melhor opção é
juntar o útil ao agradável: Saber com profundidade todos
conteúdos de cada tema, no módulo.

Dica importante: não recomendamos estudar seguidamente por


tempo superior a uma hora. Estudar por tempo de uma hora
intercalado por 10 (dez) a 15 (quinze) minutos de descanso

5
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

(chama-se descanso à mudança de actividades). Ou seja, que


durante o intervalo não se continuar a tratar dos mesmos assuntos
das actividades obrigatórias.

Uma longa exposição aos estudos ou ao trabalho intelectual


obrigatório pode conduzir ao efeito contrário: baixar o rendimento
da aprendizagem. Por que o estudante acumula um elevado
volume de trabalho, em termos de estudos, em pouco tempo,
criando interferência entre os conhecimentos, perde sequência
lógica, por fim ao perceber que estuda tanto mas não aprende, cai
em insegurança, depressão e desespero, por se achar injustamente
incapaz!

Não estude na última da hora; quando se trate de fazer alguma


avaliação. Aprenda a ser estudante de facto (aquele que estuda
sistematicamente), não estudar apenas para responder a questões
de alguma avaliação, mas sim estude para a vida, sobre tudo,
estude pensando na sua utilidade como futuro profissional, na área
em que está a se formar.

Organize na sua agenda um horário onde define a que horas e que


matérias deve estudar durante a semana; Face ao tempo livre que
resta, deve decidir como o utilizar produtivamente, decidindo
quanto tempo será dedicado ao estudo e a outras actividades.

É importante identificar as ideias principais de um texto, pois será


uma necessidade para o estudo das diversas matérias que
compõem o curso:

A colocação de notas nas margens pode ajudar a estruturar a


matéria de modo que seja mais fácil identificar as partes que está
a estudar e pode escrever conclusões, exemplos, vantagens,

6
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

definições, datas, nomes, pode também utilizar a margem para


colocar comentários seus relacionados com o que está a ler;

A melhor altura para sublinhar é imediatamente a seguir à


compreensão do texto e não depois de uma primeira leitura;

Utilizar o dicionário sempre que surja um conceito cujo significado


não conhece ou não lhe é familiar.

Precisa de apoio?

Caro estudante, temos a certeza que por uma ou por outra razão, o
material de estudos impresso, lhe pode suscitar algumas dúvidas
como falta de clareza, alguns erros de concordância, prováveis
erros ortográficos, falta de clareza, fraca visibilidade, páginas
trocadas ou invertidas, etc). Nestes casos, contacte os serviços de
atendimento e apoio ao estudante do seu Centro de Recursos (CR),
via telefone, sms, e-mail, se tiver tempo, escreva mesmo uma carta
participando a preocupação.

Uma das atribuições dos Gestores dos CR e seus assistentes


(Pedagógico e Administrativo), é a de monitorar e garantir a sua
aprendizagem com qualidade e sucesso. Dai a relevância da
comunicação no Ensino a Distância (EAD), onde o recurso às TICs se
torna incontornável: entre estudantes, estudante – Tutor,
estudante – CR, etc.

As sessões presenciais são um momento em que você caro


estudante, tem a oportunidade de interagir fisicamente com staff
do seu CR, com tutores ou com parte da equipa central do ISCED
indigitada para acompanhar as suas sessões presenciais. Neste
período pode apresentar dúvidas, tratar assuntos de natureza
pedagógica e/ou administrativa.

7
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

O estudo em grupo, que está estimado para ocupar cerca de 30%


do tempo de estudos a distância, é de muita importância, na
medida em que permite-lhe situar, em termos do grau de
aprendizagem com relação aos outros colegas. Desta maneira
ficará a saber se precisa de apoio ou de apoiar aos colegas.
Desenvolver o hábito de debater assuntos relacionados com os
conteúdos programáticos, constantes nos diferentes temas e
unidades temáticas, no módulo.

Tarefas (avaliação e auto-avaliação)

O estudante deve realizar todas as tarefas (exercícios, actividades e


autoavaliação), contudo nem todas deverão ser entregues, mas é
importante que sejam realizadas. As tarefas devem ser entregues
duas semanas antes das sessões presenciais seguintes.

Para cada tarefa serão estabelecidos prazos de entrega, e o não


cumprimento dos prazos de entrega, implica a não classificação do
estudante. Tenha sempre presente que a nota dos trabalhos de
campo conta e é decisiva para a admissão ao exame final da
disciplina/módulo.

Os trabalhos devem ser entregues ao Centro de Recursos (CR) e os


mesmos devem ser dirigidos ao tutor/docente.

Podem ser utilizadas diferentes fontes e materiais de pesquisa,


contudo os mesmos devem ser devidamente referenciados,
respeitando os direitos do autor.

O plágio1 é uma violação do direito intelectual do (s) autor (es).


Uma transcrição à letra de mais de 8 (oito) palavras do testo de um

1
Plágio - copiar ou assinar parcial ou totalmente uma obra literária, propriedade
intelectual de outras pessoas, sem prévia autorização.

8
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

autor, sem o citar é considerado plágio. A honestidade, humildade


científica e o respeito pelos direitos autorais devem caracterizar a
realização dos trabalhos e seu autor (estudante do ISCED).

Avaliação

Muitos perguntam: Com é possível avaliar estudantes à distância,


estando eles fisicamente separados e muito distantes do
docente/tutor!? Nós dissemos: Sim é muito possível, talvez seja
uma avaliação mais fiável e consistente.

Você será avaliado durante os estudos à distância que contam com


um mínimo de 90% do total de tempo que precisa de estudar os
conteúdos do seu módulo. Quando o tempo de contacto presencial
conta com um máximo de 10%) do total de tempo do módulo. A
avaliação do estudante consta de forma detalhada no regulamento
de avaliação.

Os trabalhos de campo por si realizados, durante estudos e


aprendizagem no campo, pesam 25% e servem para a nota de
frequência para ir aos exames.

Os exames são realizados no final da cadeira/disciplina ou módulo


e decorrem durante as sessões presenciais. Os exames pesam no
mínimo 75%, o que adicionado aos 25% da média de frequência,
determinam a nota final com a qual o estudante conclui a cadeira.

A nota de 10 (dez) valores é a nota mínima de conclusão da


cadeira.

Nesta cadeira o estudante deverá realizar pelo menos 2 (dois)


trabalhos e 1 (um) (exame).

Algumas actividades práticas, relatórios e reflexões serão utilizadas


como ferramentas de avaliação formativa.

9
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

Durante a realização das avaliações, os estudantes devem ter em


consideração a apresentação, a coerência textual, o grau de
cientificidade, a forma de conclusão dos assuntos, as
recomendações, a identificação das referências bibliográficas
utilizadas, o respeito pelos direitos do autor, entre outros.

Os objectivos e critérios de avaliação constam do Regulamento de


Avaliação.

10
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

TEMA I: FUNDAMENTOS BÁSICOS DE PROGRAMAÇÃO

Unidade 1.1: Introdução à programação

 O que é Programação?
 O que são Linguagens de Programação?

O que é Programação?

Com a evolução da tecnologia, cada dia mais pessoas têm acesso a um computador, seja em
casa, na escola, no trabalho. Quando usamos computadores, podemos fazer muitas coisas. Uma
criança pode usar a Internet para passar uma mensagem, um estudante pode usar uma planilha
eletrônica para calcular uma média ou quantos pontos precisa para ser aprovado em cada
matéria, um cozinheiro pode guardar suas receitas em software como o Word ou em um produto
especializado para receitas.

E para alguns mais curiosos, surgem perguntas como: "como os computadores fazem isto?",
"Será que posso fazer ou aprender?", "Como será um computador por dentro?".

Todos os dias pela manhã programamo-nos para ir ao trabalho/escola/faculdade: acordar,


escovar os dentes, tomar o banho, café e sair. De uma maneira simples, programar é criar uma
série de instruções. No exemplo acima essa seria a nossa programação, o nosso conjunto de
instruções.

Embora a tecnologia esteja tão avançada, os computadores ainda não “pensam” exatamente, no
sentido literal da palavra. Eles simplesmente executam o que lhes são ordenados, seja bom ou
não. Aliás, para eles não existe bom ou ruim, eles simplesmente fazem, não importa o resultado
do trabalho; A “magia” está na capacidade de processamento de um computador. O que um
simples notebook pode fazer, em termos de cálculos e rapidez, é muito mais do que qualquer um
ser humano da face da terra pode fazer ao longo de toda a sua vida.

Resumindo, programar é dizer para o computador o que você quer, e ele simplesmente fará. É
dar instruções ao computador para que ele execute alguma tarefa. Mas como dizer isso? Como
se comunicar e dar instruções ao

11
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

computador? Através das linguagens de programação.

O que são Linguagens de Programação?

Podemos imaginar o computador como uma super calculadora, capaz de fazer cálculos muito
mais rápidos do que nós, mas para isso devemos dizer para o computador o que deve ser
calculado e como deve ser calculado.

Diferentemente dos seres humanos, os computadores não têm capacidade de raciocínio e


precisam de instruções exatas para tudo o que fazem. O que é óbvio para você, humano,
certamente não é óbvio para uma máquina. E se quisermos que a máquina faça algo, precisamos
de certa forma, "falar com ela". A função das linguagens de programação é exatamente essa, ou
seja, servir de um meio de comunicação entre computadores e humanos.

Existem dois tipos de linguagens de programação: as de baixo nível e as de alto nível. Os


computadores interpretam tudo como números em base binária, ou seja, só entendem zero e
um. As linguagens de baixo nível são interpretadas diretamente pelo computador, tendo um
resultado rápido, porém é muito difícil e incômodo se trabalhar com elas. Exemplos de
linguagens de baixo nível são a linguagem binária e a linguagem Assembly.

Exemplo de código em Assembly:

Como pode-se notar, é uma linguagem bastante complicada.

Já as linguagens de alto nível são mais fáceis de se trabalhar e de entender, as ações são
representadas por palavras de ordem (exemplo faça, imprima, etc) geralmente em inglês, foram
feitos assim para facilitar a memorização e a lógica. Elas não são interpretadas diretamente pelo
computador, sendo necessário traduzí-las para linguagem binária utilizando-se de um programa
chamado compilador.

Quando programamos em uma linguagem de programação de alto nível primeiramente criamos


um arquivo de texto comum contendo

12
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

a lógica do programa, ou seja, é onde falamos ao computador como deve ser feito o que
queremos. Este arquivo de texto é chamado de código-fonte, cada palavra de ordem dentro do
código-fonte é chamada de instrução.

Após criarmos o código-fonte devemos traduzir este arquivo para linguagem binária usando o
compilador correspondente com a linguagem na qual estamos programando. O compilador irá
gerar um segundo arquivo que chamamos de executável ou programa, este arquivo gerado é
interpretado diretamente pelo computador.

Exemplo de código em linguagem JAVA (alto nível):

Atualmente existem muitas linguagens de programação disponíveis. Essas linguagens foram


criadas com um certo propósito, para tratar de determinados tipos de problemas, por isso a
escolha da mais apropriada depende dos diversos tipos de problemas/situações.

13
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

Unidade 1.2: Algoritmos

 Algoritmo
 Constituição de um algoritmo
 Formas de representação de um Algoritmo

Algoritmo

Um algoritmo pode ser definido como uma sequência finita de passos (instruções) para resolver
um determinado problema. Sempre que desenvolvemos um algoritmo estamos estabelecendo
um padrão de comportamento que deverá ser seguido (uma norma de execução de ações) para
alcançar o resultado de um problema. Exemplo:

Como se pode ver, um algoritmo pode ser qualquer sequência de instruções. A que podem ver
acima, a confeção de um bolo, é realizada por um ser humano.

Para o desenvolvimento de um algoritmo eficiente é necessário obedecermos algumas


premissas básicas no momento de sua construção:

 Definição: Os passos de um algoritmo devem ser bem definidos, objetivando


a clareza e evitando ambiguidades.

 Finitude: Um algoritmo deve chegar ao seu fim após um número finito de

14
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

passos.

 Efetividade: Um algoritmo deve ser efetivo, ou seja, suas operações devem


ser básicas o suficiente para que possam, em princípio, serem executadas de
maneira exata e em um tempo finito.

 Entradas: Um algoritmo deve possuir zero ou mais entradas. Estas são


insumos ou quantidades que são processados pelos algoritmos durante a
execução de seus passos.

 Saídas: Um algoritmo deve possuir uma ou mais saídas. Elas representam o


resultado do trabalhado realizado pelos algoritmos.

Os algoritmos são capazes de realizar tarefas como:

1. Ler e escrever dados;

2. Avaliar expressões algébricas, relacionais e lógicas;

3. Tomar decisões com base nos resultados das expressões avaliadas;

4. Repetir um conjunto de ações de acordo com uma condição;

O algoritmo 1, a baixo, é um exemplo simples de algoritmo (sem condições ou repetições) para


troca de um pneu.

No algoritmo 2 estão ilustradas as tarefas anteriormente mencionadas.

15
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

Nas linhas de 2 a 4 pode-se observar a repetição de uma ação enquanto uma dada condição seja
verdadeira, neste caso em específico, o algoritmo está repetindo a ação “esperar ônibus”
enquanto a condição “ônibus não chega” permanecer verdadeira.

Assim que essa condição se tornar falsa (quando o ônibus chegar) o algoritmo deixará de repetir
a ação “esperar ônibus”, e irá executar a linha 5.

Já nas linhas de 7 a 9, é possível observar um exemplo da execução (ou não execução) de uma
ação com base na avaliação de uma expressão. Nesse trecho, o algoritmo avalia se a expressão
“não tenho passagem” é verdadeira e em caso positivo, executaa acão “pegar dinheiro”.

Caso a expressão “não tenho passagem” seja falsa (ou seja, a pessoa tem passagem) então o
algoritmo irá ignorar a ação “pegar dinheiro” e irá executar a linha 10. Essas são as chamadas
estruturas de controlo e serão estudadas com mais detalhes no Tema IV.

CONSTITUIÇÃO DE UM ALGORITMO

Um algortimo quando programado num computador é constituído pelo menos das 3 partes,
sendo elas:

1. Entrada de dados;

2. Processamento de dados;

3. Saída de dados;

16
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

Na parte de entrada, são fornecidas as informações necessárias para que o algoritmo possa ser
executado. Estas informações podem ser fornecidas no momento em que o programa está
sendo executado ou podem estar embutidas dentro do mesmo.

Na parte do processamento são avaliadas todas as expressões algébricas, relacionais e lógicas,


assim como todas as estruturas de controlo existentes no algoritmo (condição e/ou repetição).

Na parte de saída, todos os resultados do processamento (ou parte deles) são enviados para um
ou mais dispositivos de saída, como: monitor, impressora, ou até mesmo a própria memória do
computador.

FORMAS DE REPREENTAÇÃO DE UM ALGORITMO

 Descrição narrativa

Os algoritmos são expressos em linguagem natural (português, inglês, francês, espanhol, etc.).

Sua principal desvantagem se encontra no fato da linguagem natural estar bem distante da
linguagem utilizada pelos computadores. Logo, a tradução de uma para a outra se torna uma
atividade bastante dispendiosa. Além disso, linguagens naturais são mais propensas a
ambiguidades.

Muitas vezes uma palavra pode ter vários significados, dependendo do contexto no qual são
utilizadas. Em contrapartida, é bem mais fácil elaborar um algoritmo por meio de uma
linguagem com a qual já temos uma certa familiaridade, do que através de linguagens que não
são utilizadas com frequência no dia-a-dia.

Vejamos a seguir um exemplo de algoritmo em descrição narrativa:

Algoritmo para fritar um ovo:

1. Retire o ovo da geladeira.

2. Coloque a frigideira no fogo.

3. Coloque óleo na frigideira.

17
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

4. Quebre ovo, separando a casca.

5. Ponha a clara e a gema na frigideira.

6. Espere um minuto.

7. Apague o fogo.

8. Retire o ovo da frigideira.

 Fluxograma

Os fluxogramas são uma apresentação do algoritmo em formato gráfico. Cada ação ou situação
é representada por uma caixa. Tomadas de decisões são indicadas por caixas especiais,
possibilitando ao fluxo de ações tomar caminhos distintos.

Fluxograma consiste em usar formas geométricas padronizadas para descrever os passos a


serem executados pelos algoritmos. As formas mais comumente utilizadas em fluxogramas são
as seguintes:

18
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

Exemplos de fluxogramas:

Fluxograma de algoritmo para cálculo de media de dois números.

Fluxograma de algoritmo assar pão.

19
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

Analisando o ultimo exemplo:

 O início e o fim do algoritmo estão marcados com uma figura elíptica;

 As ações a serem executadas estão em retângulos;

 Sendo que a estrutura de controlo condicional que está em losângolo indica


duas possibilidades de proseguimento do algoritmo, uma para o caso da
expressão avaliada (condição) ser verdadeira e outra para o caso de ser
falsa.

No exemplo da última figura, a primeira ação é executada “abrir forno” e então a segunda
expressão é avaliada “fogo acesso?” como verdadeira ou falsa; caso seja verdadeira, o algoritmo
prossegue para a ação à esquerda “botar lenha”; caso seja falsa, o algoritmo executa a ação à
direita “acender fogo”. Em seguida, para qualquer um dos casos, a próxima ação a ser executada
é “assar pão”.

 Pseudocodigo

O pseudocódigo é uma maneira intermediária entre a linguagem natural e uma linguagem de


programação de representar um algoritmo.

Ela utiliza um conjunto restrito depalavras-chave, em geral na língua nativa do programador,


que tem equivalentes nas linguagens de programação.

Além disso, o pseudocódigo não requer todo a rigidez sintática necessária numa linguagem de
programação, permitindo que o aprendiz se detenha na lógica do algoritmo e não no
formalismo da sua representação.

Na medida em que se obtém mais familiaridade com os algoritmos, então o pseudocódigo pode
ser traduzido para uma linguagem de programação.

Exemplo de um algoritmo em pseudocodigo para comparar dois números:

20
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

Neste exemplo é mostrado um exemplo de pseudocódigo escrito em português para escrever o


maior valor entre, x ou y. As palavras leia, se, então, senão-se, fim e escreva são palavras-chave
que representam estruturas presentes em todas as linguagens de programação.

Entretanto, no pseudocódigo não é necessário se preocupar com detalhes de sintaxe (como


ponto-e-vírgula no final de cada expressão) ou em formatos de entrada e saída dos dados.

Deste modo, o enfoque no desenvolvimento do algoritmo fica restrito a sua lógica em si, e não
na sua sintaxe para representação em determinada linguagem.

21
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

TEMA II: CONCEITOS E FUNDAMENTOS BÁSICOS DE


PROGRAMAÇÃO JAVA

Unidade 2.1: Tecnologia JAVA

 Tecnologia Java

 Características da Linguagem e API Java

 Ambiente de desenvolvimento e de execução

 Máquina Virtual JAVA (JVM)

 Versões do Java

 Bytecode

 Coletor de Lixo (Garbage Collector)

 Tecnologia Java

Java é uma linguagem de programação orientada a objetos feita na Sun Microsystems, hoje
Oracle Corporation, lançada em 1995.

A Linguagem Java foi desenvolvida nos princípios dos anos 90 por um grupo de Engenheiros
liderado por James Gosling da antiga Sun Microsystems, e foi lançada em 1995. JAVA é uma
linguagem derivada do C, porém, programar em Java é mais simples, pois é do alto nível. Isso
quer dizer que não nos preocupamos tanto com detalhes do baixo nível, como memória,
processamento, ponteiros, lixo etc. O Java já provém um gerenciamento automático de
memória e um coletor de lixo (Garbage Collector), que facilitam a vida do desenvolvedor, mas
consomem mais processamento. A diferença do Java é que os programas não são compilados
diretamente na arquitetura do computador. Ao invés disso, é executado na JVM (Java Virtual
Machine), uma máquina virtual, e esta é implementada nos mais diversos dispositivos, o que
torna o Java referência quando o assunto é portabilidade.

Em outras linguagens de programação, como em C ou C++, o programa é convertido em código


de máquina (Assembly) e é executado

22
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

especificamente num sistema operativo.

O nome "Java" é usado para referir-se à:

 Uma linguagem de programação orientada a objectos;

 Uma colecção de APIs (classes, componentes, frameworks) para


desenvolvimento de aplicações multiplataforma;

 Um ambiente de execução presente em navegadores, mainframes;

 SOs, celulares, palmtops, cartões inteligentes, electrodomésticos;

Devido à compra da Sun pela Oracle em 2009, actualmente a página oficial do java é:
http://www.oracle.com/technetwork/java/.

A evolução da linguagem é controlada pelo Java Community Process (www.jcp.org), este é um


mecanismo para o desenvolvimento de especificações técnicas padrão para a Tecnologia Java.
Qualquer indivíduo pode registar-se no site e participar na revisão fornecendo feedback para as
solicitações de especificação de Java.

 Características da linguagem e api java


 Linguagem de programação orientada a objectos
 Simples e robusta (minimiza bugs, aumenta produtividade);
 Familiar (sintaxe parecida com C);
 Possui códigos fonte e objectos portáveis para diversas arquitecturas e
sistemas operacionais, Independente de plataforma;
 Suporte nativo a threads (+ simples, maior portabilidade);
 Dinâmica (módulos, acoplamento em tempo de execução;
 Com colecta de lixo (menos bugs, mais produtividade);
 Segura (mecanismos para garantir segurança);
 Código intermediário de máquina virtual interpretado;
 Compilação rápida (mais produtividade no desenvolvimento);
 Sintaxe uniforme, rigorosa quanto a tipos (código mais simples, menos
diferenças em funcionalidades iguais).

 API Java

23
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

 API (Interface de Programação de Aplicação) é um conjunto de padrões de


programação (classes e interfaces), que permite a construção e utilização de
aplicativos de maneira não transparente ao usuário;

 As classes e interfaces que compõem a API do Java estão divididas em


pacotes e cada um destes agrupa um conjunto de classes e interfaces que
possuem propósitos comuns;

 A estrutura dos pacotes que abriga as classes e interfaces de Java reflectem a


estrutura de directórios onde seus arquivos compilados estão dispostos;

 As classes e interfaces do JDK encontram-se em um arquivo compactado


chamado rt.jar que se encontra no directório \jre\lib;

 As especificações sobre a API Java Standard Edition 7 estão disponíveis em:


http://docs.oracle.com/javase/7/docs/api/, neste site estão especificados os
pacotes e classes que compõem a API Java, bem como uma breve descrição
das suas funcionalidades.

O pacote java:

 Contém classes e interfaces essenciais à consecução dos seus desígnios


enquanto linguagem de programação e também recursos indispensáveis
para realização de tarefas importantes para a execução de qualquer
programa;

 Possui 13 pacotes: applet, awt, beans, io, lang, math, net, nio, rmi, security,
sql, text e util. Estes contém classes e interfaces distribuídas em diversos sub
pacotes que devem ser aplicados para desenvolver determinado tipo de
aplicação, cada pacote de acordo com as necessidades da aplicação.

O pacote javax:

 Contém classes e interfaces que complementam as dispostas no pacote java


e outras que oferecem novos recursos;

 No javax estão disponíveis os pacotes acessibility, activity, annotation,

24
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

crypto, imageio, print, swing, xml, tools, dentre outros.

 O pacote java.lang contém recursos necessários para a implementação de


diversas operações fundamentais para a construção de uma diversidade de
aplicações.

 Ambiente de desenvolvimento e de execução


A evolução da linguagem java, após o seu lançamento, levou ao aumento do número de
bibliotecas padrão da linguagem e à criação de três divisões na plataforma a partir da versão 2
da linguagem: J2SE, J2EE e J2ME. A partir de 2006, o número 2 foi retirado da sigla e estas
passaram a ser: JSE, JEE e JME.
 Java Standard Edition (JSE): é o ambiente de desenvolvimento mais
utilizado, seu uso é voltado a PC’s e servidores. Possui ferramentas e APIs
essenciais para qualquer aplicação Java (inclusive GUI), é a mais indicada
para quem quer aprender a linguagem;
 Java Enterprise Edition (JEE): é voltado para redes, internet, intranets e
afins. Possui bibliotecas para o acesso a servidores, sistemas de email, banco
de dados e outros. Contém ferramentas e APIs para o desenvolvimento de
aplicações distribuídas. Foi desenvolvia para suportar grande quantidade de
usuários simultâneos;
 Java Micro Edition (JME): é usado no desenvolvimento para dispositivos
móveis ou portáteis como celulares e palmtops.

JRE (Java Runtime Environment):


 É necessário para executar aplicações Java;
 É composto por uma JVM e um conjunto de bibliotecas que permite executar
softwares em java.

JDK (Java Development Kit):

 Conjunto de utilitários que permite criar sistemas de software para a


plataforma Java;

 Possui uma JVM privada e alguns recursos para finalizar o desenvolvimento

25
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

da aplicação Java. É o Kit de Desenvolvimento Java.

 Deve ser descarregada pelos desenvolvedores, é formado pelo JRE e outras


ferramentas como o compilador;

 Colecção de ferramentas de linha de comando para, entre outras tarefas,


compilar, executar e depurar aplicações Java;

Para desenvolver em java é necessário descarregar e instalar o JDK na sua máquina


(computador), para tal visite o site: http://www.oracle.com/technetwork/java/. É necessário
descarregar e instalar o Kit de Desenvolvimento Java SE para resolver os exercícios deste manual
e executar os exemplos.

Algumas outras ferramentas do SDK:


 Debugger: jdb, depurador simples de linha de comando;
 Profiler: java –prof, opção do interpretador Java que gera estatísticas sobre
uso de métodos em um arquivo de texto chamado java.prof;
 Java Documentation Generator: javadoc, gera documentação em HTML
(default) a partir de código-fonte Java;
 Java Archiver: jar, extensão do formato ZIP; ferramenta comprime, lista e
expande;
 Applet Viewer: appletviewer, permite a visualização de applets sem
browser;
 HTML Converter: htmlconverter.jar, converte <applet> em <object> em
páginas que usam applets;
 Disassembler: javap, permite ler a interface pública de classes.

26
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

JVM (Java Virtual Machine):


 Máquina imaginária que é implementada através de software emulador em
uma máquina real;
 Provê especificações de plataforma de hardware na qual compila-se todo o
código java;
 Permite que o software java seja uma plataforma independente, pois a
compilação é feita por uma máquina genérica (JVM);
 Entende e interpreta o bytecode;
 Camada responsável por traduzir o que sua aplicação deseja fazer para as
respectivas chamadas do sistema operacional onde ela encontra-se a
executar no momento;

Bytecode Java

Máquina Virtual Java


(Windows ou Linux)

SO
(Windows ou Linux)

 A aplicação executa sem nenhum envolvimento do SO, conversa apenas com


a JVM. Esta gerencia os recursos computacionais, pois funciona como uma
máquina real;

 As máquinas virtuais utilizam uma estratégia de compilação chamada Just-in-


time Compilation (JIT), através da qual um código de máquina pode ser
gerado diversas vezes durante o processamento de um programa, para
melhorar a utilização dos recursos disponíveis em um determinado instante
da execução.

A forma de execução de uma aplicação depende:

 da origem do código a ser executado (remoto ou local);

27
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

 da forma como foi implementada a JVM pelo fabricante usando java.

(Usando java tecnologia JIT, HotSpot, etc.)

A primeira tarefa executada pela JVM é o carregamento das classes necessárias para rodar a
aplicação. O Class Loader:

 Carrega primeiro as classes nativas do JRE (APIs);

 Depois carrega extensões do JRE: JARs em $JAVA_HOME/jre/lib/ext e classes


em $JAVA_HOME/jre/lib/classes;

 Carrega classes do sistema local (a ordem dos caminhos no CLASSPATH


define a precedência);

 Por último, carrega possíveis classes remotas.

 Versões do java

 Java 1.0 e 1.1 são as primeiras versões do Java, mas já traziam bibliotecas
importantes como o JDBC e o java.io;

 Java 1.2 trouxe grande aumento no tamanho da API, e foi nesse momento
em que trocaram a nomenclatura de Java para Java2, com o objectivo de
diminuir a confusão que havia entre Java e Javascript (uma outra linguagem);

 Java 1.3 e 1.4 e o Java 1.5, esta última passou a chamar-se Java 5, tanto por
uma questão de marketing, como também devido à mudanças significativas
na linguagem;

28
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

 A última versão do Java disponível actualmente é a 8.

 Bytecode

É o código de máquina que é executado em qualquer máquina através da Máquina Virtual Java
(JVM).

O texto contendo código escrito em linguagem Java é traduzido em bytecode através do


processo de compilação e é armazenado em um arquivo *.class chamado de Classe Java;

F4 D9 00 03 0A B2 FE FF FF 09 02 01 01 2E 2F 30 62 84 3D 29 3A C1

Figura: Bytecode Java (código de máquina virtual)

 Coletor de lixo
A memória alocada em Java não é liberada pelo programador, ou seja, objectos criados não são
destruídos pelo programador.

A criação de objectos em Java consiste em:

1. Alocar memória no heap para armazenar os dados do objecto;


2. Inicializar o objecto (via construtor);
3. Atribuir endereço de memória a uma variável (referência);
4. Mais de uma referência pode apontar para o mesmo objecto.

29
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

Quando um objecto não tem mais referências apontando para ele, seus dados não mais podem
ser usados, e a memória deve ser liberada;
O colector de lixo irá liberar a memória na primeira oportunidade.

Criação de um programa (Passo a Passo)


1. (Editar), O programa é criado em um editor e armazenado em disco em um arquivo com
extensão .java:

2. Compilar:

3. Carregar:

30
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

4. Verificar:

5. Executar:

Como compilar?

31
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

Para compilar é necessário usar o java compiler (linha de comando):


1. javac NomeDaClasse.java
2. javac -d .. /destino Um.java Dois.java
3. javac -d .. /destino *.java
4. javac -classpath c:\fontes -d ../destino *.java
Como executar?

Para executar é necessário usar o interpretador java (faz parte do JRE)*:

1. java NomeDaClasse;

2. java pacote.subpacote.NomeDaClasse;

3. java -classpath c:\classes;c:\bin;. pacote.Classe;

4. java -cp c:\classes;c:\bin;. pacote.Classe;

5. java -cp %CLASSPATH%;c:\mais pacote.Classe;

6. java -cp biblioteca.jar pacote.Classe;

7. java -jar executavel.jar.

Unidade 2.2: Introdução Prática

Nesta seção será apresentado o exemplo de uma aplicação simples em Java (Aplicação
HelloWorld), com o objectivo de mostrar:

 Como escrever uma aplicação Java;

 Como compilar uma aplicação Java;

 Como executar uma aplicação Java.

 Como escrever uma aplicação java

Aplicação HelloWorld

Esta mini-aplicação em Java imprime um texto na tela quando executada via linha de comando.

 Digite o texto a baixo em um editor de texto simples, no caso do windows pode recorrer-

32
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

se ao Notepad:

HelloWorld.java

Comentário de bloco

 Salve o ficheiro com a extensão .java no directório em que pretende guardar seus
ficheiros java, neste caso, o ficheiro encontra-se no directório “C:\isced\exemplos”:

 Selecione “Save” para salvar o ficheiro:

33
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

 Na imagem acima nota-se que ao salvar o ficheiro com a extensão .java, este é
reconhecido como um JAVA File, diferentemente do ficheiro acima ao qual não foi
especificada sua extensão.

COMO COMPILAR UMA APLICAÇÃO JAVA

 Para compilar e executar o código java, usaremos o cmd (prompt de comando do


Windows). Antes, é necessário efectuar pequenas alterações na variável do ambiente,
para tal, siga as instruções descritas neste link: http://pt.m.wikihow.com/Instalar-o-Kit-
de-Desenvolvimento-de-Software-Java-(JDK);

 O passo a seguir é abrir o cmd no modo do administrador e indicar o diretório do ficheiro


que se pretende compilar: neste caso, o ficheiro a compilar é o HelloWorld.java;

 A seguir, compile o ficheiro através do comando javac, sem se esquecer de especificar a


extensão .java, como mostra a imagem a baixo:

34
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

 O código foi compilado com sucesso e não foram encontrados erros. Caso tivessem sido
detectados erros, a linha a seguir estaria a descrever a natureza do erro. Neste caso, o
código foi compilado com sucesso e foi gerado um ficheiro .class (HelloWord.class) no
mesmo directório do ficheiro .java:

COMO EXECUTAR UMA APLICAÇÃO JAVA

E para executar basta digitar o comando “java HelloWord”, a baixo:

 Desta forma, podemos compilar qualquer aplicação java no nosso computador. É


importante lembrar que após compilar o código, basta executar para usar a aplicação,
não sendo necessário compilar novamente.

Exercícios de AUTO-AVALIAÇÃO (Com respostas):

1. O que é e pra que serve um algoritmo?

2. Diga o que é um pseudocódigo e pra que serve.

3. Complete as frases que se seguem com as palavras em falta:

a. O comando ______ do JDK executa um aplicativo Java;

b. O comando _________ compila um programa Java;

c. Um arquivo de programa Java deve terminar com a extensão de arquivo


_________;

d. Quando um programa Java é compilado, o arquivo produzido pelo compilador


termina com extensão de arquivo ________;

e. O arquivo produzido pelo compilador Java contém _______ que são executados

35
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

pela JVM.

4. O termo Java pode ser usado para referir-se a:

a. Uma ________________ orientada a objetos;

b. Uma coleção de___________ para desenvolvimento de aplicações


multiplataforma;

c. Um ________ presente em browsers, mainframes;

5. Cite e comente 5 características da linguagem Java.

6. Diga o que é e de que é composta a API Java.

7. Quantos e quais são os pacotes encontrados no pacote java?

8. Diga o nome das três partes da plataforma Java abordadas neste capítulo e em que versão
do Java deu-se a conhecer esta divisão.

Respostas:
1. Algoritmo é uma série de acções que obedecem certa ordem para resolver determinado
problema, ou seja, uma sequência lógica que leva a resolução de um problema. Como a sua
definição já diz, o algoritmo serve para indicar os passos a seguir para resolver um problema e a
ordem de execução desses.
2. Pseudocódigo é uma Linguagem informal, similar a língua quotidiana, conveniente e amigável ao
usuário, usada para desenvolver algoritmos.
3. As palavras em falta nas frases são:

a. java;

b. javac;

c. . java;

d. . class;

e. bytecodes.

4. Java pode ser usada para referir-se a:

a. linguagem de programação;

36
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

b. APIs (classes, componentes, frameworks);

c. ambiente de execução.

5. Algumas das características da Linguagem Java são:

a. Simples e robusta (minimiza bugs e aumenta produtividade);

b. Independente de plataforma, possui códigos fonte e objectos portáveis para


diversas arquiteturas e sistemas operacionais;

c. Suporte nativo a threads (+ simples, maior portabilidade);

d. Coleta de lixo (menos bugs, mais produtividade);

e. Código intermediário de máquina virtual interpretado.

6. API Java:

a. Conjunto de padrões de programação (classes e interfaces), que permite a


construção e utilização de aplicativos de maneira não transparente ao usuário;

b. As classes e interfaces que compõem a API do Java estão divididas em pacotes e


cada um destes agrupa um conjunto de classes e interfaces que possuem
propósitos comuns.

7. No pacote java estão disponíveis 13 pacotes, nomeadamente: applet, awt, beans, io, lang, math,
net, nio, rmi, security, sql, text e util.

8. As três partes da plataforma Java abordadas neste capítulo são: JSE, JEE e JME, que surgiram
com a versão 2 do Java.

Exercícios de AVALIAÇÃO:

1. Rotineiramente, usamos algoritmos para as mais diversas tarefas. Cite três algoritmos que
podemos encontrar no dia-a-dia.
2. Discorra sobre as formas de representação de algoritmos mais comuns, destacando suas
vantagens e desvantagens.
3. Que empresa foi responsável pela criação do Java e em que ano a linguagem foi lançada ao
mercado?

37
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

4. Qual era a finalidade da criação do Java?


5. Fale das três categorias principais dos pacotes da API Java e da sua composição.
6. Fale do JSE, JEE e JME.
7. Fale de SDK, JDK e JRE.
8. O que é Máquina Virtual Java ou Java Virtual Machine?
9. Quantas versões do Java existem e qual é a última (indique o ano de lançamento de cada
uma)?
10. O que é Bytecode?
11. Como funciona a coleta de lixo em Java?
12. Explique o funcionamento de um programa java, a partir da sua criação até sua execução.
13. Explique os passos a seguir para compilar um programa java pela linha de comando.
14. Indique três limitações do Java.
15. Que editores de texto podem ser usados para escrever códigos java? Fale das vantagens e
desvantagens de cada um.
16. Quais são os requisitos para compilar e correr uma aplicação java na minha máquina?
17. Com base no programa HelloWorld apresentado, escreva um programa em Java que
imprima o seu nome.

TEMA III: TIPOS DE DADOS

Objectivos:
Aprender a trabalhar com os seguintes recursos do java:

 Tipos primitivos;

 Operadores;

 Declaração e atribuição de valores;

 Casting;

 Caracteres especiais e palavras reservadas;

 Comentários e Delimitadores em Java.

38
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

Unidade 3.1: Tipos primitivos

Tipos de dados primitivos são aqueles que já vem por definição na própria linguagem, isto é, não
foram criados pelo programador. A cada variável em JAVA está associada a um tipo de dados. O
tipo de dados define quais os valores que a variável pode conter. Se, por exemplo, dissermos
que uma variável é do tipo Inteiro, não poderemos lá colocar um valor booleano ou um
Caracter.

Existem 8 tipos de dados primitivos em java divididos como mostra a figura a baixo:

Lógicos:

O tipo boolean pode representar dois estados:

 Verdadeiro (TRUE);
 Falso (FALSE).

Inteiro:

Em java, os inteiros podem ser representados de 5 formas:

 Decimal;
 Octal;
 Hexadecimal;
 ASCII;
 Unicode.

Exemplo:

 // valor 2 em decimal;

39
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

 // 0 indica que ele está representado em octal;


 0xBACC // 0x indica que ele está representado em hexadecimal;
 'A' // representação ASCII;
 \u0061' // representação Unicode.

Inteiro Longo

Por padrão os inteiros são representados por int. Os tipos de dados inteiros assumem valores
de acordo com as faixas da figura a baixo:

Número Fracionário

O tipo ponto-flutuante possui o valor double como padrão. Os números flutuantes possuem
um ponto decimal ou um dos seguintes caracteres:

 E ou e // expoente;

 F ou f // float;

 D ou d // double;

Exemplos:

 3.14 // tipo double;

 6.02E23 // double com expoente;

 2.718F // float; 1

 23.4E+306D // double

40
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

A baixo a tabela mostra os tipos e faixa de valores dos números fraccionários:

Unidade 3.2: Operadores

Operadores aritméticos:

Operadores de Incremento e Decremento:

41
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

Operadores Relacionais:

Operadores Lógicos

Operadores lógicos avaliam um ou mais operandos lógicos que geram um único valor final true
ou false como resultado da expressão. A figura abaixo dá a entender como eles funcionam:

Operador Condicional (?:)

O operador condicional é também chamado de operador ternário. Tem 3 argumentos que juntos
formam uma única expressão condicional. A estrutura de uma expressão utilizando um operador
condicional é a seguinte: exp1?exp2:exp3.

Precedência de Operadores

Serve para indicar a ordem na qual o compilador interpretará os diferentes tipos de operadores,
para que ele sempre tenha como saída um resultado coerente e não ambíguo:

42
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

Declaração e atribuição de valores

Nome da variável:

 Deve ser iniciado por uma letra, _ ou $;

 Seguido de letras, números, _ ou $;

 Podem ter qualquer tamanho;

 Não podem ser igual a uma palavra reservada.

Sintaxe: tipo_de_dado nome_variável;

Java é case sensitive.

Ex:

 int idade; //é válido

 int _idade // é válido

 int $idade // é valido

 int 1 // é inválido

 Na linguagem de programação Java, as variáveis devem ser declaradas para que possam
ser utilizadas;

 A declaração de uma variável envolve definir um nome único (identificador) dentro de um

43
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

escopo e um tipo de valor, conforme os tipos de dados usados em java;

 Opcionalmente, pode atribuir-lhe um valor inicial;

 Pode-se declarar várias variáveis de mesmo tipo na mesma linha, separando com vírgula.
Ex: int idade, _idade; // é válido

 As variáveis são acessadas pelos nomes e armazenam valores compatíveis com o seu tipo;

 Em Java, toda variável tem um tipo que não pode ser mudado, uma vez declarado.
Exemplo: int idade //esta é uma variável inteira e após sua declaração não poderá deixar
de ser inteira.

 A variável pode ser usada atribuindo-à valores. Exemplo: idade = 10;

 O valor atribuído a variável pode ser usado por outras variáveis, pode ser lançado à tela,
etc. Ex: int soma, media; soma = 10; media = soma/2;

 As variáveis são acessadas pelos nomes e armazenam valores compatíveis com o seu tipo;

 A declaração de uma variável pode ser realizada em qualquer linha de um bloco;

 Não é necessário declarar todas as variáveis no começo do bloco como acontece em


algumas linguagens de programação;

 Não podemos declarar duas variáveis com o mesmo nome em um único bloco ou escopo
pois ocorrerá um erro de compilação;

 O escopo define onde a variável é visível (onde podemos ler/atribuir seu valor);

 O escopo de uma variável vai do “{“ anterior à sua declaração até o próximo “}”.

Inicialização de Variáveis

 Toda variável deve ser inicializada antes de ser utilizada pela primeira vez;

 A inicialização é realizada através do operador de atribuição


= Esse operador guarda um valor em uma variável;

 O exemplo anterior serve de exemplo pra este ponto.

Notas:

44
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

 Para as variáveis dos tipos primitivos do Java, o valor que elas guardam é o real
conteúdo da variável. Ao utilizar o valor de atribuição =, o valor será copiado;

 Os tipos primitivos do Java são armazenados na pilha e o Java não é OO pura por
causa deles;

 O escopo da variável é o nome dado ao trecho de código em que aquela variável


existe e onde é possível acessá-la.

Atribuição de valores

Quando realizamos uma atribuição: x = y:

 Java faz a cópia do valor da variável da direita para a variável da esquerda para tipos
primitivos, isso significa que alterações em x não implicam alterações em y;

· Ex:

 Para objectos, como o que é copiado, é a referência para o mesmo objecto, alterações no
objecto que x referencia alteram o objecto que y referencia, pois é o mesmo objecto.

Ex: public class Exemplo {

public static void main(String[] args) {

int x, y;

45
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

x = 10;

y = x;
y = 20;
System.out.println("Valor de x:" + x);

System.out.println("Valor de y:" + y);


}
}
Resultado:

Strings em Java

Java não possui tipo primitivo para cadeia de caracteres, mas existe a classe String. Esta classe
tem tratamento especial:

 Construção facilitada usando literais (""). Operador de concatenação;

 Conversão automática de tipos primitivos e objectos para String;

 Não podemos mudar o valor de um caractere da string. Podemos somente criar outra
string;

Casting

Alguns valores são incompatíveis ao tentar fazer uma atribuição directa.

Enquanto um número real costuma ser representado em uma variável do tipo double, tentar
atribuir ele a uma variável int não funciona porque é um código que diz: "i deve valer d”, mas
não se sabe se d realmente é um número inteiro ou não.

Exemplo: double d = 3.1415;

int i = d; // não compila

46
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

O mais interessante, é que nem mesmo o seguinte código compila: double d = 5;

int i = d; // não compila;

O exemplo: int i = 5;

double d2 = i; //compila sem problemas, já que um double pode guardar um número com ou
sem ponto flutuante.

Às vezes, precisamos que um número quebrado seja arredondado e armazenado num número
inteiro. Para fazer isso sem que haja o erro de compilação, é preciso ordenar que o número
quebrado seja moldado (casted), como um número inteiro. Esse processo recebe o nome de
casting:

 double d3 = 3.14; int i = (int) d3;

 O casting foi feito para moldar a variável d3 como um int;

 O valor de i agora é 3;

 O mesmo ocorre entre valores int e long: long x = 10000;

int i = x; // não compila, pois pode estar perdendo informação. E, se quisermos realmente
fazer isso, fazemos o casting: long x = 10000; int i = (int) x;

 Precisamos do casting porque o Java faz as contas e vai armazenando sempre no maior
tipo que apareceu durante as operações, no caso o double;

 No mínimo, o Java armazena o resultado em um int, na hora de fazer as contas;

 Casting com variáveis do tipo char pode ocorrer. O único tipo primitivo que não pode
ser atribuído a nenhum outro tipo é o boolean.

Castings possíveis

Na tabela a baixo estão relacionados todos os casts possíveis na linguagem Java, mostrando a
conversão de um valor para outro. A indicação Impl. quer dizer que aquele cast é implícito e
automático, ou seja, não precisamos indicar o cast explicitamente (lembrando que o tipo
booleano não pode ser convertido para nenhum outro tipo):

47
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

Ex: public class Exemplo {

public static void main(String[] args) {


int x;
double y;
x = 20;
y = x;
System.out.println("Valor de x:"
+ x);
System.out.println("Valor de y:" + y);
} }

Unidade 3.3: Caracteres especiais e palavras reservadas

PALAVRAS RESERVADAS

Modificadores de acesso:
 private: acesso apenas dentro da classe;
 protected: acesso por classes no mesmo pacote e subclasses;
 public: acesso de qualquer classe.
Modificadores de classes, variáveis ou métodos:
 abstract: classe que não pode ser instanciada ou método que precisa ser

48
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

implementado por uma subclasse não abstracta;


 class: especifica uma classe;
 extends: indica a superclasse que a subclasse está estendendo;
 final: impossibilita que uma classe seja estendida, que um método seja sobrescrito ou
que uma variável seja reinicializada;
 implements: indica as interfaces que uma classe irá implementar;
 interface: especifica uma interface;
 native: indica que um método está escrito em uma linguagem dependente de
plataforma, como o C;
 new: instancia um novo objecto, chamando seu construtor;
 static: faz um método ou variável pertencer à classe ao invés de às instâncias;
 strictfp: usado em frente a um método ou classe para indicar que os números de ponto
flutuante seguirão as regras de ponto flutuante em todas as expressões;
 synchronized: indica que um método só pode ser acessado por uma thread de cada
vez;
 transient: impede a serialização de campos;
 volatile: indica que uma variável pode ser alterada durante o uso de threads;
 Controle de fluxo dentro de um bloco de código:
 break: sai do bloco de código em que ele está;
 case: executa um bloco de código dependendo do teste do switch;
 continue: pula a execução do código que viria após essa linha e vai para a próxima
passagem do loop;
 default: executa esse bloco de código caso nenhum dos teste de switch-case seja
verdadeiro;
 do: executa um bloco de código uma vez, e então realiza um teste em conjunto com o
while para determinar se o bloco deverá ser executado novamente;
 else: executa um bloco de código alternativo caso o teste if seja falso;
 for: usado para realizar um loop condicional de um bloco de código;
 if: usado para realizar um teste lógico de verdadeiro o falso;
 instanceof: determina se um objeto é uma instância de determinada classe,

49
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

superclasse ou interface;
 return: retorna de um método sem executar qualquer código que venha depois desta
linha (também pode retornar uma variável);
 switch: indica a variável a ser comparada nas expressões case;
 while: executa um bloco de código repetidamente enquanto a condição for verdadeira.
 Tratamento de erros
 assert: testa uma expressão condicional para verificar uma suposição do programador;
 catch: declara o bloco de código usado para tratar uma excepção;
 finally: bloco de código, após um try-catch, que é executado independentemente do
fluxo de programa seguido ao lidar com uma excepção;
 throw: usado para passar uma excepção para o método que o chamou;
 throws: indica que um método pode passar uma excepção para o método que o
chamou;
 try: bloco de código que tentará ser executado, mas que pode causar uma excepção.
 Controle de pacotes
 import: importa pacotes ou classes para dentro do código;
 package: especifica a que pacote todas as classes de um arquivo pertencem;
 Primitivos
 boolean: um valor indicando verdadeiro ou falso;
 byte: um inteiro de 8 bits (signed);
 char: um caracter unicode (16-bit unsigned);
 double: um número de ponto flutuante de 64 bits (signed);
 float: um número de ponto flutuante de 32 bits (signed);
 int: um inteiro de 32 bits (signed);
 long: um inteiro de 64 bits (signed);
 short: um inteiro de 32 bits (signed).
 Variáveis de referência
 super: refere-se a superclasse imediata;
 this: refere-se a instância actual do objecto;
 Retorno de um método

50
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

 void: indica que o método não tem retorno.


 Palavras reservadas não utilizadas
 const: Não utilize para declarar constantes; use public static final;
 goto: não implementada na linguagem Java por ser considerada prejudicial;

Literais reservados

De acordo com a Java Language Specification, null, true e false são tecnicamente chamados de
valores literais, e não keywords. Se tentar criar algum identificador com estes valores, terá um
erro de compilação.

Comentários e delimitadores em Java


 Ignorados pelo compilador;
 Usados pelo programador para melhorar a legibilidade do código. Existem três tipos:
1. Comentários de uma linha: // ...;
2. Comentários de múltiplas linhas: /* ... */;
3. Comentários JavaDoc: /** ... */ – utilizados pela ferramenta javadoc para criar uma
documentação HTML das classes, atributos e métodos. A ferramenta javadoc vem com
o JDK;
Caracteres especiais:

Exercícios de AUTO-AVALIAÇÃO (Com Respostas):

1. Quantos tipos primitivos existem em java e como estão divididos?

51
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

2. Quantos e quais estados representam os tipos lógicos?

3. Quais são os tipos de operador aritmétrico usados em Java?

4. O que significa “Java é case sensitive”, que implicações isso traria no nosso código? Dê
exemplo.
5. Como é feita a inicialização de variáveis em Java e como funciona?

6. Porquê o Java não é OO pura?

7. Crie um programa que receba quatro números inteiros, calcule e mostre a soma desses
números:

Respostas:
1. Existem 8 tipos de dados primitivos em java divididos em inteiro, lógico, inteiro longo e
fracionário.
2. Os tipos lógicos representam dois estados que são Verdadeiro (TRUE) e Falso (FALSE).
3. Os tipos de operador aritmétrico usados em Java são o *, que representa multiplicação, /
divisão, + adição, – subtracção e % módulo ou resto da divisão.
Exemplo: a = 2 + b;
4. “Java é case sensitive” significa que, a linguagem java faz a distinção entre caracteres
maiúsculos e minúsculos. Ou seja, em Java, o “A” maiúsculo é diferente do “a” minúsculo.
Devemos prestar atenção nas variáveis declaradas no nosso código, e usar os mesmos tipos
de caracteres sempre que quisermos usá-la para evitar erros.
5. A inicialização de variáveis em java é feita através do operador de atribuição =, que dá um
valor inial à variável e permite que esta seja usada.
6. O Java não é OO pura por possuir tipos primitivos, estes guardam o vaor real da variável e são
armazenados na pilha.
7. Programa que possui quatro números inteiros, calcula e mostra a soma desses números:

public class Exercicio7 {


public static void main (String[] args)
{ int n1, n2, n3, n4, soma;
n1 = 2; n2 = 4;
n3 = 6; n4 = 8;

52
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

soma = n1 + n2 + n3 + n4;
System.out.println"\n \t"+ soma + "\n");
}}
Resultado:

Exercícios de AVALIAÇÃO

1. De que formas podem ser representados os dados inteiros?


2. Quantos e quais tipos de operadores foram abordados?
3. Diga pra que serve e como funciona a precedência de operadores.
4. Diga o que é necessário para usar uma variável.
5. Quais dos identificadores abaixo podem ser usados como nomes de classes, atributos,
métodos e variáveis em Java? Quais não podem, e por quê?
A. four
B. for
C. from
D. 4
E. FOR
6. Quais dos identificadores abaixo podem ser usados como nomes de classes, atributos,
métodos e variáveis em Java? Quais não podem, e por quê?

A. dia&noite

B. diaENoite

C. dia & noite

D. dia E noite

E. dia_e_noite

53
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

7. Quais dos identificadores abaixo podem ser usados como nomes de classes, atributos,
métodos e variáveis em Java? Quais não podem, e por quê?
A. contador
B. 1contador
C. contador de linhas
D. Contador
E. count
8. De acordo com os conhecimentos já adquiridos, escolha o tipo de dado ou classe mais
adequada para representar:
A. O número de municípios de uma Província de Moçambique.
B. O nome de uma Capital Provincial de Moçambique.
C. A população de uma Região de Moçambique.
D. A área de Moçambique em quilómetros quadrados.
E. A população total do mundo.
F. O nome de uma rua em um endereço de Moçambique.
9. Considerando as tabelas apresentadas, escolha o tipo de dado ou classe mais adequada para
representar:
A. A altura de uma pessoa em metros.
B. O peso de uma pessoa em quilos.
C. A temperatura corporal de uma pessoa.
D. O sexo de uma pessoa.
E.A altura de uma pessoa em milímetros.
10. Responda verdadeiro ou falso para cada uma das afirmações abaixo, explicando ou
justificando a sua resposta.
A. Um valor do tipo boolean pode receber o valor numérico zero.
B. Um valor do tipo float pode armazenar valores maiores do que os que
podem ser armazenados por um valor do tipo long.
C. Podemos ter caracteres cujos valores sejam negativos.
D. O número de bytes ocupados por uma variável do tipo float depende do
computador e do sistema operacional sendo usado.
E. O tipo char pode ser usado para representar pares de caracteres, uma vez

54
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

que variáveis desse tipo ocupam dois bytes na memória.


F. Os tipos de dados double e long não são equivalentes, apesar de variáveis
desses tipos ocuparem o mesmo espaço na memória.
11. Identifique e explique o (s) erro (s) na classe abaixo e comente.

class Registro De Eleitor


{
/**
* Declaração dos atributos desta classe
*/
int títuloDeEleitor; // número do título do eleitor
String nome; // nome do eleitor
short zonaEleitoral; // número da zona eleitoral
} // fim da classe
12. Que elemento define onde a variável é visível, onde podemos ler/atribuir seu valor? Como é
delimitado?
13. Escreva um programa em Java que tenha uma variável nome cujo valor é seu nome e imprima
o valor da variável.
14. Como funciona a atribuição de valores em java? Dê um exemplo e comente detalhadamente.
15. O que é uma String em Java?
16. Quantos castings implícitos são possíveis em Java? Dê dois exemplos.
17. Em quantos grupos estão dividadas as palavras reservadas em java? Cite dois e tiga pra que
servem na sua generalidade.
18. Para que servem os comentários em Java e como são inseridos no código?
19. Na empresa onde trabalhamos, há tabelas com o quanto foi gasto em cada mês. Para fechar
o balanço do primeiro trimestre, precisamos somar o gasto total. Sabendo que, em Janeiro,
foram gastos 15 000,00 Meticais, em Fevereiro, 23 000,00 Meticais e em Março, 17 000,00
Meticais. Faça um programa que calcule e imprima o gasto total no trimestre. Siga esses
passos:

A. Crie uma classe chamada BalancoTrimestral com um bloco main;

55
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

B. Dentro do main, declare uma variável inteira chamada gastosJaneiro e


inicialize-a com 15000;

C. Crie também as variáveis gastosFevereiro e gastosMarco, inicializando-as


com 23000 e 17000, respectivamente, utilize uma linha para cada
declaração;

D. Crie uma variável chamada gastosTrimestre e inicialize-a com a soma das


outras 3 variáveis: int gastosTrimestre = gastosJaneiro + gastosFevereiro +
gastosMarco;

E. Imprima a variável gastosTrimestre.

20. Adicione código (sem alterar as linhas que já existem) na classe anterior para imprimir a
média mensal de gasto, criando uma variável mediaMensal com uma mensagem. Para isso,
concatene a String com o valor, usando "Valor da média mensal = "+ mediaMensal.

21. Escreva uma classe Loteria que tenha métodos estáticos para imprimir versões aproximadas
dos cartões da Mega-Sena e LotoMania (somente com os números, respeitando o número de
linhas e a distribuição dos números nas linhas).

22. Crie uma classe chamada Arvore. O programa deverá mostrar as seguintes linhas na saída
(Use e abuse dos caracteres especiais):

Eu acho que nunca verei.

Um poema tão adorável quanto uma árvore.

Uma árvore cuja boca faminta é pressionada.

Contra a Terra fluindo em seu seio docemente.

TEMA IV: ESTRUTURAS DE CONTROLO

Objectivos:

 Compreender o funcionamento das estruturas de controlo;

56
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

 Trabalhar com instruções de selecção Java;

 Trabalhar com instruções de repetição Java;

Unidade 4.1: Estruturas de Controlo

 Instruções em linguagem Java que permitem que blocos específicos de código sejam
escolhidos para serem executados, redireccionando determinadas partes do fluxo do
programa;

 Permitem especificar a próxima instrução a ser executada, independentemente da


sequência das instruções, através da transferência de controlo;

 Há que considerar três estruturas de controlo:

1. Estrutura de sequência;

2. Estrutura de selecção;

3. Estrutura de repetição.

Estrutura de sequência

 Em Java, as instruções são executadas na ordem em que são escritas, em sequência;

 Java permite criar n acções em uma estrutura de sequência;

Instruções de selecção em Java:

 If (instrução de selecção única);

 If else (instrução de selecção dupla);

 Switch (instrução de selecção múltipla).

If

Especifica que uma instrução ou bloco de instruções seja executado se, e somente se, uma
expressão lógica for verdadeira.

Exemplo:

57
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

 Possui a seguinte forma:

if (expressão_lógica) instrução;

ou:

if (expressão_lógica) { instrução1; instrução2 ... }

Exemplo:

int nota = 14;


if (nota > 10) {
System.out.println("Parabéns!");
System.out.println("Foi aprovado!");
}
If else

Instrução usada quando queremos executar determinado conjunto de instruções se a condição


for verdadeira e outro conjunto se a condição for falsa;

 Possui a seguinte forma:

if(expressão_lógica) instrução_caso_verdadeiro;
else instrução_caso_falso;

ou:

if(expressão_lógica) {instrução_caso_verdadeiro1;

58
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

instrução_caso_verdadeiro2;
...}

else

{instrução_caso_falso1;
instrução_caso_falso2;
...}

Exemplo:

int idade = 28;


if (idade > 18) {
System.out.println("Cliente com Acesso!");
} else {
System.out.print("Desculpe! ");
System.out.println("Nao tem Acesso");
}

Declaração if-else-if:

A declaração else pode conter outra estrutura if-else. Este forma aninhada de estruturas,
permite ter decisões lógicas muito mais complexas.

 Possui a seguinte forma:

if (expressão_lógica1)

instrução1;
else if(expressão_lógica2)

instrução2;
else
instrução3;

 Pode-se ter várias estruturas else-if depois de uma declaração if;

 A estrutura else é opcional e pode se omitir;

59
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

 No código acima:

Se a expressão_lógica1 é verdadeira, o programa executa a instrução1


e salta as outras instruções;

Caso contrário, se a expressão_lógica1 é falsa, o fluxo de controlo


segue para a análise da expressão_lógica2;

Se esta for verdadeira, o programa executa a instrução2 e salta a


instrução3;

Caso contrário, se a expressão_lógica2 é falsa, então a instrução3 é


executada.

Exemplo:

public class TestedeAbilidade {


public static void main( String[] args ) {
double nota = 19;
if (nota >= 16) {
System.out.println("Excelente!");
} else if((nota < 19) && (nota >= 14)) {
System.out.println("Bom!");
} else if((nota < 14) && (nota >= 12)) {
System.out.println("Melhore!");
} else {
System.out.println("Mau");
}}}
Switch
Permite que uma única variável inteira tenha múltiplas possibilidades de finalização, esta
variável deve ser do tipo byte, short, char ou int;

 Possui a seguinte forma:

switch(variável_inteira) {

case valor1: instrução1;

60
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

instrução2; // bloco 1

break;

case valor2: instrução1;

instrução2; // bloco 2 break;

default: instrução1;

instrução2; // bloco n

break;}

 Quando a declaração switch é encontrada:

 O fluxo de controle avalia inicialmente a variável_inteira e segue para o case


que possui o valor igual ao da variável;

 O programa executa todas instruções a partir deste ponto, mesmo as do


próximo case, até encontrar uma instrução break, que interromperá a
execução do switch;

 Se nenhum dos valores case for satisfeito, o bloco default será executado.
Este é um bloco opcional;

 O bloco default não é obrigatório na declaração switch.

Funcionamento do switch:

61
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

Exemplo:

public class Poligono {


public static void main(String[] args) {
int nlados = 4;
switch(nlados) {
case 3:
System.out.println("Triangulo");
break;
case 4:
System.out.println("Quadrado ou Rectangulo");
break;
case 5:
System.out.println("Pentagono");
break;
default:
System.out.println("Poligonos nao reconhecidos");
}}}

Instruções de repetição Java (loop):

Permitem que programas executem instruções repetidamente, desde que obedeçam uma
condição, ou seja, executam instruções desde que a condição retorne um valor TRUE;

 While;

 Do while;

 For.

While
Executa repetidas vezes um bloco de instruções enquanto uma determinada condição lógica for
verdadeira;

62
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

 Possui a seguinte forma:

while (expressão_lógica)

{ instrução1;

instrução2;
...
}

 Funcionamento do while:

Exemplo:

int idade = 4;
while (idade > 0){
System.out.print(idade);
i--;
}
Do While
É similar ao while, as instruções dentro do laço do-while serão executadas pelo menos uma vez;

 Possui a seguinte forma:

do { instrução1;

instrução2;

63
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

...

} while (expressão_lógica);

 Funcionamento do dowhile

Exemplo:

int x = 0;
do {
System.out.println(x);
x++;
} while (x<10);
Este exemplo terá 0123456789 escrito na tela.
For

Permite a execução do mesmo código uma quantidade determinada de vezes;

 Possui a seguinte forma:

for(d_i;exp_lógic; salto)

{ instrução1;

instrução2;
...
}

64
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

onde:

d_i -> inicialização de uma variável para o laço;

exp_lógic -> compara a variável do laço com um valor


limite;

salto -> actualiza a variável do laço.

 Funcionamento do for:

Exemplo:

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


System.out.print(i);
}
Break

Possui duas formas: unlabeled (não identificada - vimos esta forma com a declaração switch) e
labeled (identificada);

 A forma unlabeled de uma declaração break encerra a execução de


um switch e o fluxo de controlo é transferido imediatamente para o
final deste:

65
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

 Podemos também utilizar a forma para terminar declarações for,


while ou do-while.

 A forma labeled de uma declaração break encerra o processamento


de um laço que é identificado por um label especificado na
declaração break;

 Um label, em linguagem Java, é definido colocando-se um nome


seguido de dois-pontos (teste: ).

Exemplo 1 (unlabeled):

String nomes[] = {"Bia", "Bianca", "Lyncen", "Bela",


"Nicolau", "Yzan", "Gui", "Heitor"};
String buscanome = "Yzan";
boolean nomeencontrado = false;
for (int i=0; i < nomes.length; i++) {
if (nomes[i].equals(buscanome)) {
nomeencontrado = true;
break;
}
}
if (nomeencontrado) {
System.out.println(buscanome + " encontrado!");
} else {
System.out.println(buscanome + " nao encontrado.");
}

Exemplo 2 (labeled):

int[][] numeros = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};


int buscarnum = 5;
boolean numencontrado = false;
searchLabel: for (int i=0; i<numeros.length; i++) {
for (int j=0; j<numeros[i].length; j++) {

66
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

if (buscarnum == numeros[i][j]) {
numencontrado = true;
break searchLabel;
}
} // final do laço j
} // final do laço i
if (numencontrado) {
System.out.println(buscarnum + " encontrado!");
} else {
System.out.println(buscarnum + " nao encontrado!");
}
Continue

Possui duas formas: unlabeled e labeled:

 Podemos também utilizar para saltar a repetição actual de


declarações for, while ou do-while.

 A forma unlabeled salta as instruções restantes de um laço e avalia


novamente a expressão lógica que o controla;

 A forma labeled da declaração continue interrompe a repetição


actual de um laço e salta para a repetição exterior marcada com o
label indicado.

Exemplo 1 (unlabeled):

String nomes[] = {"Neca", "Berta", "Lila", "Zinha"};


int count = 0;
for (int i=0; i < nomes.length; i++) {
if (!nomes[i].equals("Berta")) {
continue; // retorna para a próxima condição
}
count++;
}

67
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

System.out.println(count + " Berta esta na lista");

Exemplo 2 (labaled):

outerLoop: for (int i=0; i<5; i++) {


for (int j=0; j<5; j++) {
System.out.println(Dentro do For (j) loop"); // mensagem1
if (j == 2)
continue outerLoop;
}
System.out.println("Dentro do For(i) loop"); // mensagem2
}
Return

Utilizada para sair de um método:

 O fluxo de controlo retorna para a declara-


ção que segue a chamada do método original;

 A declaração de retorno possui dois modos: o que retorna um valor


e o que não retorna nada.

 Para retornar um valor, escreva o valor (ou uma expressão que


calcula este valor) depois da palavra-chave return:

 Os dados são processados e o valor é devolvido de acordo com o


tipo de dado do método;

 Quando um método não tem valor de retorno, deve ser declarado


como void.

Exemplos:

return "Hello";
return ++count;
return;

68
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

Exercícios de AUTO-AVALIAÇÃO (com respostas)

1. Quantas Estruturas de Controlo existem em Java? Quais são?

2. Para que servem as Estruturas de Controlo?

3. Por que um bloco while iniciado por while (true) pode ser útil, enquanto um bloco iniciado
por while (false) certamente será inútil? Explique.

4. Crie um programa que recebe dois números inteiros e compara-os de modo a determinar se
são iguais, diferentes, se o primeiro é maior ou menor que o segundo, e imprima a respectiva
mensagem na tela. Utilize instruções if para estabelecer a condição, bem como os operadores
aprendidos, e importe a classe Scanner do pacote java útil para usá-la na entrada de dados.

Resolução:

1. Em Java existem três tipos de Estruturas de Controlo. São elas a Estrutura de sequência,
Estrutura de selecção e Estrutura de repetição

2. As Estruturas de Controlo servem para redireccionar determinadas partes do fluxo do


programa, especificar a próxima instrução a ser executada, garantir o cumprimento de certas
regras no nosso programa, dentre outras funções.
3. Um bloco while iniciado por while (true) pode ser útil, enquanto um bloco iniciado por while
(false) certamente será inútil porque a intrução while permite que sejam executados os
comandos em seu escopo se e somente se for true, se for false o bloco será ignorado, daí a
sua inutilidade, pois será executada a instrução após o bloco.
4. Classe para comparação de dois números inteiros:

public class Comparacao


{
//metodo principal, inicia a execucao do programa
public static void main(String[] args)
{
//cria Scanner para obter entrada da janela de comando
Scanner input = new Scanner(System.in);

69
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

int numero1;
int numero2;
System.out.print("Insira o primeiro numero inteiro:");
numero1 = input.nextInt();
//le o primeiro numero fornecido pelo usuario

System.out.print("Insira o segundo numero inteiro: ");


numero2 = input.nextInt();
//le o segundo numero fornecido pelo usuario
if(numero1 == numero2)
System.out.printf("\n Os numeros %d e %d sao iguais\n", numero1,
numero2);
if(numero1 != numero2)
System.out.printf("\n Os numeros %d e %d sao diferentes \n", numero1,
numero2);

if(numero1 < numero2)


System.out.printf("\n %d e menor que %d \n", numero1, numero2);

if(numero1 > numero2)


System.out.printf("\n %d maior que %d \n", numero1, numero2);
} //fim do metodo main
} //fim da classe

Exercícios de AVALIAÇÃO

1. Identifique e explique o (s) erro (s) na classe abaixo e comente cada um deles.

class DoisValores
{
/**
* Declaração dos atributos desta classe

70
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

*/
int valor1,valor2;
/**
* Declaração dos métodos desta classe
*/
int maior()
{
if (valor1 > valor2)
return true;
else return false;
}
void menor()
{
if (valor1 < valor2)
return valor1;
else return valor2;
}
} // fim da classe
2. Identifique e explique o(s) erro(s) na classe abaixo e comente cada um deles.

class NumeroComplexo
{
/**
* Declaração dos atributos desta classe
*/
float real,imaginário;
/**
* Declaração dos métodos desta classe
*/
float valor()
{
return real,imaginário;

71
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

}
} // fim da classe
3. Escreva uma classe para representar uma lâmpada. Desenvolva métodos para ligar e para
desligar a lâmpada.

4. Faça um programa que, a partir das medidas dos lados de um rectângulo, lidos via teclado,
calcule a área e o perímetro deste rectângulo e exiba o resultado.

5. Obtenha do usuário três notas de exame e calcule a média dessas notas. Reproduza a média
dos três exames. Junto com a média, mostre também um:-) no resultado se a média for
maior ou igual a 14; caso contrário mostre um:- (.

6. Faça um programa que receba o ano de nascimento de uma pessoa e o ano actual, calcule e
mostre:
A. A idade actual da pessoa;
B. Que idade terá em 2050.

7. Solicite ao usuário para digitar um número, e mostre-o por extenso. Este número deverá
variar entre 1 e 10. Se o usuário introduzir um número que não está neste intervalo, mostre:
"número inválido". Faça duas versões deste programa:

A. Use uma declaração if-else-if para resolver este problema

B. Use uma declaração switch para resolver este problema

8. Crie um programa que mostre seu nome cem vezes. Faça três versões deste programa:

A. Use uma declaração while para resolver este problema

B. Use uma declaração do-while para resolver este problema

C. Use uma declaração for para resolver este problema

9. Receba como entrada um número e um expoente. Calcule este número elevado ao


expoente. Faça três versões deste programa:

A. Use uma declaração while para resolver este problema

B. Use uma declaração do-while para resolver este problema

72
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

C. Use uma declaração for para resolver este problema

10. Faça um programa que receba o número de horas trabalhadas e o valor do salário mínimo,
calcule e mostre o salário a receber seguindo estas regras:
A. A hora trabalhada vale a metade do salário mínimo.
B. O salário bruto equivale ao número de horas trabalhadas multiplicado pelo
valor da hora trabalhada.
C. O imposto equivale a 3% do salário bruto.
D. O salário a receber equivale ao salário bruto menos o imposto.
11. Escreva uma expressão lógica que resulte 1 se o ano for bissexto e 0 se não for. Um ano é
bissexto se for divisível por 4, mas não por 100. Um ano também é bissexto se for divisível
por 400.
12. Uma empresa contrata um encanador a MZN 20,00 por dia. Crie um programa que solicite o
número de dias trabalhados pelo encanador e imprima o valor líquido a ser pago, sabendo
que são descontados 8% de imposto de renda.
13. Escreva um programa em JAVA que efectue a leitura de um valor inteiro positivo ou negativo
e apresente o número lido como sendo um valor positivo, ou seja, o programa deverá
apresentar módulo de um número fornecido. Lembre-se de verificar se o número fornecido
é menor que zero, sendo multiplique-o por -1.
14. Faça um algoritmo que leia dois valores inteiros A e B se os valores forem iguais deverá se
somar os dois, caso contrário multiplique A por B ao final do cálculo atribuir o valor para
uma variável C.
15. Faça um algoritmo que leia 3 números inteiros e imprima o menor deles.

16. Dados três valores distintos, fazer um algoritmo que, após a leitura destes dados coloque-os
em ordem crescente.

17. Faça um algoritmo para somar os números pares <1000 e ao final imprimir o resultado.

18. Suponha que para cada aluno de sua sala exista uma ficha contendo o nome e a idade do
aluno. Supondo que exista 50 alunos, faça um algoritmo que determine quantos alunos tem
idade maior que 30.

19. Dado Nome e salário de um número indeterminado de funcionários, faça um programa que

73
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

imprima o Nome e o salário de funcionário que tem o maior salário, bem como o Nome e o
salário que possui o menor salário.

20. Escreva uma classe que encapsule uma carta de baralho, com um valor que represente o
valor da carta, de um (ás) a treze (rei), e outro valor correspondente ao naipe (1 = ouros, 2 =
paus, 3 = copas e 4 = espadas). Escreva nessa classe um método toString que retorne o nome
da carta por extenso, usando a instrução switch.

21. Escreva uma aplicação em Java que simule uma calculadora bem simples. Esse programa
deve ler dois valores de ponto flutuante do teclado e um caracter, correspondente a uma
das operações básicas (+, -, * ou /), calcular a operação e imprimir o resultado. A aplicação
deve considerar divisões por zero como sendo erros, e imprimir uma mensagem adequada.
A aplicação também deve considerar a possibilidade de o usuário entrar um valor diferente
de +, -, * ou / como operador, e imprimir uma mensagem de erro.

22. Escreva um programa em Java que calcule a série 1× 1 3 + 2× 1 4 + 3× 1 5 + 4× 1 6 + · · · , Com


N termos, sendo que o valor de N pode ser entrado via teclado.

O resultado da série, se calculada infinitamente, será igual a 3/4. Evidentemente a série não
poderá ser calculada infinitamente, devendo parar depois de N termos, sendo que o valor de
N deve ser fornecido como argumento ao método. Um recurso interessante é mostrar os
valores calculados nos diferentes passos da série para ver se ela está convergindo.

TEMA V: UMA INTRODUÇÃO ÀS ESTRUTURAS DE DADOS


COMO ARRAY E MATRIZES (ARRAYS BIDIMENSIONAIS)

Objectivos:

 Declarar e criar array;

 Acessar elementos de um array;

 Determinar o número de elementos de um array;

 Declarar e criar array multidimensional.

74
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

Unidade 5.1: Array (Vector)

 Quando desejamos armazenar uma grande quantidade de valores de um determinado


tipo, podemos utilizar arrays;

 Grupo de variáveis que contém valores do mesmo tipo;

 Referrência a um objecto array na memória;

 Armazena múltiplos itens de um mesmo tipo de dado em um bloco contínuo de


memória, dividindo-o em certa quantidade de posições;

 Seus elementos podem ser tipos primitivos ou referência;

 Estrutura de dados com itens do mesmo tipo relacionados;

 Seu tamanho permanece o mesmo depois de ser criado;

 Para referenciar um elemento particular em um array, especificamos o nome da


referência para o array e o número da posição do elemento no array (índice do
elemento);

 A figura a baixo apresenta a representação lógica de um array de nome g, com 5


elementos, sendo estes elementos valores inteiros aleatórios, valores armazenados no
array:

Onde: g -> representa o nome do array, e o índice ou subscrito que está entre
parênteses representa a posição do elemento;

 O array precisa ser declarados como qualquer variável;

75
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

 Ao declarar um array, defina o tipo de dados deste seguido por parênteses rectos [ ] e
pelo nome que o identifica:

int [] idades;

ou

int idades[];

 Depois da declaração, precisamos criar o array e especificar seu tamanho;

 Para acessar um elemento do array, ou parte de um array, utiliza-se um número inteiro


chamado de índice;

 Um índice é atribuído para cada membro de um array, permitindo ao programa e ao


programador acessar os valores individualmente quando necessário;

 Os números dos índices são sempre inteiros;

 Eles começam com zero e progridem sequencialmente por todas as posições até o fim
do array;

 Lembre-se que os elementos dentro do array possuem índice de 0 a tamanhoDoArray-1

 Depois da declaração, precisamos criar o array e especificar seu tamanho. Este processo
é chamado de construção (a palavra, em orientação a objectos, para a criação de
objectos). Para se construir um objecto, precisamos utilizar um construtor:

Exemplos:

// declaração
int idades[];
// construindo
idades = new int[100];

Ou:

// declarar e construir
int idades[] = new int[100];
Cadeias de caracteres:

76
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

 Algumas linguagens definem um tipo primitivo string para cadeias de caracteres mas a
linguagem Java não possui um tipo primitivo string;
 Em Java, strings são tipos compostos (objetos);

 A tabela a baixo mostra os valores de inicialização automática que são atribuídos aos
campos dos vectores de acordo com o tipo de dado declarado:

Exemplos:

// criando um array de valores lógicos em uma variável

// results. Este array contém 4 elementos que são


// inicializados com os valores {true, false, true, false}
boolean resultados[] ={ true, false, true, false };
// criando um array de 4 variáveis double inicializados
// com os valores {100, 90, 80, 75};
double []g = {100, 90, 80, 75};
// criando um array de Strings com identificador days e
// também já inicializado. Este array contém 7 elementos
String dias[] =
{"Segunda","Terca","Quarta","Quinta","Sexta","Sabado","Doming
o"};

O código abaixo utiliza uma declaração for para mostrar todos os elementos de um array:
public class ExemploArray {

77
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

public static void main(String[] args){


int[] idades = new int[10];
for (int i = 0; i < 10; i++) {
System.out.print(idades[i]);
}}}

Para se obter o número de elementos de um array, pode-se utilizar o atributo length. O


atributo length de um array retorna seu tamanho, ou seja, a quantidade de elementos. É
utilizado como no código abaixo: nomeArray.length
Exemplo:
public class ExemploArray {

public static void main (String[] args) {

int[] idade = new int[10];


for (int i = 0; i < idade.length; i++) {
System.out.print(idade[i]);
}}}
Arrays Bidimensionais (Matrizes)

 Arrays bidimensionais podem ser imaginados como uma tabela (matriz), com linhas e
colunas;

 São implementados como arrays dentro de arrays;

 São declarados ao atribuir um novo conjunto de parênteses rectos [ ] [ ] depois do nome


do array;

 Acessar um elemento em um array multidimensional é semelhante a acessar elementos


em um array de uma dimensão;

 Grupo de variáveis que contém valores do mesmo tipo;

 Referrência a um objecto array na memória;

Exemplo:

78
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

// array inteiro de 512 x 128 elementos


int [][] duasdimensoes = new int[512][128];
// array de caracteres de 8 x 16 x 24
char [][][] tresdimensoes = new char[8][16][24];
// array de String de 4 linhas x 2 colunas
String [][] animais = {{"terry", "castanho"},
{"Kristin", "branco"},
{"toby", "cinza"},
{"fido", "preto"}};

 Acessar um elemento em um array multidimensional é semelhante a acessar elementos


em um array de uma dimensão. Por exemplo, para acessar o primeiro elemento da
primeira linha do array animais, escreve-se:

System.out.print(animais[0][0]); //Isso mostrará a String


"terry" na saída padrão.

 Caso queira mostrar todos os elementos deste array, escreve-se:

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


for (int j = 0; j < animais[i].length; j++) {
System.out.print(animais[i][j] + " ");
}}

Exercícios de AUTO-AVALIAÇÃO (com respostas)

1. O que é um Array?

2. Como é armazenado o array na memória?

3. Como se pode acessar a informação contida em array?

4. O que é uma String em Java?

5. O que é uma Matriz em Java?

Respostas:

79
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

1. Array ou vector, é um grupo de dados do mesmo tipo que podem ser tipos primitivos ou
uma referência. É usado para armazenar grande quantidade de valores do mesmo tipo.

2. O array é armazenado em um bloco da memória, em posições contíguas.

3. A informação contida em um array pode ser acessada através do seu nome de referência e
do seu índice. Cada elemento em um array possui um índice que é único para cada
elemento.

4. Em Java, strings são tipos compostos, objectos da classe String, que armazenam cadeis de
caracteres.

5. Em Java, Matriz é um array bi ou multidimensional que permite visualizar dados em forma


de tabelas.

Exercícios de AVALIAÇÃO

1. Crie um array de Strings inicialize-o com os nomes dos sete dias da semana. Por exemplo:
String dias[] = {"Segunda", "Terca", "Quarta", "Quinta", "Sexta", "Sabado", "Domingo"}.

A. Usando uma declaração while, imprima todo o conteúdo do array. Faça o


mesmo para as declarações do-while e for.

2. Escreva uma aplicação em Java que declare e inicialize um vetor de booleanos (lendo-os do
teclado), e calcule quantos elementos são iguais a true.

3. Criar um vetor A com 5 elementos inteiros. Construir um vetor B de mesmo tipo e tamanho e
com os "mesmos" elementos do vetor A, ou seja, B [i] = A [i].

4. Criar um vetor A com 8 elementos inteiros. Construir um vetor B de mesmo tipo e tamanho e
com os elementos do vetor A multiplicados por 2, ou seja: B [i] = A [i] * 2.

5. Criar um vetor A com 15 elementos inteiros. Construir um vetor B de mesmo tipo e


tamanho, sendo que cada elemento do vetor B deverá ser o quadrado do respectivo
elemento de A, ou seja: B [i] = A [i] * A [I].

6. Criar um vetor A com 15 elementos inteiros. Construir um vetor B de mesmo


tamanho, sendo que cada elemento do vetor B deverá ser a raiz quadrada do
respectivo elemento de A,

80
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

ou seja: B [i] = sqrt (A [i]).


7. Criar um vetor A com 10 elementos inteiros. Construir um vetor B de mesmo
tipo e tamanho, sendo que cada elemento do vetor B deverá ser o respectivo
elemento de A, multiplicado por sua posição (ou índice), ou seja: B [i] = A [i] * i.
8. Criar dois vetores A e B cada um com 10 elementos inteiros. Construir um vetor
C, onde cada elemento de C é a soma dos respectivos elementos em A e B, ou
seja:
C[i] = A[i] + B[i].
9. Criar dois vetores A e B cada um com 10 elementos inteiros. Construir um vetor C, onde
cada elemento de C é a subtração dos respectivos elementos em A e B, ou seja:
C[i] = A[i] – B[i].
10. Criar dois vetores A e B cada um com 10 elementos inteiros. Construir um vetor C, onde
cada elemento de C é a multiplicação dos respectivos elementos em A e B, ou seja: C [i] = A
[i] * B [i].
11. Escreva um programa que declare um array bidimensional chamado tabuada de 10 × 10
posições e preencha os elementos do array com os valores da tabuada da soma para aquele
elemento, de forma que, por exemplo, o elemento tabuada [7] [9] valha 16. Use o tipo de
dado mais adequado para este array.
12. Criar um vetor A com 10 elementos inteiros. Construir um vetor B de mesmo tipo e
tamanho, sendo que cada elemento do vetor B deverá ser o resto da divisão do respectivo
elemento de A por 2 (dois), ou seja: B [i]:= A [i] % 2.
13. Criar um vetor A com 10 elementos inteiros. Escrever um programa que calcule e escreva:
a) a soma de elementos armazenados neste vetor que são inferiores a 15; b) a quantidade
de elementos armazenados no vetor que são iguais a 15; e c) a média dos elementos
armazenados no vetor que são superiores a 15.
14. Ler um vetor A com 10 elementos e construir um vetor B de mesmo tipo e tamanho e com
os mesmos elementos de A, sendo que estes deverão estar invertidos, ou seja, o primeiro
elemento de A passa a ser o último de B, o segundo elemento de A passa a ser o penúltimo
de B e assim por diante.

15. Quais serão os valores retornados pelo método length quando aplicado às strings “cadeia

81
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

de caracteres”, “\n\n” e “”?

A. 20, 2 e zero, respectivamente.

B. 19, 2 e um, respectivamente.

C. 18, 2 e zero, respectivamente.

D. 19, 4 e null, respectivamente.

E. 18, 4 e zero, respectivamente.

16. Considerando a string palavra valendo “autodeterminação”, quais serão os resultados das
expressões palavra.substring(11), palavra.substring(6,13) e palavra.substring(4,9)?

A. “ação”, “ermina” e “eter”, respectivamente.

B. “inação”, “erminaç” e “eterm”, respectivamente.

C. “nação”, “termina” e “deter”, respectivamente.

D. “inação”, “erminaç” e “eterm”, respectivamente.

E. “nação”, “ermina” e “eter”, respectivamente.

F. “ação”, “termina” e “deter”, respectivamente.

17. Escreva uma classe em Java que represente o nome completo de uma pessoa, composto de
três strings (nome próprio, nome do meio e nome da família). Escreva nessa classe o
método rubrica que retorna somente as iniciais do nome completo em caracteres
minúsculos, e o método assinatura que retorna as iniciais dos nomes próprio e do meio
(com pontos) e o nome de família completo. Por exemplo, se o nome da pessoa
representado por essa classe for “Richard Langton Gregory”, o método rubrica deve
retornar ”rlg” e o método assinatura deve retornar ”R.L.Gregory”. Para facilitar, considere
armazenar os três nomes em strings separadas.

18. Escreva um método quantasVezes para a classe StringUtils que receba duas strings como
argumentos e retorne o número de vezes que a segunda string aparece na primeira. Por
exemplo, se a string “recrearem” e “re” forem passadas como argumentos, o método
deverá retornar 3.

82
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

19. Dado o seguinte array multidimensional, que contém entradas da agenda telefônica:

String entrada = {

{"Florencia", "735-1234","Matacuane"},

{"Joyce", "983-3333", "Macuti"},


{"Becca", "456-3322", "Baixa"}};

A. mostre-as conforme o formato abaixo:

Name : Florencia

Tel. # : 735-1234

Address: Matacuane

Name : Joyce

Tel. # : 983-3333

Address: Macuti

Name : Becca

Tel. # : 456-3322

Address: Baixa

TEMA VI: INTRODUÇÃO AO PARADIGMA DE


PROGRAMAÇÃO ORIENTADA A OBJECTOS (POO)

Objectivos:

 Explicar em que consiste a orientação a Objectos;

 Dar os conceitos de Classes, Objecto, Atributos e Métodos;

 Saber como:

 Declarar uma classe e usá-la para criar objectos;

 Declarar métodos em uma classe para implementar


os comportamentos da classe;

83
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

 Declarar variáveis de instância em uma classe para


implementar os atributos da classe;

 Chamar os métodos de um objecto para que


realizem suas tarefas;

 Compreender as diferenças entre os tipos por referência e


primitivos

 Criar programas simples em java aplicando a Orientação a


objectos.

A programação orientada a objectos baseia-se na ideia de modelar o software em termos


semelhantes à forma pela qual as pessoas descrevem objectos do mundo real:

 Explora o relacionamento entre as classes, em que objectos de certa classe têm as mesmas
características e permite que se criem novas classes derivadas desta, possuindo suas
características.
 Este paradigma de Programação, fornece uma maneira natural e intuitiva de visualizar a
construção do software;
 A Orientação a Objectos é uma maneira de programar que ajuda na organização e resolve
os problemas enfrentados na programação procedural. No paradigma procedural não
existe uma forma simples de criar conexão forte entre dados e funcionalidades, ao passo
que, na orientação a objectos, torna-se muito fácil ter essa conexão aplicando os recursos
da própria linguagem.
 A orientação a objectos é uma tecnologia fundamentada no modelo de objectos que
engloba princípios de abstracção, hierarquização, encapsulamento, classificação,
modularização, relacionamento, simultaneidade e persistência. Ao longo desta unidade
estes conceitos serão compreendidos através de conceitos e exemplos práticos.
 Considera os sistemas computacionais como uma colecção de objectos que interagem
entre si;
 Programas orientados a objectos são programas estruturados em módulos que agrupam
um estado e operam sobre ele;
 Refere-se ao conceito de objectos como elemento básico das

84
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

classes;
 Os objectos são caracterizados pelas suas propriedades (ou atributos) e seus
comportamentos.

Unidade 6.1: Objectos, Classes, Atributos e Métodos

Para melhor compreensão do funcionamento dos Objectos, Classes, Atributos e Métodos, é


importante saber em que consistem os tipos de dados compostos. Deve-se perceber como é
possível armazenar na memória de um computador a informação de um objecto e seu
comportamento em java sendo que nas unidades anteriores usava-se tipos primitivos e estes
por si só não seriam capazes de armazenar tal informação.

Tipos compostos:

 Algumas linguagens definem um tipo primitivo string para cadeias de caracteres, mas a
linguagem Java não possui um tipo primitivo string;
 Tipos primitivos armazenam somente informações muito simples.
 Por exemplo, se quisermos armazenar informações sobre alunos, temos o nome, idade,
disciplinas e turma, é necessário criar estruturas compostas por tipos primitivos e outras
estruturas.
Registros e classes
 Linguagens estruturadas usam o conceito de registro, agregado de dados de tipos
heterogéneos, que identifica seus elementos individuais por nome;
 Linguagens orientadas a objecto como Java usam o conceito de classes e objectos:
 Objectos são estruturas de dados compostas que contém dados e
funções (métodos);
 Objectos podem armazenar internamente dados de tipos primitivos
ou outros objectos;
 Objectos são instâncias de classes.
 Exceto os tipos primitivos já estudados, tudo em Java é um objecto,
inclusive vectores e strings.

Objecto

85
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

 Um objecto é uma entidade que incorpora uma abstracção relevante no contexto de uma
aplicação;
 Podem ser coisas abstractas (ex: uma reserva de passagem aérea, um pagamento) ou
concretas (ex: um documento, um produto);
 Objectos são entidades reais – executam algum papel no sistema;
 Possui três características principais:
 Estado (estrutura de dados);
 Comportamento (métodos);
 Identidade (cada objecto é único).
 No mundo do computador, um objecto é um componente de software cuja estrutura é
similar a um objecto no mundo real;

Cada objecto é composto por um conjunto de atributos (propriedades) que são as variáveis que
descrevem as características essenciais do objecto, e métodos (comportamentos) que
descrevem como o objecto se comporta;

Objecto Propriedades Comportamento


Pessoa • Raça; • Andar;
• Altura; • Falar;
• Sexo; • Dormir.
• Idade.
Carro • Fabricante; • Acelerar;
• Cor; • Virar;
• Matrícula. • Parar.
Classe

 Uma classe descreve um conjunto de objectos com as mesmas propriedades, o mesmo


comportamento, os mesmos relacionamentos com outros objectos e a mesma semântica;
 Classe é a estrutura fundamental na Programação Orientada a Objectos;
 Consiste em dois tipos de elementos que são chamados atributos (ou propriedades) e
métodos. Atributos especificam os tipos de dados definidos pela classe, enquanto que os
métodos especificam as operações.

86
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

 Classes são abstracções, capturam a estrutura e comportamento comum a um conjunto de


objectos;
 Um objecto é uma instância de uma classe.
 Parecido com o conceito de tipo, na tabela a baixo apresentamos uma tabela que
apresenta objectos da classe pessoa, seus atributos e métodos, comuns para os dois
objectos criados:

Objecto Pessoa Objecto Pessoa


Classe Pessoa B B
Raça: Negra Branca
Atributos Altura: 1.90 m 1.90m
do Objecto Sexo: Feminino Masculino
Andar
Métodos do Falar
Objecto Dormir

Instâncias de classes
 Objecto = Instância de classe;
 O Paradigma OO norteia o desenvolvimento por meio de classificação de objectos.
Modela-se classes, e não objectos;
 Para criar um objecto ou uma instância da classe em Java, utilizamos o operador new, que
como vimos em uma das unidades passadas, é uma palavra reservada para instanciar um
novo objecto, chamando seu construtor;
 O operador new aloca a memória para o objecto e retorna uma referência para essa
alocação. Ao criar um objecto, invoca-se, na realidade, o construtor da classe:
 O construtor é um método onde todas as inicializações do objecto
são declaradas e possui o mesmo nome da classe.

Atributos de Classe
 Além dos atributos de objecto, também é possível definir atributos de classe, que são
atributos que pertencem à classe como um todo;
 Estes possuem o mesmo valor para todos os objectos da classe, são também chamados

87
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

de atributos estáticos;
 Um exemplo de atributo da classe é o atributo contador, ao mudarmos o valor de
contador pra 2, todos os objectos da classe pessoa terão este valor em seu atributo
contador:

Objecto Pessoa Objecto Pessoa


Classe Pessoa B B
Raça: Negra Branca
Atributos Altura: 1.90 m 1.90m
do Objecto Sexo: Feminino Masculino
Atributos
da Classe Contador = 2
Andar
Métodos do Falar
Objecto Dormir

Unidade 6.2: Métodos

 Nos exercícios anteriores, temos apenas um método, o


método main(). Em Java, pode-se definir vários métodos e
chamá-los a partir de outros métodos;
 Um método é um trecho de código distinto que pode ser
chamado por qualquer outro método para realizar alguma
função específica;
 Características:
 Podem ou não retornar um valor;
 Podem aceitar ou não argumentos;
 Após o método encerrar sua execução, o
fluxo de controlo é retornado a quem o
chamou.
Prática:

88
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

 Antes de escrever sua classe, primeiro pense onde e como sua classe será usada. Pense
em um nome apropriado para a classe e liste todas as informações ou propriedades que
deseje que ela tenha. Liste também os métodos que serão usados para a classe, como
mostramos a baixo:
<modificador>* class <nome> {
<declaraçãoDoAtributo>*
<declaraçãoDoConstrutor>*
<declaraçãoDoMétodo>*}
Onde:
<modificador> é um modificador de acesso, que pode ser usado em
combinação com outros
<nome> nome da sua classe
<declaraçãoDoAtributo> atributos definidos para a classe
<declaraçãoDoConstrutor> método construtor
Exemplo:
public class Estudante {
// adicionaremos mais código aqui
}
 Para declarar um certo atributo para a nossa classe, escrevemos:
<modificador>* <tipo> <nome> [= <valorInicial>];
Onde:
Modificador - tipo de modificador do atributo
Tipo - tipo do atributo
nome - pode ser qualquer identificador válido valorInicial - valor
inicial para o atributo.

Exemplo:

public class Estudante {


private String nome;
private String endereco;
private int idade;

89
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

private double notamatematica;


private double notaingles;
private double notaportugues;
private static int estudanteCount;
}
 Para declararmos métodos, escrevemos:

<modificador>* <tipoRetorno>
<nome>(<argumento>*) {
<instruções>*
}

Onde:

<modificador> pode ser utilizado qualquer modificador de acesso

<tipoRetorno> pode ser qualquer tipo de dado (incluindo void)


<nome> pode ser qualquer identificador válido <argumento>
argumentos recebidos pelo método separados por vírgulas. São
definidos por: <tipoArgumento> <nomeArgumento>

Métodos assessores:
 São usados para ler valores de atributos de objeto ou de classe;
 O método assessor recebe o nome de get<NomeDoAtributo> e retorna um valor;

Exemplo: Um método que possa ler o Nome, Endereço, nota de Inglês,


nota de Matemática e nota de Portugês do estudante.

public class Estudante {


private String nome;
::
public String getNome() {
return nome;
}

90
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

}
Métodos Modificadores
 Para que outros objectos possam modificar os nossos dados, disponibilizamos métodos
que possam gravar ou modificar os valores dos atributos de objecto ou de classe;
 Este método é escrito como set<NomeDoAtributoDeObjeto>

Exemplo:

public class Estudante {


private String nome;
::
public void setNome(String temp) {
nome = temp;
}
}
Exemplo Completo:
public class Estudante {
private String nome;
private String endereco;
private int idade;
private double notamatematica;
private double notaingles;
private double notaportugues;
private static int estudanteCount;
/**
* Retorna o nome do estudante
*/
public String getNome(){
return nome;
}
/**
* Muda o nome do estudante

91
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

*/
public void setNome( String temp ){
nome = temp;
}
// outros métodos modificadores aqui ....
/**
* Calcula a média das classes de inglês, matemática
* e português
*/
public double getMedia(){
double resultado = 0;
resultado =
(notamatematica+notaingles+notaportugues)/3;
return resultado;
}
/**
* Retorna o número de ocorrências em Estudante
*/
public static int getestudanteCount(){
return estudanteCount;
}}
 Código de uma classe que utiliza a classe Estudante (Estudanteexe):

public class Estudanteexe {


public static void main( String[] args ){
// criar três objetos para Estudante
Estudante anaRegina = new Estudante();
Estudante belaRuth = new Estudante();
Estudante saraRui = new Estudante();
// enviar o nome dos estudantes
anaRegina.setNome("Ana Regina");
belaRuth.setNome("Bela Ruth");

92
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

saraRui.setNome("Sara Rui");
// mostrar o nome de anna
System.out.println(anaRegina.getNome());
//mostrar o número de estudantes
System.out.println("Count=" +
Estudante.getestudanteCount());
}}

Resultado:

This

 O objecto this é usado para acessar atributos de um objecto ou métodos de uma classe;
 Forma: this.<nomeDoAtributo>

Exemplo:

public void setIdade(int idade){


this.idade = idade;
}
Sem usar o this estaríamos simplesmente a associar o valor do argumento idade para ele
mesmo, mas usando o this, este método irá atribuir o valor do argumento idade para a atributo
de objecto idade do objecto Estudante.

Exercícios de AUTO-AVALIAÇÃO (Com Respostas)

1. Em que consiste o Paradigma de Programação Orientada a Objecto?

93
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

2. Dê o conceito:
A. Objecto;
B. Classe;
C. Atributo;
D. Método.
3. Onde são declarados os atributos da classe?
4. Fale de métodos assessores e modificadores.
5. Para que serve o “This” em programação Java?
Respostas
1. O Paradigma de Programação Orientada a Objecto baseia-se na ideia de modelar o software
em termos semelhantes à forma pela qual as pessoas descrevem objectos do mundo real.
Fornece uma maneira natural e intuitiva de visualizar a construção do software. É uma
tecnologia fundamentada no modelo de objectos que engloba princípios de abstração,
hierarquização, encapsulamento, classificação, modularização, relacionamento,
simultaniedade e persistência
2. Conceitos:
A. Objecto é uma entidade que incorpora uma abstração relevante no contexto
de uma aplicação, objectos são entidades reais que executam algum papel no
sistema.
B. Classe é a estrutura fundamental na Programação Orientada a Objetos, ela
descreve um conjunto de objectos com as mesmas propriedades, o mesmo
comportamento, os mesmos relacionamentos com outros objectos e a
mesma semântica.
C. Atributo é uma característica inerente à uma classe ou objecto.
D. Método é um trecho de código distinto que pode ser chamado por qualquer
outro método para realizar alguma função específica e este pode retornar ou
não um valor. Os métodos indicam o comportamento de uma certa classe ou
objecto.
3. Os atributos da classe são declarados dentro do escopo da classe, estes são represantados
por variáveis que podem ou não ser de tipos primitivos.
4. Métodos assessores são métodos usados para ler valores de atributos de objeto ou de

94
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

classe, este recebe o nome de get <NomeDoAtributo> e retorna um valor. Métodos


Modificadores são aqueles que gravam ou modificam os valores dos atributos de objeto ou
de classe, este é escrito como set <NomeDoAtributoDeObjeto>.
5. Em Java, o “This” é usado para acessar atributos de um objeto ou métodos de uma classe,
este faz referência à classe onde está inserido sem necessidade de instanciação desta classe
internamente.

Exercícios de AVALIAÇÃO

1. Crie uma classe que contenha um Registro de Agenda. Abaixo está descrita a informação
que um Registro de Agenda deve conter:
Atributos/ Propriedades Descrição
Nome Nome da pessoa
Endereço Endereço da pessoa
NúmerodeTelefone Número de telefone da pessoa
Email Endereço electrónico da pessoa

Crie os seguintes métodos:


A. Forneça todos os métodos assessores e modificadores necessários para todos
os atributos.
2. Crie uma classe Agenda que possa conter entradas de objectos tipo Registro de Agenda
(utilize a classe criada no exercício anterior). Devem ser oferecidos os seguintes métodos
para a agenda:
A. Adicionar registro
B. Excluir registro
C. Visualizar registros
D. Modificar um registro
3. Escreva a classe Contador que encapsule um valor usado para contagem de itens ou
eventos. Essa classe deve esconder o valor encapsulado de programadores-usuários,
fazendo com que o acesso ao valor seja feito somente através de métodos que devem
zerar, incrementar e imprimir o valor do contador.

95
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

4. Escreva, na classe Data, um método duplicaData que receba como argumento uma outra
instância da classe Data, e duplique os valores dos campos da instância passada como
argumento para os atributos encapsulados.
5. Uma das operações que podemos efetuar com datas é a comparação para ver se uma data
ocorre antes de outra. O algoritmo para comparação é muito simples, e seus passos estão
abaixo. Nesse algoritmo, consideramos que dia1, mês1 e ano1 são os dados da primeira
data, e que dia2, mês2 e ano2 são os dados da segunda data.
A. Se ano1 < ano2 a primeira data vem antes da segunda.
B. Se ano1 > ano2 a primeira data vem depois da segunda.
C. Se ano1 == ano2 e mês1 < mês2 a primeira data vem antes da segunda.
D. Se ano1 == ano2 e mês1 > mês2 a primeira data vem depois da segunda.
E. Se ano1 == ano2 e mês1 == mês2 e dia1 < dia2 a primeira data vem antes da
segunda.
F. Se ano1 == ano2 e mês1 == mês2 e dia1 > dia2 a primeira data vem depois da
segunda.
G. Se nenhum desses casos ocorrer, as datas são exatamente iguais. Escreva um
método vemAntes na classe Data que receba como argumento outra
instância da classe Data e implemente o algoritmo acima, retornando true se
a data encapsulada vier antes da passada como argumento e false caso
contrário. Se as datas forem exactamente iguais, o método deve retornar
true.
6. Explique com suas palavras por que uma classe abstrata não pode ser instanciada.
7. Explique com suas palavras por que uma interface não pode ter métodos estáticos.
8. Explique, com suas palavras, por que interfaces não podem ter construtores.
9. Explique com suas palavras por que não podemos ter construtores declarados com a
palavrachave abstract.
10. Por que campos em interfaces devem ser inicializados em sua declaração? Explique.
11. Identifique e explique o (s) erro (s) nas classes abaixo.
A. public interface Resetavel{
public void reseta();}

96
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

B. public interface Modificavel{


public void reseta(int origem);
public void modifica(int tamanho);}

C. public class Contador implements Resetavel, Modificavel {


int valor;
public void reseta() {
valor = 1;}
public void modifica(int tam){
valor = tam;}}

TEMA VII: NETBEANS IDE

Objectivos:

 Apresentar o Ambiente de Desenvolvimento NetBeans e


suas principais funcionalidades;

 Explicar como criar projectos, classes e outros elementos


para uma aplicação java;

 Mostrar como compilar, executar e salvar seus programas


java;

 Utilizar o NetBeans para criar projectos Java.

Unidade 7.1: NetBeans IDE

 É um Ambiente de Desenvolvimento Integrado que permite usufruir de ferramentas


para criar aplicativos profissionais de desktop, web e móveis multiplataformas;

 Ao compilar uma classe, se ela faz referência a outra que não foi compilada, esta última
é compilada se o código estiver disponível. Se já foi compilada, mas o arquivo fonte está
com data mais recente, ela é recompilada.

97
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

 O IDE abstrai todas estas preocupações cuida de todo o processo de compilação;

 O Netbeans auxilia a escrever, compilar, fazer debug e instalar aplicações.

 Esta IDE foi escrito em Java, e por isso é independente de plataforma. Funciona em
qualquer sistema operacional que suporte Máquina Virtual Java;

 Para além de Java, é possível trabalhar no NetBeans com outras linguagens como C,
C++, PHP, dentre outras;

 O site oficial do NetBeans é o https://netbeans.org, nele está disponível toda


informação sobre o IDE, a última versão do IDE para download, tutorial que explica seu
funcionamento, e muitas outras informações. Toda via, nesta unidade explicar-se-á
como instalar e usar algumas funcionalidades básicas.

Como instalar o NetBeans no Windows

 Passo 1: Através do Windows Explorer, localize a pasta do instalador do NetBeans;

 Passo 2: Para executar o instalador, dê um duplo-clique no ícone do instalador. O


assistente de instalação do NetBeans será mostrado;

 Passo 3: Pressione o botão Next> para iniciar o processo de instalação. A página do


contrato será mostrada;

 Caso concorde com os termos seleccione a opção I accept the terms


in the license agreement e pressione o botão Next> para continuar;

 Passo 4: O instalador solicitará a pasta em que deve ser instado o NetBeans. Se


desejar modifique a pasta sugerida pressionando o botão Browse, e ao término
pressione o botão Next>;

 Passo 5: Selecione uma JDK existente em seu computador. Pressione o botão Next>
para continuar;

 Passo 6: Em seguida, o instalador informará a localização e o espaço em disco que o


NetBeans irá ocupar depois de instalado no seu computador. Pressione o botão Next>
e aguarde o término da instalação. No momento que o NetBeans terminar de ser
instalado em seu computador. Pressione o botão Finish para encerrar o processo.

98
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

Apresentando o NetBeans

Ao clicar no ícone e abrir o NetBeans, são disponibilizadas várias informações sobre a IDE, as
boas vindas, links para os tutoriais, as linguagens suportadas, plugins, novidades, etc;

Nosso objectivo é trabalhar em java com a IDE, para tal, vamos começar criando um projecto
no qual vamos guardar todos os ficheiros Java que criaremos mais adiante:

Criar Projecto: Clique em File > New Project:

Ao criar um projecto, o Netbeans abre uma janela na qual o programador deve escolher a
categoria do projecto de acordo com a tecnologia e linguagem com a qual pretende trabalhar.
De seguida, clica Next para dar continuidade.

99
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

Na janela acima, o NetBeans dá-lhe a opção de escolher o nome do projecto e o local onde
pretende guardá-lo e mais a baixo, um checkbox que permite criar automaticamente uma
classe com o nome predefinido.

Ao criar um projecto em um directório do computador, a IDE gera automaticamente uma


pasta com o nome definido para o projecto. Dentro desta pasta serão gravados todos os
ficheiros inerentes ao projecto. E mais adiante veremos como criar pacotes e usá-los em
nosso projecto. Clique em Finish e finalize a criação do projecto.

Ao finalizar, o painel lateral esquerdo actualiza sua informação acrescentando o isced como
um projecto java e automaticamente cria um pacote e carrega bibliotecas necessárias para
criar aplicações java com funcionalidades básicas.

100
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

Com o Projecto Isced criado, já podemos criar nossas classes e executá-las. As imagens a
seguir mostram a criação de uma classe Conta:

Ao criar a classe, definimos o nome da classe, e o local onde será guardada, neste caso, esta
ficará em um pacote default, que foi criado automaticamente ao criar o projecto;

Nota-se um aviso mais a baixo que recomenda ao programador que não altere as classes Java no
pacote automático.

Na imagem a seguir, criamos uma classe conta (simplesmente a titulo de exemplo) e salvamo-la.

A classe criada possui um atributo e um método, saldo e deposita() nomeadamente, ao ser


chamada pela classe main, esta classe irá actualizar o valor do saldo de acordo com o valor
depositado:

101
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

Seguindo os passos usados na criação da classe anterior, criamos também a classe principal, a
classe com o método main que dá arranque ao programa;

Na classe main, é criada uma instância da classe conta (objecto) para poder acessar ao método
deposita.

Através do objecto conta, lançamos o valor 200 para depósito:

A classe conta foi actualizada incrementando o método getSaldo que retorna ao main o saldo
da conta.

Após definir as classes, métodos e objectos, é recomendável verificar se o código não


apresenta erros;

102
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

Normalmente o NetBeans notifica ao programador sobre possíveis erros que possam criar
problemas ao correr o programa;

Para além de notificar, a IDE oferece também sugestões para corrigir os problemas do código,
através destas sugestões, o programador pode clicar para criar automaticamente um método,
classe ou atributo em falta, se assim o quiser;

Após a correcção dos erros, falta só executar a classe main. Para tal, clique na classe principal e
a seguir na opção Run File:

Exercícios:

1. Crie um projecto com o nome Prog no mesmo directório em que criou o projecto do exemplo
e crie para guardar seus programas.

103
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

2. Refaça dois exercícios à escolha, de cada unidade anteriorno projecto criado anteriormente.
Desta vez, uze o NetBeans IDE para tudo, coloque o CMD de lado.

TEMA VIII: ORIENTAÇÃO A OBJECTOS (CONTINUAÇÃO)

Objectivos:

 Dar a conhecer outros conceitos pertinentes a POO Java;

 Abordar os temas:

 Modificadores de acesso e atributos de classe;

 Herança, Reescrita e Polimorfismo;

 Classes Abstractas;

 Interfaces Java;

 Criar programas aplicando os recursos acima citados;

Unidade 8.1: Modificadores de acesso e atributos de classe

São implementados modificadores de acesso em Java, de modo a garantir a segurança dos


dados dispostos no nosso sistema. Através destes, evitamos também a ocorrência de certos
erros que poderiam surgir ao longo do desenvolvimento do Software.

 É uma forma de prevenir o uso indevido dos dados por usuários não autorizados.
Permite proteger dados que não devem ser alterados indevidamente;

 Cada classe é responsável por controlar seus atributos, portanto ela deve julgar se
aquele novo valor é válido ou não;

 Este Factor encontra-se ligado a vários conceitos abordados em java, que constituem
base para o Paradigma OO um deles é o encapsulamento.

 Encapsulamento:

 Encapsular remete-nos à esconder todos os membros de uma classe, além


de esconder como funcionam os métodos do nosso sistema;

104
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

 Encapsular é fundamental para que seu sistema seja susceptível a


mudanças. Não precisaremos mudar uma regra de negócio em vários
lugares quando for necessário, mas sim, em apenas um único lugar, já que
essa regra está encapsulada;

Em uma das unidades anteriores, vimos que do conjunto de palavras reservadas em java,
existem modificadores de acesso, que são:

 Private: acesso apenas dentro da classe, também chamado modificador


de visibilidade;
 Na orientação a objectos, é prática quase que obrigatória proteger seus
atributos com private.
 Protected: acesso por classes no mesmo pacote e subclasses;
 Public: acesso de qualquer classe.
 A palavra-chave private também pode ser usada para modificar o acesso a um método;
 Sempre devemos expor o mínimo possível de funcionalidades, para criar um baixo
acoplamento entre as nossas classes;
 Da mesma maneira que temos o private, temos o modificador public, que permite a todos
acessarem um determinado atributo ou método;
 Quando não há modificadores de acesso, o seu método ou atributo fica num estado de
visibilidade intermediário entre o private e o public;
 É muito comum, e faz todo sentido, que seus atributos sejam private e quase todos seus
métodos sejam public, deste modo, toda conversa de um objecto com outro é feita por
troca de mensagens, acessando seus métodos.
 É sempre bom programar pensando na interface da sua classe, como seus usuários a
estarão utilizando, e não somente em como ela vai funcionar;
 A implementação em si, o conteúdo dos métodos, não tem tanta importância para o
usuário dessa classe, uma vez que ele só precisa saber o que cada método pretende fazer, e
não como ele faz, pois isto pode mudar com o tempo;
 O modificador private faz com que ninguém consiga modificar, nem mesmo ler, o atributo
em questão. Por este motivo, podem surgir problemas para acessar certas informações;
 Para permitir o acesso aos atributos (já que eles são private) de uma maneira controlada, a

105
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

prática mais comum é criar dois métodos, um que retorna o valor e outro que muda o
valor;
 A convenção para esses métodos é de colocar a palavra get ou set antes do nome do
atributo;
 É uma má prática criar uma classe e, logo em seguida, criar getters e setters para todos
seus atributos. Só se deve criar um getter ou setter se tiver a real necessidade;
 Utilizar getters e setters não só ajuda a proteger seus atributos, como também possibilita
ter de mudar algo em um só lugar. Chamamos isso de encapsulamento, pois esconde a
maneira como os objectos guardam seus dados. É uma prática muito importante;

Construtores
Quando usamos a palavra-chave new, estamos construindo um objecto. Sempre quando o new
é chamado, ele executa o construtor da classe.

O construtor da classe é um bloco declarado com o mesmo nome que a classe.

O construtor default:

 Quando não se declara nenhum constructor na sua classe, o Java cria um.
Esse construtor é o construtor default, ele não recebe nenhum
argumento e o corpo dele é vazio;
 A partir do momento que o programador declara um construtor, o
construtor default não é mais fornecido.
 Um construtor pode receber um argumento, podendo assim inicializar algum tipo de
informação;
 Dá possibilidades ou obriga o usuário de uma classe a passar argumentos para o objecto
durante o processo de criação do mesmo;
 Podemos ter mais de um construtor na sua classe e, no momento do new, o construtor
apropriado será escolhido;
 Um construtor não é um método. Algumas pessoas o chamam de um método especial,
mas definidamente não é, já que não possui retorno e só é chamado durante a
construção do objecto;
 Um construtor só pode rodar durante a construção do objecto, isto é, nunca

106
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

conseguiremos chamar o construtor em um objecto já construído. Porém, durante a


construção de um objecto, podemos fazer com que um construtor chame outro, para não
ter de copiar e colar.

Atributos de classe
Quando declaramos um atributo como static, ele passa a não ser mais um atributo de cada
objecto, e sim um atributo da classe, a informação fica guardada pela classe, não é mais
individual para cada objecto. Para acessarmos um atributo estático, não usamos a palavra-chave
this, mas sim o nome da classe;
Métodos e atributos estáticos
 Só podem acessar outros métodos e atributos estáticos da mesma classe,
o que faz todo sentido já que dentro de um método estático não temos
acesso à referência this, pois um método estático é chamado através da
classe, e não de um objecto.

Unidade 8.2: Herança, Reescrita e Polimorfismo

Herança:

 Mecanismo através do qual, uma classe obtém as características, métodos e atributos de


outra para expandi-la ou especializá-la de algum modo;
 Uma classe pode herdar características, métodos e atributos de outra classe. Da mesma
maneira que uma classe transmite suas características para outras classes, tornando
aquelas que recebem suas características, suas herdeiras;
 É através da herança que os objectos podem compartilhar métodos e atributos;
 A reutilização do código já escrito na classe pai, restando apenas implementar os métodos
e atributos que a diferenciem da classe pai, constitui uma grande vantagem;
 O USO de herança aumenta o acoplamento entre as classes, isto é, o quanto uma classe
depende de outra. A relação entre classe mãe e filha é muito forte e isso acaba fazendo
com que o programador das classes filhas tenha que conhecer a implementação da classe
pai e vice-versa, fica difícil fazer uma mudança pontual no sistema;

Ex: A figura a baixo apresenta uma classe Primata, que é subclasse

107
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

(descendente) da classe Mamífero e superclasse da Ser Humano. Isto


significa que o Ser Humano possui características do Primata e ambos
do mamífero, ou seja, existem propriedades e métodos comuns a
estas classes, mas cada uma das descendentes possui suas
especialidades:

 A Herança permite que todos os atributos e métodos programados no ancestral estejam


automaticamente presentes em seus descendentes sem necessidade de reescrevê-los;
 Herança significa maior integridade, pois, ao actualizar a superclasse, todas as subclasses
serão actualizadas sem a necessidade de reprogramá-las;
Herança Simples:
 Quando uma classe herda características de apenas uma superclasse;

Ex: Uma superclasse Pessoa da qual deriva a subclasse funcionário. A classe


Funcionário herda todas as características da Pessoa, e de nenhuma outra
classe. Esta possui também atributos e métodos que a sua superclasse não
tem.

108
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

 Neste tipo de herança, apesar da subclasse possuir apenas uma


superclasse, nada impede que a superclasse gere outras subclasses.
 Ex: Neste exemplo temos uma Herança simples com dois descendentes.
A superclasse Pessoa possui duas subclasses, Funcionário e Cliente.

Herança múltipla:
 Quando uma classe herda características de duas ou mais superclasses.

Ex: Seguindo o exemplo anterior, um Funcionário pode vir a ser um Cliente


também. Pode-se assim, criar uma nova subclasse Funcionário-Cliente, com
duas superclasses (Funcionário e Cliente), esta nova classe, possui atributos
das duas superclasses mutuamente.

109
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

Reescrita de método

No Java, quando herdamos um método, podemos alterar seu comportamento, podemos


reescrever (reescrever, sobrescrever, override) este método. Há como deixar explícito no seu
código que determinado método é a reescrita de um método da sua classe mãe. Fazemos isso
colocando @Override em cima do método. Isso é chamado anotação. Existem diversas anotações
e cada uma vai ter um efeito diferente sobre seu código;

Ex: @Override

public double getBonificacao() {


return this.salario * 0.15 }
Invocando o método reescrito
 Depois de reescrito, não podemos mais chamar o método antigo que
fora herdado da classe mãe realmente, alteramos o seu comportamento.
Mas podemos invocá-lo no caso de estarmos dentro da classe;

Ex: Para calcular a bonificação de um Gerente devemos fazer o cálculo de um

110
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

Funcionário porém adicionando 1000, 00 Meticais. Poderíamos fazer da


seguinte forma:

class Gerente extends Funcionario { int senha;


int numeroDeFuncionariosGerenciados;
public double getBonificacao() {
return this.salario * 0.10 + 1000; }
}

 Aqui teríamos um problema: o dia que o getBonificacao do Funcionário


mudar, precisaremos mudar o método do Gerente para acompanhar a
nova bonificação. Para evitar isso, o getBonificacao do Gerente pode
chamar o do Funcionário utilizando a palavra-chave super:
class Gerente extends Funcionario { int senha;
int numeroDeFuncionariosGerenciados;
public double getBonificacao() {
return super.getBonificacao() +1000;
}}
 Essa invocação vai procurar o método com o nome getBonificacao de
uma super classe de Gerente. No caso ele logo vai encontrar esse
método em Funcionário;

Polimorfismo:

É a capacidade de uma variável se referir em tempo de execução a objectos de diversas classes. É


uma característica importante da orientação a objectos que está directamente ligada à
hereditariedade de classe. O polimorfismo:

 Ocorre quando um método que já foi definido no ancestral é redefinido no descendente


com um comportamento diferente;
 O nome dado a capacidade que os objectos diferentes têm de responder a uma
mensagem;
 Uma mesma mensagem pode representar formas de execução diferentes, próprias de

111
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

cada objecto, assim, o usuário pode enviar uma mensagem genérica e abandonar
detalhes sobre a exacta implementação sobre o objecto receptor.

Ex: Dois objectos (Câmera e Computador), possuem uma função em comum, Gravar, mas
eta função é realizada de forma diferente em cada um deles.

 Polimorfismo é a capacidade de um objecto poder ser referenciado de várias formas


(polimorfismo não quer dizer que o objecto •fique se transformando, um objecto nasce
de um tipo e morre daquele tipo, o que pode mudar é a maneira como nos referimos a
ele);
 No Java, a invocação de método sempre vai ser decidida em tempo de execução. O Java
vai procurar o objecto na memória e, aí sim, decidir qual método deve ser chamado,
sempre relacionando com sua classe de verdade, e não com a que estamos usando para
referenciá-lo;
Ex: Imagine que vamos modelar um sistema para a faculdade que controle as despesas
com funcionários e professores. Nosso funcionário •fica assim:

class EmpregadoDaFaculdade {
private String nome;
private double salario;
double getGastos() { return this.salario;}
String getInfo() {
return"nome:"+this.nome+" com salário "+ this.salario;}}

Acompanhe o seguinte exemplo e veja como funciona o polimorfismo:

O gasto que temos com o professor não é apenas seu salário. Temos de somar um

112
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

bónus de 100 Meticais por hora/aula. O que fazemos então? Reescrevemos o método.
Assim como o getGastos é diferente, o getInfo também será, pois temos de mostrar as
horas/aula também:

class ProfessorDaFaculdade extends EmpregadoDaFaculdade {


private int horasDeAula;
double getGastos() {
return this.getSalario()
+ this.horasDeAula * 10; }
String getInfo() {
String informacaoBasica = super.getInfo(); String informacao =
informacaoBasica + " horas de aula: " + this.horasDeAula; return
informacao; }}

No código acima, apesar do método ter sido reescrito, gostaríamos de acessar o método
da classe mãe, para não ter de copiar e colocar o conteúdo desse método e depois
concatenar com a informação das horas de aula, daí usamos a palavra chave super. Para
o uso do polimorfismo, imagine que temos uma classe de relatório:

class GeradorDeRelatorio {
public void adiciona(EmpregadoDaFaculdade f)
{System.out.println(f.getInfo());System.out.println(f.getGastos(
));}}

Podemos passar para nossa classe qualquer EmpregadoDaFaculdade. Vai funcionar


tanto para professor, quanto para funcionário comum. Muito depois de terminar essa
classe de relatório, resolvemos aumentar nosso sistema, e colocar uma classe nova, que
representa o Reitor. Como ele também é um EmpregadoDaFaculdade, não vamos
precisar alterar algo na nossa classe de Relatorio:

class Reitor extends EmpregadoDaFaculdade {


String getInfo() {

113
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

return super.getInfo() + " e ele é um reitor";}}

Classes Abstratas
Para compreender o uso e funcionamento das classes abstractas, nesta secção vamos basear-
nos em exemplos, é recomendável que o estudante experimente os códigos no seu IDE e veja os
resultados para acompanhar melhor o desenvolver dos exemplos:

No banco, todas as contas são de um tipo específico. Por exemplo, conta poupança,
conta corrente ou conta salário. Essas contas poderiam ser modeladas através das
seguintes classes utilizando o conceito de herança:

class Conta

{//Atributos
//Construtores
//Métodos
}
//Fim da classe

class ContaPoupanca extends Conta

{//Atributos
//Construtores
//Métodos
} //Fim da classe

class ContaCorrente extends Conta

{//Atributos
//Construtores
//Métodos
} // Fim da classe
Consideremos as três classes anteriores, a superclasse Conta e as Subclasses
ContaPoupança e ContaCorrente. Para

114
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

cada conta do domínio do banco devemos criar um objecto da classe correspondente


ao tipo da conta. Por exemplo, se existe uma conta poupança no domínio do banco
devemos criar um objecto da classe ContaPoupanca:
ContaPoupanca cp = new ContaPoupanca ();
Faz sentido criar objectos da classe ContaPoupanca pois existem contas poupança no
domínio do banco. Dizemos que a classe ContaPoupanca é uma classe concreta pois
criaremos objectos a partir dela. Por outro lado, a classe Conta não define uma conta
que de fato existe no domínio do banco. Ela apenas serve como “base” para definir as
contas concretas.
Não faz sentido criar um objecto da classe Conta pois estaríamos a instanciar um
objeto que não é suficiente para representar uma conta que pertença ao domínio do
banco. Mas, a princípio, não há nada proibindo a criação de objectos dessa classe. Para
adicionar essa restrição no sistema, devemos tornar a classe Conta abstracta.
 Uma classe concreta pode ser directamente utilizada para instanciar
objectos. Por outro lado, uma classe abstracta não pode. Para definir
uma classe abstracta, basta adicionar o modificador abstract:

abstract class Conta {

//Atributos

//Construtores

//Métodos
}

 Todo código que tenta criar um objecto de uma classe abstracta não
compila:

//Erro de compilação
Conta c = new Conta();

Métodos Abstractos
Suponha que o banco ofereça extracto detalhado das contas e para cada tipo de conta as

115
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

informações e o formato desse extracto detalhado são diferentes. Além disso, a qualquer
momento o banco pode mudar os dados e o formato do extracto detalhado de um dos tipos de
conta. Neste caso, parece não fazer sentido ter um método na classe Conta para gerar extractos
detalhados pois ele seria reescrito nas classes específicas sem nem ser reaproveitado.

Poderíamos, simplesmente, não definir nenhum método para gerar extractos detalhados na
classe Conta. Porém, não haveria nenhuma garantia que as classes que derivam directa ou
indirectamente da classe Conta implementem métodos para gerar extractos detalhados. Mas,
mesmo supondo que toda classe derivada implemente um método para gerar os extractos que
desejamos, ainda não haveria nenhuma garantia em relação as assinaturas desses métodos.

As classes derivadas poderiam definir métodos com nomes ou parâmetros diferentes. Isso
prejudicaria a utilização dos objectos que representam as contas devido a falta de padronização
das operações.

 Para garantir que toda classe concreta que deriva directa ou indirectamente da classe
Conta tenha uma implementação de método para gerar extractos detalhados e além
disso que uma mesma assinatura de método seja utilizada, devemos utilizar o conceito
de métodos abstractos;
 Na classe Conta, definimos um método abstracto para gerar extractos detalhados. Um
método abstracto não possui corpo (implementação):

abstract class Conta {

//Atributos

//Construtores

//Métodos

public abstract void imprimeExtratoDetalhado();


}

 As classes concretas que derivam directa ou indirectamente da classe Conta devem


possuir uma implementação para o método imprimeExtratoDetalhado():

116
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

class ContaPoupanca extends Conta {

private int diaDoAniversario;

public void imprimeExtratoDetalhado () {


System.out.println (" EXTRATO DETALHADO DE
CONTA POUPANÇA ");
SimpleDateFormat sdf=new SimpleDateFormat
("dd/MM/ yyyy HH:mm:ss");
Date agora = new Date ();
System .out. println (" DATA : " + sdf. format ( agora
));
System .out. println (" SALDO : " + this . getSaldo ());
System .out. println (" ANIVERSÁRIO : " + this .
diaDoAniversario );
}}

 Se uma classe concreta derivada da classe Conta não possuir uma implementação do
método imprimeExtratoDetalhado() ela não compilará:
// ESSA CLASSE NÃO COMPILA
class ContaPoupanca extends Conta {}

Prática

Definindo Superclasses e Subclasses


Exemplo 1: Suponha que tenhamos uma classe pai chamada Pessoa:

public class Pessoa {


protected String nome;
protected String endereco;
/**
* Construtor Padrão

117
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

*/
public Pessoa(){
System.out.println("Dentro do Constructor Joana");
nome = "";
endereco = "";
}
/**
* Construtor com 2 parâmetros
*/
public Pessoa( String nome, String endereco ){
this.nome = nome;
this.endereco = endereco;
}
/**
* Métodos modificadores e acessores
*/
public String getNome(){
return nome;
}
public String getEndereco(){
return endereco;
}
public void setNome( String nome ){
this.nome = nome;
}
public void setEndereco( String add ){
this.endereco = add;
}}
Vamos criar uma classe chamada Estudantee. Como um estudante
também é uma pessoa, concluímos que iremos estender a classe
Pessoa, então, poderemos herdar todas as propriedades existêntes na

118
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

classe Pessoa. Para isto, escrevemos:

public class Estudantee extends Pessoa {


public Student(){
System.out.println("Dentro do construtor do Estudante");
//Algum código aqui
}
// Algum código aqui
}
Quando a classe Estudantee for instanciada, o construtor padrão da superclasse Pessoa é
invocado implicitamente para fazer as inicializações necessárias. Após isso, as instruções dentro
do construtor da subclasse são executadas. Considere o seguinte código:

public static void main( String[] args ){


Student anaCarla = new Estudante();
}
No código, criamos um objecto da classe Estudantee. O resultado da execução deste programa
deve ser:

Dentro do Construtor Pessoa

Dentro do Constructor Estudante

Super

Uma subclasse pode, explicitamente chamar um construtor de sua superclasse


imediata, isso é feito utilizando uma chamada ao objecto super. Uma chamada ao
super no construtor de uma subclasse irá resultar na execução de um construtor
específico da superclasse.

Exemplo:

public Student(){
super( "Algum nome", "AlgumEndereco" );
System.out.println("Dentro do constructor Estudante");

119
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

}
Este código chama o segundo construtor de sua superclasse imediata (a classe
Pessoa) e a executa:
public Estudante(){
super();
System.out.println("Dentro do Construtoe Estudante");
}
A instrução super() deve ser a primeira instrução em um construtor;
As instruções this() e super() não podem ocorrer simultaneamente no mesmo
construtor. O objeto super é uma referência aos membros da superclasse (assim
como o objeto this é da sua própria classe).

Interfaces Java
Num sistema orientado à objetos, os objectos interagem entre si através de chamadas de
métodos (troca de mensagens). Podemos dizer que os objectos se “encaixam” através dos
métodos públicos. Para os objectos de uma aplicação “conversarem” entre si mais facilmente é
importante padronizar o conjunto de métodos oferecidos por eles.

Nas aplicações orientadas à objectos, podemos criar um “contrato” para definir um


determinado conjunto de métodos que deve ser implementado pelas classes que “assinarem”
este contrato. Em orientação a objectos, um contrato é chamado de interface:

 Uma interface é composta basicamente por métodos abstractos.


Ex: No sistema do banco, podemos definir uma interface (contrato) para padronizar
as “assinaturas” dos métodos oferecidos pelos objectos que representam as contas
do banco:

interface Conta {

void deposita ( double valor );


void saca ( double valor );
}
 Os métodos de uma interface não possuem corpo (implementação) pois serão

120
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

implementados nas classes vinculadas à essa interface. Todos os métodos de uma


interface devem ser públicos e abstratos;
 As classes que definem os diversos tipos de contas que existem no banco devem
implementar (assinar) a interface Conta:
class ContaPoupanca implements Conta {
public void deposita ( double valor ) { //
implementacao}
public void saca ( double valor ) { //
implementacao }
} //Fim da classe

class ContaCorrente implements Conta {

public void deposita ( double valor ) { //


implementacao}
public void saca ( double valor ) {
// implementacao }
} //Fim da classe
 As classes concretas que implementam uma interface são obrigadas a possuir uma
implementação para cada método declarado na interface, caso contrário, ocorrerá
um erro de compilação:

class ContaCorrente implements Conta {

public void deposita ( double valor ) { //


implementacao}} /* Esta classe não compila
porque ela não implementou o método saca ()*/
 A primeira vantagem de utilizar uma interface é a padronização das assinaturas dos
métodos oferecidos por um determinado conjunto de classes. A segunda vantagem
é garantir que determinadas classes implementem certos métodos.
 Se uma classe implementa uma interface, podemos aplicar a ideia do polimorfismo
assim como quando aplicamos herança. Dessa forma, outra vantagem da utilização

121
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

de interfaces é o ganho do polimorfismo:

Suponha que a classe ContaCorrente implemente a interface Conta.


Podemos guardar a referência de um objecto do tipo ContaCorrente
em uma variável do tipo Conta (Polimorfismo):

Conta c = new ContaCorrente ();

Além disso, podemos passar uma variável do tipo ContaCorrente para


um método que o parâmetro seja do tipo Conta:

class GeradorDeExtrato {

public void geraExtrato ( Conta c) {


// implementação
}}

Aproveitando o Polimorfismo:

GeradorDeExtrato g = new GeradorDeExtrato ();

ContaCorrente c = new ContaCorrente ();

g. geraExtrato (c);

O método geraExtrato() pode ser utilizado para objectos criados a


partir de classes que implementam directa ou indirectamente a
interface Conta.

 Priorizar a utilização de interfaces permite que alterações pontuais em


determinados trechos do código fonte sejam feitas mais facilmente pois diminui as
ocorrências de efeitos colaterais indesejados no resto da aplicação;
 Por outro lado, priorizar a utilização de herança pode diminuir a quantidade de
código escrito no início do desenvolvimento de um projecto;
 Em Java, como não há herança múltipla, muitas vezes, interfaces são apresentadas
como uma alternativa para obter um grau maior de polimorfismo;

122
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

Unidade 8.3: Pacotes (packages):

À medida que aumenta o número de classes, aumenta a probabilidade de coincidência de


nomes. Precisamos separar as classes em espaços de nomes. Java possui o conceito de pacotes:

 Espaço de nome para evitar conflitos;


 Agrupamento de classes semelhantes;
 Maneira de construir bibliotecas de classes;
 Estabelecimento de políticas de acesso às classes.

Pacotes da API Java


As APIs Java (ex: Java SE) são divididas em pacotes:
 java.lang: classes do núcleo da plataforma;
 java.util: classes utilitárias;
 java. io: classe para I/O (entrada/saída);
 Dentre muitos outros...

Pacotes são organizados em níveis hierárquicos.

Pacotes & bibliotecas

 Coleção de arquivos. class;


 Compilados de códigos-­­fonte. Java;
 Geralmente uma classe pública por arquivo fonte;
 Declaração do mesmo pacote:

Importação de pacotes

 Para usar classes de outros pacotes, é preciso importá-las;


 Uma IDE ajuda nesta tarefa.

Exemplos:

package outropacote
import nomedopacote; //importa pacote

123
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

import nomepacote.NomeClasse //importa classe especifica


public class Teste {
//codigo
}

Ou:

package outropacote
public class OutraClasse {
//Uso do nome completo da Classe
nomepacote.NomeClasse m c;
}

O Pacote java.lang

 As classes do pacote java.lang são importadas


automaticamente;
 Não é necessário:
 import java.lang.String;
 import java.lang.Math;
 import java.lang. * ;

Importação estática

 A partir do Java 5 é possível importar os membros


estáticos de uma classe:

Localização de pacotes

 Maior parte das JVMs utiliza pastas no sistema de arquivos


do SO:

Classpath
 O “caminho de classes” ou “trilha de classes” é

124
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

onde as ferramentas do JDK e a JVM procuram


classes;
 A partir dos directórios do classpath procura­se
as classes segundo seus pacotes (usa a 1ª
encontrada);
 Estão por padrão no classpath :
 A biblioteca de classes da APIJava SE;
 O directório actual;

O classpath pode ser alterado:

 Variável de ambiente (não recomendado);


 Opção -classpath ou Ð c p.

Compilação automática

 Ao compilar uma classe, se ela faz referência a outra que


não foi compilada, esta última é compilada se o código
está disponível;
 Se já foi compilada mas o arquivo fonte está com data
mais recente, ela é recompilada.

O pacote padrão

 Toda classe que não especifica o pacote pertence ao


pacote padrão;

125
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

Exercícios de AUTO-AVALIAÇÃO (Com Respostas)

1. Complete os campos em branco nos exercícios a baixo:


A. Os membros __________ de uma superclasse podem ser acessados na
declaração de superclasse e nas declarações de subclasse.
B. Na herança simples, há uma classe em um relacionamento ______ com suas
subclasses.
C. Quando um objecto de uma subclasse é instanciado, uma superlasse _____ é
chama implícita ou explicitamente.
D. ________é a forma ou capacidade de reutilização de software em que novas
classes adquirem membros de classes existentes e se aprimoram com novas
capacidades.
E. Uma superclasse de membros _____________, é acessível em qualquer lugar
em que o programa tem uma referência para um objecto daquela superclasse
ou para um objecto de uma de suas subclasses.
F. Os construtores de subclasse podem chamar construtores de superclasse via
palavra-chave_______.
Respostas:
1. R:
A. Public e Protected
B. Hierárquico;
C. Constructor;
D. Herança;
E. Public;
F. Super.

Exercícios de AVALIAÇÃO

1. Desenhe uma hierarquia de herança para os estudantes de uma Universidade. Utilize


Estudante coma a superclasse da hierarquia, estenda Estudante com as classes
Estudantes_Licenciatura e

126
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

Estudantes_Mestrado. Continue a estender a hierarquia o mais profundo, aumentando os


níveis a baixo, como por exemplo: Estudantes_Caloiros, Estudantes_1º ano, etc. Faça
apenas uma representação gráfica, sem código java.
2. Escreva uma hierarquia de herança para classes Quadrilateral, Trapézio, Paralelogramo,
Rectângulo e Quadrado. Use Quadrilateral como a superclasse da hierarquia. Crie uma
classe Ponto para representar os pontos de cada forma. Faça uma hierarquia profunda,
com quantos níveis possíveis. Especifique as variáveis de instância e os métodos para cada
classe. As variáveis de instância private de Quadrilateral devem ser os pares de
coordenados x-y para os quatro pontos que delimitam o Quadrilateral. Escreva um
programa que instancia objectos de suas classes e gera saída da área de cada objecto
(excepto Quadrilateral).
3. Identifique e explique o (s) erro (s) nas classes abaixo:

A.
public class DataHora extends Data,Hora

{
public DataHora(byte d, byte m, short a, byte hor, byte min, byte seg)
{
super(d, m, a);
super(hor, min, seg);
}

public String toString()


{
return super.toString() + " " + super.toString();
}}

B.
public class Ponto2D_V2

127
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

private double x, y;

public Ponto2D_V2(double _x, double _y)


{
x = _x;
y = _y;
}}

C.
public class Ponto3D_V2 extends Ponto2D_V2
{
private double z;

public Ponto3D_V2(double _x, double _y, double _z)


{
x = _x;
y = _y;
z = _z;
}}

4. Crie um projecto banco e nele a classe Conta:

class Conta {
private double saldo;
public void deposita(double valor) {
this.saldo += valor;
}
public void saca(double valor) {
this.saldo -= valor;
}
public double getSaldo() {
return this.saldo;

128
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

}
public void atualiza(double taxa) {
this.saldo += this.saldo * taxa;
}
}
A. Crie duas subclasses da classe Conta: ContaCorrente e ContaPoupanca.
Ambas terão o método atualiza() reescrito:
 A ContaCorrente deve atualizar-se com o dobro da taxa e a
ContaPoupanca deve atualizar-se com o triplo da taxa.
 ContaCorrente deve reescrever o método deposita, a fim de
retirar uma taxa bancária de dez centavos de cada depósito.
 Para acessar o atributo saldo herdado da classe Conta,
precisará trocar o modificador de visibilidade de saldo para
protected.
B. Reescreva o método atualiza na classe ContaPoupanca, seguindo o
enunciado:
public void atualiza(double taxa) {
this.saldo += this.saldo * taxa;
}
}
public class ContaPoupanca extends Conta {
public void atualiza(double taxa) {
this.saldo += this.saldo * taxa * 3;
}}

C. Na classe ContaCorrente, reescreva o método deposita para descontar a taxa


bancária de dez centavos e crie uma classe com método main e instancie
essas classes, atualize-as e veja o resultado.
5. Crie um registro mais especializado de Estudante que contém informações adicionais sobre
um estudante de Informática. Sua tarefa é estender a classe Estudante que foi
implementada nos exemplos anteriores e acrescentar atributos e métodos que são

129
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

necessários para um registro de um estudante de Informática. Utilize override para


modificar alguns métodos da superclasse Estudante, caso seja necessário.

130
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I

Bibliografia

 Vamos Programar? – Introdução à Programação, 18 Set, 2014. PPLWare. Disponível em:


<http://pplware.sapo.pt/tutoriais/vamos-programar-introducao-a-programacao-
1/>. Acesso em 12 de Abril 2016;
 O que são linguagens de Programação, 18 Set, 2014. InfoEscola. Disponível em:
<http://www.infoescola.com/informatica/o-que-sao-linguagens-de-
programacao/>. Acesso em 12 de Abril 2016;
 O que é uma linguagem de Programação, 2016. Canal Tech. Disponível em:
<http://canaltech.com.br/o-que-e/o-que-e/o-que-e-uma-linguagem-de-
programacao/>. Acesso em 12 de Abril 2016;
 O que é uma linguagem de Programação, 4 Aug, 2012. Programação Progressiva.
Disponível em: <http://www.programacaoprogressiva.net/2012/08/4-que-linguagem-
estudar.html>. Acesso em 11 de Abril 2016;
 O que são funções e procedimentos, 2014. Dicas de Programação. Disponível em:
<http://www.dicasdeprogramacao.com.br/o-que-sao-funcoes-e-procedimentos/>. Acesso
em 11 de Abril 2016;
 Linguagem de Programação para iniciantes, 2014. Dicas de Programação. Disponível em:
<http://www.dicasdeprogramacao.com.br/linguagem-de-programacao-para-
iniciantes/>. Acesso em 11 de Abril 2016;
 Introdução à Programação, 2016. WikiBooks. Disponível em:
<https://pt.wikibooks.org/wiki/Introdu%C3%A7%C3%A3o_%C3%A0_programa%C3%A7%C
3%A3o>. Acesso em 11 de Abril 2016;
 Curso de JAVA completo, Aug, 2012. JAVA Progressivo. Disponível em:
<http://www.javaprogressivo.net/2012/08/curso-completo.html>. Acesso em 12 de Abril
2016;
 Conceitos básicos de JAVA, 2013. JAVA Progressivo. Disponível em:
<http://www.javaprogressivo.net/p/conceitos-basicos.html>. Acesso em 10 de Abril 2016.

131

Você também pode gostar