Escolar Documentos
Profissional Documentos
Cultura Documentos
GESTÃO DE SISTEMAS DE
INFORMAÇÃO
1º Ano
Disciplina: Programação I
Código: ISCED1-GSI06
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
Financiamento e Logística
Instituto Africano de Promoção da Educação
a Distância (IAPED)
ii
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
Índice
Visão geral 1
iii
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
iv
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
Visão geral
Objectivos do Módulo
1
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
Páginas introdutórias
Um índice completo;
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.
2
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
Outros recursos
3
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
Comentários e sugestões
Ícones de actividade
Habilidades de estudo
4
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
5
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
6
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
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.
7
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
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
Avaliação
9
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
10
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
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?".
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
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.
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.
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.
13
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
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.
14
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
passos.
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 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.
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.
17
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
6. Espere um minuto.
7. Apague o fogo.
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.
18
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
Exemplos de fluxogramas:
19
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
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
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.
20
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
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
Tecnologia Java
Versões do Java
Bytecode
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.
22
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
Devido à compra da Sun pela Oracle em 2009, actualmente a página oficial do java é:
http://www.oracle.com/technetwork/java/.
API Java
23
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
O pacote java:
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:
24
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
25
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
26
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
Bytecode Java
SO
(Windows ou Linux)
27
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
A primeira tarefa executada pela JVM é o carregamento das classes necessárias para rodar a
aplicação. O Class Loader:
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
Bytecode
É o código de máquina que é executado em qualquer máquina através da Máquina Virtual Java
(JVM).
F4 D9 00 03 0A B2 FE FF FF 09 02 01 01 2E 2F 30 62 84 3D 29 3A C1
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.
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.
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
1. java NomeDaClasse;
2. java pacote.subpacote.NomeDaClasse;
Nesta seção será apresentado o exemplo de uma aplicação simples em Java (Aplicação
HelloWorld), com o objectivo de mostrar:
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”:
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.
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:
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.
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.
a. linguagem de programação;
36
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
c. ambiente de execução.
6. API Java:
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
Objectivos:
Aprender a trabalhar com os seguintes recursos do java:
Tipos primitivos;
Operadores;
Casting;
38
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
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:
Verdadeiro (TRUE);
Falso (FALSE).
Inteiro:
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
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:
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
Operadores aritméticos:
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:
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
Nome da variável:
Ex:
int 1 // é inválido
Na linguagem de programação Java, as variáveis devem ser declaradas para que possam
ser utilizadas;
43
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
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.
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;
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;
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;
Atribuição de valores
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.
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);
Strings em Java
Java não possui tipo primitivo para cadeia de caracteres, mas existe a classe String. Esta classe
tem tratamento especial:
Não podemos mudar o valor de um caractere da string. Podemos somente criar outra
string;
Casting
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.
46
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
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:
O valor de i agora é 3;
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;
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
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
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
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.
51
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
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?
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:
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
A. dia&noite
B. diaENoite
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
55
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
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):
Objectivos:
56
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
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;
1. Estrutura de sequência;
2. Estrutura de selecção;
3. Estrutura de repetição.
Estrutura de sequência
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
if (expressão_lógica) instrução;
ou:
Exemplo:
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:
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.
if (expressão_lógica1)
instrução1;
else if(expressão_lógica2)
instrução2;
else
instrução3;
59
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
No código acima:
Exemplo:
switch(variável_inteira) {
60
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
instrução2; // bloco 1
break;
default: instrução1;
instrução2; // bloco n
break;}
Se nenhum dos valores case for satisfeito, o bloco default será executado.
Este é um bloco opcional;
Funcionamento do switch:
61
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
Exemplo:
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
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;
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
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:
Funcionamento do for:
Exemplo:
Possui duas formas: unlabeled (não identificada - vimos esta forma com a declaração switch) e
labeled (identificada);
65
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
Exemplo 1 (unlabeled):
Exemplo 2 (labeled):
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
Exemplo 1 (unlabeled):
67
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
Exemplo 2 (labaled):
Exemplos:
return "Hello";
return ++count;
return;
68
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
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
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
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:
8. Crie um programa que mostre seu nome cem vezes. Faça três versões deste programa:
72
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
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.
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.
Objectivos:
74
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
Onde: g -> representa o nome do array, e o índice ou subscrito que está entre
parênteses representa a posição do elemento;
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[];
Eles começam com zero e progridem sequencialmente por todas as posições até o fim
do array;
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:
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
Arrays bidimensionais podem ser imaginados como uma tabela (matriz), com linhas e
colunas;
Exemplo:
78
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
1. O que é um Array?
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.
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.
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"}.
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.
80
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
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
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)?
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"},
Name : Florencia
Tel. # : 735-1234
Address: Matacuane
Name : Joyce
Tel. # : 983-3333
Address: Macuti
Name : Becca
Tel. # : 456-3322
Address: Baixa
Objectivos:
Saber como:
83
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
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.
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;
86
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
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:
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:
89
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
<modificador>* <tipoRetorno>
<nome>(<argumento>*) {
<instruções>*
}
Onde:
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;
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:
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):
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:
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
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
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
Objectivos:
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
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;
Passo 5: Selecione uma JDK existente em seu computador. Pressione o botão Next>
para continuar;
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:
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 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.
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.
A classe conta foi actualizada incrementando o método getSaldo que retorna ao main o saldo
da conta.
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.
Objectivos:
Abordar os temas:
Classes Abstractas;
Interfaces Java;
É 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:
104
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
Em uma das unidades anteriores, vimos que do conjunto de palavras reservadas em java,
existem modificadores de acesso, que são:
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 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
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.
Herança:
107
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
108
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
Herança múltipla:
Quando uma classe herda características de duas ou mais superclasses.
109
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
Reescrita de método
Ex: @Override
110
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
Polimorfismo:
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.
class EmpregadoDaFaculdade {
private String nome;
private double salario;
double getGastos() { return this.salario;}
String getInfo() {
return"nome:"+this.nome+" com salário "+ this.salario;}}
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:
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(
));}}
113
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
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
{//Atributos
//Construtores
//Métodos
} //Fim da classe
{//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
//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):
//Atributos
//Construtores
//Métodos
116
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
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
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
Super
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.
interface Conta {
120
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
121
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
class GeradorDeExtrato {
Aproveitando o Polimorfismo:
g. geraExtrato (c);
122
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
Importação de pacotes
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
Ou:
package outropacote
public class OutraClasse {
//Uso do nome completo da Classe
nomepacote.NomeClasse m c;
}
O Pacote java.lang
Importação estática
Localização de pacotes
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
Compilação automática
O pacote padrão
125
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
Exercícios de AVALIAÇÃO
126
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
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);
}
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;
C.
public class Ponto3D_V2 extends Ponto2D_V2
{
private double z;
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;
}}
129
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
130
ISCED
CURSO: GESTÃO DE SISTEMAS DE INFORMAÇÃO; 10 Ano
Disciplina/Módulo: Programação I
Bibliografia
131