aula 11

173
TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN Prof a . Patrícia Lima Quintão www.pontodosconcursos.com.br 1 AULA 11-DESENVOLVIMENTO E TESTES Olá pessoal, tudo bem! Agora, vamos em frente, intensificando os estudos nesta reta final! Prof a Patrícia Lima Quintão Twitter: http://www.twitter.com/pquintao Facebook: http://www.facebook.com/professorapatriciaquintao (Todo dia com novas dicas, desafios e muito mais, espero vocês por lá para CURTIR a página!) Instagram: patriciaquintao Conteúdo desta Aula Página Algumas Considerações Importantes 02 Lista de Questões Comentadas. 81 Questões Apresentadas na Aula. 146 Gabarito. 173 Antes de analisarmos as questões, vamos a algumas considerações sobre o tema da aula. Espero que aproveitem!

Upload: elaine-oliveira

Post on 21-Jan-2016

105 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 1

AULA 11-DESENVOLVIMENTO E TESTES

Olá pessoal, tudo bem!

Agora, vamos em frente, intensificando os estudos nesta reta final!

Profa Patrícia Lima Quintão

Twitter: http://www.twitter.com/pquintao

Facebook: http://www.facebook.com/professorapatriciaquintao (Todo dia com novas dicas, desafios e muito mais, espero vocês por lá para CURTIR a página!)

Instagram: patriciaquintao

Conteúdo desta Aula Página

Algumas Considerações Importantes 02

Lista de Questões Comentadas. 81

Questões Apresentadas na Aula. 146

Gabarito. 173

Antes de analisarmos as questões, vamos a algumas considerações sobre o tema da aula. Espero que aproveitem!

Page 2: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 2

PROGRAMAÇÃO DE SISTEMAS: LÓGICA DE PROGRAMAÇÃO

Segundo o prisma da computação, um algoritmo é uma sequência finita de passos (ou instruções), descritos em uma ordem lógica, que visam atingir um objetivo bem definido. As instruções devem ser bem definidas e não ambíguas, bem como o tempo e o esforço para executar as instruções devem ser finitos. Por exemplo, um algoritmo para aplicar um operador matemático em dois números segue a sequência lógica:

• Preencha o primeiro operando com um dos números. • Preencha o segundo operando com o outro número. • Aplique a operador matemático utilizando os dois operandos e apresente

o resultado: resultado <- operando1 operador_matemático operando2

Um algoritmo opera sobre um conjunto de entradas de modo a gerar uma saída que seja útil para o usuário. Um algoritmo tem cinco características importantes:

• Finitude: o algoritmo deve sempre terminar após um número finito de passos.

• Definição: cada passo de um algoritmo deve ser precisamente definido. As ações devem ser definidas rigorosamente e sem ambiguidades.

• Entradas: o algoritmo deve ter zero ou mais entradas, quantidades que lhe são fornecidas antes do algoritmo iniciar.

• Saídas: o algoritmo deve ter uma ou mais saídas, quantidades que têm uma relação específica com as entradas.

• Efetividade: o algoritmo deve ser efetivo. Todas as operações devem ser suficientemente básicas de modo que possam ser em princípio executadas com precisão em um tempo finito por um humano usando papel e lápis.

Os algoritmos são descritos em uma linguagem particular chamada de pseudocódigo e por isso são independentes das linguagens de programação. O pseudocódigo é uma linguagem intermediária entre a linguagem falada e a linguagem de programação, ou seja, a escrita do algoritmo não segue um formalismo tão rígido quanto as linguagens de programação. Chama-se de Programas os algoritmos que são traduzidos para uma linguagem de computador (por exemplo: Cobal, Fortran, Pascal, C, Java, etc.) cujos passos (chamados de comandos) são interpretados e executados pelo computador.

Page 3: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 3

Um programa manipula elementos básicos que podem ser variáveis ou constantes. As variáveis precisam ser declaradas no programa, recebendo um nome para serem identificadas, um tipo para especificar que valores pode armazenar e também pode receber um valor inicial. Estruturas de dados e algoritmos são temas fundamentais da ciência da computação, sendo utilizados nas mais diversas áreas do conhecimento e com os mais diferentes propósitos de aplicação. Sabe-se que algoritmos manipulam dados. Quando estes dados estão organizados (dispostos) de forma coerente, caracterizam uma forma, uma estrutura de dados. A organização e os métodos para manipular essa estrutura é que lhe conferem singularidade. As estruturas de dados são chamadas tipos de dados compostos que dividem-se em homogêneos, conjuntos de dados formados pelo mesmo tipo de dado (vetores e matrizes), e heterogêneos, conjuntos de dados formados por tipos de dados diferentes em uma mesma estrutura (registros). Estruturas de dados é a base fundamental de qualquer programa mais sofisticado. A seleção de um tipo correto de estrutura de dados faz enorme diferença na complexidade da implementação resultante. A escolha da representação dos dados correta facilitará em muito a construção de um programa, enquanto que a escolha de uma representação errada custará um tempo enorme de codificação, além de aumentar a complexidade de compreensão do código.

A estrutura básica de um algoritmo é:

algoritmo declarações (variáveis, constantes, módulos) início comandos fim.

Sequência Simples

Trata-se de um grupo de comandos executados de forma sequencial. Os comandos são executados de cima para baixo, sendo que o próximo comando da lista só poderá ser executado após o término do comando anterior.

É comum delimitar os comandos de uma sequência simples pelas palavras reservadas “INÍCIO” e “FIM”, formando assim um bloco de comandos.

Page 4: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 4

FLUXOGRAMA PORTUGOL

..... < comando 1 > < comando 2 > ........ < comando n > ....

Exemplo: Calcular a área de um triângulo: Algoritmo Declare B, H, AREA : real inicio leia (B) {base} leia (H) {altura} AREA ← ( B * H ) / 2 {calcula a área} escreva(AREA) fim.

Comandos de Entrada e Saída

A maioria dos algoritmos que escrevemos necessita receber dados externos, e em algum momento necessitará comunicar respostas, para tanto usamos os comandos de entrada e saída. Para a tarefa de buscar valores externos ao algoritmo utilizamos o comando LEIA e para enviar dados para a unidade de saída utilizamos o IMPRIMA ou ESCREVA.

A sintaxe destes comandos é:

Entrada de dados:

leia (<identificador 1>, <identificador 2>, ..., <identificador n>)

comando 1

comando 2

comando n

Page 5: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 5

Saída de dados:

imprima (<identificador 1>, <identificador 2>, ..., <identificador n>) imprima (<expressão numérica>) imprima( “cadeia de caracteres”)

FLUXOGRAMA PORTUGOL

LEIA (var 1, ..., var n) IMPRIMA (var 1, ... , var n) ou IMPRIMA (“mensagem”, var )

Estrutura Condicional Simples

Na vida real tomamos decisões a todo o momento baseadas em uma situação existente. Em um algoritmo, chamamos esta situação de condição. Associada a uma condição, existirá uma alternativa possível de ações.

Exemplo: "se tiver R$ 10,00 sobrando então irei ao cinema hoje à noite.” A condição nesta frase é "tiver R$ 10,00 sobrando". Ela é uma expressão lógica, pois a pergunta "Tenho R$ 10,00 sobrando?" Pode (tem que) ser respondida com "Sim" ou "Não".

Lembre-se, então: em um algoritmo, toda condição tem que ser uma expressão lógica, algo que possa pensar como “ isto é VERDADEIRO” ou “isto é FALSO”. Se a condição for verdadeira, a ação a ser executada é "irei ao cinema", se a resposta à pergunta "Tenho dinheiro suficiente?" for "Sim". Então, em um algoritmo, as ações são um ou mais comandos que serão realizados apenas se a avaliação da condição resulta VERDADEIRO.

Vamos colocar agora a frase do exemplo anterior em outra forma, mais parecida com nosso Português Estruturado:

se "tiver R$ 10,00 sobrando" então "irei ao cinema"

fim-se

leia var1, ..., var n

imprima var 1, ... var n

Page 6: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 6

Veja que coloquei em negrito três palavras: se, então e fim-se. Elas são muito importantes na estrutura dos comandos de decisão. Como próximo passo, vamos generalizar a estrutura que criamos acima:

se <condição> então <ações a serem realizadas se a condição for verdadeira>

fim-se Para terminar a nossa comparação, devemos lembrar que os comandos de um algoritmo são sempre indispensáveis, e que o computador só lida com quantidades definidas (ou seja, ele não sabe o que é "ter R$ 10,00 sobrando"). Para aproximar mais nossa frase de um algoritmo, poderemos ter a seguinte forma:

se Dinheiro >= 10 então Ir_ao_Cinema <- VERDADEIRO

Fim-se O exemplo acima poderia ser estendido para o caso do sujeito não ter dinheiro sobrando: "se tiver R$ 10,00 sobrando irei ao cinema hoje à noite, mas se não tiver ficarei vendo TV em casa". Neste caso, uma codificação possível para esse algoritmo seria:

se Dinheiro >= 10 então Ir_ao_Cinema <- VERDADEIRO Ver_TV <- FALSO

Fim-se se Dinheiro < 10 então

Ir_ao_Cinema <- FALSO Ver_TV <- VERDADEIRO

Fim-se A sintaxe da estrutura condicional simples é:

Se <condição> então <ação(ões)> fim-se

Alguns autores preferem colocar o então na segunda linha. Isto não modifica a estrutura nem a forma de execução.

Se <condição> então <ação(ões)>

Page 7: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 7

fim-se

Estrutura Condicional Composta

É uma extensão da alternativa simples, neste caso temos que determinar o que fazer se a condição for verdadeira, e o que fazer se a condição for falsa. O formato deste comando é:

Se <condição>

então <ação 1> senão <ação 2>

fim-se Semântica: se a condição contida no comando SE for verdadeira são executados os comandos internos ao ENTÃO, e os comandos internos ao SENÃO são desprezados até encontrar o FIM-SE correspondente. Caso contrário, se a condição contida no comando SE for falsa, os comandos internos ao ENTÃO são desprezados e os comandos internos ao SENÃO são executados até encontrar o FIM-SE correspondente. Exemplo: DELTA ← 4 * A * C - B ** 2 se DELTA < 0 então imprima (“raízes imaginárias”) senão X ← DELTA ^ 0.5 fim-se

FLUXOGRAMA PORTUGOL

SE <condição > ENTÃO < comando 1> < comando 2> ..... <comando n>; FIMSE

comando 1

comando n

condição

V

F

Page 8: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 8

FLUXOGRAMA PORTUGOL

SE <condição > ENTÃO < comando 1> < comando 2> ..... <comando n> SENÃO < comando 1> < comando 2> ..... < comando n> FIM-SE

Aninhamento de Estruturas

Os algoritmos podem ser formados por diversas estruturas, cada uma com uma função específica. Existem casos em que uma estrutura poderá estar dentro de outra, e a isto se dá o nome de aninhamento. Nada impede que exista uma condição dentro de outra, e isto também poderá ocorrer com as próximas estruturas de comando.

Não existe um limite para o número de estruturas que podem ser colocadas dentro de outra estrutura qualquer, mas se o número for muito grande, a compreensão e a visualização serão prejudicadas. Para facilitar a compreensão e a visualização do início e do final de cada estrutura, utiliza-se o artifício da identação.

Nos casos em que são necessárias muitas estruturas internas, a solução é a utilização do processo de modularização do algoritmo. Exemplo:

SEM IDENTAÇÃO

COM IDENTAÇÃO

Se A <> 0 então B ← 0 se C <> 0 então D ← 0 F ← 3 Fim-se; G ← 77 Fim-se;

Se A <> 0 então B ← 0 se C <> 0 então D ← 0 F ← 3 Fim-se G ← 77 Fim-se

comando 1

comando n

condição

comando 11

comando nn

V F

Page 9: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 9

Uma regra importante, que deve ser sempre seguida, é a de que o início e o final da estrutura mais interna devem ser sempre dentro da estrutura imediata que a contém.

Múltipla Escolha

Em algumas situações é necessário termos várias soluções ligadas a respostas diferentes, neste caso o comando de alternativa simples ou composta não é uma solução prática, isto porque obrigará o programador a escrever muitas linhas de programa, além de ter que criar vários comandos de alternativas compostas e verificar a validade de suas condições para que o comando execute o caminho correto para uma determinada condição. Temos então o comando de alternativa de múltipla escolha.

O funcionamento deste comando obedece a seguinte regra:

caso <expressão> valor1 : <comando1> valor 2 :< comando2> ... valor n : <comando n> senão: <comando n+1> fim-caso

Semântica:

• a expressão do CASO é avaliada, e deve gerar um resultado determinado;

• este resultado é comparado com os valores indicados colocados do lado esquerdo do dois pontos ( : );

• quando um valor igual for encontrado, o comando colocado ao lado direito do dois pontos (:) será executado, retornando ao FIMCASO correspondente, sem executar mais nenhuma comparação, onde prossegue o fluxo normal do algoritmo;

• caso nenhum valor seja igual ao resultado obtido na expressão do CASO o comando existente do lado direito do dois pontos ( : ) do SENÃO será executado, retornando ao FIMCASO onde prossegue o fluxo normal do algoritmo.

Esta estrutura também aparece na literatura com a forma:

Page 10: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 10

escolha < expressão-de-seleção > caso < exp 1 > , < exp 2 >, ... , < exp n >

< lista-de-comandos-1 > caso < exp 1 > , < exp 2 >, ... , < exp n >

< lista-de-comandos-2 > outrocaso

< lista-de-comandos-3 > Fim-escolha

Teste de Mesa

Um algoritmo, depois de ser elaborado, pode (e deve) ser testado. Para tal, utilizamos um método conhecido como teste de mesa, que é como uma simulação de todos os passos, ou seja, entradas, comandos e instruções do algoritmo, a fim de saber se ele chega ao resultado a que se propõe e se a lógica está correta.

Para tal, preenche-se uma tabela com valores para as variáveis e segue-se o fluxo de execução do algoritmo, simulando a execução de cada instrução, ou seja, refazendo o que o computador faria ao executar cada instrução. A cada comando simulado (executado), o valor das variáveis na tabela deve ser atualizado. Se, para uma instrução executada, uma ou mais variáveis não ficaram com os valores esperados, há um erro na lógica do algoritmo.

Algoritmo Teste de Mesa Declare Variáveis Saída a,b,c: REAL a b c Inicio ? ? ? a <- 5 5 ? ? b <- 15 5 15 ? c <- a+b 5 15 20 escreva (c) 5 15 20 20 a <- 10 10 15 20 b <- 25 10 25 20 c <- a+b 10 25 35 escreva (c) 10 25 35 35 a <- a-b (10-25)= -

15 25 35

escreva (a) -15 25 35 -15 a <- 0 0 25 35 b <- 0 0 0 35 c <- 0 0 0 0

Page 11: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 11

Fim Esta é uma sugestão. Você pode simplificá-la, escrevendo apenas as variáveis e saídas. Economize tempo não escrevendo os comandos e anotando apenas as alterações ocorridas nas variáveis. Quando algum comando não efetuar alterações de valores nem uma saída, então não precisará anotar. Isto resultará em ganho de tempo na construção do teste.

Estruturas de Repetição

Para a solução de diversos problemas, as sequências simples e as estruturas condicionais devem ser executadas diversas vezes. Em muitos destes casos, as instruções para execução são as mesmas, alterando apenas os valores das variáveis. Os comandos de repetição permitem o reaproveitamento de instruções do algoritmo. Vejamos estas estruturas

▪ Estrutura de Repetição Enquanto

Na estrutura enquanto..faça, a expressão lógica é avaliada e, se ela for verdadeira, a lista de comandos é executada. Isso se repete até que a condição seja falsa. Veja a sua forma geral:

enquanto <expressão lógica> faça <lista de comandos>

Fim-enquanto

Semântica - a condição (<expressão lógica>) entre o ENQUANTO e o FAÇA é avaliada antes de executar qualquer comando interno à estrutura (<lista de comandos>).

Se a condição for verdadeira, os comandos são executados. Se for falsa todos os comandos internos ao ENQUANTO serão desprezados e a repetição é encerrada, mesmo se não tiver executado os comandos uma vez. Ao encontrar o “fim-enquanto”, a execução dos comandos volta para a linha enquanto, analisando a expressão lógica novamente.

Exemplo: Calcular a soma dos números inteiros até 100. Algoritmo Declare SOMA, NUM: inteiro inicio SOMA ← 0 NUM ← 0 enquanto NUM <= 100 faça SOMA ← SOMA + NUM NUM ← NUM + 1

Page 12: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 12

Fim-enquanto escreva(SOMA) fim.

Cuidado com os laços (repetições) infinitos. Em algumas construções, a condição da estrutura de repetição (condição de interrupção) não resulta em valores que resultem em interrupção da repetição. Nestes casos, o programa é executado para sempre. É o costumeiro: TRAVOU!

FLUXOGRAMA PORTUGOL

ENQUANTO <condição > FAÇA < comando 1>; < comando 2>; ..... <comando n>; FIMENQUANTO;

▪ Repita...Até

Nessa estrutura, todos os comandos da lista são executados e uma expressão lógica é avaliada. Isto se repete até que a avaliação da condição resulte em FALSO, quanto então o próximo comando a ser executado é o comando imediatamente após o ate. Cada repetição da lista de comandos também é chamada de iteração e essa estrutura também é chamada de laço de repetição. Sua forma geral é:

Sintaxe:

repita <lista de comandos>

até <expressão lógica>

comando 1

comando n

condição

F

V

Page 13: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 13

Semântica: os comandos internos ao REPITA são executados até que a condição após o até seja avaliada com resultado VERDADEIRO. Se o resultado da expressão lógica for FALSO, a lista de comandos será executada novamente. Observe que a lista de comandos é executada antes da avaliação da expressão. Desta forma, a lista é executada, no mínimo, uma vez, independente da expressão lógica.

Exemplo: Algoritmo que escreve os números de 1 a 10. Algoritmo Declare i: INTEIRO inicio i<- 1 repita escreva (i) i <- i + 1 ate i > 10 fim-algoritmo No exemplo acima, a variável i controla o número de repetições do laço. Normalmente, a variável de controle do laço recebe um valor inicial, é incrementada (ou decrementada) de um valor constante no laço e tem seu valor testado no final do laço. Ao chegar a um determinado valor, o laço é interrompido. A inicialização da variável contadora deve acontecer fora do laço, antes do seu início.

FLUXOGRAMA PORTUGOL

REPITA < comando 1> < comando 2> ..... <comando n> ATÉ <condição >

COMPARAÇÃO ENTRE OS COMANDOS ENQUANTO E REPITA ENQUANTO REPITA

Os comandos internos ao enquanto podem nunca serem executados;

Os comandos internos ao repita são executados pelo menos uma vez;

o laço do enquanto é executado quando a condição for verdadeira;

o laço do repita é realizado quando a condição for falsa;

a estrutura enquanto testa e faz.

a estrutura repita faz e testa.

Page 14: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 14

Estrutura de Repetição com Variável de Controle

O comando para...faça também permite a descrição, dentro de um algoritmo, de uma estrutura de repetição. Sua forma geral é:

para <variável de controle> de <valor inicial> até <valor final> [passo <incremento>] faça <lista de comandos> Fim-para

Na estrutura para..faça, a variável de controle é inicializada com <valor inicial> e no início de cada iteração, seu valor é comparado com <valor final>. Se o valor da variável for menor ou igual a <valor final>, a lista de comandos é executada e após ser executado o último comando da lista, a variável de controle é incrementada. Isto se repete até que o valor da variável de controle seja maior que <valor final>, quando então é executado o comando imediatamente após a palavra fim-para. A instrução passo é necessária se o incremento for diferente de 1.

Um algoritmo que lê escreve os números ímpares de 1 a 1000.

para i de 1 ate 1000 passo 2 faça // Incrementa i de 2 em 2 escreva (i, “ é ímpar”) fim-para

Observações sobre o comando:

• dentro dos comandos internos ao PARA a variável de controle não pode ser alterada;

• os valores de início, final e incremento podem ser números, variáveis ou expressões;

• não é permitido alterar as variáveis com os valores de início, final e incremento dentro da estrutura;

• quando o valor do incremento for 1, este pode ser omitido; • o valor do incremento pode ser negativo, neste caso o valor inicial da

variável de controle deve ser maior do que seu valor final.

Page 15: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 15

FLUXOGRAMA PORTUGOL

PARA <variável> DE <inicio> ATÉ <final> PASSO <incremento> FAÇA <lista de comandos> FIM-PARA

RESUMO – ESTRUTURAS DE REPETIÇÃO

A- ENQUANTO Enquanto a condição for VERDADEIRA, o conjunto de comandos é executado. Se a condição é FALSA o conjunto NÃO é executado. ENQUANTO < condição > FAÇA comando 1 comando n FIM-ENQUANTO

B- REPITA -Os comandos internos a ele são executados ao menos uma vez, independente da condição. - O laço REPITA é realizado somente se a condição for FALSA. REPITA comando 1 … comando n ATÉ <condição>

C- PARA -Uma variável que controla o início e o fim da execução. PARA variável DE valor1 ATÉ valor2 PASSO valor3 FAÇA comando 1 … comando n FIM-PARA

Variáveis Compostas Homogêneas - Arrays

A declaração de variáveis, uma a uma, é suficiente para a codificação algorítmica da solução de uma ampla gama de problemas, mas é insuficiente para resolver um grande número de problemas computacionais.

para <var > de <inicio> até <fim> passo <valor>

comando 1

comando n

Page 16: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 16

Imagine, por exemplo, como faríamos para construir um algoritmo que lesse os nomes de 500 pessoas e imprimisse um relatório destes mesmos nomes, mas ordenados alfabeticamente. Não seria uma tarefa simples, pois teríamos que definir 500 variáveis do tipo literal, como é mostrado abaixo:

Algoritmo "Inviável" Declare nome1, nome2, nome3, nome4, ..., nome499, nome500: caractere inicio leia (nome1,nome2,...,nome500) ... Fim Considere o tamanho do algoritmo, e o trabalho braçal necessário para construí-lo. Para resolver problemas como este, e outros, existem as variáveis indexadas. A declaração de uma variável indexada corresponde, na verdade, à declaração de várias variáveis cujo identificador difere apenas por um índice. O índice corresponde a um valor numérico começando por 1. Cada variável indexada pode receber valores no decorrer do algoritmo como se fosse uma variável comum.

Variáveis Compostas Homogêneas Unidimensionais (Vetores)

Variáveis indexadas com uma única dimensão, também conhecidas como vetores, são referenciadas por um único índice. A sintaxe para declaração é:

<identificador> : vetor [<tamanho>] de < tipo > Tamanho [VI..VF] �

Vi é o valor inicial do índice e VF é o valor final do índice.

Exemplo IDADE: VETOR [1..5] DE INTEIRO NOMES: VETOR [1..5] DE CARACTERE A declaração acima corresponde à declaração de 10 variáveis: nomes[1], nomes[2], nomes[3], nomes[4], nomes[5], idades[1], idades[2], idades[3], idades[4] e idades[5]. Para se atribuir um valor a um elemento do vetor devemos utilizar o seguinte padrão:

Page 17: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 17

< identificador>[<posição>] <- <valor>

Exemplos: nomes[1] <- “João da Silva” idades[1] <- 35 nomes[3] <- “Maria Aparecida” idades[3] <- idades[1] i <- 5 idades[i] <- 45

Variáveis Compostas Homogêneas Bidimensionais (Matrizes)

Variáveis indexadas com duas dimensões, também conhecida como matrizes, são referenciadas por dois índices, cada qual começando por 1.

Observe que as linguagens de programação determinam os limites válidos para os índices. Cada dimensão da matriz, em geral, representa uma classificação de informação.

Por exemplo, as linhas poderiam representar um aluno, enquanto as colunas representariam as notas. É possível criar variáveis compostas com mais de duas dimensões, basta acrescentar as novas dimensões na declaração e na manipulação (da mesma forma como acrescentamos aqui).

É importante ressaltar que cada posição da matriz é uma variável interna e, como tal, ocupa espaço. Assim, temos que nos preocupar com o total de espaço utilizado pela estrutura para não consumir todo o espaço disponível e causar falhas nos programas. A sintaxe para declaração é:

<identificador> : vetor [<tamanho1>,<tamanho2>] de < tipo >

Ex: PESSOAS: VETOR [1..2,1..3] DE CARACTERE A declaração acima corresponde à declaração de 6 variáveis: PESSOAS[1,1], PESSOAS [1,2], PESSOAS[1,3], PESSOAS[2,1], PESSOAS [2,2], e PESSOAS [2,3]. Para se atribuir um valor a um elemento do vetor devemos utilizar o seguinte padrão: < identificador>[<posição 1>,<posição 2>] <- <valor> Ex: PESSOAS[1,3]<- “Tonet”

Page 18: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 18

Modularização

A Programação Estruturada é o resultado de uma série de estudos e propostas de disciplinas e metodologias para o desenvolvimento de software. Evitando as comparações com outras técnicas de programação, a programação estruturada prega conceitos como refinamentos sucessivos e modularização, buscando levar ao código aspectos de confiabilidade, legibilidade, manutenibilidade e flexibilidade. A metodologia de refinamentos sucessivos utiliza a ideia de “dividir para conquistar”. Neste contexto, resolver um problema complexo é mais fácil se não considerarmos todos os aspectos do problema simultaneamente, isto é, se for possível a decomposição de um problema grande numa série de subproblemas mais simples. Quando no processo de desenvolvimento do algoritmo faz-se a opção por divisão do algoritmo, este procedimento conduz à modularização da solução do problema. Um módulo é, então, um grupo de instruções organizadas em um trecho de algoritmo com uma função bem definida. Esta divisão da atividade de programação permite que, a cada instante, toda a atenção do programador esteja concentrada na solução de um problema específico e bem definido. Da mesma forma, pode-se verificar a correção do algoritmo por etapas analisando-se a correção de cada módulo. A decisão pela divisão do algoritmo em módulos traz benefícios como:

• maior flexibilidade e facilidade de manutenção, já que o módulo pode esconder dos outros módulos detalhes que só interessam a ele;

• permite a divisão de tarefa em uma equipe, onde cada módulo pode ser desenvolvido por um programador diferente;

• facilita o teste, porque cada módulo pode ser testado individualmente, e depois ser incorporado ao conjunto;

• facilita o projeto, na medida em que permite a abstração. Recomenda-se que os módulos sejam curtos e que realizem uma tarefa específica. Além disso, em relação aos dados manipulados pelo módulo, é importante que o módulo possua estruturas de dados próprias, suficientes e necessárias apenas para atingir o objetivo final do módulo.

Um bom algoritmo deve procurar reduzir a interação entre módulos (acoplamento) e aumentar o relacionamento dos elementos de um mesmo módulo (coesão).

Page 19: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 19

A modularização, que acaba se traduzindo na construção de procedimentos e funções, traz vantagens como a reutilização de código que se repete em vários programas ou que é executado várias vezes dentro do mesmo programa. Como é de se esperar, também possui desvantagens, como o acréscimo de tempo na execução de programas constituídos de módulos, devido ao trabalho adicional de ativação do módulo. Os procedimentos e funções são subprogramas. Como tal, possuem um cabeçalho (com um identificador do módulo), seção de declarações e blocos de comandos. Deixando as linguagens de lado, que implementam suas próprias regras para procedimentos e funções, os procedimentos são módulos que executam uma ação sem retornar um resultado para o programa, enquanto as funções são módulos que retornam um resultado. Vamos adotar a sintaxe abaixo:

Procedimento <identificador> (<lista de parâmetros>) <declaração de variáveis> Início <comandos> Fim

Função <identificador> (<lista de parâmetros>): tipo_retorno <declaração de variáveis> Início <comandos> Fim.

As variáveis declaradas dentro de um módulo existirão em memória somente durante a execução do módulo. Ao ser carregado, o módulo cria um “ambiente” para a execução, onde constam suas variáveis. Este “ambiente” é completamente destruído quando o módulo termina. As variáveis declaradas no escopo do módulo são ditas variáveis locais e só podem ser acessadas pelo próprio módulo e pelos módulos criados dentro dele. As variáveis declaradas no programa principal são chamadas variáveis globais, que são acessíveis por todos os módulos, enquanto as variáveis locais só estão acessíveis ao módulo. É permitida a criação de variáveis globais e locais com o mesmo nome, caso em que será considerada a variável local quando o módulo possuir a variável declarada localmente e, nos demais casos, a variável global será a considerada. Em outras palavras, quando existe conflito de nomes (duas variáveis com mesmo nome, sendo uma local e outra global), vale a definição local, e a global deixa de poder ser acessada (embora continua existindo normalmente).

Page 20: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 20

A chamada aos módulos é realizada pela colocação de nome do módulo (e seus parâmetros, caso existam) em uma linha de comando. Quando se tratar de um procedimento, coloca-se o nome do procedimento e seus parâmetros como único comando a ser executado na linha. Quando for uma função, esta deve seguir as regras para expressões (uma função retorna valor!). Então, deve aparecer em conjunto com instruções que façam uso do resultado: atribuição, escreva, expressões etc. Alguns autores entendem que é permitido utilizar o nome da função isoladamente, mas o valor retornado será perdido. Então, qual seria a utilidade da função chamada isoladamente, se o resultado não será proveitoso? Na definição da lista de parâmetros dos módulos, podemos ter uma série de variáveis, que serão utilizadas no módulo. Os parâmetros podem ser de entrada e/ou de saída. Estes parâmetros aparecem em dois locais: na linha de cabeçalho do módulo – na lista de parâmetros, quando são chamados de parâmetros FORMAIS e na chamada do módulo (execução), quando são chamados de parâmetros REAIS ou EFETIVOS. Note que os parâmetros formais são variáveis locais ao módulo. Já os parâmetros efetivos – quando são utilizados apenas como entrada de dados para o módulo – podem ser variáveis, constantes ou expressões. Os parâmetros efetivos que são usados como saída de dados devem ser variáveis. Nos casos onde os parâmetros efetivos devem ser variáveis (quando são usados como parâmetros de entrada e saída), dizemos que a passagem do parâmetro ocorre por referência, enquanto nos casos da utilização do parâmetro apenas para entrada, temos a passagem de parâmetros por valor.

O efeito disto é que na passagem de parâmetros por valor somente os valores são passados para os parâmetros formais. Assim, qualquer modificação nestas variáveis (parâmetros formais) não afetam a variável global. De outro lado, na passagem de parâmetros por referência, é criado um link (ponteiro) que conecta a variável local (parâmetro formal) com a variável externa (parâmetro efetivo). Qualquer alteração na variável local deste link, afeta diretamente a variável externa. De fato, as alterações feitas no parâmetro formal, na verdade são realizados no parâmetro efetivo (por conta do ponteiro).

Existem restrições para a passagem de parâmetros: a quantidade de parâmetros formais deve ser a mesma dos parâmetros efetivos e os tipos de dados devem ser compatíveis. Veja o exemplo a seguir:

Page 21: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 21

Algoritmo "Exemplo" Declare X : INTEIRO procedimento PassagemPorValor( A : inteiro) inicio A ← 5 fim Inicio X ← 10 PassagemPorValor(X) // Chamada ao procedimento escreva(X) Fim No exemplo acima, o conteúdo da variável “X” não será alterado após o retorno ao programa principal. Ao “chamar” o módulo (procedimento) PassagemPorValor(X), o conteúdo da variável X (10) é passado para o módulo (variável local A). A variável A inicia o módulo com o valor 10, mas recebe o valor 5 durante a execução. Assim, quando o módulo termina, A é destruída e a variável X continua com valor 10. Finalmente, será impresso o valor 10 na tela. Geralmente, usamos uma palavra para indicar que a passagem de parâmetro é por referência. Adoto a palavra “var”, conforme a maioria dos autores da área, mas é possível que outras palavras sejam encontradas com este propósito. Vejamos o mesmo exemplo com passagem de parâmetro por referência. Algoritmo "Exemplo2" Declare X : INTEIRO procedimento PassagemPorRef( var A : inteiro) inicio A ← 5 fim Inicio X ← 10 PassagemPorRef(X) // Chamada ao procedimento escreva(X) Fim Agora, como a passagem se dará por referência, não será o valor de X que será o parâmetro a ser passado e sim, o endereço de memória da variável (A

Page 22: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 22

passa a ser um ponteiro para X). Quando o comando A 5 é executado, o ponteiro A faz com que a variável X receba o resultado. Temos aqui a passagem de parâmetro por referência e a demonstração de uma variável de entrada e saída. No caso de uma função, esta sempre retorna valor. Então, a declaração deve ser acompanhada de um tipo de dado para o valor de retorno. É importante salientar que a função só pode retornar um valor. Exemplo: Algoritmo "Exemplo" Declare X, Y, Z : inteiro Função Soma( A, B : inteiro) Declare C : inteiro inicio C ← A + B Retorne C fim Inicio Leia(X, Y) Z ← Soma(X, Y) escreva(Z) Fim No exemplo acima, a função soma recebe dois parâmetros, calcula a soma entre eles e retorna o resultado encontrado. Suponha que os valores digitados para X e Y sejam 5 e 10, respectivamente. Neste caso, o valor de Z, escrito ao final, será 15.

Independência Funcional

Quando projetamos um algoritmo devemos construir módulos com apenas um propósito (alta coesão), e diminuir ao máximo a interação entre eles (baixo nível de acoplamento). A independência funcional é fundamental para um bom projeto. Coesão: É a medida da força funcional relativa de um módulo. É a medida que indica se um módulo possui uma função bem definida no sistema. Podemos classificar um software em relação à coesão, da seguinte maneira: • coincidental: quando o módulo realiza várias tarefas, que não tem

nenhuma relação uma com a outra;

Page 23: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 23

• lógica: quando o módulo executa tarefas logicamente relacionadas, por exemplo, um módulo que realiza todas as entradas de dados de um software;

• temporal: quando o módulo contém tarefas que são relacionadas pelo fato de todas terem que ser executadas num mesmo intervalo de tempo.

Acoplamento: depende da complexidade da interface (interação) entre os módulos. Quando temos um alto acoplamento, significa dizer que um módulo deve conhecer detalhes da implementação do outro, as alterações propagam-se pelo sistema, e o sistema é potencialmente mais difícil de entender. Podemos classificar um software, em relação ao acoplamento, da seguinte maneira: • baixo acoplamento: quando a interface entre módulos se faz através da

passagem de dados; • acoplamento moderado: quando a interface entre os módulos é feita por

controle, por exemplo, quando o módulo1 passa o controle para o módulo 2;

• acoplamento elevado: quando o módulo está ligado a um ambiente externo ao software, por exemplo, a Entrada/Saída acopla um módulo a dispositivos, formatos e protocolos de comunicação. Ou ainda, módulos que utilizam variáveis globais.

Quanto maior o nível de coesão e menor o nível de acoplamento, melhor é o software.

Recursão

Na programação de computadores, a recursão é uma técnica que define um problema em termos de uma ou mais versões menores deste mesmo problema. Esta ferramenta pode ser utilizada sempre que for possível expressar a solução de um problema em função do próprio problema. Sendo assim, um número infinito de cálculos pode ser definido por um programa recursivo finito, ainda que este não contenha repetições explícitas (como do, while, for, repeat etc). A recursão não é um conceito novo, sendo diretamente derivado das relações de recorrência da Matemática. Vantagens X Desvantagens Um programa recursivo é mais elegante e menor que a sua versão iterativa, além de exibir com maior clareza o processo utilizado, desde que o problema ou os dados sejam naturalmente definidos através de recorrência. Por outro

Page 24: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 24

lado, um programa recursivo exige mais espaço de memória e é, na grande maioria dos casos, mais lento do que a versão iterativa.

Direto ao Ponto! Estrutura Sequencial ou Sequência: usada para executar comandos passo a passo, sabendo que todos eles serão executados na ordem de escrita, sem nenhum desvio. Uma sequência pode possuir um ou vários comandos, normalmente delimitados pelos identificadores Início e Fim. Inicio

Comando_1 ... Comando_n

Fim Estrutura Condicional ou Seleção: usada para tomar decisões, ou seja desviar a execução do algoritmo de acordo com uma condição, podendo ser simples ou composta. Simples Se (Expressão Lógica) Então Sequência_1 Fim-se

Composta Se (Expressão Lógica) Então Sequência_1 Senão Sequência_2 Fim-se

Repetição: serve para efetuar um conjunto de ações repetidas vezes. Existem três tipos básicos de repetições: Enquanto (Expressão Lógica) faça Sequência Fim-enquanto

O comando Enquanto analisa a Expressão Lógica e enquanto o seu resultado for o valor lógico Verdade a Sequência é executada.

Para variável de valor_inicial até valor_final faça Sequência Fim-para

O comando Para incrementa, a variável a partir do valor_inicial em uma unidade até que esta atinja o valor_final. E para cada incremento a sequência é executada.

Repita Sequência Até (Expressão Lógica)

O comando Repita executa a Sequência até que o valor retornado pela Expressão Lógica seja Verdadeiro.

Modularização

Procedimento NomeDoProcedimento [(parâmetros)] Variáveis Inicio Sequência Fim

Procedimentos: bloco de código precedido de um cabeçalho que contém o Nome do procedimento e seus parâmetros. Um procedimento NÃO retorna valor.

Função NomeDaFunção [(parâmetros)] : tipo_da_função Variáveis

Funções: é semelhante a um procedimento, sendo que esta deve retornar, obrigatoriamente, um valor.

Page 25: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 25

Inicio Sequência NomeDaFunção (expressão de retorno) Ou retorne (expressão de retorno) Fim

PROGRAMAÇÃO ORIENTADA A OBJETOS

A expressão “orientado a objetos" significa que o software é organizado como uma coleção de objetos separados que incorporam tanto a estrutura quanto o comportamento dos componentes do sistema. Isto é diferente da programação convencional, em que a estrutura e o comportamento dos dados têm poucos vínculos entre si.

Apresenta-se a seguir uma comparação entre as duas formas de desenvolvimento:

Desenvolvimento Estruturado Desenvolvimento Orientado a Objetos

• Fluxo de dados

• Transformações

• Repositórios de dados

• Entidades

• Especificação de procedimentos

• Dicionário de dados

• Objetos (Classes)

o Atributos

o Operações

• Associações e Multiplicidade

• Herança

• Outros componentes especializados

Foco nos processamentos do sistema.

Foco nos componentes do sistema.

A programação orientada a objetos (POO) é uma metodologia de programação que provê modularidade e reusabilidade. A POO introduz uma abordagem na qual o programador visualiza seu programa em execução como uma coleção de objetos cooperantes que se comunicam por meio de mensagens. Cada um dos objetos é uma instância de uma classe e todas as classes formam uma hierarquia de classes unidas via relacionamento de herança. Existem alguns aspectos importantes na definição de POO:

• usa objetos, e não funções ou procedimentos como seu bloco lógico fundamental de construção de programas;

• objetos comunicam-se por mensagens;

• cada objeto é instância de uma classe;

• classes estão relacionadas umas com as outras.

Page 26: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 26

A programação orientada a objetos dá ênfase à estrutura de dados, adicionando funcionalidade ou capacidade de processamento a estas estruturas. Em linguagens tradicionais, a importância maior é atribuída a processos e sua implementação em subprogramas.

Entendido o contexto, vamos, agora, abordar os conceitos de programação orientada a objetos de forma mais detalhada. Os objetos não foram concebidos a partir do nada. Eles representam o resultado de uma evolução nas técnicas de programação. Podemos afirmar que os objetos são uma evolução natural dos tipos abstratos de dados.

Você se recorda dos Tipos Abstratos de Dados? Chegou a estudar o TAD? Pois este conceito foi de grande importância para a POO. Os TADs possuem características como encapsulamento e modularidade, hoje conceitos importantes na programação.

Na declaração do tipo de uma variável – na programação tradicional com TAD – delimita-se o conjunto de valores que ela pode assumir e as operações que ela pode sofrer. A especificação de um tipo de dados deve definir os objetos constituintes do tipo e as operações aplicáveis a estes objetos. Além disso, é possível estabelecer uma maneira de representação para os objetos.

Geralmente, uma linguagem de programação provê alguns tipos básicos pré-definidos (tipos primitivos) e ainda oferece mecanismos para definição de novos tipos de dados renomeando tipos existentes ou agregando alguns tipos primitivos e/ou definidos pelo usuário. Existem linguagens que além de proporcionarem tipos de dados primitivos e tipos de dados definidos pelo usuário, incorporam o conceito de tipos abstratos de dados. Tipos abstratos de dados envolvem a disponibilidade de dados e operações (comportamento) sobre estes dados em uma única unidade.

A abstração de dados é utilizada para introduzir um novo tipo de objeto, que é considerado útil no domínio do problema a ser resolvido. Os usuários do tipo abstrato de dados preocupam-se apenas com o comportamento dos objetos do tipo, demonstrado em termos de operações significativas para tais objetos, não necessitando conhecer como estes objetos estão representados ou como as operações são realizadas neles (ocultamento de informação). Portanto, uma abstração de dados consiste de um conjunto de valores e de operações que completamente caracterizam o comportamento dos objetos. Esta propriedade é garantida fazendo-se com que as operações sejam a única maneira de criar e manipular os objetos. Como consequência, é necessário incluir operações suficientes para proporcionar todas as possíveis ações que os objetos possam sofrer.

O que é abstração? No dicionário Aurélio, abstração significa considerar isoladamente coisas que estão unidas, ou seja, partimos do enfoque global de um determinado problema e procuramos separar os elementos fundamentais e colocá-los de uma forma mais próxima da solução. A ideia da abstração é identificar os elementos essenciais de um problema e suas propriedades fundamentais, separando ocorrências e atributos acidentais.

Page 27: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 27

Para a programação orientada a objetos, abstração é o processo de identificação dos objetos e seus relacionamentos. A POO permite ao programador concentrar-se no que um objeto é e faz, sem se preocupar em como ele o faz. A abstração se dá em diferentes níveis: inicialmente abstrai-se o objeto; de um conjunto de objetos cria-se um conjunto de classes relacionadas; de um conjunto de classes cria-se uma biblioteca de classes e assim por diante.

Voltando aos TADs: um tipo abstrato de dados pode ser definido como um tipo de dados que satisfaz as seguintes condições:

• A representação e definição do tipo e as operações nos objetos do tipo são descritos em uma única unidade sintática (como em uma Unit, em Turbo Pascal)

• A representação (implementação) dos objetos do tipo é escondida das unidades de programa que utilizam o tipo; portanto, as únicas operações possíveis em tais objetos são aquelas que fazem parte da definição (interface) do tipo.

O estilo de programação com tipos abstratos de dados inclui o princípio de encapsulamento, que proporciona ocultamento e proteção de informação, viabilizando a manutenção e facilitando a evolução de sistemas. Com o encapsulamento da estrutura de dados que representa os objetos e dos procedimentos que representam as possíveis operações sobre os objetos, tem-se que uma alteração na estrutura de dados provavelmente exigirá modificações nos procedimentos, porém o efeito dessas modificações fica restrito às fronteiras da unidade sintática que descreve o tipo (a Unit, no caso do Pascal). Se a interface permanecer a mesma, as unidades de programa que utilizam o tipo não necessitam sofrer alterações.

Outra vantagem que pode ser citada é o considerável aumento de confiabilidade obtido através do princípio da proteção. Unidades de programa que utilizam um tipo não estão aptas a fazer modificações diretamente. Elas somente podem chamar as operações que estão disponíveis na interface, aumentando a integridade dos objetos.

O ponto chave para criar TAD (ou objetos) eficientes é fazer uma boa abstração do objeto. O conceito de abstração nos leva à ideia do exame seletivo de determinados aspectos de um problema. O objetivo da abstração é isolar os aspectos que sejam importantes para algum propósito e suprimir os que não o forem. A abstração deve sempre visar a um propósito, porque este determina o que é e o que não é importante.

Page 28: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 28

Em outras palavras, a abstração é a habilidade de ignorar os aspectos de um assunto não relevantes para o propósito em questão, tornando possível uma concentração maior nos assuntos principais. Em termos práticos, a abstração consiste na seleção que um desenvolvedor faz de alguns aspectos dos objetos que serão representados no sistema, suprimindo outros que não são do interesse da aplicação. Pessoas, lugares, coisas e conceitos do mundo real são normalmente complexos. Quando queremos diminuir a complexidade, selecionamos parte do que estamos analisando, ao invés de tentarmos representar o todo.

Alguns autores classificam a abstração em dois tipos:

• Abstração de procedimentos: baseia-se no princípio de que qualquer operação com um efeito bem definido pode ser tratada por seus usuários como uma entidade única, mesmo que a operação seja realmente conseguida através de alguma sequência de operações de nível mais baixo.

• Abstração de objetos: consiste em definir os serviços e atributos aplicáveis a estes objetos. Estes objetos só podem ser modificados e observados através destes serviços.

A abstração de objetos serve de base para a organização do pensamento e a especificação das responsabilidades do sistema. É a habilidade de descrever novos tipos de dados em termos de seus formatos e serviços que agem sobre eles.

Ao aplicar a abstração de objetos, o desenvolvedor define os atributos e os serviços que manipulam exclusivamente estes atributos.

Um atributo é qualquer propriedade, qualidade ou característica que pode ser atribuída a uma pessoa ou objeto. Na POO, o termo atributo é definido de forma a refletir o domínio do problema e as responsabilidades do sistema, ou seja, atributo é um dado (informação de estado) para o qual cada objeto em uma classe tem seu próprio valor. Os atributos só podem ser acessados através de um serviço.

Serviço é uma atividade executada para permitir que as pessoas utilizem alguma coisa. Na POO, o termo serviço é definido de forma a refletir o domínio do problema e as responsabilidades do sistema, ou seja, serviço é um comportamento específico que um objeto deve exibir.

A abstração também depende do ponto de vista. Por exemplo, para um professor, um aluno (que é uma pessoa) deve conter atributos como nome, número de matrícula, curso e turma. Já para um médico, a mesma pessoa (aluno) possui outras características como a estatura, o peso e histórico médico.

Objeto ou Instância

Um objeto é uma entidade que formaliza o modo pelo qual compreendemos algo no domínio do problema. O mesmo reflete a capacidade do sistema de guardar informações sobre o elemento abstraído, interagir com ele, ou ambas

Page 29: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 29

as coisas. A ideia é formalizar uma entidade o mais próximo possível das entidades do mundo real. Esta realidade é perceptiva ao ser humano pelo aspecto tangível e/ou visível de algo. Dessa forma, podemos dizer que os objetos são os substantivos do domínio do problema.

O que caracteriza a programação orientada a objetos são os objetos. De um modo geral podemos encarar os objetos como sendo os objetos físicos do mundo real, como: carro, avião, cachorro, casa, telefone, computador, etc. De maneira simples, um objeto é uma entidade lógica que contém dados e código para manipular esses dados. Os dados são denominados como sendo atributos do objeto, ou seja, a estrutura que o objeto tem, e o código que o manipula denominamos método. Um método é uma função que manipula a estrutura de dados do objeto.

Um objeto representa um ‘elemento’ que pode ser identificado de maneira única. Em nível apropriado de abstração, praticamente tudo pode ser considerado como objeto. Assim, elementos específicos como pessoas, organizações, máquinas ou eventos podem ser considerados como objetos.

A próxima figura ilustra a definição de objetos, que é a abstração de um conjunto de coisas semelhantes. Um objeto tem estado, comportamento e identidade; a estrutura e comportamento de objetos similares são definidos em suas classes comuns.

Na visão de uma linguagem imperativa tradicional (baseada em comandos), os objetos aparecem como uma única entidade autônoma que combina a representação da informação (estruturas de dados) e sua manipulação (procedimentos), uma vez que possuem capacidade de processamento e armazenam um estado local.

Pode-se dizer que um objeto é composto de:

• Estado: o estado do objeto é definido pelas propriedades que ele possui e pelos valores que elas estão assumindo;

• Comportamento: é definido pela forma como ele – o objeto – age e reage, em termos de mudança de seu estado e o relacionamento com os demais objetos do sistema;

Page 30: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 30

• Identidade: é uma propriedade pela qual um objeto se distingue dos demais.

OPERAÇÃO 1

OPERAÇÃO 2

OPERAÇÃO 3

ESTADO INTERNO

IMPLEMENTAÇÕES DAS OPERAÇÕES 1, 2 E 3

{INTERFACE

Enquanto que os conceitos de dados e procedimentos são frequentemente tratados separadamente nas linguagens de programação tradicionais, em POO eles são reunidos em uma única entidade: o objeto. A figura abaixo apresenta outra visualização para um objeto.

AUMENTARSALÁRIO

LISTARDEPENDENTES

. . . . . .

NOME

CARGO

SALÁRIO

Uma vez que objetos utilizam o princípio da abstração de dados, o encapsulamento de informação proporciona dois benefícios principais para o desenvolvimento de sistemas:

• Modularidade: o código fonte para um objeto pode ser escrito e mantido independentemente do código fonte de outros objetos. Além disso, um objeto pode ser facilmente migrado para outros sistemas.

• Ocultamento de informação: um objeto tem uma interface pública que os outros objetos podem utilizar para estabelecer comunicação com ele. Mas, o objeto mantém informações e métodos privados que podem ser alterados a qualquer hora sem afetar os outros objetos que dependem dele. Ou seja, não é necessário saber como o objeto é implementado para poder utilizá-lo.

Classes

Classe é o termo técnico utilizado em linguagens orientadas a objetos que descreve um conjunto de dados estruturados que são caracterizados por propriedades comuns. Podem-se definir classes de objetos como a descrição de um grupo de objetos por meio de um conjunto uniforme de atributos e serviços. Uma classe é um conjunto de objetos que compartilham as mesmas operações.

Page 31: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 31

Enquanto um objeto individual é uma entidade concreta que executa algum papel no sistema como um todo, uma classe captura a estrutura e o comportamento comum a todos os objetos que são relacionados. Um objeto possui uma identidade e suas características serão definidas para a classe.

Uma classe é definida por:

• um nome da classe;

• o nome da sua superclasse;

• o nome de suas variáveis privadas;

• os nomes e as definições de todas as operações associadas a esta classe;

Classe é um conceito estático: uma classe é um elemento reconhecido num texto de programa. Por outro lado, um objeto é um conceito puramente dinâmico, o qual pertence não ao texto do programa, mas à memória do computador, local onde os objetos ocupam espaço durante a execução. (Conceitualmente, classes não são necessárias durante a execução, exceto em linguagens interpretadas, quando é preciso manter o código fonte disponível).

Podemos dizer que uma classe é um conjunto de objetos que compartilham uma estrutura comum (atributos) e um procedimento comum (operações).

Uma classe abstrata é uma classe que não possui instâncias diretas mas cujas descendentes, sim.

Uma classe concreta é uma classe instanciável; isto é, pode ter instâncias diretas. Uma classe direta pode ter subclasses abstratas (mas estas, por sua vez, devem possuir descendentes concretos).

As classes são organizadas em níveis hierárquicos compartilhando estruturas e comportamentos comuns e são associadas a outras classes. As classes definem os valores de atributos relativos a cada instância de objetos e as operações que cada objeto executa ou a que se submete.

Assim, cada objeto é dito ser uma instância de sua classe.

Termos interessantes no contexto de classes:

Classificação: Os objetos com a mesma estrutura de dados e com as mesmas operações são agrupados em uma classe. Um objeto contém uma referência implícita a sua classe, ele sabe a qual classe pertence.

Page 32: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 32

Tipificação: As classes representam os tipos de dados definidos pelo usuário. A tipificação é a capacidade de o sistema distinguir as diferentes classes e resolver as conversões.

Modularidade: A criação de módulos do programa que podem ser compilados separadamente. É usual separar a definição das classes de sua implementação.

Classes abstratas: Uma classe é abstrata quando a mesma não é completa e não pode criar objetos (é como uma fábrica no papel). Uma classe abstrata pode surgir naturalmente ou através da migração de atributos e métodos para uma classe genérica. Somente classes concretas podem criar objetos.

Atributos e Instâncias

Um atributo é um dado para o qual cada objeto tem seu próprio valor. Atributos são, basicamente, a estrutura de dados que vai representar a classe. Cada atributo tem um valor para cada instância do objeto. Este valor deve ser um valor de dado puro, não um objeto.

Observe a figura a seguir. Se o item Polígonos for uma classe, então Retângulo e Triângulo são as instâncias desta classe. As colunas Vértice, Cor da borda e Cor do interior seriam, neste caso, os atributos da classe, enquanto os dados em cada coluna seriam os atributos dos objetos presentes na mesma linha. Então, cada linha, exceto o cabeçalho, representa uma instância da classe (um objeto), onde a primeira coluna é o nome interno do objeto e as demais são os atributos valorados do objeto.

Daí, concluímos que uma instância é uma ocorrência da classe. É, de fato, um objeto em memória.

A todo objeto podemos relacionar alguns atributos (propriedades). No exemplo do relógio a hora, a data. Na programação orientada a objeto, os atributos são definidos na classe e armazenados de forma individual ou coletiva pelos objetos.

Atributos de classe (coletivos): Quando um atributo é dividido entre todos os objetos criados, ele é armazenado na classe.

Exemplo: Um contador de relógios criados.

Atributos de objeto (individuais): Quando um atributo é individual ele é armazenado no objeto. Exemplo: A hora de um relógio.

Page 33: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 33

Métodos (Operações ou Serviços)

A todo objeto podemos relacionar determinados comportamentos, ações e reações. As ações ou comportamento dos objetos são chamados de métodos, portanto um método é uma função, um serviço fornecido pelo objeto. Os comportamentos dos objetos são definidos na classe através dos métodos e servem para manipular e alterar os atributos do objeto (alteram o estado do objeto).

É importante ressaltar que todos os objetos em uma classe compartilham as mesmas operações. O código do programa não é replicado em cada objeto.

Termos importantes:

Mensagens: um objeto tem determinados atributos (propriedades) e métodos (ações). O objeto reage ao meio que o envolve de acordo com as estimulações que sofre. Em um programa orientado a objeto os estímulos são representadas por mensagens que são enviadas a um objeto. Uma mensagem pode ser gerada pelo usuário, por exemplo, ao clicar o mouse.

Protocolo: é o conjunto de métodos que podem ser acessados pelo usuário, o conjunto de mensagens a que o objeto responde. Ou seja, o protocolo é o conjunto de métodos públicos da classe.

Ligação estática/ dinâmica: ligação é o processo de identificar a posição dos métodos a serem executados. Na ligação estática o endereço dos métodos é definido durante a compilação do programa. Na ligação dinâmica o endereço dos métodos é definido somente durante a execução do programa.

Mensagem

Uma mensagem, em sentido amplo, é qualquer comunicação, escrita ou oral feita entre pessoas. Na POO, os objetos se comunicam por meio de mensagens. No entanto, não são mensagens livres, como entre os seres humanos. Um objeto, na verdade, determina quais são as mensagens que ele pode responder.

Mensagens, então, são requisições para que um objeto execute uma de suas ações. Cada objeto somente pode responder às mensagens que constem do seu protocolo. O atendimento de uma mensagem envolve a execução de algum tipo de código, ou seja, os métodos, sobre um dado associado àquela operação, sobre os atributos.

Ao receber uma mensagem, o objeto verificará se há, na classe a qual ele pertence, um serviço (método) que defina seu comportamento perante a mensagem recebida. Caso não encontre, verificará nas superclasses da classe a que ele pertence (qualquer classe da qual ele tenha herdado alguma coisa). Este mecanismo de busca é chamado acoplamento dinâmico.

Page 34: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 34

Os serviços modelam o comportamento dos objetos. Três tipos de classificação de comportamento são mais frequentemente usados:

1. com base na causa imediata;

2. conforme similaridade de evolução histórica(alteração com o tempo); e

3. conforme a similaridade de função.

Considerando que, na POO, a consideração central na definição de serviços é definir o comportamento requerido que um objeto deve refletir, estes princípios são incorporados nas estratégias que definem:

• Estados de objeto - elaborada com base no princípio de alteração com o tempo.

• Serviços requeridos - elaborada com base nos princípios de similaridade de função e causa imediata.

Encapsulamento

O conceito de encapsulamento é decorrente do fato de se combinar os dados (atributos) e o código que manipula estes dados (métodos) em um único Objeto. Ele garante que a única forma de acesso aos dados é através dos métodos disponíveis ao usuário (chamados públicos). Os demais métodos e os atributos da classe ficam sendo privados, ou seja, apenas funções-membro da classe têm acesso direto aos mesmos.

O encapsulamento é o empacotamento dos atributos e das operações numa mesma classe. Isto protege os dados contra corrupção, pois somente as operações da classe poderão alterar as estruturas de dados desta classe em questão.

Trocando em miúdos, o encapsulamento diz respeito à definição de uma estrutura que contenha os dados, defina quais os métodos de acesso público a esses dados e possua meios de proteger os demais métodos e os dados contra acesso direto.

O encapsulamento pode ainda ser visto como um processo pelo qual se combinam os atributos e os serviços que agem sobre estes atributos, em uma definição que oculta detalhes de implementação.

Generalização/Especialização (Herança)

Este princípio permite representar membros comuns, serviços e atributos uma só vez, assim como especializar estes membros em casos específicos. Herança é a propriedade dos objetos que permite a criação de uma hierarquia entre eles, onde os descendentes herdam o acesso ao código e estruturas de dados dos seus ancestrais. A herança permite, portanto, a reutilização de especificações comuns, logo no início das atividades de análise. A herança define uma relação entre classes do tipo é-um(a), onde uma classe compartilha a estrutura e o comportamento definidos em uma ou mais classes. O reconhecimento da similaridade entre classes forma uma

Page 35: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 35

hierarquia de classes, onde superclasses (classes bases) representam abstrações generalizadas e subclasses (classes derivadas) representam abstrações, onde atributos e serviços específicos são adicionados, modificados ou removidos. As classes são conectadas por uma estrutura de generalização e especialização, tornando explícitos os atributos e serviços comuns em uma hierarquia de Classes.

Benefícios da herança

• Subclasses proveem comportamentos especializados tomando-se como base os elementos comuns definidos pela superclasse.

• Reutilização do código da superclasse várias vezes.

• Pode-se implementar classes que definem comportamentos “genéricos” (chamadas de classes abstratas).

• A essência da superclasse é definida e pode ser parcialmente implementada.

• Os detalhes são definidos em subclasses especializadas.

Coad-Yourdon define herança como um mecanismo para expressar a similaridade entre classes, simplificando a definição de Classes similares a outras que já foram definidas. Ela representa generalização e especialização, tornando atributos e serviços comuns em uma hierarquia de Classe.

A Herança vai produzir uma ordem de hierarquia entre as diversas Classes-Objetos que estiverem relacionadas desta forma. Um objeto herdeiro é em geral uma especialização do seu ancestral, que por consequência será uma generalização de seu sucessor. É possível montar uma estrutura de hierarquias entre Classes-Objetos baseada na relação generalização-especialização, resultando que os objetos mais ancestrais são mais genéricos ou abrangentes, e os seus sucessores são cada vez mais específicos, à medida que nos aprofundamos na estrutura.

Observe que a herança torna possível que uma classe compartilhe os atributos e as operações de outra classe. Mas a classe “herdeira” tem suas operações e atributos próprios. Na herança simples, uma classe pode herdar os atributos e as operações de uma única classe. Na chamada herança múltipla, uma classe pode herdar os atributos e as operações de mais de uma classe-pai. A vantagem da herança múltipla é maior capacidade de especificação de classes e a maior oportunidade de reutilização; e a desvantagem é a perda da simplicidade conceitual e de implementação.

Utiliza-se o termo generalização/especialização para nos referirmos ao relacionamento entre classes, enquanto herança refere-se ao mecanismo de compartilhamento de atributos e métodos utilizando o relacionamento de generalização.

Page 36: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 36

Termos importantes:

Nomes de classe: em uma família os filhos e netos compartilham os nomes de seus ancestrais, da mesma forma, em uma hierarquia de classes os nomes devem ser significativos, semelhantes e esclarecedores.

Superclasse: uma superclasse é a classe base de uma hierarquia de classes, é a classe mais alta na hierarquia (é a origem da árvore).

Compartilhamento: as técnicas orientadas a objeto facilitam o compartilhamento de código por meio dos conceitos de herança. Além de um maior compartilhamento do código a POO reduz a codificação em função da maior clareza dos diagramas desenvolvidos.

Cancelamento: é a substituição de um método da classe pai por outro na classe filha. Pode ocorrer com os seguintes objetivos: cancelamento para extensão (ampliação das tarefas que eram realizadas), cancelamento para restrição (quando a tarefa não é mais necessária), cancelamento para otimização (quando se deseja aumentar a performance), cancelamento por conveniência (quando o cancelamento pode ser conveniente por um motivo qualquer, deve ser evitada pois é semanticamente incorreto). Os métodos não podem ser substituídos para terem um comportamento diferente do esperado.

Polimorfismo

É a propriedade de uma ou mais classes responderem a mesma mensagem, cada uma de uma forma diferente. É a capacidade de classes diferentes responderem a mesma ordem, mas de maneira diferente.

Imagine uma classe de animais onde existam as classes filhas homem e cachorro. Apesar de serem classes diferentes, ambos (homem e cachorro) são capazes de correr, embora o cachorro corra com as quatro patas, enquanto o homem corre sobre os dois pés.

Em uma linguagem orientada a objeto, uma referência polimórfica é tal que, no decorrer do desenvolvimento do software, refere-se a mais de uma classe. Desta forma é possível explorar similaridades entre diferentes classes de objetos. Este conceito é útil para distinguir mensagens de um método. Um objeto emissor envia uma mensagem, se o objeto receptor implementa um método com a mesma assinatura, ele poderá respondê-la. Diferentes respostas serão possíveis, dependendo de como os métodos dos receptores estão implementados.

Na linguagem C++, por exemplo, o polimorfismo é implementado pelo uso de sobrecarga de funções. Em C++, duas ou mais funções podem compartilhar o mesmo nome, desde que as suas declarações de parâmetros sejam diferentes. Nessa situação, as funções que compartilham o mesmo nome são

Page 37: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 37

conhecidas como sobrecarregadas e o processo é chamado de sobrecarga de funções.

O polimorfismo simplifica a programação uma vez que permite enviar uma mensagem genérica a vários objetos. Cada objeto implementa a operação, que atende a mensagem genérica, de diferentes maneiras. Nesse sentido, mensagens iguais, destinadas a objetos diferentes, podem gerar comportamentos diferentes. Para uma mesma mensagem, objetos diferentes podem responder ou agir de forma diferenciada. É isto o polimorfismo!

Note que o resultado não precisa ser diferente!!! Isto é importante. Muitas pessoas pensam que “já que os objetos irão responder de formas diferentes à mensagem igual, então o resultado deve ser diferente”. Não necessariamente. Normalmente o resultado, em termos amplos, é o mesmo. A forma como o objeto faz acontecer é que é diferente. Por exemplo, uma mensagem “imprimir” enviado para um documento do Word (objeto) faz com que o documento inicie o processo de impressão que, certamente, exigirá a transformação do conteúdo em comandos da impressora. Poderíamos ter a mesma mensagem em outro objeto, por exemplo, no documento do Paint (editor de imagens). Este, ao receber a mensagem “imprimir” também enviaria comandos para a impressora, mas certamente os comandos internos deste para gerar os comandos de impressão não serão os mesmos do Word. Eu, que estou utilizando os objetos, não preciso saber como eles irão resolver a questão, só preciso saber que, para imprimir o conteúdo, devo enviar a mensagem “imprimir”.

Abaixo, outro exemplo que ilustra de modo mais prático o que dissemos há pouco.

Observe os exemplos

� Inserir “Empregado” sem polimorfismo:

Colaborador1.InsereColaborador

Gerente1.InsereGerente

Presidente1.InserePresidente

� Inserir “Empregado” com polimorfismo:

Colaborador.Insere

Gerente.Insere

Presidente.Insere

� São necessárias três rotinas, que compartilham o mesmo nome

� Sem polimorfismo:

Para todos os Empregados Faça

Page 38: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 38

Se Empregado é Presidente Então

Empregado[i].InserePresidente

Se Empregado é Gerente Então

Empregado[i].InsereGerente

Se Empregado é Colaborador Então

Empregado[i].InsereColaborador

Fim Se

Fim Para

� Com polimorfismo:

Para todos os Empregados Faça

Empregado[i].Insere

Fim Para

Polimorfismo paramétrico: vários métodos com o mesmo nome, definidos na mesma classe, que se diferenciam pelo tipo ou número de parâmetros suportados. Também é chamado de sobrecarga de operadores (“overloading”). Uma mensagem pode ser enviada a um objeto com parâmetros de tipos diferentes número variável e o método invocado é escolhido pelos parâmetros enviados na mensagem.

Benefícios do Polimorfismo

Legibilidade do código: a utilização do mesmo nome de método para vários objetos torna o código de mais fácil leitura e assimilação, facilitando muito a expansão e manutenção dos sistemas.

Código de menor tamanho: o código mais claro torna-se também mais enxuto e elegante. Podem-se resolver os mesmos problemas da programação convencional com um código de tamanho reduzido.

Associação

Uma associação é uma ligação conceitual entre classes, geralmente aparecem como verbos nas especificações do programa e são intrinsecamente bidirecionais. A associação é uma união ou conexão de ideias. Na Análise Orientada a Objetos, a associação é modelada por meio de uma conexão de ocorrências. Uma conexão de ocorrência é um relacionamento que um objeto precisa ter com outro(s) objeto(s), para cumprir suas responsabilidades.

A associação é o relacionamento entre classes e a ligação é o relacionamento entre objetos. Assim, uma ligação é uma instância de uma

Page 39: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 39

associação. As associações são bidirecionais e podem ser binárias, ternárias ou de ordem mais elevada; na prática, contudo, geralmente são binárias.

Por exemplo: a classe Arquivo pode ter a operação imprimir para diferentes tipos de arquivos (texto, gráfico, arquivos ASCII). Todos estes métodos executam logicamente a mesma tarefa – imprimir arquivo; assim podemos referir-nos a eles pela operação genérica imprimir.

Agregação

Quando unimos vários objetos simples para criar um objeto mais complexo, estamos utilizando uma agregação, também denominada estrutura todo-parte. Diz-se "todo-parte" em que todo representa o objeto composto e parte uma das partes que o compõem. Pode dizer ainda "uma parte de", “tem um”.

A Agregação é o princípio que permite ao desenvolvedor considerar algo muito grande através do enfoque Todo-Parte. Todo-Parte é um dos serviços básicos naturais de organização dos seres humanos que orienta o desenvolvedor através de um modelo extenso. Usa-se dizer que um objeto da classe agregada (Todo) tem objetos das classes componentes (Parte). Mesmo em se tratando de entidades abstratas, pode-se compor um objeto a partir de outros objetos.

A propriedade mais significativa da agregação é a transitividade, se A é parte de B e B é parte de C, então A é parte de C. É ainda anti-simétrica, ou seja, se A é parte de B, B faz parte de A. Em alguns casos os dois objetos só podem ter existência juntos.

Page 40: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 40

CONCEITOS DE PROGRAMAÇÃO PARA WEB

Conceitos de HTML

1.1.Definição

O HTML (HyperText Mark-up Language) foi inventado em 1990 por um cientista chamado Tim Berners-Lee visando possibilitar o acesso e a troca de informações e de documentação de pesquisas entre cientistas de diferentes universidades.

Ao inventar o HTML ele lançou as fundações da Internet tal como a conhecemos atualmente. Hoje HTML é uma linguagem de marcação que possibilita apresentar informações de diferentes tipos na Internet. Quando você vê uma página na Internet no seu browser, isto na verdade é a interpretação que seu navegador faz do HTML. Logo, para construir websites deve-se que conhecer HTML, mesmo que você use um programa para criar seu website, tal como o Dreamweaver.

1.2.Tags HTML

A HTML (HyperText Markup Language) é uma linguagem de marcação. Criar um documento em uma linguagem de marcação significa que você começa com o texto da sua página e inclui tags especiais no início e no final de determinadas palavras ou parágrafos.

Tags são rótulos usados para informar ao navegador as características dos componentes do website. As tags indicam as diversas partes da página e produzem diferentes efeitos no navegador. Normalmente as tags são especificadas em pares, delimitando um texto que sofrerá algum tipo de formatação.

Existem dois tipos de tags - tags de abertura: <comando> e tags de fechamento: </comando>. Tudo que estiver contido entre uma tag de abertura e uma tag de fechamento será processado segundo o comando contido na tag. No entanto, em algumas tags a abertura e o fechamento se dá no mesmo comando.

Entre os sinais < > são especificados os comandos propriamente ditos. No caso de tags que necessitam envolver um texto, sua finalização deve ser feita usando-se a barra de divisão /, indicando que a tag está finalizando a marcação de um texto.

Page 41: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 41

1.3. Estrutura Básica dos Arquivos HTML

Os arquivos recebem a extensão .html. A primeira página a ser exibida geralmente recebe o nome de index.htm ou .html, dependendo do provedor que hospeda a página. Basicamente, os arquivos html seguem a seguinte estrutura: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title>Untitled Document</title> </head> <body> <!-- Corpo da página --> </body> </html>

A declaração <!DOCTYPE> não é um elemento da linguagem. A sua finalidade é informar ao web browser qual a versão exata da linguagem em que a página está escrita. Quando utilizada, esta declaração deve ser a primeira coisa que aparece no documento.

1.4.Tags HTML

1.4.1. Tags Iniciais

<HTML> … </HTML>Definição do início e fim do código html.

<HEAD> ... </HEAD> A tag <HEAD> indica que você declarou um cabeçalho. Atributos: Nenhum.

<BODY> ... </BODY> Definição do corpo do documento HTML. Tag obrigatório para páginas que não usem Frames. Atributos:

<DIV> ... </DIV> Indica divisões em um documento e pode ser usado para agrupar elementos em um bloco. Atributo:

• ALIGN = LEFT | RIGHT | CENTER | JUSTIFY

Especifica alinhamento horizontal padrão para o conteúdo incluído.

Page 42: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 42

OBS: Use <CENTER> em vez de <DIV ALIGN=CENTER>. <DIV> não pode ser usado com <P> porque um elemento <DIV> terminará em um parágrafo.

<H1> . . . </H1> - <H6> . . . </H6> Títulos e subtítulos. Ajudam a adicionar estrutura e divisões ao seu documento tornando-o organizado. Podem ser substituídos pelA tag que define o tamanho e atributos de fontes. Atributo: Nenhum

<TITLE> ... </TITLE> Inclui um título de um documento HTML, que aparecerá na barra de título da janela do browser. Use um título descritivo e significativo, isto ajudará os mecanismos de busca e ferramentas da Web a localizarem seu conteúdo. Atributos: Nenhum

<!-- ... --> Inclui um comentário no código fonte de um documento HTML. O texto é ignorado pelo navegador. Usado para documentar seus arquivos, fazer anotações que facilitem a leitura e manutenção do documento, ou outras informações. Pode ser usado para testar exclusões de seções de uma página Web. Atributos: Nenhum

<META> O elemento <meta> fornece meta-informação, ou seja: dá informação que descreve a informação que está contida no corpo do documento. A informação fornecida consiste principalmente em descrições do conteúdo e palavras-chave.

Alguns sistemas de buscas (internacionais principalmente), fazem uso da TAG META para permitir o correto cadastramento em seus sistemas.

Exemplos:

Definir palavras-chave para os motores de pesquisa:

<meta name="keywords" content="HTML, DHTML, CSS, XML, XHTML, JavaScript, XML, SVG">

Dá uma descrição da página:

<meta name="description" content="Tutoriais de HTML, CSS, XML e Flash">

Indica a data da última revisão da página:

<meta name="revised" content="Autor, 31/03/12">

Refresca o conteúdo da página de 15 em 15 segundos:

Page 43: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 43

<meta http-equiv="refresh" content="15">

1.4.2. Tags para Formatação

<BR> Quebra de linha forçada no texto. Para textos que devem ser quebrados em locais específicos

<CITE> ... </CITE> Para destacar citações.

<CODE> ... </CODE> Exemplos de código de programa.

<B> ... </B> Negrito

<STRONG> ... </STRONG> Fortemente enfatizado

<I> ... </I> Itálico

<STRIKE> ... </STRIKE> Texto riscado

<TT> ... </TT> Caracteres semelhantes aos de uma máquina de escrever

<U> ... </U> Texto sublinhado

<S> ... </S> Texto tachado

<VAR> ... </VAR> Destaca nomes de variáveis ou argumentos nos comandos.

<BIG> ... </BIG> Grande

<SMALL> ... </SMALL> Pequeno

<SUB> ... </SUB> Subscrito

<SUP> ... </SUP> Sobrescrito

<P> (</P> opcional) Parágrafos. Quebra de linha com espaço de uma linha em branco. Atributo:

• ALIGN = LEFT | RIGHT | CENTER | JUSTIFY

Especifica alinhamento horizontal padrão para o conteúdo incluído.

<FONT> ... </FONT> Define o tamanho, a fonte e a cor do texto inserido. Atributos:

• COLOR = #RRGGBB | NOME_DA_COR

Page 44: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 44

Define a cor da fonte.

• FACE = “nomefonte1, nomefonte2,nomefonte3”

Define a tipologia, ou seja, com que tipo de fonte será mostrado o texto no browser.

• SIZE = “número”

Tamanho da fonte (entre 1 e 7). Um sinal de adição ou subtração antes do número significa tamanho relativo à configuração de fonte atual.

Ex: <FONT COLOR=#000080 FACE=”Arial” SIZE=1>

<CENTER> ... </CENTER> Indica que o texto deve ser centralizado horizontalmente. Atributos: Nenhum.

1.4.3. Tags de Links

• <A>...</A> define um vínculo clicável para outro recurso Web ou para um ponto específico em uma página Web.

• Para construir um link que aponta para um endereço da Web você usa uma tag com o atributo href.

• Que aparecerá no navegador assim:

A seguir tem-se um exemplo de link para o site do Google.

Page 45: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 45

• O que mais poderei referenciar?

E-mail por exemplo

que será mostrado no navegador como um link qualquer:

Exemplo de um link para E-Mail

• Um atributo muito útil é o title, que você poderá usar para que apareça uma explicação sobre o link quando você passar o mouse sobre o mesmo:

que será mostrado no navegador como um link qualquer:

• Para criar um link você não precisa necessariamente apontar para um endereço na web, podemos criar links para nossa página da mesma forma se o arquivo teste2.html estiver no mesmo diretório da página escrita:

Page 46: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 46

• Este link aparecerá no navegador assim:

• Se o arquivo que se deseja “linkar” estiver em algum subdiretório devemos fazer assim:

que aparecerá da mesma forma no navegador:

1.4.4. Tags de Lista

• Uma coleção de elementos do mesmo tipo.

• Na linguagem HTML existem elementos específicos para a criação de listas, que podem ser:

o listas ordenadas (<OL>, funcionam como numeração,

o listas não ordenadas (<UL>) e

o listas de definição (<DL>).

Listas Ordenadas

• A estrutura de uma lista ordenada é bastante simples: entre os elementos de início <ol> e de fim </ol>, os itens da lista são precedidos por elementos <li>.

• Os itens são apresentados em linhas consecutivas e precedidos por uma numeração atribuída.

Page 47: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 47

Exemplo de Listas Ordenadas

� Tags <ol></ol> e <li></li> para listas ordenadas:

� que aparecerá assim no seu navegador:

<ol><li>Um item de lista</li><li>Outro item de lista</li>

</ol>

1. Um item de lista 2. Outro item de lista

Listas Ordenadas

� Sintaxe:

<ol type=... start=...> <li>item1 <li>item2 ... </ol>

� O atributo opcional TYPE define como será o tipo de numeração de cada linha.

� Os tipos disponíveis são:

� "A" (A, B, ..., Z),

� "a" (a, b, ..., z),

� "I" (I, II, III, IV, V, ...),

� "i" (i, ii, iii, iv, v, ...) e

� "1" (1, 2, 3, ...).

� Se omitido, é utilizado o padrão 1, 2, 3, ...

Listas Ordenadas

� Sintaxe:

<ol type=... start=...> <li>item1 <li>item2 ... </ol>

� O atributo opcional START define a partir de que elemento a numeração deve se iniciar.

� Ela deve receber como valor um número indicando em que posição a contagem deve se iniciar. A partir daí a seqüência é gerada automaticamente pelo interpretador HTML.

Exemplos de Listas Ordenadas

Listas Não Ordenadas

• A estrutura das listas não ordenadas é a mesma das listas ordenadas.

• A diferença é que, na apresentação, os itens serão precedidos por um marcador (bullet).

Page 48: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 48

• No caso de existir uma lista dentro de outra, será usado um marcador diferente para os itens de cada lista.

Deve-se substituir o identificador <ol> por <ul> e </ol> por </ul>.

� Tags <ul></ul> e <li></li> listas simples:

� que aparecerá assim no seu navegador:

<ul><li>Um item de lista</li><li>Outro item de lista</li>

</ul>

Um item de lista Outro item de lista

Exemplos de Listas Não Ordenadas

Listas Não Ordenadas

� Sintaxe:

<ul type="bullet"> <li>item1 <li>item2 . . . <ul>

� Em que: type - tipo de bullet que precede cada item.

� Pode ser do tipo:

� disk - pequeno disco sólido

� square - quadrado preenchido

� circle - círculo cheio

Exemplos de Listas Não Ordenadas

Lista de Definições

• Usada em situações em que termos da lista necessitam de definições, como em dicionários ou glossários.

• Estas listas têm dois níveis de informações.

o O primeiro é o tópico, que aparece em destaque.

o O segundo é a descrição que aparecerá deslocada em relação ao tópico.

• Ex.:

Page 49: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 49

• São iniciadas com o identificador <dl> e encerradas com </dl>.

• Cada item tem seu tópico e sua descrição, iniciados por </dt> e </dd> respectivamente.

• Sintaxe:

<dl> <dt>tópico <dd>descrição </dl>

Exemplos de listas de definições:

1.4.5. Tags de Tabelas

As tabelas, tal como as listas, são um sistema de elementos HTML (ou tags) usados para criar um papel especialmente formatado. Elas representam provavelmente o aspecto mais intensivo em código da HTML (fora folhas de estilo) e toda a atenção deve ser dada ao início e ao fim dos elementos. As tabelas são também um perfeito exemplo de quando, por questões de redabilidade, é absolutamente necessário atribuir estilo ao seu código. Pode-se incluir comentários para que você ou quem quer que seja saiba o que um bloco de código está fazendo.

Atualmente a grande maioria das páginas na Web utilizam esse recurso. Com a utilização de tabelas e um pouco de criatividade, pode-se controlar vários aspectos da formatação de páginas, como o uso de margens, uso de

Page 50: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 50

colunas etc. A estrutura do comando para inserir uma tabela é a seguinte: <TABLE atributos> . . . </TABLE>.

Para informar onde começa e termina cada linha usamos o comando <TR> . . . </TR> (o elemento é TR de "table row", onde "row" é linha em inglês). Dentro do comando <TR>, cada célula é identificada usando o elemento <TD> . . . </TD> (o elemento é TD de "table data", já que cada célula contém dados da tabela).

Veja no quadro abaixo o exemplo de uma tabela bem simples, com somente 1(uma) linha e 2(duas) colunas:

<TABLE> <TR> <TD> Aqui o conteúdo da célula 1 </TD> <TD> Aqui o conteúdo da célula 2 </TD> </TR> </TABLE>

<TABLE> ... </TABLE> Cria uma tabela.

<TR> ... </TR> Cria linhas de tabelas.

<TD> ... </TD> Cria uma célula em uma tabela.

1.4.6.Tag de Imagens

<IMG> Fornece informações sobre a origem, o posicionamento e o comportamento da imagem. Esta tag posiciona a imagem na página.

Page 51: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 51

INTRODUÇÃO À JAVA

1. Introdução

Java é uma linguagem de programação orientada a objeto, desenvolvida na década de 90 pelo programador James Gosling, da empresa Sun Microsystems. Diferentemente das linguagens de programação mais utilizadas na época, que são compiladas para código nativo, a linguagem Java é compilada para um bytecode que é executado por uma máquina virtual.

Características de Java:

• Simples, porém versátil, robusta e muito segura;

• Portável (independente de sistema operacional);

• Gratuita e com código disponível para consulta;

• Dirigida por uma especificação aberta;

• Popular, rodeada por uma comunidade muito ativa;

• De alta aceitação e com suporte da indústria;

• Muitas ferramentas disponíveis; e

• Muita documentação disponível.

1.1. Surgimento

Em 1991, na Sun Microsystems, foi iniciado o Green Project, o berço da linguagem Java para programação orientada a objetos.

Desde seu lançamento, em maio de 1995, a plataforma Java foi adotada mais rapidamente do que qualquer outra linguagem de programação na história da computação. Em 2003 Java atingiu a marca de 4 milhões de desenvolvedores em todo mundo. Java continuou e continua crescendo. Hoje é com certeza um padrão para o mercado, oferecendo qualidade, performance e segurança ainda sem nenhum competidor a altura. Java tornou-se popular pelo seu uso na Internet e hoje possui seu ambiente de execução presente em web browsers, mainframes, Sistemas Operacionais, celulares, palmtops, cartões inteligentes, entre outros.

1.2. Funcionamento

Programas Java não são traduzidos para a linguagem de máquina como outras linguagens estaticamente compiladas, e sim para uma representação intermediária, chamada de bytecodes. Estes são interpretados pela máquina virtual Java (JVM - Java Virtual Machine).

Page 52: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 52

Muitas pessoas acreditam que, por causa desse processo, o código interpretado Java tem baixo desempenho. Durante muito tempo esta foi uma afirmação verdadeira. Porém novos avanços têm tornado o compilador dinâmico (a JVM), em muitos casos, mais eficiente que o compilador estático.

Java hoje já possuiu uma performance próxima do C++. Isto é possível graças a otimizações como a compilação especulativa, que aproveita o tempo ocioso do processador para pré-compilar bytecode para código nativo. Outros mecanismos ainda mais elaborados como o HotSpot da Sun, que guarda informações disponíveis somente em tempo de execução (ex.: número de usuários, processamento usado, memória disponível), otimizando o funcionamento da JVM, e melhorando seu desempenho.

Isto é uma realidade tão presente que hoje é fácil encontrar programas corporativos e de missão crítica usando tecnologia Java. No Brasil, por exemplo, a maioria dos Bancos utiliza a tecnologia Java para construir seus home banks, que são acessados por milhares de usuários diariamente. Grandes sites como o eBay utilizam Java para garantir alto desempenho. A cada ano, Java tem se tornado mais rápido, na medida que se evolui o compilador dinâmico.

Os bytecodes produzidos pelos compiladores Java podem ser usados num processo de engenharia reversa para a recuperação do programa-fonte original. Esta é uma característica que atinge em menor grau todas as linguagens compiladas. No entanto já existem hoje tecnologias que "embaralham" e até mesmo criptografam os bytecodes praticamente impedindo a engenharia reversa.

Na execução de um programa JAVA, o compilador traduz o programa Java para bytecodes, que é a linguagem entendida pelo interpretador Java. O programa deve ser primeiramente colocado na memória antes de poder ser executado. Isso é feito pelo carregador de classe, que analisa o arquivo (ou arquivos) .class, o qual contém os bytecodes, e em seguida o transfere para a memória. O arquivo .class pode ser carregado a partir de um

Page 53: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 53

disco em seu sistema ou através de uma rede. Os aplicativos criados pela linguagem Java são carregados na memória e executados com o interpretador Java através do comando java. Ao executar um aplicativo Java, o comando invoca o interpretador e faz com que o carregador de classe carregue as informações utilizadas no programa codificado. O interpretador Java é considerado a JVM, a máquina virtual Java.

Figura – Compilação e execução de um programa Java

1.3. Princípios básicos de um ambiente Java Típico

Assim como outras linguagens de desenvolvimento, o ambiente Java precisa de editor para a construção do código. O programador pode digitar um programa em Java utilizando o editor, fazendo correções se necessário.

Quando o programador especifica que o arquivo no editor deve ser salvo, o programa é armazenado em um dispositivo de armazenamento secundário, como um disco. Os nomes dos arquivos em Java terminam com a extensão .java. Alguns editores podem ser usados através do Windows, como por exemplo o Windows Notepad. Também, podem ser usados ambientes integrados de desenvolvimento como o Java Forté, NetBeans, Jbuilder da Borland entre outros.

Últimas versões, ferramentas, como baixar, como instalar, o estado da arte podem ser achados em http://java.sun.com/. Pode-se usar, por exemplo, o SDK (Software Development Kit) edição padrão:(Standard Edition - J2SE ). Uma boa opção para ambiente de desenvolvimento (IDE) é o NetBeans (http://www.netbeans.org/. Em http://java.sun.com/ existe um arquivo único que já engloba o J2SE e o Netbeans.

1.4. Distribuições

A linguagem Java é distribuída em três edições:

� Java Standard Edition (Java SE);

� Java Enterprise Edition (Java EE);

� Java Mobile Edition (Java ME).

Page 54: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 54

A Java SE contém ferramentas de desenvolvimento e a API núcleo da plataforma (base para as demais), permitindo o desenvolvimento de aplicações desktop, com interface gráfica, acesso a bancos de dados, I/O, acesso à rede, entre outros. A Java SE é dividida em:

• JDK (Java Development Kit);

• JRE (Java Runtime Environment) necessária para rodar programas Java, sendo a única parte da plataforma Java que os clientes precisam instalar. A Sun provê suporte oficial às plataformas Windows, Solaris e Linux, havendo suporte não-oficial a diversas outras plataformas (a Apple suporta a plataforma Mac).

A Java EE permite o desenvolvimento de aplicações corporativas distribuídas, centradas em servidores, altamente robustas, estáveis e escaláveis. Inclui também as especificações para desenvolvimento Web: Servlets, JSP, Web Services, JSF, e Enterprise Java Beans (EJB).

A Java ME permite o desenvolvimento de aplicações para dispositivos móveis, como Telefones celulares, PDAs (Palm, iPaq, etc.) e dispositivos embarcados.

1.5. Exemplo de Código Java

Um programa Java é uma classe pública com o método main(), como no nosso exemplo. O nome do arquivo deve coincidir com o nome da classe que possui o método main(). Pode haver mais de uma classe no mesmo arquivo fonte, mas somente uma pode ser pública. Na próxima figura é exibido um exemplo.

Page 55: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 55

O método main() é um método especial que é o ponto inicial de execução da classe. Se a classe possui o método main() ela é uma classe executável pela JVM. Ele tem que ter os modificadores public static, tem que retornar void e tem que receber como argumento um vetor de objetos da classe String.

Na sintaxe acima, somente a escolha do nome (referência) args pode variar (desde que respeite os padrões da linguagem). O vetor args poderá conter 0 ou mais argumentos para o método main. Estes argumentos são passados via linha se comando, quando a classe é executada.

Observação: Comentários em Java são como no C:

// Comenta linha

/* Comenta

todo

um

trecho */

1.6. Exemplo de Código Java Empregando o NetBeans

Como exemplo iremos aplicar a IDE NetBeans para o desenvolvimento de aplicações Java. Comece criando um projeto (File / New Project / General / Java Application / Next). As próximas figuras apresentam os passos necessários para a criação de um novo projeto nessa ferramenta.

Page 56: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 56

Dê um nome e escolha a localização (não utilize acentos, cedilhas e outros caracteres especiais).

O NetBeans criará um diretório para o projeto criado. No diretório src ficarão suas classes. Se quiser levar o seu projeto para outro computador com o NetBeans instalado, copie o conteúdo deste diretório src para o do outro computador. A estrutura é apresentada abaixo.

- Pasta com seus projetos

- Uma pasta com o nome de um projeto

- Dentro dela uma pasta SRC onde ficam os códigos (fontes) (.java)

- Outra pasta build (e dentro dela a pasta classes) onde ficam as classe compiladas (.class)

A existência de pacotes gerará pastas com o nome destes pacotes dentro dos diretórios src e build/classes.

Page 57: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 57

import javax.swing.JOptionPane ;

public class Media {

public static void main(String[] args) {

JOptionPane.showMessageDialog(null, "Boa Noite");

float media = (38 + 40) / 2;

JOptionPane.showMessageDialog(null, "Media entre 38 e 40 = " + media);

}

}

A linha 1 importa a classe JOptionPane, que está dentro do pacote swing, que por sua vez está dentro do pacote javax. Observe que é usado um método desta classe:

JoptionPane.showMessageDialog.

2. Tipos de Dados

Apresentaremos agora uma pequena discussão sobre a sintaxe da linguagem Java, abordando os tipos de dados existentes, as regras para declaração de variáveis, as recomendações gerais para nomenclatura, os operadores, sua precedência e as estruturas de controle disponíveis. Como será notado, a sintaxe da linguagem Java é muito semelhante àquela usada pela linguagem C/C++.

Para criação de identificadores (variáveis, nomes de função, classes, entre outros) devem-se observar as seguintes regras:

� os nomes devem começar com letra ou os caracteres _ ou $; e

� os caracteres seguintes podem conter números, letras, _ ou $.

Veja exemplos de nomes de identificadores:

valor // válido

$preco // válido

20itens // inválido

_teste // válido

INT // válido

Observação: O Java considera diferença entre maiúsculas e minúsculas!!

Page 58: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 58

2.1. Tipos Primitivos de Dados

Variáveis definem locais de memória nos quais os programas podem armazenar valores e acessá-los durante sua execução. Ao executar um aplicativo, as instruções do mesmo são carregadas para a memória principal do computador. Durante o processamento das diversas funções e cálculos, este aplicativo precisa armazenar valores temporariamente. Sem entrar em discussões técnicas sobre o funcionamento de hardware e memórias, podemos dizer que a memória principal de seu computador é dividida em posições de memória, cada posição possuindo um endereço único. Veja a ilustração a seguir:

Não seria nada prático acessar estas posições de memória usando seus endereços (representados por valores inteiros hexadecimais). Dependendo da quantidade de memória principal disponível, estes endereços podem chegar à casa dos bilhões. Em vez disso as linguagens de programação usam apelidos para estas posições de memória. Tais apelidos são conhecidos como variáveis. Uma variável possui cinco atributos muito importantes. São eles:

1) Nome: é o nome que identificará a variável. Este nome deve ser único dentro de seu escopo (espaço de atuação), ou seja, nada impede que classes e métodos tenham nomes semelhantes àqueles encontrados em outras classes e métodos.

2) Valor: é o valor contido na variável. Veremos mais adiante como atribuir ou alterar os valores contidos em variáveis.

3) Tipo: é o tipo de dados que será armazenado nas variáveis. Tipos de dados podem ser inteiro, string (texto), números de ponto flutuante, etc. Tipos de dados serão vistos mais adiante.

4) Visibilidade ou escopo: é o alcance de visibilidade, ou seja, os locais a partir dos quais esta variável poderá ser acessada pelas diversas partes do código. A discussão sobre escopo de variáveis será adiada até a nossa analise de classes, métodos e estruturas de repetição.

5) Endereço: cada variável possui um endereço único.

Na linguagem Java existem os tipos básicos de dados listados a seguir.

Page 59: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 59

No Java existem duas representações para números em ponto flutuante que se diferenciam pela precisão oferecida: o tipo float permite representar valores reais com precisão simples (representação interna de 32 bits) enquanto o tipo double oferece dupla precisão (representação interna de 64 bits).

Deve ser utilizado o ponto como separador de casas decimais. Quando necessário, expoentes podem ser escritos usando o caractere ‘e’ ou ‘E’, como nos seguintes valores: 1.44E6 (= 1.44 x 106 = 1440000.0) ou 3.4254e-2 (= 3.4254 x 10-2 = 0.034254).

Para atribuição de valores utilizam-se os operadores =, +=, -=, *= e /=.

Exemplos:

int i = 10;

int dois = 1;

dois += 1; // dois = dois + 1;

int cinco = 7;

cinco -= 2; // cinco = cinco – 2;

int dez = 5;

dez *= 2; // dez = dez * 2;

int quatro = 12;

quatro /= 3; // quatro = quatro / 3;

As operações básicas são listadas a seguir.

Page 60: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 60

Observação:

Um identificador pode ser convertido de um tipo para outro empregando-se (). A conversão de tipos pode levar à perda de valores.

Exemplo:

double d = 1.99;

int i = (int) d; // i recebe o valor 1

Exemplo 2.1:

A seguir um exemplo de programa que pode ser criado empregando o Netbeans.

// Aritmetica.java

public class Aritmetica {

static public void main (String args[]) {

// Declaracao e inicializacao de duas variaveis

int a = 5;

int b = 2;

// Varios exemplos de operacoes sobre variaveis

System.out.println("a = " + a);

System.out.println("b = " + b);

System.out.println("-b = " + (-b));

System.out.println("a + b = " + (a + b));

System.out.println("a - b = " + (a - b));

System.out.println("a * b = " + (a * b));

System.out.println("a / b = " + (a / b));

System.out.println("(float) a / b = " + ((float)a / b));

System.out.println("a % b = " + (a % b));

System.out.println("a++ = " + (a++));

System.out.println("--b = " + (--b));

System.out.println("a = " + a);

System.out.println("b = " + b);

}

}

Para representação de caracteres existe o tipo char, o qual permite a representação de caracteres individuais. Como o Java utiliza uma representação interna no padrão UNICODE, cada caractere ocupa 16 bits (2

Page 61: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 61

bytes) sem sinal, o que permite representar até 32.768 caracteres diferentes, teoricamente facilitando o trabalho de internacionalização de aplicações Java. Na prática o suporte oferecido ao UNICODE ainda é bastante limitado embora permita a internacionalização do código Java.

Alguns caracteres são considerados especiais pois não possuem uma representação visual, sendo a maioria caracteres de controle e outros caracteres cujo uso é reservado pela linguagem. Tais caracteres podem ser especificados dentro dos programas como indicado na tabela abaixo, ou seja, precedidos por uma barra invertida (‘\’).

Em Java dispõe-se do tipo lógico boolean capaz de assumir os valores false (falso) ou true (verdadeiro) que equivalem aos estados off (desligado) e on (ligado) ou no (não) e yes (sim).

Os seguintes operadores lógicos e relacionais são oferecidos pela linguagem.

Page 62: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 62

Exemplo 2.2:

Um exemplo de programa que pode ser criado empregando o Netbeans.

// Relacional.java

public class Relacional {

static public void main (String args[]) {

int a = 15;

int b = 12;

System.out.println("a = " + a);

System.out.println("b = " + b);

System.out.println("a == b -> " + (a == b));

System.out.println("a != b -> " + (a != b));

System.out.println("a < b -> " + (a < b));

System.out.println("a > b -> " + (a > b));

System.out.println("a <= b -> " + (a <= b));

System.out.println("a >= b -> " + (a >= b));

}

}

2.2. Vetores

Vetores são coleções de objetos ou tipos primitivos.

int[ ] vetor = new int[10]; ou int vetor[ ] = new int[10];

Cada elemento do vetor é inicializado a um valor default, dependendo do tipo de dados:

• null, para objetos;

• 0, para int, long, short, byte, float, double;

• Unicode 0, para char;

• false, para boolean.

Os elementos de um vetor podem ser recuperados a partir da posição 0, empregando-se uma atribuição simples.

int elemento_1 = vetor[0];

int elemento_2 = vetor[1];

Vetores podem ser inicializados no momento em que são criados.

Page 63: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 63

String[ ] semana = {"Dom", "Seg", "Ter", "Qua", "Qui", "Sex","Sab"};

Essa inicialização não pode ser usada em outras situações (depois que o vetor já existe), exceto usando new, da forma:

semana = new String[ ] {"Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sab"};

A propriedade length de um vetor em Java possui informa o número de elementos que possui.

Exemplo 2.3:

Exemplo de programa que pode ser criado empregando o Netbeans.

public class Vetor {

public static void main(String[] args) {

String[] semana = {"Dom", "Seg", "Ter", "Qua", "Qui", "Sex","Sab"};

System.out.println("1 Dia = " + semana[0]);

System.out.println("2 Dia = " + semana[1]);

System.out.println("tamanho" + semana.length);

}

}

2.3. String

String é uma classe que manipula cadeias de caracteres. A classe String possui métodos para essas manipulações. A concatenação de strings é feita empregando-se o operador '+'.

String str = “Isto é uma String do Java”;

String xyz = new String(“xyz”);

Métodos úteis:

� equals – avalia se uma String é igual a outra String. ex.: str.equals( “xyz” );

� split – quebra a String e várias outras pelo separador desejado. ex.:

String[ ] palavras = str.split(“ ”);

• startsWith() e endsWith() – testa o começo e o fim da String;

• trim() – elimina os espaços em branco no início e fim;

• replace – substitui os caracteres. ex.: str = str.replace(‘a’,’@’);

• length() – retorna o tamanho da String ex.: str.length();

Page 64: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 64

2.4. Classes Wrapper

Uma classe wrapper (wrapper class – Classe Invólucro) é um tipo de classe que acrescenta funcionalidades a um tipo primitivo de dado. Sendo assim, em Java para cada tipo primitivo, temos uma classe wrapper associada, conforme vemos na tabela abaixo.

Tipo Primitivo de Dado Classe wrapper

boolean java.lang.Boolean

byte java.lang.Byte

int java.lang.Integer

short java.lang.Short

long java.lang.Long

char java.lang.Character

float java.lang.Float

double java.lang.Double

As variáveis de tipos primitivos de dados mais rápidas e consomem menos memória. No entanto, os objetos de classes wrapper permitem operações mais complexas como conversão de tipo. Exemplo: Integer x = new Integer();

3. Estruturas de Controle

Um programa de computador é uma sequência de instruções organizadas de forma tal a produzir a solução de um determinado problema. Naturalmente tais instruções são executadas em sequência, o que se denomina fluxo sequencial de execução.

Em inúmeras circunstâncias é necessário executar as instruções de um programa em uma ordem diferente da estritamente sequencial. Tais situações são caracterizadas pela necessidade da repetição de instruções individuais ou de grupos de instruções e também pelo desvio do fluxo de execução.

As linguagens de programação tipicamente possuem diversas estruturas de programação destinadas ao controle do fluxo de execução, isto é, estruturas que permitem a repetição e o desvio do fluxo de execução.

Page 65: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 65

3.1. Estruturas de Desvio de Fluxo

Existem várias estruturas de desvio de fluxo que podem provocar a modificação da maneira com que as diretivas de um programa são executadas conforme a avaliação de uma condição. O Java dispõe de duas destas estruturas: if e switch.

if (expressão_lógica) {

diretiva1;}

else {

diretiva2;}

switch (expressão_ordinal) {

case ordinal1: diretiva3;

break;

case ordinal2: diretiva2;

break;

default: diretiva_default;

}

3.2. Estruturas de Repetição Simples

Como repetição simples consideramos um trecho de código, isto é, um conjunto de diretivas que deve ser repetido um número conhecido e fixo de vezes. A repetição é uma das tarefas mais comuns da programação utilizada para efetuarmos contagens, para obtenção de dados, para impressão etc. Em Java dispomos da diretiva for cuja sintaxe é dada a seguir:

for (inicialização; condição de execução; incremento/decremento) {

diretiva;

}

Page 66: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 66

Exemplo 3.1:

public class exemploFor {

public static void main(String[] args) {

int j;

for (j = 0; j < 10; j++) {

System.out.println(" " + j);

}

}

}

3.2. Estruturas de Repetição Condicionais

As estruturas de repetição condicionais são estruturas de repetição cujo controle de execução é feito pela avaliação de expressões condicionais. Estas estruturas são adequadas para permitir a execução repetida de um conjunto de diretivas por um número indeterminado de vezes, isto é, um número que não é conhecido durante a fase de programação mas que pode ser determinado durante a execução do programa tal como um valor a ser fornecido pelo usuário, obtido de um arquivo ou ainda de cálculos realizados com dados alimentados pelo usuário ou lido de arquivos. Existem duas estruturas de repetição condicionais: while e do while.

while (expressão_lógica) {

diretiva;

}

ou

do

diretiva

while (expressão_lógica);

Exemplo 3.2:

// exemploWhile.java

public class exemploWhile {

public static void main(String[] args) {

int j = 10;

while (j > 0) {

System.out.println("" + j);

Page 67: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 67

j--;

}

}

}

4. Orientação a Objetos

O paradigma da Orientação a Objetos é um mecanismo que ajuda a definir a estrutura de programas, baseado nos conceitos do mundo real, sejam eles reais ou abstratos.

A Orientação a Objetos permite criar programas componentizados, separando as partes do sistema por responsabilidades e fazendo com que essas partes se comuniquem entre si, por meio de mensagens. Os conceitos da OO envolvem: Classes, Objetos e seus Relacionamentos, Herança e Polimorfismo.

Dentre as vantagens que a OO proporciona, podemos destacar o aumento de produtividade, reuso de código, redução das linhas de código programadas, separação de responsabilidades, encapsulamento, polimorfismo, maior flexibilidade do sistema, dentre outras vantagens.

4.1. Criação de Classes e Objetos

Uma classe é a descrição de um conjunto de entidades (reais ou abstratas) do mesmo tipo e com as mesmas características e comportamento. As classes definem a estrutura e o comportamento dos objetos daquele determinado tipo. Podemos dizer que as classes são, na verdade, modelos de objetos do mesmo tipo.

Nas classes, definem-se os construtores que são métodos especiais chamados pelo sistema no momento da criação de objetos da classe, assim sendo o operador new apenas indica que o método especial construtor de uma certa classe será utilizado. Os construtores devem seguir determinadas regras:

• Têm sempre o mesmo nome que a classe;

• São chamados apenas na criação do objeto;

• Pode haver vários em uma mesma classe;

• São identificados pelo número e tipo de argumentos; e

• Nunca declaram tipo de retorno.

Apresenta-se abaixo a estrutura básica de uma classe.

Page 68: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 68

No NetBeans, para criar uma classe, clique com o botão direito sobre o Default Package, escolha então New/Java Class, dê um nome a ela (de preferência com inicial maiúscula). Todo o seu código fica dentro das chaves da classe.

Os programas podem ficar dentro de pacotes (que são diretórios (ou pastas)) no sistema de arquivos. A princípio, vamos colocar as classes novas dentro do pacote “default” (que na verdade significa nenhum pacote).

Se a classe estiver dentro de um pacote, ela deve estar dentro de um diretório com o nome do pacote (o Netbeans faz isto para você) e deve conter a diretiva "package <nomeDoPacote>;"no início da classe.

À exceção da diretiva package e dos imports (que são como includes ou uses de outras linguagens (C e Pascal)), todo o restante do código da classe está dentro da classe em si (dentro das chaves mais externas).

public class NomeDaClasse {

...

...

...

}

Page 69: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 69

4.2. Modificadores de Acesso

Existem 3 modificadores de acesso: private, public e protected , que permitem diferentes níveis de acesso.

Ao definir-se algum membro da classe com o modificador private, este só poderá ser acessado pela classe que o contém. Já o public é o contrário do private. Ao definir um membro de uma classe como public, este pode ser acessado por qualquer outra classe. Se definir-se como protected, pode-se acessar os membros também nas sub-classes.

Se nenhum modificador for definido, assume-se o valor default, que permite o acesso a outros membros do mesmo pacote.

Exemplo 4.1:

Passos para executar o programa a seguir empregando o Netbeans.

Crie a classe Pessoa: Em um novo projeto clique com o botão direito sobre o pacote onde a classe será criada (de preferência, neste momento, o Pacote Default) e selecione New / Java class / Dê o nome Pessoa para a classe e finalize.

Em qualquer lugar da classe temos os campos da classe na forma:

tipo nomeDoObjetoOuVariavel;

Vamos começar o código.

public class Pessoa {

String nome;

int idade = 0;

int peso;

}

Com o código acima definimos os atributos da classe. Dentro da classe podemos definir também os métodos. A seguir vamos encapsular os campos da classe (criar os métodos de acesso get e set). Vamos encapsular os campos como private (visíveis só dentro da classe).

1. Posicione o cursor na linha em que as variáveis estão declaradas.

2. Barra de menu (ou botão direito sobre a linha citada acima)/ Refactor/ Encapsulate Fields.

3. Marque os gets e sets que quer criar.

4. Dê as confirmações pedidas (depende da versão do Netbeans).

Page 70: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 70

5. Observe que os campos passaram a ser private e os métodos de acesso aos campos foram criados.

Após isso, crie o construtor para a classe da seguinte forma:

public Pessoa(){

}

Para criar instâncias de uma classe (objetos) deve-se utilizar o seguinte comando:

NomeDaClasse nomeDoObjeto = new NomeDaClasse(), como por exemplo:

Pessoa objUm = new Pessoa(); // Declarou e criou o objeto da classe Pessoa.

Ou, em dois passos:

Pessoa objUm; //Declara

objUm = new Pessoa(); //cria o objeto

Uma classe como a classe Pessoa acima, não é executável. Ela existe para que possamos criar instâncias dela (com new). A classe executável deve conter o método main e deve estar em um arquivo com o mesmo nome da classe em si. Após criados os objetos da classe, os métodos podem ser acessados com o nomeDoObjeto.nomeDoMétodo(), como por exemplo:

objUm.setNome(“Maria”) atribui “Maria” ao campo nome.

objUm.getNome() retornará o conteúdo do campo nome.

Crie os métodos de acesso aos atributos do método, utilizando a função: Refactor/ Encapsulate Fields.

Agora, na classe que contém o método main() (neste caso a classe chama-se TestaPessoa), digite o código abaixo:

Page 71: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 71

import javax.swing.JOptionPane ;

public class Main {

public static void main ( String args[ ] ) {

public static void main(String[] args) {

Pessoa objUm = new Pessoa();

objUm.setNome("Maria");

objUm.setIdade(25);

objUm.setPeso(65);

String nome = JOptionPane.showInputDialog("Informe o nome da pessoa");

Pessoa objDois = new Pessoa();

objDois.setNome(nome);

objDois.setIdade(35);

objDois.setPeso(70);

JOptionPane.showMessageDialog(null, "Nomes: " + objUm.getNome() + " e " +

objDois.getNome());

objUm.setNome("Maria de Tal");

JOptionPane.showMessageDialog(null, "Novos nomes: " + objUm.getNome() +

" e " + objDois.getNome());

if (objUm.getIdade() > objDois.getIdade()) {

JOptionPane.showMessageDialog(null, objUm.getNome() + " mais velha que " + objDois.getNome());

} else {

JOptionPane.showMessageDialog(null, objDois.getNome() + " mais velha que " + objUm.getNome());

} // Idades iguais nao foi tratado propositadamente

}

}

}

Page 72: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 72

4.3. Sobrecarga

A sobrecarga de métodos (method overload) oferece a possibilidade de existirem numa mesma classe vários métodos com o mesmo nome. Para que estes métodos de mesmo nome possam ser distinguidos eles devem possuir uma assinatura diferente. A assinatura (signature) de um método é uma lista que indica os tipos de todos os seus argumentos, sendo assim métodos com mesmo nome são considerados diferentes se recebem um diferente número ou tipo de argumentos e tem, portanto, uma assinatura diferente.

Um método que não recebe argumentos tem como assinatura o tipo void enquanto um outro método que recebe dois inteiros como argumentos tem como assinatura os tipos int, int. A seguir, apresenta-se um exemplo de sobrecarga.

Da mesma forma que podemos sobrecarregar métodos de uma classe, o mesmo pode ser feito com seus construtores, ou seja, uma classe pode possuir mais de um construtor onde cada um deles é diferenciado por sua assinatura. O compilador determina qual dos construtores utilizar através dos argumentos utilizados na chamada do construtor. Obviamente deve existir um construtor cuja lista de argumentos seja a utilizada na criação de um novo objeto, caso contrário será indicado o erro.

4.4. Herança

É uma técnica onde uma classe passa a utilizar atributos e operações definidas em uma outra classe especificada como seu ancestral. Rigorosamente falando, a herança é o compartilhamento de atributos e operações entre classes baseado num relacionamento hierárquico do tipo pai e filho, ou seja, a classe pai contêm definições que podem ser utilizadas nas classes definidas como filho. A classe pai é o que se denomina classe base (base class) ou superclasse (superclass) e as classes filho são chamadas de classes derivadas (derived classes) ou subclasses (subclasses). Este mecanismo sugere que uma classe

Page 73: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 73

poderia ser definida em termos mais genéricos ou amplos e depois refinada sucessivamente em uma ou mais subclasses específicas. Daí o origem do termo técnico que descreve a herança: especialização (specialization).

Em Java indicamos que uma classe é derivada de uma outra classe utilizando a palavra reservada extends conforme o trecho simplificado de código dado a seguir: A superclasse não recebe qualquer indicação especial.

Em princípio, todos os atributos e operações definidos para uma certa classe base são aplicáveis para seus descendentes que, por sua vez, não podem omitir ou suprimir tais características pois não seriam verdadeiros descendentes se fizessem isto.

Por outro lado uma subclasse (um descendente de uma classe base) pode modificar a implementação de alguma operação (reimplementar) por questões de eficiência sem modificar a interface externa da classe. Além disso as subclasses podem adicionar novos métodos e atributos não existentes na classe base, criando uma versão mais específica da classe base, isto é, especializando-a.

Exemplo:

Page 74: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 74

// LiquidificadorGenerico.java

public class LiquidificadorGenerico {

// atributos

protected int velocidade;

protected int velocidadeMaxima;

// construtores

public LiquidificadorGenerico() {

velocidade = 0;

velocidadeMaxima = 2;

}

public LiquidificadorGenerico(int v) {

this() .ajustarVelocidadeMaxima(v);

}

// metodos

protected void ajustarVelocidadeMaxima(int v) {

if (v>0)

velocidadeMaxima = v;

}

protected void ajustarVelocidade(int v) {

if (v>=0 && v<=velocidadeMaxima)

velocidade = v;

}

public int obterVelocidadeMaxima() {

return velocidadeMaxima;

}

public int obterVelocidade() {

return velocidade;

}

}

// LiquidificadorAnalogico.java

public class LiquidificadorAnalogico extends LiquidificadorGenerico {

// construtor

public LiquidificadorAnalogico() {

velocidade = 0;

Page 75: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 75

}

// metodos

public void aumentarVelocidade() {

ajustarVelocidade(velocidade + 1);

}

public void diminuirVelocidade() {

diminuirVelocidade(velocidade - 1);

}

}

// LiquidificadorDigital.java

public class LiquidificadorDigital extends LiquidificadorGenerico{

// construtor

public LiquidificadorDigital() {

velocidade = 0;

}

// metodo

public void trocarVelocidade(int v) {

// aciona método protegido para troca de velocidade

ajustarVelocidade(v);

}

}

4.5. Polimorfismo

Enquanto a herança oferece um poderoso mecanismo de especialização, o polimorfismo oferece um igualmente poderoso mecanismo de generalização, constituindo uma outra dimensão da separação da interface de uma classe de sua efetiva implementação.

Imaginemos que seja necessário implementar numa classe LiquidificadorInfo um método que seja capaz de imprimir a velocidade atual de objetos liquidificador os quais podem ser tanto do tipo digital como analógico. Poderíamos, utilizando a sobrecarga, criar um método de mesmo nome que recebesse ou um LiquidificadorAnalogico ou um LiquidificadorDigital:

Page 76: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 76

Embora correto, existem duas grandes desvantagens nesta aproximação:

(i) para cada tipo de Liquidificador existente teríamos um método sobrecarregado avolumando o código que deveria ser escrito (e depois mantido) além disso (ii) a adição de novas subclasse que representassem outros tipos de liquidificador exigiria a implementação adicional de outros métodos semelhantes.

Através do polimorfismo pode-se chegar ao mesmo resultado mas de forma mais simples pois a classe LiquidificadorGenerico permite o tratamento generalizado de todas as suas subclasses.

Outra situação possível é a seguinte: como qualquer método de uma superclasse pode ser sobreposto (overrided) em uma subclasse, temos que o comportamento deste método pode ser diferente em cada uma das subclasses, no entanto através da superclasse podemos genericamente usar tal método, que produz um resultado distinto para cada classe utilizada. Assim o polimorfismo também significa que uma mesma operação pode se comportar de forma diferente em classes diferentes. Para a orientação a objetos uma operação é uma ação ou transformação que um objeto pode realizar ou está sujeito e, desta forma, os métodos são implementações específicas das operações desejadas para uma certa classe.

4.6. Static e Final

A palavra reservada static oferece ao desenvolvedor uma garantia de que determinado atributo ou método terá apenas uma referência na memória. Isso

Page 77: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 77

não significa que o valor do componente será estático (não pode mudar). Final é usado para estes casos.

Além disso, static nos garante que somente haverá somente uma referência para determinado atributo ou método disponível em memória. Logo, declarando algum componente como static, todas as instâncias da classe irão compartilhar a mesma cópia da variável ou método.

Declarar algo como static também permite você acessar os atributos e métodos diretamente, ou seja, sem precisar criar uma instância da classe. Ao contrário de tipos de dados não-static, qualquer variável ou método static podem ser acessado diretamente, sem necessitar de uma instância da classe criada.

Exemplo 4.5: Veja o programa a seguir que pode ser executado empregando o Netbeans.

// TesteStatic.java

class Classe1

{

// Variavel static

public static int contador = 0;

// Variavel nao-static

public int outroContador = 0;

public Classe1() {}

// Precisa ser static porque "contador" é static

public static void incrementaContador()

{

contador++;

System.out.println("contador agora é "+ contador);

}

public void incrementaOutroContador()

{

outroContador++;

System.out.println("outroContador agora é "+ outroContador);

}

}

Page 78: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 78

public class TesteStatic

{

public static void main(String args[])

{

Classe1 c1 = new Classe1();

c1.incrementaContador();

c1.incrementaOutroContador();

Classe1 c2 = new Classe1();

c2.incrementaContador();

c2.incrementaOutroContador();

Classe1 c3 = new Classe1();

c3.incrementaContador();

c3.incrementaOutroContador();

}

}

4.7. Interfaces

Em Java existe outra estrutura, denominada interface, que possui sintaxe similar à de classes mas contendo apenas a especificação de suas funcionalidades, sem determinar como a mesma deve ser implementada. A declaração de uma interface é similar à de classes. No entanto, seu corpo define apenas assinaturas de métodos e constantes.

Exemplo:

interface Interface1 {

void met1();

}

Define-se que uma interface Java é “implementada” (palavra chave implements) por outras classes. Uma interface estabelece uma espécie de contrato que é obedecido por uma classe. Quando uma classe implementa uma interface, garante-se que todas as funcionalidades especificadas pela interface serão oferecidas pela classe.

Exemplo:

Page 79: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 79

interface Coleção {

public ordenar()

}

class Lista implements Coleção {

public ordenar(){

...

}

}

5. Tratamento de Exceções

Diversas operações como entrada de saída de teclado, abertura de conexões de rede, conversões de String para número (Integer.parseInt(), por exemplo), abertura de arquivos, escrita em arquivos, envio/recebimento de dados pela rede, entre outras podem gerar exceções.

Estas exceções devem ser tratadas para que seu programa “saiba” o que fazer no caso de exceções (em geral, falhas ou impossibilidades de execução nas operações exemplificadas).

A linguagem Java oferece um precioso mecanismo de controle e tratamento de erros dos programas, chamado de tratamento de exceções. Em Java, todo e qualquer erro é chamado de exceção.

Este mecanismo de tratamento de erros em Java é feito pelas diretivas try, catch e finally. A sintaxe dessas diretivas é a seguinte:

try {

código_a_ser_executado

}

catch( Exceção ) {

código_de_tratamento_de_erro

}

finally {

código_sempre_executado

}

O bloco try só é executado se a exceção não ocorrer. O bloco catch só é executado se a exceção ocorrer. Observe que o catch recebe um objeto da classe da exceção como argumento (você que dá nome a este objeto). Dentro do bloco catch, você pode chamar métodos da classe correspondente à

Page 80: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 80

exceção e/ou inserir trechos de código seu para interagir com o usuário ou tomar outras providências.

Podem existir múltiplos blocos catch no tratamento de erros. Cada um para um tipo específico de Exception.

O código abaixo apresenta um exemplo da aplicação de tratamento de exceções para a validação de um número inteiro.

int numero;

try {

//bloco a ser executado se tudo deu certo!

numero = Integer.parseInt(jTextField1.getText());

} catch ( Exception e) {

//bloco a ser executado se ocorrer a exceção na conversão da String para inteiro

//Por exemplo: O usuário digitou uma letra e você tentou converter para número //com o Integer.parseInt()

}

Observação:

Além do bloco try/catch pode-se também utilizar a cláusula throw, que permite lançar exceções diretamente de um método ou até mesmo criar novas exceções. Além disso, pode-se também empregar a cláusula throws, que repassa o tratamento para quem chamou o método ou a classe em questão.

Bem, por hoje é só!! Espero ter conseguido passar de forma bem didática alguns dos fundamentos básicos que são muito importantes para a prova.

Vamos às questões para darmos continuidade aos estudos!!

Page 81: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 81

QUESTÕES DE PROVAS COMENTADAS

1. (CESGRANRIO/2013/BNDES/BACEN/ANALISTA DE SISTEMAS/SUPORTE) As linguagens de programação C, Haskell e Ruby são, respectivamente, exemplos dos paradigmas

(A) Imperativo, Lógico e Orientado a Objeto (B) Clássico, Lógico e Web (C) Imperativo, Funcional e Orientado a Objeto (D) Lógico, Funcional e Imperativo (E) Clássico, Orientado a Objeto e Lógico

Comentários

Linguagem Descrição

C Utiliza Paradigma Imperativo, que descreve a computação como ações, enunciados ou comandos que mudam o estado (variáveis) de um programa.

Haskell Utiliza Paradigma Funcional, que enfatiza a aplicação de funções, em contraste da programação imperativa, que enfatiza mudanças no estado do programa. Linguagens de programação funcional, como a Haskell, não são uma sequência de afirmações e não possuem, por consequência, um estado global como as linguagens imperativas.

Ruby Ruby é uma linguagem criada em 1995 pelo japonês Yuri Matsumoto. Trata-se de uma linguagem limpa e direta toda orientada a objetos, bem simples de se aprender e trabalhar. É uma Linguaguem multi-plataforma, sendo suportada por diversos tipos de sistemas operacionais, como Linux, Windows, Solares e outros. Segundo DevMedia, possui muitas features interressantes como o Ruby Gems (Biblioteca Gratuita disponível na internet), Code Blocks( Bloco de códigos), Mixins(Resposta à herança multipla), tipagem dinâmica e outras características. Além de ser a linguagem predileta para aprender entre os programadores Delphi.

Gabarito: letra C.

2. (CESGRANRIO/2005/ANALISTA DE SISTEMAS, TÉCNICO E TÉCNICO DE NÍVEL SUPERIOR – Amazonas) Qual é a API do J2EE que permite executar comandos SQL a partir de métodos de classes implementadas em Java?

(A) JAAS

(B) JAXP

Page 82: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 82

(C) JDBC

(D) JMS

(E) JSP

Comentários

Item A. JAAS (Java Authentication and Authorization Service) é um conjunto que APIs que permite que as aplicações Java tenham um controle autenticação e de acesso.

Item B. JAXP (Java API para XML Parsing) é uma API que permite o processamento de XML.

Item C. A API JDBC permite o acesso a banco de dados a partir de aplicações Java. Logo, a execução de comandos SQL deve utilizar esta API.

Item D. Java Message Service (JMS) é uma API que permite que duas ou mais aplicações possam se comunicar por meio de troca de mensagens.

Item E. JavaServer Faces (JSF) é um framework para facilitar o desenvolvimento de aplicações Web aplicando Java EE. A utilização de JSF visa simplificar o desenvolvimento de páginas Web, oferecendo componentes de interface de usuário e conectando os mesmos a objetos de negócios. Também automatiza o processo de uso de JavaBeans, a navegação entre páginas, além de facilitar a execução de diferentes tarefas como validação e conversão.

Gabarito: letra C.

3. (CESGRANRIO/BNDES/2013/BACEN/ANALISTA DE SISTEMAS/SUPORTE) Java Message Service (JMS) é uma tecnologia voltada para o envio e processamento de mensagens na qual o

(A) modelo ponto a ponto de troca de mensagens estabelece que cada mensagem enviada para uma fila deve ser recebida por um único consumidor. (B) modelo ponto a ponto de troca de mensagens permite que cada mensagem enviada para uma fila seja lida várias vezes por diferentes consumidores. (C) modelo publish/subscribe de troca de mensagens estabelece que até dois consumidores podem ler o conteúdo de uma mensagem enviada. (D) modelo publish/subscribe de troca de mensagens estabelece que somente um consumidor pode ler o conteúdo de uma mensagem enviada. (E) conceito de tópico de mensagens é usado no modelo ponto a ponto para o envio de uma mensagem em multicast, enquanto o conceito de filas de mensagens é usado no modelo publish/subscribe para o envio de uma mensagem para no máximo um consumidor.

Page 83: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 83

Comentários

JMS é uma API Java Message Service, ou simplesmente JMS, lançada em 1998 pela Sun Microsystems, com o objetivo principal de realizar a comunicação entre sistemas através de mensagens. Estas mensagens são produzidas por um JMS Producer, enviadas e armazenadas em um JMS Provider e consumidas por um JMS Consumer. Tais mensagens podem ser armazenadas em um sistema de filas (Queue) ou em um sistema de assinaturas chamado de tópico (Topic), dependendo da necessidade de cada projeto. A Figura seguinte ilustra o funcionamento de cada um deles.

Outra característica presente no envio de mensagens é a possibilidade delas serem enviadas de maneira síncrona (produtor e consumidor ativos ao mesmo tempo) ou assíncrona (produtor ativo e consumidor desativado). Como as mensagens são armazenadas em um provider, a configuração de seu envio pode ser feita de tal forma que elas fiquem armazenadas no provedor mesmo que o consumidor não esteja sendo executado naquele momento. As mensagens ficariam então armazenadas até que o consumidor fosse ativado e as consumisse. Talvez a principal vantagem deste serviço seja a garantia de que a mensagem será entregue. Um serviço JMS pode ser usado, por exemplo, em alguns sistemas de comércio eletrônico, que utilizam mensagens JMS para tratar as operações de compra de um produto pelo consumidor, a análise de crédito deste consumidor junto à operadora de cartão de crédito e também a confirmação de disponibilidade de entrega pela empresa de frete. Os sites destas lojas virtuais apenas apresentam os produtos e recebem os pedidos de compra, enquanto mensagens são geradas com os dados das compras e enviadas para uma ou mais aplicações que processam tais informações de forma externa ao sistema do site. Isso garante ao site um tempo de resposta menor aos acessos, maior segurança e maior volume de transações diárias. (Fonte: Devmedia, 2013).

Page 84: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 84

A alternativa correta é letra A, que destaca que o Java Message Service (JMS) é uma tecnologia voltada para o envio e processamento de mensagens na qual o modelo ponto a ponto de troca de mensagens estabelece que cada mensagem enviada para uma fila (Queue) deve ser recebida por um único consumidor.

Gabarito: letra A.

4. (CESGRANRIO/BNDES/2013/BACEN/ANALISTA DE SISTEMAS/DESENVOLVIMENTO DE SISTEMAS) Qual elemento deve ser a raiz (root element) de um documento XML para que este seja identificado como uma mensagem SOAP?

(A) soap:Header (B) soap:Body (C) soap:Message (D) soap:Channel (E) soap:Envelope

Comentários

• Uma mensagem SOAP é um documento XML que pode conter três partes: o envelope, o cabeçalho e o corpo.

o Envelope: define o conteúdo da mensagem (obrigatório)

o Cabeçalho: contém informação de controle e processamento (opcional)

o Corpo: contém informação da chamada e da resposta (obrigatório)

Figura. Mensagem SOAP

Conforme destaca http://www.gta.ufrj.br/grad/08_1/soap/Page4.html, como todo documento XML, uma mensagem SOAP é composta de tags (elementos) e o elemento soap:Envelope deve ser a raiz (root element ou elemento -raiz) de um documento XML para que este seja identificado como uma mensagem SOAP . Gabarito: letra E.

Page 85: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 85

5. (CESGRANRIO/BNDES/2013/BACEN/ANALISTA DE SISTEMAS/DESENVOLVIMENTO DE SISTEMAS) No âmbito da análise estruturada de sistemas, o gráfico de estrutura representa o modelo lógico de uma hierarquia modular, onde é possível mostrar a(o)

(A) comunicação entre módulos e a localização de loops e decisões principais de processamento. (B) construção de programas em hierarquia, por meio de um pequeno número de estruturas lógicas, cada uma com uma entrada e uma saída. (C) conjunto de elementos de dados, identificados, inclusos em um registro. (D) conjunto de elementos de dados de uma determinada relação, usado, geralmente, para descrever alguma entidade. (E) número de módulos chamados diretamente por outro módulo, nem muito alto (exceto no caso de um módulo despachante) nem muito baixo.

Comentários

O Diagrama de Estrutura destaca a comunicação entre módulos e a localização de loops e decisões principais de processamento.

Gabarito: letra A.

6. (CESGRANRIO/BNDES/2013/BACEN/ANALISTA DE SISTEMAS/DESENVOLVIMENTO DE SISTEMAS) Na linguagem Java, a palavra-chave final pode ser usada na declaração de classes, de métodos e de variáveis.

Quando essa palavra-chave é usada na declaração de uma classe, ela indica que (A) a classe não pode ser estendida. (B) a classe só pode ser instanciada uma única vez. (C) a classe é considerada uma interface. (D) as variáveis da classe só podem sofrer atribuições de valores uma única vez. (E) os métodos da classe não podem ser sobrescritos.

Comentários

Uma classe definida como final não pode ser estendida.

Veja o exemplo listado a seguir retirado do site da Unicamp ->

Assim, a compilação do arquivo Reeleicao.java

final class Mandato {

}

public class Reeleicao extends Mandato {

}

ocasionaria um erro de compilação:

Page 86: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 86

caolho:Exemplos[39] javac Reeleicao.java

Reeleicao.java:4: Can't subclass final classes: class Mandato

public class Reeleicao extends Mandato {

^

1 error

Fonte: http://www.dca.fee.unicamp.br/cursos/PooJava/classes/definicao.html

Gabarito: letra A.

7. (Cesgranrio/Analista de Sistemas Júnior - Engenharia de Software/Petrobrás/2010) Considere os dois trechos de implementações de classes, produzidos com a linguagem Java (As reticências representam partes irrelevantes para a questão).

O diagrama de classes em UML que pode ser inferido única e exclusivamente a partir dos trechos de código fornecidos é

Page 87: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 87

Comentários

No código, observe que há uma associação bidirecional entre Class1 e Class2. Na Class1 existe uma instância da Class2, chamada b. Já na Class2 existe uma coleção (Set) de objetos da Class1, chamada d.

Além disso, as classes Class1 e Class2 herdam da classe Class0, e ainda, na Class1, existe uma coleção de objetos da Class0, chamada a.

Importante ressaltar que a associação entre as classes Class0 e Class1 é unidirecional, apontando para a Class0, pois a referência está sendo feita somente na Class1.

Por fim, somente pelo código exibido, não se pode afirmar que exista uma agregação entre as classes Class0 e Class1.

Gabarito: letra C.

8. (Cesgranrio/Analista de Sistemas Júnior - Engenharia de Software/Petrobrás/2010)

public class SomaMisteriosa {

private static void somaTres(int x[]) {

x[0] += 3;

}

private static void somaDois(int x) {

x += 2;

}

public static void main(String args[]) {

int x = 0;

int y[] = { 0 };

Page 88: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 88

somaDois(x);

somaTres(y);

somaDois(y[0]);

System.out.print(x + " " + y[0]);

}

}

Após a execução do trecho acima, será impresso

(A) 2 5

(B) 1 5

(C) 0 5

(D) 0 3

(E) 0 0

Comentários

Para facilitar o entendimento, irei reproduzir o código com as linhas numeradas:

1 public class SomaMisteriosa {

2 private static void somaTres(int x[]) {

3 x[0] += 3;

4 }

5 private static void somaDois(int x) {

6 x += 2;

7 }

8 public static void main(String args[]) {

9 int x = 0;

10 int y[] = { 0 };

11 somaDois(x);

12 somaTres(y);

13 somaDois(y[0]);

14 System.out.print(x + " " + y[0]);

15 }

16 }

Page 89: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 89

No código acima, o método somaTres recebe como parâmetro um array de inteiros (que é uma classe) e somaDois recebe um parâmetro do tipo primitivo int.

Deve-se ressaltar também que a passagem de parâmetros em Java é sempre feita por valor. No entanto, um método que recebe um objeto como parâmetro faz referência à instância passada. Isso faz com que este método trabalhe como se fosse por referência.

Logo, no código acima são declarados um inteiro x (linha 9) com o valor zero e um array de inteiros y (linha 10) que possui somente um elemento zero. Novamente, lembre-se que array é uma Classe.

A execução do método somaDois (linha 11) chama o mesmo (linha 5), passando como parâmetro o valor zero.

Dentro do método, é criada uma nova variável (que também se chama x), a qual tem seu valor acrescido de 2 (linha 6). No entanto, a alteração é local ao método, pois a passagem é feita por valor. Assim sendo, o valor da variável x declarada no método main mantém-se inalterado, ou seja, zero.

Na linha 12 é feita uma chamada ao método somaTres, passando o array y como parâmetro. Neste método, o valor do elemento é acrescido de 3 (linha), alterando o objeto original. Neste ponto o array y contem um elemento na posição zero, que vale 3.

A nova chamada ao método somaDois (linha 13) não altera o valor do elemento do array, pois é informado um parâmetro inteiro.

Logo, o valor final da variável x é zero, e da variável y na posição zero é 3.

Gabarito: letra D.

9. (Cesgranrio/Analista de Sistemas Júnior - Engenharia de Software/Petrobrás/2010) Considere o seguinte trecho de código em Java:

// Arquivo C1.java

package br.com.pk1;

public class C1 {

int x;

public int y;

protected int z;

private int w;

}

Page 90: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 90

// Arquivo C2.java

package br.com.pk2;

public class C2 extends C1 {

}

A Classe C2 pode manipular os atributos

(A) x, y, z

(B) y, z

(C) x, y

(D) y

(E) x, y, z, w

Comentários

A linguagem Java possui quatro tipos de visibilidade: pública (public), privada (private), protegida (protected) e de pacote (sem palavra reservada).

Quando declara-se um atributo ou método sem definir a visibilidade (como o atributo x da classe C1), assume-se a visibilidade do pacote, a qual permite que o atributo seja visível apenas dentro do mesmo pacote (package).

Logo, como C2 herda de C1 e está num pacote diferente, ele não pode manipular x nem w (privado). Sendo assim a resposta é a letra B.

Gabarito: letra B.

10. (Cesgranrio/Analista de Sistemas Júnior - Engenharia de Software/Petrobrás/2010)

01 class C1 {

02 public void f() {

03 System.out.print(" 1 ");

04 }

05

06 public void g() {

07 f();

08 }

09 }

10

Page 91: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 91

11 class C2 extends C1 {

12 public void f() {

13 System.out.print(" 2 ");

14 }

15 }

16

17 public class Prog {

18 public static void main(String args[]) {

19 C1 a = new C1();

20 a.f();

21 C2 b = new C2();

22 b.f();

23 a = b;

24 a.f();

25 b.g();

26 }

27 }

Considerando a execução do trecho de código em Java acima, o programa

(A) sequer compila, pois a atribuição “a = b” (linha 23) está incorreta por incompatibilidade de tipos.

(B) compila, mas é gerado um erro de execução por incompatibilidade da atribuição “a = b” (linha 23).

(C) imprime 1 2 1 1.

(D) imprime 1 2 1 2.

(E) imprime 1 2 2 2.

Comentários

Observe que o objeto a foi declarado e instanciado (na linha 19) para a classe C1. A seguir, na linha 20, é feita uma chamada ao método f da classe C1. Esta chamada exibe o valor “1” .

A seguir, é declarado e instanciado o objeto b da classe C2, a qual herda de C1. Em seguida, é feita uma chamada ao método f da classe C2, exibindo o valor “2”.

Na linha 23, é feita a atribuição “a = b” . Esta atribuição é possível sem necessidade de conversão pois b foi declarado numa subclasse de a.

Page 92: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 92

A partir deste ponto, a variável a irá referenciar o mesmo objeto que a variável b, que é da subclasse C2. Sendo assim, a chamada do método f na linha 24 irá exibir o valor “2”.

Finalmente, a chamada do método g para o objeto b retorna o valor “2”. Acompanhando-se os valores retornados, obtivemos a sequência 1222, apresentada na letra E.

Gabarito: letra E.

11. (Cesgranrio/Analista de Sistemas Júnior - Engenharia de Software/Petrobrás/2010)

01 class C1 {

02 public void mostraDados() {

03 System.out.print(" 1 ");

04 }

05 }

06

07 class C2 extends C1 {

08 public void mostraDados() {

09 System.out.print(" 2 ");

10 }

11 }

12

13 public class Prog {

14 public static void f(C1 c) {

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

16 c.mostraDados();

17 }

18

19 public static void f(C2 c) {

20 System.out.print(" B ");

21 c.mostraDados();

22 }

23

24 public static void main(String args[]) {

25 C1 c1 = new C2();

26 f(c1);

Page 93: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 93

27 }

28 }

Após a execução do trecho acima, na saída padrão o programa

(A) não compila.

(B) imprime A 1.

(C) imprime A 2.

(D) imprime B 1.

(E) imprime B 2.

Comentários

Esta questão avalia o conhecimento do candidato sobre sobrecarga (overload) e sobrescrita (override). A maioria dos autores considera ambos como formas de polimorfismo.

Relembrando os conceitos:

Sobrecarga de métodos: mais de um método na mesma classe com o mesmo nome, mas com assinaturas (lista de parâmetros) diferentes. Deve-se ressaltar que o tipo de retorno e as exceções também podem ser diferentes.

Exemplo:

class C {

public void metodo() {

}

public int metodo(String string) {

return 1;

}

public void metodo(Integer x) throws Exception {

}

}

Observe que o método definido para a classe acima possui 3 implementações distintas, com a lista de parâmetros obrigatoriamente diferente. Os métodos possuem retornos diferentes e também lançam exceções diferentes, o que não é obrigatório.

Page 94: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 94

Sobrescrita de método: os métodos herdados por uma classe, que não sejam privados, podem ser redefinidos. Eles devem ter a mesma lista de parâmetros, o mesmo tipo de retorno e não lançar uma exceção maior do que a definida na superclasse.

Exemplo:

class D extends C {

public void metodo() {

}

}

Voltando à resolução da questão:

Na linha 25, a variável c1 é declarada para a classe C1 e instanciada na C2. Isto é possível porque C2 é subclasse de C1.

A chamada a um método sobrecarregado (overload) é resolvida em tempo de compilação, onde deve-se observar a classe na qual o objeto foi declarado. Logo, a chamada ao método f da linha 26 executa a versão definida na linha 14, a qual recebe um objeto C1 como parâmetro.

A execução deste método f exibe o valor “ A “, e faz uma chamada ao método sobrescrito (override) mostraDados. No entanto, uma chamada a um método sobrescrito é resolvida em tempo de execução, observando a classe na qual o objeto foi instanciado. Assim, é executado o método definido na subclasse C2, qual exibe o valor “ 2 ”.

Acompanhando-se os valores retornados, obtivemos a sequência A2, apresentada na letra C.

Gabarito: letra C.

12. (Cesgranrio/BNDES/Analista de Sistemas/Suporte/2010) O gerente de infraestrutura de uma empresa reuniu seus analistas para decidir sobre a topologia do ambiente de um servidor de aplicação JAVA comercial, recentemente adquirido.

Uma possível ordem de interconexão entre os elementos desse ambiente, considerando-se a necessidade de controle do tráfego externo, seria

(A) Link Internet, Firewall, Servidor WEB (Proxy), Servidor JAVA.

(B) Link Internet, Servidor WEB (Proxy), Servidor JAVA, Firewall.

(C) Firewall, Link Internet, Servidor WEB (Proxy), Servidor JAVA.

(D) Firewall, Link Internet, Servidor JAVA, Servidor WEB (Proxy).

(E) Servidor WEB (Proxy), Link Internet, Firewall, Servidor JAVA.

Page 95: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 95

Comentários

Dentre as opções a ordem de interconexão possível seria colocar o Firewall entre o link de internet e a rede interna. O Proxy irá controlar as conexões entre as aplicações na Internet e o Servidor JAVA.

Gabarito: letra A.

13. (CESGRANRIO/2009/Casa da moeda)

public class Main {

public static void main(String[] args) {

int x = 1;

int y = 3;

int z = 6;

x += calcula(y++ + ++z);

System.out.println(x);

}

public static int calcula(int x) {

return x * 2;

}

public static int calcula(int y, int z) {

return z - y;

}

}

Qual será a saída do programa Java mostrado acima?

(A) 3

(B) 5

(C) 19

(D) 21

(E) 23

Comentários

A execução do código ocorre da seguinte forma:

Os valores dos atributos são atribuídos; logo após é chamada a primeira implementação do método calcula, com somente 1 parâmetro.

Page 96: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 96

Observe que o incremento unário em y é posterior (y++), mas em z é anterior (++z). Logo, no momento da chamada do método, y possui o valor 3 e z, o valor 7.

Então, o método é chamado com o valor 10, retornando o dobro do mesmo (20). Finalmente, x recebe o valor dele (1) mais o retorno do método (20), totalizando 21.

Gabarito: letra D.

14. (CESGRANRIO/2009/IBGE) O código abaixo foi escrito em Java.

package execute;

import java.lang.Exception;

import java.lang.ArithmeticException;

public class Main {

public static class ClassMsg

{

public void processa (int par1, int par2)

{

String msg = “V=”;

try {

msg = msg + Double.toString(par1/par2);

System.out.print(msg);

} catch (ArithmeticException ar) {

System.out.print(“AR”);

} catch (Exception ex) {

System.out.print(“EX”);

} finally {

System.out.print(“FI”);

}

System.out.print(msg);

}

}

public static void main(String[] args) {

ClassMsg obj = new ClassMsg();

obj.processa(10, 0);

System.out.print(4/2);

Page 97: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 97

}

}

A saída da execução desse programa é

(A) V=2

(B) FIV=2

(C) ARFIV=

(D) ARFIV=2

(E) AREXFIV=

Comentários

A execução do código ocorre da seguinte forma:

No método main, ocorre uma chamada ao método processa com os parâmetros 10 e 0.

No método processa, tenta-se fazer uma divisão de 10 por 0, resultando numa exceção que imprime a string "AR".

Após isso, é impresso, no bloco finally, a string "FI".

Em seguida, é exibido o valor da variável msg ("V=").

Retornando ao método main, a próxima chamada ao método processa envolve os parâmetros 4 e 2. Nesta execução, a imprime-se na tela o valor "2".

Logo, como utilizou-se sempre o método print, ocorreu uma impressão sequencial de ARFIV=2, que é a resposta da letra D.

Gabarito: letra D.

15. (CESGRANRIO/2005/ANALISTA DE SISTEMAS, TÉCNICO E TÉCNICO DE NÍVEL SUPERIOR – Amazonas) Considere a seguinte classe escrita em Java:

class calcula {

int resultado = 0;

public int processar (int par)

{ resultado = resultado + par;

par = par - 2;

if (par >= 0)

{ processar (par);

} return resultado;

Page 98: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 98

} public static void main (String[] arguments) { calcula r = new calcula(); System.out.println(r.processar(7)); } }

Após a execução do método “main”, o valor apresentado pelo comando

“System.out.println(r.processar(7));” é:

Comentários

A execução do programa leva à chamada recursiva do método processar.

Na primeira chamada, a variável par assume o valor 5 e o atributo resultado, o valor 7.

Enquanto par for maior que 0, serão feitas chamadas recursivas ao método processar.

Logo, na segunda chamada, par recebe 3 e resultado, 12.

Na terceira, par recebe 1 e resultado 15.

Finalmente, na quarta chamada, par recebe -1 e resultado assume o valor final 16.

Gabarito: letra E.

16. (CESGRANRIO/BNDES/Analista de Sistemas – Suporte/2008) Um servidor Linux, que roda, exclusivamente, um servidor de aplicação Java EE, possui 2 GB de memória RAM e 1 CPU. A única aplicação em execução atinge, em momentos de pico, 50 usuários simultâneos. Para que essa aplicação tenha um desempenho adequado, o tamanho máximo da Heap da JVM pode ser configurado para

a) 100 threads.

b) 32 MB.

c) 60 threads.

d) 2 GB.

e) 512 MB.

Comentários

A heap da JVM (Java Virtual Machine) é uma área de memória em que todos os objetos das aplicações que estão sendo executadas pela JVM residem. Além dos objetos criados nas aplicações, a heap ainda possui uma área de memória reservada para outras funções da JVM. Nesse sentido, é importante configurar

Page 99: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 99

adequadamente o tamanho da heap para que as aplicações executem com desempenho adequado.

Itens a e c. Itens errados. O tamanho da heap é definido em termos de quantidade de memória, e não em termos de threads.

Item d. Item errado. O servidor possui ao todo 2 GB, então alocar toda a memória do sistema para a JVM não será possível, pois o sistema operacional também precisará utilizar parte dessa memória.

Item b. Item errado. A quantidade aqui especificada não será suficiente para maximizar o desempenho.

Item e. Item correto. Tomando-se como base as dicas do enunciado, e considerando que o tamanho default da heap – tamanho que atende os requisitos de desempenho de uma aplicação média - da JVM varia entre 16MB a 64MB, com o objetivo de maximizar o desempenho da aplicação, o ideal seria configurar o tamanho máximo da heap para 512MB.

Gabarito: letra E.

17. (CESGRANRIO/2005/ANALISTA DE SISTEMAS, TÉCNICO E TÉCNICO DE NÍVEL SUPERIOR – Amazonas) Os miniaplicativos Java transferidos para o nosso computador quando acessamos uma página na Internet que os utiliza são chamados:

(A) applets.

(B) browsers.

(C) caches.

(D) cookies.

(E) sites.

Comentários

Item A. Um Applet é um programa Java que é chamado por um documento HTML e executado pelo navegador. Logo, como eles são aplicativos executados a partir de páginas HTML, devem, portanto, ser executados na máquina do usuário. Item correto.

Item B. Browser é o programa empregado para navegação na Internet. Item errado.

Item C. Cache é um recurso que serve como intermediário possibilitando o acesso mais rápido a páginas Web. Item errado.

Item D. Forma que os sites usam para armazenar informações a respeito do usuário na máquina dos mesmos. Na verdade, é um pequeno arquivo texto que os sites podem enviar aos navegadores. Item errado.

Item E. São os endereços das páginas da Internet. Item errado.

Gabarito: letra A.

Page 100: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 100

18. (CESGRANRIO/2010/Petrobrás - Analista de Sistemas Júnior) Testar é uma disciplina de suma importância para a engenharia de software. A literatura divide os tipos de testes em duas grandes categorias: teste de caixa preta e teste de caixa branca. Sobre esta classificação, pode-se afirmar que

I - testes de interfaces são classificados como de caixa branca; II - testes de caixa preta são também chamados de teste comportamental, onde o foco são os requisitos funcionais do software; III - testes de caixa preta são complementares aos testes de caixa branca, uma vez que contemplam diferentes classes de erros. É correto o que se afirma em

a) I, apenas.

b) I e II, apenas.

c) I e III, apenas.

d) II e III, apenas.

e) I, II e III.

Comentários

I – Os testes de interface são classificados de caixa preta, pois não avaliam a estrutura interna do que foi implementado.

II – Está correto. Os testes caixa preta são chamados de comportamentais. Além disso, focam na verificação se os requisitos foram atendidos.

III - Correto. Os testes de caixa preta abrangem classes diferentes dos de caixa branca.

Portanto, estão certos apenas os itens II e III.

Gabarito: letra D.

19. (Cesgranrio/Petrobrás/Processos de Negócios/2008) Um importante aspecto da elaboração de casos de testes para um sistema em desenvolvimento é a escolha dos valores de entrada e das saídas previstas dos casos de teste. Escolhas baseadas apenas em valores típicos, em geral, são incapazes de revelar todas as falhas da implementação. É necessário identificar conjuntos de valores que possuam características comuns, do ponto de vista das funcionalidades a serem testadas, como, por exemplo, “números negativos”, “números com mais dígitos do que o previsto”, “strings sem brancos”, “arrays de um só elemento”, além de prever casos de teste cobrindo a totalidade destes conjuntos, e projetar, para cada conjunto, casos de teste com valores nos limites e próximos ao ponto médio do conjunto. Esses conjuntos são denominados

(A) partições de equivalência.

Page 101: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 101

(B) grupos de controle.

(C) espaços amostrais.

(D) classes características.

(E) intervalos de testes.

Comentários

Esses conjuntos são considerados “partições de equivalência”. O particionamento de equivalência é um teste de caixa preta, bastante cobrado nas provas da Cesgranrio! Algumas observações sobre o particionamento de equivalência:

A partição de equivalência é um método que separa os domínios dos dados de entrada em categorias. Essas categorias podem ser entradas válidas e inválidas, permitindo que casos de teste na mesma categoria sejam eliminados sem que se prejudique a eficácia dos testes (Paula Filho, 2003). Essas classes têm características comuns, tais como “números negativos”, “números com mais dígitos do que o previsto”, “strings sem brancos”, etc. Os programas normalmente se comportam de maneira similar para todos os membros de uma classe. Uma abordagem sistemática dos testes para a detecção de defeitos baseia-se em identificar todas as partições de equivalência que tenham de ser manuseadas por um programa, a fim de criar os casos de teste (SOMMERVILLE, 2003).

Na figura seguinte, cada partição de equivalência é mostrada como uma elipse.

Figura. Partições de Equivalência (Sommerville, 2003, p. 379)

Page 102: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 102

As partições de equivalência de entradas são conjuntos de dados em que todos os membros do conjunto devem ser processados de maneira equivalente. As partições de equivalência de saída são saídas de programa que têm características comuns e, assim, podem ser consideradas uma classe distinta (SOMMERVILLE, 2003). Uma vez identificado um conjunto de partições, escolhem-se então casos de teste a partir de cada uma dessas partições.

Uma boa diretriz a seguir para a seleção de casos de teste é escolher casos de teste nos limites das partições e também casos próximos ao ponto médio da partição. O ponto em questão para essa diretriz é que os projetistas e os programadores tendem a considerar valores típicos de entradas, quando desenvolvem um sistema. Esses valores são testados escolhendo-se o ponto médio da partição. Os valores-limite são sempre atípicos e, em geral, os erros com esses valores são mais frequentes do que nas regiões centrais, apesar das razões para que isso aconteça não serem completamente claras (SOMMERVILLE, 2003) (Paula Filho, 2003).

As partições de equivalência podem ser identificadas utilizando-se a especificação do programa ou a documentação do usuário e pelo testador, utilizando sua própria experiência para prever que classes de valores de entrada podem detectar erros (SOMMERVILLE, 2003).

Mais informações:

http://www.rafaeldiasribeiro.com.br/downloads/testesw3.pdf

PAULA FILHO W. de P. Engenharia de Software – Fundamentos, Métodos e Padrões. LTC Editora, Rio de Janeiro – RJ, 2003.

SOMMERVILLE I. Engenharia de Software. Addison Wesley, -, 2003.

PRESSMAN R.S. Engenharia de Software. Makron Books do Brasil Editora Ltda, São Paulo – SP, 1995.

Gabarito: letra A.

20. (Cesgranrio/BNDES/2008) No âmbito de estratégias e técnicas de testes de software, assinale a afirmativa correta.

(A) É uma boa prática automatizar os testes de unidade, embora não seja recomendado, em geral, automatizar os testes de regressão.

(B) São exemplos de abordagens de testes para aplicações cliente-servidor: teste de função da aplicação cliente, teste de servidor, teste de banco de dados, teste de transação e teste de comunicação em rede.

(C) São exemplos de teste de caixa-branca: teste de caminho básico, teste de estrutura de controle e teste utilizando particionamento de equivalência.

(D) A verificação é testada pela pergunta: “Estamos construindo o produto correto?”, enquanto a validação indaga: “Estamos construindo o produto corretamente?”.

(E) Depois do teste de unidade, o teste seguinte a ser aplicado a um software é, comumente, o teste de validação.

Page 103: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 103

Comentários

Item A. Item errado. Pode-se também automatizar os testes de regressão.

Item b. Item correto. Todos os exemplos de abordagens de testes apresentados são utilizados para testes de aplicações cliente-servidor. São eles: teste de função da aplicação cliente, teste de servidor, teste de banco de dados, teste de transação e teste de comunicação em rede.

Item c. Item errado. O particionamento de equivalência é um teste de caixa-preta! Muito importante!!!.

Item d. Item errado. Inverteu os conceitos! A validação é testada pela pergunta: “Estamos construindo o produto correto?”, enquanto a verificação indaga: “Estamos construindo o produto corretamente?”.

Item e. Item errado. Depois do teste de unidade, o teste seguinte a ser aplicado a um software é, comumente, o teste de integração!!

Gabarito: letra B.

Questões Complementares

21. (ESAF/2008/STN/DESENVOLVIMENTO DE SISTEMAS) Para resolver um determinado problema, um programador tem em mente como deve ser o programa principal que, por sua vez, controlará todas as outras tarefas distribuídas em sub-rotinas, para as quais deverá desenvolver os respectivos algoritmos. Este cenário exemplifica o conceito de programação

a) estruturada.

b) orientada a objetos.

c) funcional.

d) numérica.

e) orientada a aspectos.

Comentários

Item a. Estabelece uma disciplina de desenvolvimento de algoritmos que facilita a compreensão de programas através do número restrito de mecanismos de controle da execução de programas. Qualquer algoritmo, independentemente da área de aplicação, de sua complexidade e da linguagem de programação na qual será codificado, pode ser descrito através destes mecanismos básicos. O princípio básico de programação estruturada é que um programa é composto por blocos elementares de código que se interligam através de três mecanismos básicos, que são sequência, seleção e iteração. Cada uma destas construções tem um ponto de início (o topo do bloco) e um ponto de término (o fim do bloco) de execução. ITEM VERDADEIRO.

Page 104: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 104

Item b. É um paradigma de análise, projeto e programação de sistemas de software baseado na composição e interação entre diversas unidades de software chamadas de objetos. Na programação orientada a objetos, implementa-se um conjunto de classes que definem os objetos presentes no sistema de software. Cada classe determina o comportamento (definido nos métodos) e estados possíveis (atributos) de seus objetos, assim como o relacionamento com outros objetos. ITEM FALSO.

Item c. É um paradigma de programação que trata a computação como uma avaliação de funções matemáticas e que evita estados ou dados mutáveis. Ela enfatiza a aplicação de funções, em contraste da programação imperativa, que enfatiza mudanças no estado do programa. Linguagens de programação funcionais, especialmente as puramente funcionais, tem sido mais usadas academicamente que no desenvolvimento comercial de software. ITEM FALSO.

Item d. Refere-se ao tipo de programação que trata exclusivamente de operações matemáticas entre variáveis. A maior parte dos tipos existentes na matemática (vetores, matrizes, escalares, etc.) já se encontram pré-definidos nesse tipo de linguagem e o seu uso pode, por vezes, ser simbólico (uso de funções em vez de números, por exemplo, plot(sin(x)) em vez de plot(x) com x = [...]). As operações entre estes tipos encontram-se otimizadas. Tipo de linguagens numéricas: fortran, gnumeric, matlab, mathematica, etc. ITEM FALSO.

Item e. É um paradigma de programação de computadores que permite aos desenvolvedores de software separar e organizar o código de acordo com a sua importância para a aplicação. Todo o programa escrito no paradigma orientado a objetos possui código que é alheio a implementação do comportamento do objeto. Este código é todo aquele utilizado para implementar funcionalidades secundárias e que encontra-se espalhado por toda a aplicação. Esse paradigma de programação permite que o código seja encapsulado e modularizado. ITEM FALSO.

Gabarito: letra A.

22. (ESAF/2007/SEFAZ-CE-TI) Quando uma função é definida em termos de si mesma fica caracterizado o uso

a) da recursividade.

b) da iteratividade.

c) da interatividade.

d) do acesso direto a Banco de Dados.

e) de DLLs.

Page 105: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 105

Comentários

Um programa recursivo é um programa que chama a si mesmo, direta ou indiretamente.

Exemplo:

Função Fatorial (i)

se i ≤ 1 então

retorne 1;

senão

retorne Fatorial (i - 1) * i;

fim se

Fim Função

Vantagens: diminuição e clareza do código.

Desvantagens: redução no desempenho e dificuldade na depuração.

Gabarito: letra A.

23. (ESAF/2006/TRF) Analise as seguintes afirmações relacionadas à Programação Orientada a Objetos:

I. Em um Programa Orientado a Objetos as instâncias de uma classe armazenam tipos diferentes de informações e apresentam comportamentos distintos.

II. Em uma Aplicação Orientada a Objetos podem existir múltiplas instâncias de uma mesma classe.

III. Em Programação Orientada a Objetos deve existir um e somente um objeto de uma mesma classe.

IV. Os serviços que podem ser solicitados a um objeto são definidos pelos

métodos.

Indique a opção que contenha todas as afirmações verdadeiras.

a)II e IV b) II e III c) III e IV d) I e III e) I e II

Comentários

Item I - Falso. Pois as instâncias de uma mesma classe armazenam tipos iguais de informações (mesmo tipo de atributo, mas com valores diferentes) e ainda apresentam o mesmo comportamento (mesmos métodos).

Page 106: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 106

Item II - Verdadeiro. Em uma aplicação Orientada a Objetos realmente espera-se múltiplas instâncias de uma mesma classe.

Item III - Falso. Em Programação Orientada a Objetos pode haver nenhuma ou muitas instâncias de uma mesma classe.

Item IV - Verdadeiro. Os métodos definem o comportamento dos objetos de uma classe, e são chamados através de mensagens.

Gabarito: letra A.

24. (ESAF/2006/TRF) Na Programação Orientada a Objetos,

a) a definição dos objetos deve ser obrigatoriamente definida no corpo do construtor.

b) o código construtor é responsável por criar e inicializar os atributos dos objetos.

c) o construtor é uma função que tem um nome qualquer e, quando instanciada, faz referência aos atributos da classe a ser definida.

d) o código construtor é responsável por criar os métodos da classe.

e) quando se instancia uma classe diversas vezes, o código construtor é responsável por armazenar e compartilhar os atributos das instâncias e os de classe utilizados ao longo de todo o processo.

Comentários

O item A é falso, pois se pode definir valores dos atributos fora do construtor.

O item B é verdadeiro, pois esta é a função do construtor. O construtor de uma classe é responsável por inicializar variáveis e chamar métodos que são executados no momento da criação do objeto através com comando new.

O item C é falso, pois o construtor obrigatoriamente deve possuir o mesmo nome da classe.

O item D é falso, pois sua responsabilidade maior é inicializar/criar os atributos dos objetos a partir de sua instanciação (new ()). O método construtor é mais um de vários métodos existentes numa classe, e serve para executar ações durante a criação do objeto.

O item E é falso, pois o método construtor não possui esse propósito. Total absurdo a assertiva. O método construtor somente é utilizado para ser executado inicialmente, não cabe a ele realizar esta ação.

Gabarito: letra B.

25. (ESAF/2006/CGU) Analise as seguintes afirmações relacionadas aos conceitos básicos de Programação Orientada a Objetos.

I. Modificações de uma classe base requerem, obrigatoriamente, que as classes derivadas mudem.

Page 107: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 107

II. Uma classe derivada não pode conter atributos adicionais diferentes dos

existentes na sua classe base.

III. Criar uma classe derivada não afeta o código-fonte da sua classe base. A integridade de uma classe base é preservada pela herança.

IV. Uma classe derivada contém os atributos e comportamentos de sua classe base.

Indique a opção que contenha todas as afirmações verdadeiras.

a) I e II

b) II e III

c) III e IV

d) I e III

e) II e IV

Comentários

O Item I é falso, pois uma mudança que ocorre numa classe mãe é herdada por todas as classes derivadas desta classe. Esta característica é uma das principais vantagens da orientação a objetos. Quando a classe base é modificada seus novos métodos e variáveis são automaticamente herdados pela classe derivada, ou seja, não há necessidade de realizar modificações na classe derivada, isso é feito de forma implícita. E ainda, se a classe filha já possuir um método idêntico ao recém criado na classe mãe, ocorrerá polimorfismo do tipo overhiding, ou seja, o método da classe filha sobrescreve o da mãe. Portanto não sofrerá nenhuma alteração.

O item II é falso, pois uma classe derivada pode conter atributos pertencentes a somente ela. Essa característica permite uma especialização e adaptação de acordo com a necessidade de quem desenvolve.

O item III é verdadeiro, pois a classe base não é afetada por qualquer modificação realizada em alguma classe derivada. Java implementa o princípio do encapsulamento.

O item IV é verdadeiro, pois se trata do conceito básico de herança.

No paradigma da programação Orientada a Objetos, herança é uma propriedade que permite que classes aproveitem estruturas de classes já existentes. As classes derivadas possuem acesso aos membros da classe preexistente, utilizando-os como se fosse seus. Devido a esta característica é possível classificar tipos semelhantes de classes e especializá-las quando necessário, formando uma Hierarquia de Herança. A herança possibilita a

Page 108: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 108

reutilização de código, mas esta característica é secundária perto dos benefícios que surgem coma utilização desta propriedade.

Gabarito: letra C.

26. (Cops/Analista Administrativo- TI/2011)

Assinale a alternativa correta:

A)Somente as afirmativas I e II são corretas.

B)Somente as afirmativas I e IV são corretas.

C)Somente as afirmativas III e IV são corretas.

D)Somente as afirmativas I, II e III são corretas.

E)Somente as afirmativas II, III e IV são corretas.

Comentários

Item I:

Na linha 5 do programa, a variável parte1 recebe o texto “Bom dia!”.

Na linha 6 do programa, a variável parte2 recebe o texto “Hoje fará sol em”.

Na linha 7 do programa, a variável parte12 recebe como valor a concatenação do valor armazenado na variável parte1, com o comando de mudança de linha, e o valor armazenado na variável parte2.

Page 109: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 109

Na linha 8 do programa, o comando de escrita imprime o valor da variável parte12 seguido do texto “Londrina”. Então o Item I está correto.

Item II:

A tecnologia CCS (Cascading Style Sheets ou, em português, Folha de Estilos em Cascata) é uma linguagem de estilos usada para formatar conteúdos estruturados pela linguagem HTML, ou seja, desenvolver, padronizar e estilizar as páginas da web, seguindo diversas convenções e padronizados pelo W3C - World Wide Web Consortium, como por exemplo a automatização de títulos, rodapé, comentários, fontes, background e etc. O item II também está correto.

Item III: XML (eXtensible Markup Language) é uma recomendação da W3C para gerar linguagens de marcação para necessidades especiais.

É um dos subtipos da SGML (acrônimo de Standard Generalized Markup Language ou Linguagem Padronizada de Marcação Genérica) capaz de descrever diversos tipos de dados. Seu propósito principal é a facilidade de compartilhamento de informações através da internet. A principal característica do XML, de criar uma infraestrutura única para diversas linguagens, é que linguagens desconhecidas e de pouco uso também podem ser definidas sem maior trabalho e sem necessidade de ser submetidas aos comitês de padronização.

O XML traz uma sintaxe básica que pode ser utilizada para compartilhar informações entre diferentes computadores e aplicações. Quando combinado com outros padrões, torna possível definir o conteúdo de um documento separadamente de seu formato, tornando simples para reutilizar o código em outras aplicações para diferentes propósitos.

Portanto, uma das suas principais características é sua portabilidade, pois, por exemplo, um banco de dados pode escrever um arquivo XML para que outro banco consiga lê-lo. Logo, o item III também está correto.

Item IV: O uso primário de JavaScript é escrever funções que são embarcadas ou incluídas em páginas HTML e que interagem com o Modelo de Objeto de Documentos (DOM) da página.

Alguns exemplos deste uso são:

• abrir uma nova janela com controle programático sobre seu tamanho, posição e atributos;

• validar valores de um formulário para garantir que são aceitáveis antes de serem enviados ao servidor;

• mudar imagens à medida que o mouse se movimenta sob elas.

Pelo fato do código JavaScript rodar localmente no navegador do usuário, e não em um servidor remoto, o navegador pode responder a tais ações rapidamente, fazendo uma aplicação mais responsiva. Além disso, o código

Page 110: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 110

JavaScript pode detectar ações de usuário que o HTML sozinho não pode, tais como teclas pressionadas individualmente.

Uma JavaScript engine (também conhecida como interpretador JavaScript ou uma implementação JavaScript) interpreta código fonte JavaScript e o executa de forma adequada.

A primeira implementação JavaScript foi criada por Brendan Eich na Netscape Communications Corporation, para o Navegador Netscape.

Por ser o JavaScript a única linguagem que a maioria dos navegadores populares suportam, tem-se tornado uma linguagem alvo para muitos frameworks em outras linguagens, a despeito do fato de não ter sido planejado para tal. Não obstante as limitações de desempenho inerente à sua natureza dinâmica, a crescente velocidade das implementações JavaScript tem feito da mesma uma prática linguagem intermediária.

Foi concebida para ser uma linguagem script com orientação a objetos baseada em protótipos, tipagem fraca e dinâmica e funções de primeira classe.

Diferente das linguagens mais conhecidas, como Java ou C++ que utilizam a orientação a objetos clássica, JavaScript utiliza uma abordagem diferente para compartilhar código entre entidades, chamada de orientação a protótipo.

Temos como conceito de Herança em Orientação a Objetos a capacidade de classes compartilharem atributos e métodos entre si. Geralmente a herança é usada para compartilhar comportamentos generalizados e comuns entres as classes filhas.

Algumas linguagens orientadas a objetos habilitam o suporte à múltipla herança, que é a capacidade de um objeto herdar as propriedades (métodos e atributos) de mais de um objeto. Porém, Javascript não suporta múltipla herança.

Apesar dos frameworks modernos do java script terem suas formas de implementarem a múltipla herança. Uma das formas mais utilizadas é copiarem os métodos e variáveis de um protótipo ao objeto que herdará.

Gabarito: letra D.

Page 111: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 111

27. (Cops/Analista Administrativo- TI/2011)

Comentários

Teste de mesa:

Iteração I Total K teste K<I Imprime (K) (Total)

0 50 0 0 Verdade - -

1 _ 10 10 Verdade 10 -

2 _ 30 20 Verdade 20 -

3 _ 60 30 Verdade 30 -

4 _ 100 40 Verdade 40 -

5 _ 150 50 Falso 50 150

Gabarito: letra B.

28. (FUMARC/2007/PREF.MUN.BETIM/Analista de Sistemas da Saúde) Considere que, no algoritmo em alto nível a seguir, todas as variáveis sejam inteiras:

Page 112: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 112

Na execução desse algoritmo, o valor impresso na linha 7 é:

a) 55

b) 89

c) 144

d) 233

Comentários

Para este tipo de questão podemos utilizar duas abordagens possíveis. A primeira é realizar o chamado teste de mesa, que simula o comportamento do algoritmo, acompanhando o mapeamento da memória no tempo.

O teste de mesa é uma simulação de todos os passos, ou seja, entradas, comandos e instruções do algoritmo, a fim de saber se ele chega ao resultado a que se propõe e se a lógica está correta. Para tal, preenche-se uma tabela com valores para as variáveis e segue-se o fluxo de execução do algoritmo, simulando a execução de cada instrução, ou seja, refazendo o que o computador faria ao executar cada instrução. A cada comando simulado (executado), o valor das variáveis na tabela deve ser atualizado. Se, para uma instrução executada, uma ou mais variáveis não ficaram com os valores esperados, há um erro na lógica do algoritmo.

Para esta questão teríamos uma tabela como a mostrada a seguir.

Page 113: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 113

Teste de Mesa

Comandos Variáveis Observações X Y Z

X := 1 1 ? ? Y := 1 1 1 ? Z := 2 1 1 2 x < 50 executa o laço X := Y 1 1 2 Y := Z 1 2 2 Z := X+Y 1 2 3 Volta para o while x < 50 executa o laço X := Y 2 2 3 Y := Z 2 3 3 Z := X+Y 2 3 5 Volta para o while x < 50 executa o laço X := Y 3 3 5 Y := Z 3 5 5 Z := X+Y 3 5 8 Volta para o while x < 50 executa o laço X := Y 5 5 8 Y := Z 5 8 8 Z := X+Y 5 8 13 Volta para o while x < 50 executa o laço X := Y 8 8 13 Y := Z 8 13 13 Z := X+Y 8 13 21 Volta para o while x < 50 executa o laço X := Y 13 13 21 Y := Z 13 21 21 Z := X+Y 13 21 34 Volta para o while x < 50 executa o laço X := Y 21 21 34 Y := Z 21 34 34 Z := X+Y 21 34 55 Volta para o while (cuidado, pois x ainda não é

maior ou igual a 50) x < 50 executa o laço X := Y 34 34 55 Y := Z 34 55 55 Z := X+Y 34 55 89 Volta para o while (cuidado, pois x ainda não é

maior ou igual a 50) x < 50 executa o laço X := Y 55 55 89 Y := Z 55 89 89 Z := X+Y 55 89 144 Volta para o while Agora o X não é menor do que 50, então

interrompe o laço. Write(Z) Escreve na tela o número 144 FIM

Page 114: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 114

Para este algoritmo em particular não houve muitas iterações (repetições). Nestes casos é possível realizar o teste de mesa e, na minha visão, até mais seguro. No entanto, suponha que o número 50 fosse um número muito grande, que tornasse a quantidade de repetições tão grande que não fosse prático a realização da simulação. Neste caso, você deve realizar apenas algumas simulações para entender o funcionamento do algoritmo e deduzir o que ele faz. Assim, chegará ao resultado sem precisar executar passo a passo.

Observe algumas linhas do teste de mesa. Veja a sequência de números, especialmente Z. Cada número presente na coluna de Z é a soma dos dois números imediatamente anteriores (destaquei as células em que houve atribuição para Z). Esta sequência tem um nome: sequência Fibonacci. Agora basta calcular os termos da sequência: 1 2 3 5 8 13 21 ... até encontrar um termo maior ou igual a 50. Sabemos que o algoritmo calcula e escreve o segundo termo após o termo maior ou igual a 50. Continuando, temos 21+13 = 34; 34+21 = 55; 55+34=89; 89+55=144.

Eis a resposta correta: 144, letra C.

Gabarito: letra C.

29. (FUMARC/2007/PREF.MUN.BETIM/Analista de Sistemas da Saúde) Considere que, no algoritmo em alto nível a seguir, V seja um vetor de inteiros contendo 100 elementos indexados de 0 a 99, e todas as demais variáveis sejam inteiras.

O objetivo desse algoritmo é:

a) Imprimir o vetor V em ordem crescente.

b) Imprimir o vetor V em ordem decrescente.

c) Imprimir o maior valor armazenado no vetor V.

d) Imprimir o menor valor armazenado no vetor V.

Page 115: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 115

Comentários

Realizar o teste de mesa aqui não é uma boa ideia, certo? Observe que a estrutura de repetição while será executada quase cem vezes, pois a variável D começa valendo 1 e é incrementada de uma unidade a cada repetição. Como só teremos a interrupção quando D chegar a 100 (ou mais), então teremos 100-1 repetições (já que quando o D for 100 não será executado).

C sempre armazena um índice do vetor. Inicialmente é a primeira posição e, quando encontrar um valor no vetor menor do que o valor da primeira posição, faz a troca da referência. Percebe-se que C sempre aponta para uma posição que contém o menor comparado. Logo, apontará para o menor valor no vetor, que será escrito ao final.

Gabarito: letra D.

30. (FUMARC/2007/MINISTÉRIO PÚBLICO/Análise de Sistemas) Em relação a algoritmos e lógica de programação, todas as afirmativas estão corretas, EXCETO:

a) Funções e sub-rotinas (procedimentos) são ferramentas de modularização de programas.

b) Os comandos de entrada e saída são utilizados para iniciar e finalizar a execução de um programa de computador.

c) Estruturas condicionais permitem escolher ações que serão executadas quando determinadas condições são satisfeitas.

d) Estruturas de repetição permitem que uma sequência de comandos seja executada repetidamente até que uma determinada condição de interrupção seja satisfeita.

Comentários

O erro está na letra B, pois os comandos de entrada e saída servem para capturar dados e mostrar dados, respectivamente.

Gabarito: letra B.

31. (FUMARC/2007/MINISTÉRIO PÚBLICO/Análise de Sistemas) Em relação às estruturas de dados, todas as afirmativas estão corretas, EXCETO:

Page 116: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 116

a) Vetores são variáveis compostas unidimensionais identificadas por um mesmo nome.

b) Matrizes são variáveis compostas multidimensionais individualizadas por índices.

c) Registros são conjuntos de dados logicamente relacionados, mas de tipos diferentes.

d) Variáveis compostas homogêneas correspondem a posições de memória cujo conteúdo pode ser de diferentes tipos de dados.

Comentários

Marque a letra D nesta questão! Ela é a única errada, pois variáveis compostas homogêneas (arranjos) não podem conter tipos de dados diferentes. Cuidado para não confundir os vetores que armazenam registros. A homogeneidade do arranjo é em relação a cada posição do arranjo em si. Se uma posição é um registro, todas as demais devem ser também registros com a mesma forma. Os registros sim, podem conter dados de tipos diferentes. Aliás, são variáveis compostas heterogêneas.

Gabarito: letra D.

32. (ESAF/2007/SEFAZ-CE-TI) Os parâmetros são dados utilizados por funções para realizarem suas operações. Com relação ao uso de parâmetros e funções é correto afirmar que

a) cada função só poderá receber um único parâmetro por cada vez que é executada. Quando uma função necessitar receber mais de um parâmetro, utiliza-se um loop controlado pelo indicador da quantidade de parâmetros desejados.

b) na hora de definir a função, no cabeçalho, definem-se os parâmetros que ela vai receber.

c) uma função pode receber qualquer número de parâmetros, exceto nenhum.

d) uma função pode receber qualquer número de parâmetros, desde que estes sejam do tipo Booleano.

e) uma função pode receber qualquer número de parâmetros, desde que estes sejam do tipo Inteiro.

Page 117: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 117

Comentários

Os parâmetros são dados que recebem as funções e as utilizam para realizar as operações de função. Uma função pode receber qualquer número de parâmetros, ou mesmo nenhum. Na hora de definir a função, no cabeçalho, definem-se os parâmetros que vai receber.

Os parâmetros têm validade durante a execução da função, isto é, tem um âmbito local à função de onde se recebem. Quando a função termina, os parâmetros deixam de existir.

Os parâmetros por valor

A passagem de parâmetros por valor é uma maneira típica de passar parâmetros em funções, e esta forma significa que a modificação de um parâmetro não atualiza o dado da variável como parâmetro, apesar de mudarmos o valor do parâmetro dentro da função, a variável original não é afetada pela mudança.

Os parâmetros por referência

Uma forma alternativa é enviar parâmetros por referência, ou seja, o que é enviado para a função não é uma cópia do valor da variável e sim uma referência a ela. Com isso, qualquer alteração realizada durante a execução da função corresponde a uma alteração nas variáveis originais. OBS: Apesar de esta prática ser muito comum, não está de acordo com os paradigmas do desenvolvimento orientado a objetos, pois fere o princípio do encapsulamento.

Gabarito: letra B.

33. (ESAF/2005/AFRF) Classes e objetos são dois conceitos-chave da programação orientada a objetos. Com relação a estes conceitos, é correto afirmar que

a) se pode definir uma classe como um pacote de software, de modo que, com a herança, um objeto define comportamento e forma-padrão para a construção de uma nova classe abstrata.

b) uma classe é uma descrição de um ou mais objetos por meio de um conjunto uniforme de atributos e serviços. Além disso, pode conter uma descrição de como criar novos objetos na classe.

c) uma classe é uma abstração de alguma coisa no domínio de um problema ou na sua implementação, refletindo a capacidade de um sistema para manter informações sobre ela, interagir com ela ou ambos.

d) um objeto é um protótipo que define os atributos e métodos comuns a todas as classes de um certo tipo.

e) o polimorfismo caracteriza-se pela possibilidade de objetos distintos possuírem métodos com nomes idênticos, mas com implementações distintas.

Page 118: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 118

Comentários

Item a. Item absurdo, já que uma classe não representa um pacote (conjunto de artefatos da Orientação a Objetos) de software, ela independe da tecnologia utilizada, está num nível acima de abstração. Item FALSO.

Item b. Classes são elementos fundamentais na construção de softwares orientados a objetos. Uma classe é uma descrição dos atributos e serviços comuns a um grupo de objetos. Sendo assim, pode-se entender uma classe como sendo um molde a partir do qual objetos são construídos. Item VERDADEIRO.

Item c. A afirmativa refere-se ao conceito de objeto. Um objeto é uma construção de software que encapsula estado e comportamento. Os objetos permitem que você modele seu software em termos reais e com abstrações. Um objeto é uma instância de uma classe. Quando um objeto é criado, dizemos que instanciamos uma classe. Instanciar um objeto de uma classe é alocar ou reservar espaço de memória para as informações deste objeto, da mesma forma como reservamos espaço de memória quando declaramos uma variável! Item FALSO.

Item d. A afirmativa refere-se ao conceito de classe. Item FALSO.

Recapitulando....:-)! Uma classe define os atributos e comportamentos comuns compartilhados por seus objetos. Os objetos da mesma classe compartilham os comportamentos e atributos. As classes atuam de forma parecida com um cortador de molde ou biscoito, no sentido de que você usa uma classe para criar ou instanciar objetos. A classe “molda” o objeto. É como o tipo de dado das linguagens de programação que moldam as variáveis. A partir do tipo de dado é possível identificar que tipo de operações a variável suporta. A classe é a mesma coisa.

Um outro exemplo, relacionado ao cotidiano, seria o projeto de um carro. Alguém cria o projeto de um veículo (peças, design etc.). A partir deste projeto diversos carros deste modelo são feitos, seguindo- se o projeto original. Apesar de serem todos do mesmo projeto, cada carro é um carro com suas próprias características, por exemplo, um carro é branco, o outro é prata e assim por diante.

Declaração de uma classe:

Qualificador class Nome-da-classe {

// ATRIBUTOS da classe

// MÉTODOS da classe

}

Page 119: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 119

Qualificador : Indica a visibilidade do conteúdo público da classe. Alguns detalhes devem ser observados:

–Um único arquivo Java pode conter diversas classes, mas somente uma pode ser pública;

–Conforme já visto, o nome do arquivo deve ser o mesmo que o nome da classe pública, tomando cuidado em manter os mesmos caracteres maiúsculos ou minúsculos;

–O nome da classe deve iniciar com uma letra maiúscula. Isto é uma convenção dos programadores Java, com a finalidade de distinguir uma classe de uma variável.

Item e. Polimorfismo é a possibilidade de enviar um mesmo seletor de mensagem para diferentes objetos, mesmo que estes sejam instâncias de classes diferentes. Significa que a mesma operação pode atuar de modos diferentes em classes diferentes. Também permite termos em um mesmo objeto métodos com nomes idênticos, mas com implementações distintas. Item FALSO.

Gabarito: letra B.

34. (ESAF/2008/MPOG) A estrutura de dados na qual a inserção e a remoção se dá na mesma extremidade, isto é, no topo da lista, é denominada:

a) lista duplamente encadeada.

b) lista circular.

c) fila.

d) pilha.

e) árvore.

Comentários

O funcionamento de uma pilha consiste numa estratégia chamada LIFO (last in, first out – último a entrar, primeiro a sair). Além disso, o único elemento que se pode acessar na pilha é o elemento do topo da mesma, ou seja, o último a ser empilhado.

De maneira análoga, pode se pensar no processo de se carregar um caminhão, o que foi colocado por último é o que sai primeiro. É desta forma que este tipo de estrutura funciona.

Page 120: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 120

Uma pilha é uma lista linear em que todas as inserções, retiradas e geralmente todos os acessos são feitos em apenas um extremo da lista.

Gabarito: letra D.

35. (COVESTE/UFPE_UFRPE_APEF_EAF Vitória PE/ Programador de Computador) Boas práticas de programação orientada a objetos recomendam o seguinte:

A) declarar atributos como públicos, para facilitar o acesso de classes clientes.

B) definir a arquitetura de classes com base nas funções da aplicação (decomposição funcional).

C) evitar métodos privados, já que estes não podem ser chamados por classes clientes.

D) implementar relacionamentos entre classes, utilizando atributos chaves, como em uma modelagem relacional, ao invés de referenciar os objetos propriamente ditos.

E) usar herança com cautela, apenas quando o relacionamento for comportamental (é um) entre a classe que herda e a classe original.

Comentários

Item A. Os atributos devem ser declarados como privados. Item FALSO.

Item B. A decomposição funcional é empregada no desenvolvimento estruturado. Item FALSO.

Item C. Os métodos privados podem ser utilizados para ocultar funcionalidades. Item FALSO.

Item D. O relacionamento entre classes é feito por meio de associações e envio de mensagens. Item FALSO.

Item E. Realmente, a herança deve ser empregada somente se houver um relacionamento mais forte entre as classes. A simples existência de atributos em comum NÃO é um fator para empregar a herança. Item VERDADEIRO.

Gabarito: letra E.

36. (COVESTE/2004/UFPE_UFRPE_APEF_EAF Vitória PE/ Programador de Computador) Uma importante característica da orientação a objetos é o fato de um objeto de uma classe poder ser utilizado em um contexto onde um objeto de uma superclasse é esperado. Este tipo de substituição é possível graças a qual dos conceitos a seguir?

A) Encapsulamento

B) Herança múltipla

Page 121: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 121

C) Polimorfismo de subtipos

D) Modularidade

E) Classes parametrizadas

Comentários

Encapsular significa esconder ou proteger na orientação a objetos. As variáveis de instância podem ser encapsuladas usando-se o atributo private. Isto faz com que a variável somente possa ser acessada por meio de métodos da própria classe. Uma classe externa não tem permissão para acessar esta variável.

A finalidade do encapsulamento é a proteção dos dados. A variável privada só pode ser alcançada indiretamente através de um método. O método enxerga a variável porque ele está definido na própria classe. Cabe ao método realizar as consistências necessárias para “proteger” o dado de valores inválidos.

A Herança múltipla, conforme visto anteriormente, permite que uma subclasse possua mais de uma superclasse, herdando propriedades e métodos de ambas.

Polimorfismo de subtipos é uma característica da Orientação a Objetos que prega que uma subclasse pode ser utilizada em uma situação onde seja esperado um objeto da superclasse.

Modularidade é um conceito no qual um sistema é composto de várias partes que podem ser trocadas.

As classes parametrizadas são aquelas nas quais são empregados tipos de dados padrão, como um “modelo”.

Gabarito: letra C.

37. (COVESTE/2004/UFPE_UFRPE_APEF_EAF Vitória PE/ Programador de Computador) Para representar um Funcionário, considere a declaração da seguinte classe em Java, com atributos para armazenar a matrícula e o nome do funcionário, em que a numeração de (1) a (6) é apenas uma anotação para facilitar e referenciar parte específica do código.

class Funcionário {

(1) private int mat;

(2) private String nome;

(3) public Funcionário (int mat, String nome) {

this.mat = mat;

this.nome = nome;

Page 122: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 122

}

(4) public int getMat () {return mat;}

(5) public String getNome () {return nome;}

(6) public void alteraNome(String nome)

{this.nome = nome;}

}

Considere, ainda, o trecho de código:

(7) Funcionario f = new Funcionario(1457,“José da Silva”);

Com base nesses dados, é correto afirmar que:

A) uma vez criado um objeto da classe Funcionario, como exemplificado no item (7), é impossível alterar a sua matrícula.

B) a declaração iniciada no item (3) é inválida, pois define um método com o mesmo nome da classe.

C) um objeto da classe Funcionario poderia ser criado, utilizando-se o construtor default, através da seguinte expressão: new Funcionario().

D) Através da variável f declarada no item (7), é possível acessar os atributos declarados nos itens (1) e (2), através das expressões f.mat e f.nome.

E) A utilização do qualificador this, tanto na declaração iniciada no item (3) como na declaração no item (6), é opcional.

Comentários

Item a. Na letra A, como não existe nenhum método que permite a alteração da matrícula, após o valor da mesma ter sido atribuído, não é possível alterá-lo. Item VERDADEIRO.

Item b. Na opção B, está sendo definido o construtor da classe, o qual deve obrigatoriamente ter o mesmo nome da classe. Item FALSO.

Item c. A letra C está errada, não foi definido o construtor padrão. Item FALSO.

Page 123: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 123

Item d. Observe que a classe possui, corretamente, os atributos privados. Logo não é possível acessá-los sem utilizar um método. Item FALSO.

Item e. O emprego da palavra reservada this garante que sejam alterados os valores do próprio objeto. Como o nome do parâmetro é igual ao do atributo, não é indicada a remoção da palavra reservada this! Item FALSO.

Gabarito: letra A.

38. (ESAF/2008/AFC-STN/INFRAESTRUTURA DE TI) A habilidade para uso de uma mesma mensagem para invocar comportamentos distintos de um determinado objeto é denominada

a) Interface.

b) Polimorfismo.

c) Herança.

d) Encapsulamento.

e) Abstração.

Comentários

Item a. Coleção de métodos que indica que uma classe possui algum comportamento além do que herda de suas superclasses. Os métodos incluídos em uma interface não definem esse comportamento; essa tarefa é definida nas classes que implementam a interface. ITEM FALSO.

Item b. Permite que referências de tipos de classes mais abstratas representem o comportamento das classes concretas que referenciam. Assim, é possível tratar vários tipos de maneira homogênea (através da interface do tipo mais abstrato). O termo polimorfismo é originário do grego e significa "muitas formas" (poli = muitas, morphos = formas). ITEM VERDADEIRO.

Item c. É o mecanismo pelo qual uma classe (sub-classe) pode estender outra classe (super-classe), aproveitando seus comportamentos (métodos) e variáveis possíveis (atributos). Um exemplo: Mamífero é super-classe de Humano. Logo, um Humano é um mamífero. Há herança múltipla quando uma sub-classe possui mais de uma super-classe. ITEM FALSO.

Item d. Consiste na separação de aspectos internos e externos de um objeto. Este mecanismo é utilizado amplamente para impedir o acesso direto ao estado de um objeto (seus atributos), disponibilizando externamente apenas os métodos que alteram estes estados. Exemplo: Não é necessário conhecer os detalhes dos circuitos de um telefone para utilizá-lo. A carcaça do telefone

Page 124: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 124

encapsula esses detalhes, provendo uma interface mais amigável (os botões, o monofone e os sinais de tom). ITEM FALSO.

e) É a habilidade de concentrar nos aspectos essenciais de um contexto qualquer, ignorando características menos importantes ou acidentais. Em modelagem orientada a objetos, uma classe é uma abstração de entidades existentes no domínio do sistema de software. ITEM FALSO.

Gabarito: letra B.

39. (ESAF/2007/SEFAZ-CE) Analise as seguintes afirmações relacionadas à programação orientada a objetos e a UML.

I. Um relacionamento é uma conexão entre itens. Na modelagem orientada a objetos, os quatro relacionamentos mais importantes são as dependências, as generalizações, as associações e as realizações.

II. Um diagrama de objetos é um tipo especial de diagrama, composto por objetos e seus vínculos, que compartilha as mesmas propriedades comuns a todos os outros diagramas, isto é, um nome e o conteúdo gráfico.

III. As exceções são manifestações concretas de uma abstração à qual um conjunto de operações, sempre esperadas e controladas, poderão ser aplicadas.

IV. O diagrama de classes faz a modelagem de instâncias de itens contidos em diagramas de objetos. Um diagrama de classes mostra um conjunto de objetos e seus relacionamentos em determinado ponto no tempo.

Indique a opção que contenha todas as afirmações verdadeiras.

a) I e II

b) II e III

c) III e IV

d) I e III

e) II e IV

Comentários

Item I. Item VERDADEIRO. Em relação ao desenvolvimento orientado a objeto pode-se afirmar que as quatro operações principais são:

• Dependências: relacionamentos nos quais uma mudança na especificação de um elemento pode alterar a especificação do elemento dependente. A dependência entre classes indica que os objetos de uma classe Utilizam serviços dos objetos de outra classe.

• Generalizações: é a capacidade de se criar superclasses que encapsulam estruturas e/ou comportamento comuns a várias subclasses.

Page 125: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 125

A relação de generalização também é conhecida como herança no modelo de objetos.

• Associações: são relacionamentos estruturais entre instâncias e especificam que objetos de uma classe estão ligados a objetos de outras classes. Podem existir associação unária, binária, etc. A associação pode ocorrer entre classes e objetos.

• Realizações: relacionamento no qual um item especifica um contrato cujo cumprimento é realizado por outro item. São encontrados entre interfaces e as classes ou componentes que as realizam, e entre casos de uso e as colaborações que os realizam.

Item II. Além do diagrama de classes, A UML define um segundo tipo de diagrama estrutural, o Diagrama de Objetos. Pode ser visto com uma instância de diagramas de classes, representa uma “fotografia” do sistema em um certo momento. Exibe as ligações formadas entre objetos conforme estes interagem, e também os valores dos seus atributos. Item VERDADEIRO.

Figura. Diagrama de Objetos.

Os diagramas de objetos costumam conter o seguinte: objetos, vínculos, assim como notas e restrições. UML (Guia do usuário).

Item III. Uma exceção em programação pode ser vista como um evento que é disparado sempre que alguma coisa errada ou não prevista ocorre durante a execução. Esse evento altera o fluxo normal do programa, geralmente cancelando a execução de ações esperadas de um ou mais métodos. Nem todas as exceções são esperadas e controladas!!Item FALSO.

Item IV. Um diagrama de classe é um diagrama que mostra um conjunto de classes, interfaces e colaborações e seus relacionamentos. Item FALSO.

Gabarito: letra A.

PedidoItemPedidoProduto

nome = "Caderno M"descrição = "Caderno em espiral tamanho médio"preçoUnitário = 4,50desconto = 15

produto20 : Produto

nome = "Caneta ESF"descrição = "Caneta esferográfica 5mm"preçoUnitário = 1,20desconto = 2

produto12 : Produto

nome = "Esquadro"descrição = "Esquadro de acrílico 20 cm"preçoUnitário = 2,35desconto = 10

produto07 : Produto

quantidade = 20

item2 : ItemPedido

quantidade = 6

item1 : ItemPedido

quantidade = 1

item3 : ItemPedido

data = 13/09/2002hora = 10:00am

Pedido1 : Pedido

Page 126: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 126

40. (ESAF/2006/TRF) Analise as seguintes afirmações relacionadas à Orientação a Objetos:

I. Os atributos podem ser de instância ou de classe. Quando os atributos são de instância, cada objeto guarda a sua própria cópia de tais atributos.

II. Os atributos compartilhados entre objetos de uma classe são chamados de atributos de objetos. Em Java, por exemplo, esses atributos são identificados com a palavra static.

III. Existem métodos cujo código apenas acessa atributos de classe ou os parâmetros passados. Esses métodos são chamados de métodos de classe.

IV. Um mesmo nome de objeto pode ser usado para identificar diferentes objetos em uma mesma classe ou diferentes objetos em classes diferentes, evitando assim, que seja necessário usar nomes diferentes para objetos diferentes que realizam a mesma operação. A esta característica da Orientação a Objetos dá-se o nome de Polimorfismo.

Indique a opção que contenha todas as afirmações verdadeiras.

a)I e II b) II e III c) III e IV d) II e IV e) I e III

Comentários

Item I – Verdadeiro. Os atributos ou variáveis de instância servem para manipulação de objetos de uma determinada classe. Porém, serão compartilhados para todas as instancias de uma determinada classe.

Item II – Falso. Este conceito é correspondente aos chamados atributos de classe.

Item III – Verdadeiro. Métodos de classe são aqueles que não necessitam de uma instancia da classe para serem executados.

Item IV – Falso. O polimorfismo representa a capacidade de poder existir métodos com assinaturas iguais, mas executando ações diferentes.

Gabarito: letra E.

41. (CESPE/2010/BANCO DA AMAZONIA/Área: Tecnologia da Informação — Administração de Dados/Q. 72) O Jboss é um servidor de aplicação avançado que, apesar de ter sido implementado na linguagem Java, funciona em qualquer tipo de sistema operacional, independentemente de este ter sido desenvolvido em Java.

Comentários

JBoss é um servidor de aplicação desenvolvido na plataforma J2EE e implementado completamente em Java. Como é baseada em Java, JBoss pode ser usado em qualquer Sistema Operacional que suporte Java.

Page 127: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 127

Este servidor de aplicação possui as principais vantagens:

• implantação de aplicativos fácil;

• relativamente leve; e

• baixo consumo de memória e espaço em disco, sem comprometer seu desempenho.

Como o Jboss é 100% desenvolvido em Java é importante que se tenha a JVM (Java Virtual Machine - Máquina virtual Java)1 e o JDK (Java Development Kit - Kit de Desenvolvimento Java)2 instalados.

Isso torna a afirmativa falsa, pois para o sistema operacional executar o Jboss, deve ter suporte ao Java, com a JVM e a JDK específicas.

Gabarito: item errado.

42. (CESPE/2010/BANCO DA AMAZONIA/Área: Tecnologia da Informação — Suporte Técnico/Q. 115) O servidor de aplicação JBOSS foi desenvolvido utilizando-se a linguagem de programação Java. As versões mais atuais são preparadas para suportar aplicações que utilizam as especificações servlets e JSP, mas são incompatíveis com a especificação EJB.

Comentários

Conforme citado anteriormente, o JBoss é um servidor de aplicação (Application Server) desenvolvido em Java e que contém também um Servlet Container, o que permite a ele trabalhar com arquivos JSP e Servlets.

Mas além disso, possui ainda outros serviços que são necessários para aplicações maiores, como suporte a WebServices, controle mais efetivo de permissões de acesso, container EJB, entre outros.

Já EJB (Enterprise JavaBeans) é um componente do tipo servidor que executa no container (específico para EJB) do servidor de aplicação. Os principais objetivos da tecnologia EJB são fornecer um rápido e simplificado desenvolvimento de aplicações Java baseado em componentes distribuídas, transacionais, seguras e portáveis (Desenvolvendo Aplicações Web com JSP, Servlets, JavaServer Faces, Hibernate, EJB 3 Persistence e Ajax - Edson Goncalves).

Segundo o texto de Marcelo Mota Manhães (disponível em http://www.mundooo.com.br), a tecnologia EJB provê um ambiente para o gerenciamento de componentes. Eles podem simplificar o processo de desenvolver aplicações escaláveis, portáveis e reusáveis no seu ambiente de negócios. No entanto, usar enterprise beans requer um investimento de tempo, codificação e treinamento. 1 Programa responsável pelo gerenciamento dos aplicativos Java, à medida que são executados, carregando e executando os mesmos. Converte os bytecodes em código executável de máquina.

2 Utilitários para criação de software em Java. É composto por compilador e bibliotecas específicos da linguagem.

Page 128: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 128

Algumas das vantagens da utilização da tecnologia EJB são:

• Gerência da persistência: a maioria das aplicações empresariais manipulam os dados persistentes. Um bean de entidade (no qual é um EJB que representa o dado persistente em um meio de armazenamento como um bando de dados relacional) é projetado para prover gerenciamento automático de dados persistentes, inclusive dados legados.

• Acesso a dados concorrentemente: EJB são projetados para gerenciar acessos concorrentes automaticamente e possuem automaticamente recursos multi-thread.

• Acesso a dados remotamente. Aplicações empresariais tipicamente acessam dados a partir de recursos remotos múltiplos.

• Modelo baseado em componentes: componentes de software podem prover reusabilidade, portabilidade e uma clara separação da interface com a implementação. Enterprise beans provê estes benefícios porque são verdadeiros componentes de software.

• Portabilidade: uma aplicação que é portável através de múltiplas plataformas de hardware e sistemas operacionais faz melhor uso de dos recursos da empresa, principalmente em se tratando de sistemas heterogêneos e provê uma futura flexibilidade de integração.

• Controle Transacional e de Segurança: EJB provê um controle declarativo das configurações de segurança e de transações, simplificando a customização e aumentando a flexibilidade.

• Alta disponibilidade: implementações de EJB podem prover controle a falhas automaticamente, gerenciando também uma religação de dados quando acontece uma falha de sistema.

• Escalabilidade: aplicações frequentemente necessitam manipular o aumento de demanda e novos requerimentos. Porque o ciclo de vida é gerenciado pelo contêiner as instâncias dos beans que servem as requisições podem ser colocadas em um pool para a maximizar a eficiência de recursos. Componentes podem ser migrados para balancear carga sem um cluster de processadores.

• Neutralidade do Cliente: Algumas aplicações requerem acesso por muitos tipos de cliente. Objetos de negócios como enterprise beans provêm accesso para um modelo de aplicação para qualquer tipo de cliente. Clientes Java podem acessar os enterprise beans através das interfaces padrão. Clientes não Java podem acessar enterprise beans usando CORBA (Common Object Request Broker Architeture) ou interfaces Web services.

Retornando à questão, para utilização da tecnologia EJB é necessário um container EJB , como o Jboss. Logo, a afirmativa está incorreta pois o Jboss suporta aplicações que utilizam as especificações servlets e JSP, mas não é incompatível com a especificação EJB (Enterprise JavaBeans).

Gabarito: item errado.

Page 129: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 129

A base textual da Web não permite interação muito adequada para tarefas automatizadas entre sistemas. O conceito de web services cria uma forma mais adequada para a comunicação entre diferentes aplicações e serviços, possibilitando a execução e o processamento automático de informações constantes em diferentes aplicações. Acerca de web services e tecnologias relacionadas, julgue os itens que se seguem.

43. (CESPE/2010/ IJSN/ES/ Informática e Gestão da Informação) Web services permitem a comunicação entre diferentes sistemas. Com a adoção de tecnologias como UDDI, XML, WSDL e SOAP, aplicações de diversos locais da Internet podem ser integradas e interconectadas como se fizessem parte de um mesmo sistema, independentemente da linguagem de programação na qual foram desenvolvidas.

Comentários

Para entendimento da questão vamos relacionar os conceitos básicos de Web Services: UDDI, XML, WSDL e SOAP.

Define-se Web Services como uma tecnologia para integração de sistemas, podendo ser aplicada a ambientes heterogêneos. Permite que softwares desenvolvidos em linguagens distintas enviem e recebam dados de maneira transparente. A única exigência é que isso ocorra no formato XML (eXtensible Markup Language).

Um dos padrões utilizados no desenvolvimento de Web Services é o SOAP (Simple Object Access Protocol). Ele é o protocolo padrão para transmissão de dados da arquitetura de Web services que segue o modelo Request-Response do HTTP.

Os web services são descritos empregando-se a WSDL (Web Services Description Language), definindo-se as operações oferecidas pelo web service e o formato de entrada e saída de cada uma delas.

Já o UDDI (Universal Description, Discovery and Integration) é um protocolo para registro e publicação de web services, permitindo que os mesmos sejam pesquisados e localizados pelos clientes.

Observe que na questão a banca avalia se o candidato conhece superficialmente os conceitos básicos de Web Services.

Gabarito: item correto.

44. (CESPE/2010/BANCO DA AMAZONIA/Área: Tecnologia da Informação — Suporte Técnico) Alguns servidores de aplicação suportam a plataforma Java EE 6, como é o caso do GlassFish em sua versão mais recente.

Page 130: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 130

Comentários

GlassFish é um servidor de aplicação desenvolvido pela Sun Microsystems para a plataforma Java Enterprise Edition (Java EE). A sua versão comercial é chamada Sun Java System Application Server. É um dos poucos projetos de servidor de aplicação que possui suporte total às novas especificações web java. A partir da versão 3, o GlassFish possui suporte a Java EE 6.

O GlassFish é um servidor de aplicações de código aberto, de nível corporativo que oferece desempenho, confiabilidade, produtividade, facilidade de uso, e ainda, suporte a SOA.

Gabarito: item correto.

45. (EMBRAPA/2010/Área: Gestão da Informação — Analista Classe A Desenvolvimento, Manutenção de Sistemas e Gestão de Projetos) Um servidor de aplicações tem por objetivo disponibilizar uma plataforma que abstraia do desenvolvedor de software algumas das complexidades de um sistema computacional. O servidor de aplicações responde a algumas questões comuns a todas as aplicações. Assinale a alternativa que não corresponde a uma questão comum disponibilizada pelo servidor de aplicações.

A) Segurança

B) Disponibilidade

C) Balanceamento de Carga

D) Tratamento de Exceções

E) Regra de Negócios

Comentários

Observando as alternativas pode-se identificar que as quatro primeiras (Segurança, Disponibilidade, Balanceamento de Carga e Tratamento de Exceções) fazem parte das funcionalidades comumente disponibilizadas por servidores de aplicação.

A letra E trata de funções que devem ser oferecidas pela própria aplicação, as quais não devem ser oferecidas por servidores de aplicação.

Gabarito: letra E.

46. (CESPE/BANCO DA AMAZÔNIA/Técnico Científico — Área: Tecnologia da Informação — ANÁLISE DE SISTEMAS/2010) Objetos têm identidade própria. Isso garante que, mesmo tendo os mesmos valores de variáveis e pertencendo à mesma classe, dois objetos sejam considerados diferentes.

Page 131: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 131

Comentários

Na orientação a objetos, o conceito de identidade define que um objeto é uma instância única de uma classe, ocupando uma posição de memória específica. Então, podemos ter dois objetos não-idênticos (ocupam posições de memória distintas), mas iguais (são da mesma classe e possuem os mesmos valores para os atributos).

Além disso, cada objeto ao ser criado, aloca espaço de memória para si e possui seus dados armazenados em estrutura própria. Não há confusão entre os objetos, especialmente quanto à identidade. Para simplificar o entendimento, podemos pensar em cada objeto como uma variável estruturada contendo os atributos.

Gabarito: item correto.

47. (CEPERJ/2010/IPEM-RJ/Analista de Sistemas) No que tange aos paradigmas da Orientação a Objetos (OO), um princípio está diretamente relacionado às operações realizadas por um objeto e ao modo como as operações são executadas, constituindo uma forma de restringir o acesso ao comportamento interno de um objeto. Nesse processo, um objeto que precise da colaboração de outro para realizar alguma tarefa deve enviar uma mensagem a este último. Além disso, separa os aspectos externos de um objeto dos detalhes internos da implementação. Considerando esse contexto, observe a figura abaixo.

O princípio da OO é conhecido por:

A) Compartilhamento

B) Acoplamento

C) Herança

D) Polimorfismo

E) Encapsulamento

Comentários

Encapsular é colocar em uma cápsula. Por mais estranho que pareça, pense que você poderia colocar todos os itens desejados em uma cápsula (como em um remédio) e proteger os componentes internos da ação externa.

Page 132: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 132

Em Orientação a Objetos é bem semelhante. A ideia de encapsular é criar uma proteção para os itens do objeto de forma que somente por meio das interfaces criadas possa ocorrer o acesso às estruturas internas. Isto cria uma proteção para os itens do objeto, que passam a ter o acesso controlado por meio da interface.

O objetivo é separar os aspectos externos (o que faz) dos aspectos internos (como faz):

• Aspectos externos = interface, contrato;

• Aspectos internos = implementação.

O encapsulamento pode ser visto como um complemento da abstração:

• A abstração foca o comportamento observável de um objeto.

• Encapsulamento enfoca a implementação que origina este comportamento.

Além disso, ele – o encapsulamento – promove uma maior estabilidade, uma vez que clientes do objeto só conhecem sua interface e que podemos alterar a implementação de uma operação sem afetar o restante do sistema.

Gabarito: letra E.

48. (Cetro/2007/Liquigás Distribuidora S. A. – Profissional Jr. para atuar em Informática – Análise de Sistemas) Sobre a linguagem XML, é incorreto afirmar que

(A) o conteúdo de um elemento XML é especificado entre uma tag de abertura e uma tag de fechamento.

(B) documentos XML podem ser utilizados para a transferência de dados através da web.

(C) XML é uma linguagem de marcação com um conjunto fixo de tags.

(D) um atributo na XML define uma propriedade de um elemento.

(E) A linguagem XML é definida como o formato universal para dados estruturados na Web.

Comentários

XML (eXtensible Markup Language) é um padrão para linguagens de marcação para necessidades especiais. Com XML é possível descrever diversos tipos de dados, permitindo o compartilhamento de informações através da Internet.

Item A. Como XML é uma linguagem de marcação (Como HTML), possui tags as quais devem possuir abertura e fechamento. Item VERDADEIRO.

Item B. Pela definição, XML é empregado para transferência de dados na Internet. Item VERDADEIRO.

Page 133: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 133

Item C. Com XML, podem-se definir as tags necessárias para a aplicação. Item FALSO.

Item D. Os atributos XML são empregados para definir propriedades dos elementos. Item VERDADEIRO.

Item E. A XML é o formato empregado para transferência de dados estruturados na Internet. Item VERDADEIRO.

Gabarito: letra C.

49. (ESAF/2008/MPOG) O XML (Extensible Markup Language) surgiu como um padrão para estruturação e troca de dados. A fim de permitir a validação de documentos XML, um tipo de documento contendo “metadados” pode ser criado para definir quais elementos, atributos e outros itens podem estar contidos em um documento XML. A informação de “metadados” pode estar contida em um documento XML DTD (Document Type Definition) ou em um documento de esquema XML (XML Schema). A respeito da notação utilizada nas DTDs é incorreto afirmar que

a) um caractere + (adição) colocado após o nome de elemento significa que este pode ser repetido uma ou mais vezes no documento. Esse tipo de elemento é um elemento multivalorado (repetitivo) obrigatório.

b) um caractere * (multiplicação) colocado após o nome de elemento significa que este pode ser repetido zero ou mais vezes no documento. Esse tipo de elemento é conhecido como elemento multivalorado (repetitivo) opcional.

c) um caractere % (porcentagem) colocado após o nome de elemento significa que este pode ser repetido zero ou mais vezes no documento. Esse tipo de elemento é um elemento multivalorado (repetitivo) opcional.

d) um caractere ? (interrogação) colocado após o nome de elemento significa que este pode ser repetido zero ou uma vez. Esse tipo é um elemento de valor único (não-repetitivo) opcional.

e) um elemento que aparece sem nenhum dos seguintes caracteres (% ou + ou * ou ?) após o nome de elemento significa que este deve aparecer exatamente uma vez no documento. Esse tipo é um elemento de valor único (não-repetitivo) obrigatório.

Comentários

Em 1996, o W3C iniciou um projeto de desenvolvimento de uma linguagem de marcação abrangente que possuísse um padrão de formatação de dados, ou seja, uma maneira de organizar as informações. Os documentos XML podem ser facilmente compreendidos por programadores facilitando o desenvolvimento de aplicativos compatíveis.

Page 134: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 134

O XML possui um formato padronizado universal e permite que sejam definidas novas linguagens através de definições de tags. Devido a esta característica, há uma possibilidade de manipulação do arquivo texto por varias aplicações diferentes.

A tabela a seguir possui a simbologia utilizada na criação e interpretação de um documento XML.

Símbolo Representação

* O item aparece muitas ou nenhuma vez.

, (vírgula) Separa os itens e os deixa na ordem em que devem aparecer.

+ O item aparece ao menos uma vez.

? A utilização do item é opcional.

| Separa um conjunto de alternativas.

() Agrupa intens.

O caractere % (percentual) não é utilizado como simbologia de um DTD.

Gabarito: letra C.

50. (COPS/2011/Analista Administrativo-TI) O método de teste que tem por finalidade determinar se os requisitos dos usuários foram total ou parcialmente satisfeitos pelo produto, preocupando-se também em verificar como ocorre o processamento, ou seja, demonstrando o caminho percorrido pelo dado de entrada, é conhecido como

a.Caixa Preta.

b.Caixa Branca.

c.Teste de Domínio.

d.Teste de Stress.

e.Teste de Atividade.

Comentários

O teste do software é a investigação do software a fim de fornecer informações sobre sua qualidade em relação ao contexto em que ele deve operar. Isso inclui o processo de utilizar o produto para encontrar seus defeitos.

O teste é um processo realizado pelo testador de software, que permeia outros processos da engenharia de software, e que envolve ações que vão do levantamento de requisitos até a execução do teste propriamente dito.

A técnica de caixa-branca avalia o comportamento interno do componente de software. Essa técnica trabalha diretamente sobre o código fonte do

Page 135: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 135

componente de software para avaliar aspectos tais como: teste de condição, teste de fluxo de dados, teste de ciclos, teste de caminhos lógicos, códigos nunca executados. Também se enquadram nessa técnica testes manuais ou testes efetuados com apoio de ferramentas para verificação de aderência a boas práticas de codificação reconhecidas pelo mercado de software. A aderência a padrões e boas práticas visa principalmente a diminuição da possibilidade de erros de codificação e a busca de utilização de comandos que gerem o melhor desempenho de execução possível.

A técnica de caixa-preta avalia o comportamento externo do componente de software, sem se considerar o comportamento interno do mesmo. Dados de entrada são fornecidos, o teste é executado e o resultado obtido é comparado a um resultado esperado previamente conhecido. Como detalhes de implementação não são considerados, os casos de teste são todos derivados da especificação.

Quanto mais entradas são fornecidas, mais rico será o teste. Numa situação ideal todas as entradas possíveis seriam testadas. Outro problema é que a especificação pode estar ambígua em relação ao sistema produzido, e como resultado as entradas especificadas podem não ser as mesmas aceitas para o teste. Uma abordagem mais realista para o teste de caixa-preta é escolher um subconjunto de entradas que maximize a riqueza do teste.

Gabarito: letra B.

51. (UEL/Estrada de Ferro Paraná Oeste S.A/Analista de Sistemas - 2008) Considere as afirmativas a seguir, sobre Teste de software:

I. Teste funcional é uma técnica utilizada para se projetar casos de teste no qual o programa ou sistema é considerado uma caixa preta e, para testá-lo, são fornecidas entradas e avaliadas as saídas geradas para verificar se estão em conformidade com os objetivos especificados.

II. A técnica estrutural estabelece os requisitos de teste com base em uma dada implementação, requerendo a execução de partes ou de componentes elementares do programa.

III. Teste é um conjunto de atividades que não pode ser planejado antecipadamente, porém deve ser realizado sistematicamente.

IV. Um módulo driver chama o módulo que está sendo testado, devendo conter apenas as inicializações das variáveis globais e dos parâmetros que serão utilizados para a chamada do módulo testado.

Assinale a alternativa correta.

a) Somente as afirmativas I e III estão corretas.

b) Somente as afirmativas III e IV estão corretas.

c) Somente as afirmativas I e II estão corretas.

d) Somente as afirmativas I, II e IV estão corretas.

e) Somente as afirmativas II, III e IV estão corretas.

Page 136: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 136

Comentários

A alternativa I está correta. Teste funcional ou teste de caixa preta é aquele cujo objetivo principal é verificar se uma dada implementação encontra-se em conformidade com o que se encontra especificado para tal implementação.

A alternativa II está correta. Teste estrutural ou teste de caixa branca é aquele cujo objetivo principal é verificar o fluxo da implementação, além do resultado de sua execução.

A alternativa III está errada. Teste é um conjunto de atividades que deve (e pode) ser planejado antecipadamente, além disso, ele deve ser realizado de maneira sistêmica.

A alternativa IV está correta. O módulo driver é utilizado quando o módulo está sendo testado de maneira automatizada, cujo objetivo é verificar se o módulo está funcionando como esperado, com base na entrada.

Gabarito: letra D.

52. (UEL/Analista de Informática Júnior – Desenvolvimento de Sistemas/ 2009) O método de teste, que tem por finalidade determinar se os requisitos dos usuários foram total ou parcialmente satisfeitos pelo produto, preocupando-se também em verificar como ocorre o processamento, ou seja, preocupando-se com o caminho percorrido pelo dado de entrada, é conhecido como:

a) Caixa preta.

b) Teste de domínio.

c) Caixa branca.

d) Teste de Stress.

e) Teste de Atividade.

Comentários

O teste estrutural ou teste caixa branca, é aquele cujo objetivo principal é verificar o fluxo da implementação, além do resultado de sua execução. E para isso ele estabelece os requisitos de teste com base em uma dada implementação, onde se faz necessária a execução de porções de um dado programa.

Gabarito: letra C.

53. (CESPE/2010/BANCO DA AMAZÔNIA/Técnico Científico — Área: Tecnologia da Informação — Arquitetura de Tecnologia/Q.76) Teste rápido é um mecanismo para identificar requisitos de software.

Page 137: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 137

Comentários

A realização de testes visa principalmente:

• executar um programa com a intenção de descobrir erros;

• um bom caso de teste é aquele que tem uma elevada probabilidade de revelar um erro ainda não descoberto; e

• um teste bem-sucedido é aquele que revela um erro ainda não descoberto ou inesperado.

Os objetivos apontados apresentam uma visão diferente daquela que se costuma possuir com relação à atividade de testes, que seria a de que um teste bem-sucedido não apontaria erros. O objetivo na verdade é projetar testes que encontrem sistematicamente diferentes classes de erros e façam-no com uma quantidade de tempo e esforço mínimos.

Se a atividade de testes for conduzida com sucesso, ela descobrirá erros no software. Como um benefício secundário, a atividade de teste demonstra que as funções de software aparentemente estão trabalhando de acordo com as especificações, que os requisitos de desempenho aparentemente foram cumpridos. Além disso, os dados compilados quando a atividade de testes é levada a efeito, proporcionam uma boa indicação da confiabilidade de software e alguma indicação da qualidade do software como um todo.

Sendo assim, teste rápido NÃO é um mecanismo para identificar requisitos de software. Logo, a afirmação é falsa.

Gabarito: item errado.

54. (CESPE/2008/TRT - 5ª Região (BA) - Analista Judiciário - Tecnologia da Informação) Com relação a engenharia de software, processos de software, análise de requisitos, estratégias de validação e ferramentas CASE, julgue os próximos itens. Entre os tipos de testes de caixa preta, encontram-se o teste baseado em grafos; o particionamento de equivalência; a análise de valor-limite; e o teste de matriz ortogonal.

Comentários

A questão elenca os tipos de testes de caixa-preta. Note que são testes com base em entradas e saídas. Não se analisa o código fonte. Portanto, Caixa Preta.

A divisão mais genérica para testes é provavelmente a divisão entre caixa preta e caixa branca. Basicamente existem dois tipos testes: caixa branca e caixa preta.

Nenhuma delas é completa, na realidade elas se completam e devem ser aplicadas em conjunto a fim de garantir um teste de boa qualidade.

Os Testes de Caixa Preta são conhecidos por serem mais simples de se implantar do que os testes de caixa branca. Na verdade, ambos são complexos e exigem grande esforço de planejamento e automação dos procedimentos,

Page 138: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 138

porém os testes de caixa preta são frequentemente encontrados nas organizações, em forma de testes manuais executados por profissionais ou mesmo usuários do sistema, o que facilita a introdução desse conceito nas organizações. A aplicação de testes de caixa preta não exclui a necessidade de aplicarmos os testes de caixa branca e vice-versa.

Gabarito: item correto.

55. (CESPE/2008/TRT - 5ª Região (BA) - Analista Judiciário - Tecnologia da Informação) A diferença entre verificação e validação reside no fato de que a primeira se refere ao conjunto de atividades que garante que o software realiza corretamente uma função específica, enquanto a segunda refere-se a um conjunto diferente de atividades que garante que o software que foi construído é rastreável às exigências do cliente.

Comentários

O teste é somente um elemento de um conceito mais amplo da engenharia de software, conhecido como Verificação e Validação. A verificação refere-se ao conjunto de atividades que garante que o software realiza corretamente uma função específica. A validação refere-se a um conjunto diferente de atividades que garante que o software que foi construído e é rastreável às exigências do cliente Sob outro ponto de vista, proposto por Boehm:

• Verificação: "Estamos construindo certo o produto?"

• Validação: "Estamos construindo o produto certo?"

Notas

• Outras atividades são necessárias para Verificação e Validação como as revisões técnicas e formais, auditoria de qualidade e configuração, monitoramento de desempenho, etc.

• O teste deve ser o último recurso para avaliar a qualidade.

• Existe um debate se o teste só fornece verificação ou se também pode fornecer validação.

Gabarito: item correto.

56. (CESPE/2009/TRE-MA - Técnico Judiciário - Programação de Sistemas) O teste do software tem a finalidade de fornecer informações acerca da qualidade do software em relação ao contexto em que ele deve operar. Os testes de software incluem a técnica denominada

I caixa preta.

II caixa branca.

III caixa cinza.

Page 139: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 139

IV teste de integração.

V teste de sistema.

A quantidade de itens certos é igual a

a) 0.

b) 1.

c) 2.

d) 3.

e) 4.

Comentários

São técnicas de teste os itens I, II e III. Os demais são estratégias de teste. Os testes de caixa cinza mescla os testes de caixa preta e caixa branca: são fornecidos dados de entrada e então são verificados o comportamento interno do sistema e os dados de saída.

Gabarito: letra D.

57. (ESAF/2008/MPOG) Uma estratégia de teste de software integra métodos de projeto de casos de teste em uma série planejada de passos. Em relação a estratégias de testes, é correto afirmar que:

a) realizar testes para mostrar que não existem defeitos no software faz parte das estratégias de testes.

b) demonstrar ao desenvolvedor e ao cliente que o software atende aos requisitos é uma meta de validação do software.

c) o particionamento de equivalência é uma maneira estratégica de aplicar testes de software.

d) o teste estrutural é uma estratégia que se baseia na análise da especificação de um programa para ajudar na seleção de casos de teste.

e) funções ou métodos individuais de um objeto não são exemplos de estratégia da aplicação de teste de componentes.

Comentários

Item a. Não se pode garantir que um software é livre de defeitos ou que ele se comportará conforme especificado em TODAS as circunstâncias. É sempre possível que um teste ignorado possa descobrir mais problemas no sistema. A meta do teste de software é demonstrar aos desenvolvedores e clientes do sistema que o software é bom o suficiente para o uso operacional. Item FALSO.

Item b. Item VERDADEIRO.

Page 140: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 140

Item c. A letra C encontra-se incorreta, pois este é um método para testes de software do tipo caixa-preta, que avalia o comportamento externo do componente de software, sem se considerar o comportamento interno do mesmo. Dados de entrada são fornecidos, o teste é executado e o resultado obtido é comparado a um resultado previamente esperado.

Apesar do teste de caixa preta ser utilizado numa estratégia de testes de software, permitindo avaliar se a quantidade de casos de teste produzida é coerente, esse tipo de teste é insuficiente para identificar certos riscos num projeto de software, o que o torna não muito utilizado. Com isso, de acordo com a pergunta, ao mencionar que os casos de teste são uma série planejada de passos, busca-se obter os casos de teste que são mais utilizados no processo de desenvolvimento de um software. Item FALSO.

Item d. A letra D é incorreta, pois esse tipo de teste é uma abordagem para projetar casos de teste na qual os testes são derivados do conhecimento da estrutura e da implementação do software. Essa abordagem em algumas vezes é chamada de teste “caixa-branca”. Item FALSO.

Item e. A letra E é incorreta, pois nos testes de componentes, estes são testados individualmente, e um destes níveis consiste em testar as operações individuais associadas com objetos (SOMMERVILLE, 2007). Item FALSO.

Gabarito: letra B.

58. (CESPE/2010/TRE-MT/Técnico Judiciário - Programação de Sistemas) – ADAPTADA. Testes de regressão são realizados somente durante a manutenção do software.

Comentários

O teste de regressão não descarta a necessidade de testes para as capacidades novas ou alteradas. É utilizado durante desenvolvimento iterativo – na manutenção do software: depois da depuração e na produção de nova instância de um componente reusável, por exemplo.

Gabarito: item correto.

59. (CESPE/2010/TRE-MT - Técnico Judiciário - Programação de Sistemas) – ADAPTADA. O teste de unidade tem foco na menor unidade de um sistema, um programa. Testes em funções, procedimentos ou métodos não são considerados testes de unidade.

Comentários

O teste de unidade é aplicado na menor parte testável do sistema. Isto está certo. Mas como na programação procedural esta unidade pode ser uma função ou algo do gênero, logo, a segunda parte da afirmação está errada.

Page 141: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 141

Teste de unidade

• Focaliza cada componente individualmente, garantido que funciona.

• Faz uso intensivo de técnicas que exercitam caminhos específicos na estrutura de controle.

Gabarito: item errado.

60. (CESPE/2010/TRE-MT - Técnico Judiciário - Programação de Sistemas) – ADAPTADA. Testes de sistema não podem explorar requisitos não funcionais.

Comentários

Uma vez que os testes de sistema executam a tarefa a partir da ótica do usuário final, ele trata os requisitos do sistema, funcionais e não funcionais. Os testes são executados em ambientes similares ao ambiente do usuário.

Gabarito: item errado.

61. (FEPESE/2010/SEFAZ-SC - Auditor Fiscal da Receita Estadual) Analise a definição abaixo.

Teste de software que procura descobrir erros por meio da reaplicação parcial dos testes a um programa modificado.

Assinale a alternativa que cita corretamente o conceito ao qual se refere a definição.

a) Teste de sistema

b) Teste de unidade

c) Teste de regressão

d) Teste de integração

e) Teste de requisitos

Comentários

O teste que “procura descobrir erros por meio da reaplicação parcial dos testes a um programa modificado” é o Teste de Regressão.

Toda vez que um novo módulo é adicionado como parte do teste de integração, o software se modifica.

• Novos caminhos de fluxos de dados são estabelecidos.

• Nova E/S pode ocorrer.

• Nova lógica de controle é adicionada

Essas modificações podem causar problemas com funções que previamente funcionavam corretamente. O teste de regressão é a re-execução de algum

Page 142: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 142

subconjunto de testes que já foi conduzido para garantir que as modificações não introduzam efeitos colaterais indesejáveis.

Este teste (regressão) pode ser conduzido manualmente ou usando ferramentas automatizadas de captação/reexecução, que permitem ao engenheiro de software captar casos de teste e resultados para reexecução e comparação.

À medida que o teste de integração prossegue, o número de testes de regressão pode crescer significativamente. Neste caso, a suíte de testes de integração deve ser projetada para incluir apenas testes que cuidam das principais funções do programa.

Os testes de regressão devem ser focados na função de módulos críticos:

• Um módulo crítico tem uma ou mais das seguintes características:

– Aborda vários requisitos do software.

– Está num alto nível da estrutura de controle.

– É complexo ou propenso a erro.

– Tem requisitos de desempenho bem definidos.

• Módulos críticos devem ser testados tão cedo quanto possível.

Gabarito: letra C.

62. (FIP/2009/CAMARA-SJC/Analista de Sistemas) Considere as seguintes afirmações:

(1) Programas de computador são obras de engenharia que devem seguir, rigidamente, normas e padrões técnicos.

(2) Uma falha de software pode comprometer a integridade, disponibilidade e confidencialidade de um sistema de informações empresarial.

(3) Os testes de caixa preta são utilizados para demonstrar que as funções do software estão operacionais, que as entradas válidas são adequadamente aceitas e produzem saídas corretas, mantendo a integridade das informações externas.

É correto afirmar que:

a) Todas as afirmações estão corretas.

b) Apenas as afirmações (1) e (3) estão corretas.

c) Apenas as afirmações (2) e (3) estão corretas.

d) Apenas as afirmações (1) e (2) estão corretas.

e) N.D.A.

Comentários

Todas as afirmações estão corretas! Mesmo quando observamos que existem softwares que são desenvolvidos de qualquer forma, sem atenção às normas

Page 143: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 143

técnicas ou a qualquer padrão de qualidade, não devemos acreditar que um software não precisa ser um produto que atenda a padrões e normas rígidas.

Certamente uma falha de software pode tornar todo o sistema inoperante e causar problemas de segurança da informação.

O item 3 apresenta um bom conceito para caixa preta.

Gabarito: letra A.

63. (FCC/2009/TRT - 15ª Região - Analista Judiciário - Tecnologia da Informação) Os testes de integração têm por objetivo verificar se

a) os módulos testados produzem os mesmos resultados que as unidades testadas individualmente.

b) os módulos testados suportam grandes volumes de dados.

c) as funcionalidades dos módulos testados atendem aos requisitos.

d) os valores limites entre as unidades testadas individualmente são aceitáveis.

e) o tempo de resposta dos módulos testados está adequado.

Comentários

Os testes de integração têm por objetivo verificar se as funcionalidades dos módulos testados atendem aos requisitos.

Gabarito: letra C.

64. (ESAF/2008/Prefeitura de Natal - RN - Auditor do Tesouro Municipal - Tecnologia da Informação) Com relação aos tipos de testes que podem ser considerados e executados em um projeto de software, é correto afirmar que o objetivo principal do Teste Funcional é assegurar que

a) a interface forneça ao usuário o acesso e a navegação adequados através das funções do software.

b) os objetos contidos na interface funcionam conforme o esperado e estejam em conformidade com padrões estabelecidos.

c) foram exercitados um conjunto de funcionalidades para avaliar a navegação pelo software e a facilidade de uso do mesmo.

d) houve uma correta implementação dos requisitos do sistema, como, por exemplo, regras de negócio, através da interface do usuário.

e) foram executadas transações, variando as cargas de trabalho, para observar e registrar o comportamento do sistema.

Page 144: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 144

Comentários

O teste caixa preta é também chamado de teste funcional e é baseado nos requisitos funcionais do software.

Gabarito: letra D.

AGRADECIMENTOS

Chegamos ao final do nosso curso!!!

Agradeço a todos pela excelente parceria.

Ficarei feliz em saber que você conseguiu sua aprovação!

Estarei torcendo e desejando muita força para você continuar na trilha do sucesso.

Um forte abraço,

Profa Patrícia Lima Quintão

Page 145: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 145

REFERÊNCIAS BIBLIOGRÁFICAS

Notas de aula, profa Patrícia Lima Quintão.2012/2013.

Algoritmos e Estruturas de Dados – LTC Editora.

COCKBURN, Alistair. Escrevendo Casos de Uso Eficazes. Bookman,

2005.

Introduction to Java programming: comprehensive version/Y. Daniel

Liang.6 th ed.

http://www.wiley.com/college/busin/icmis/oakman/outline/chap05/slides/errors.htm

DEITEL, H. M.. Java Como Programar. 6a ed. Prentice Hall, 2007.

HORSTMANN, C. S. e CORNELL, G.. Core Java 2: Volume 1 Fundamentos. São Paulo: Makron, 2003.

HORSTMANN, C. S. e CORNELL, G.. Core Java 2: Volume 2 Recursos Avançados. São Paulo: Makron, 2001.

GONÇALVES, Edson. Dominando NetBeans. 1ª edição. Ciência Moderna, 2006.

LEMAY, L. e CADENHEAD, R.. Aprenda em 21 Dias Java 2: Professional Reference. 3a ed., São Paulo: Campus, 2003.

SEI. Disponível em: http://www.sei.cmu.edu/str/descriptions/threetier.html. Acesso em: fev. 2010.

Java™ How to Program, Sixth Edition.

SCPJ Sun Certified Programmer For Java 5 Study Guide .

Page 146: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 146

QUESTÕES APRESENTADAS NESTA AULA

1. (CESGRANRIO/2013/BNDES/BACEN/ANALISTA DE SISTEMAS/SUPORTE) As linguagens de programação C, Haskell e Ruby são, respectivamente, exemplos dos paradigmas

(A) Imperativo, Lógico e Orientado a Objeto (B) Clássico, Lógico e Web (C) Imperativo, Funcional e Orientado a Objeto (D) Lógico, Funcional e Imperativo (E) Clássico, Orientado a Objeto e Lógico

2. (CESGRANRIO/2005/ANALISTA DE SISTEMAS, TÉCNICO E TÉCNICO DE NÍVEL SUPERIOR – Amazonas) Qual é a API do J2EE que permite executar comandos SQL a partir de métodos de classes implementadas em Java?

(A) JAAS

(B) JAXP

(C) JDBC

(D) JMS

(E) JSP

3. (CESGRANRIO/BNDES/2013/BACEN/ANALISTA DE SISTEMAS/SUPORTE) Java Message Service (JMS) é uma tecnologia voltada para o envio e processamento de mensagens na qual o

(A) modelo ponto a ponto de troca de mensagens estabelece que cada mensagem enviada para uma fila deve ser recebida por um único consumidor. (B) modelo ponto a ponto de troca de mensagens permite que cada mensagem enviada para uma fila seja lida várias vezes por diferentes consumidores. (C) modelo publish/subscribe de troca de mensagens estabelece que até dois consumidores podem ler o conteúdo de uma mensagem enviada. (D) modelo publish/subscribe de troca de mensagens estabelece que somente um consumidor pode ler o conteúdo de uma mensagem enviada. (E) conceito de tópico de mensagens é usado no modelo ponto a ponto para o envio de uma mensagem em multicast, enquanto o conceito de filas de mensagens é usado no modelo publish/subscribe para o envio de uma mensagem para no máximo um consumidor.

Page 147: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 147

4. (CESGRANRIO/BNDES/2013/BACEN/ANALISTA DE SISTEMAS/DESENVOLVIMENTO DE SISTEMAS) Qual elemento deve ser a raiz (root element) de um documento XML para que este seja identificado como uma mensagem SOAP?

(A) soap:Header (B) soap:Body (C) soap:Message (D) soap:Channel (E) soap:Envelope

5. (CESGRANRIO/BNDES/2013/BACEN/ANALISTA DE SISTEMAS/DESENVOLVIMENTO DE SISTEMAS) No âmbito da análise estruturada de sistemas, o gráfico de estrutura representa o modelo lógico de uma hierarquia modular, onde é possível mostrar a(o)

(A) comunicação entre módulos e a localização de loops e decisões principais de processamento. (B) construção de programas em hierarquia, por meio de um pequeno número de estruturas lógicas, cada uma com uma entrada e uma saída. (C) conjunto de elementos de dados, identificados, inclusos em um registro. (D) conjunto de elementos de dados de uma determinada relação, usado, geralmente, para descrever alguma entidade. (E) número de módulos chamados diretamente por outro módulo, nem muito alto (exceto no caso de um módulo despachante) nem muito baixo.

6. (CESGRANRIO/BNDES/2013/BACEN/ANALISTA DE SISTEMAS/DESENVOLVIMENTO DE SISTEMAS) Na linguagem Java, a palavra-chave final pode ser usada na declaração de classes, de métodos e de variáveis.

Quando essa palavra-chave é usada na declaração de uma classe, ela indica que (A) a classe não pode ser estendida. (B) a classe só pode ser instanciada uma única vez. (C) a classe é considerada uma interface. (D) as variáveis da classe só podem sofrer atribuições de valores uma única vez. (E) os métodos da classe não podem ser sobrescritos.

7. (Cesgranrio/Analista de Sistemas Júnior - Engenharia de Software/Petrobrás/2010) Considere os dois trechos de implementações de classes, produzidos com a linguagem Java (As reticências representam partes irrelevantes para a questão).

Page 148: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 148

O diagrama de classes em UML que pode ser inferido única e exclusivamente a partir dos trechos de código fornecidos é

Page 149: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 149

8. (Cesgranrio/Analista de Sistemas Júnior - Engenharia de Software/Petrobrás/2010)

public class SomaMisteriosa {

private static void somaTres(int x[]) {

x[0] += 3;

}

private static void somaDois(int x) {

x += 2;

}

public static void main(String args[]) {

int x = 0;

int y[] = { 0 };

somaDois(x);

somaTres(y);

somaDois(y[0]);

System.out.print(x + " " + y[0]);

}

}

Após a execução do trecho acima, será impresso

(A) 2 5

(B) 1 5

(C) 0 5

(D) 0 3

(E) 0 0

9. (Cesgranrio/Analista de Sistemas Júnior - Engenharia de Software/Petrobrás/2010) Considere o seguinte trecho de código em Java:

// Arquivo C1.java

package br.com.pk1;

public class C1 {

int x;

public int y;

protected int z;

Page 150: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 150

private int w;

}

// Arquivo C2.java

package br.com.pk2;

public class C2 extends C1 {

}

A Classe C2 pode manipular os atributos

(A) x, y, z

(B) y, z

(C) x, y

(D) y

(E) x, y, z, w

10. (Cesgranrio/Analista de Sistemas Júnior - Engenharia de Software/Petrobrás/2010)

01 class C1 {

02 public void f() {

03 System.out.print(" 1 ");

04 }

05

06 public void g() {

07 f();

08 }

09 }

10

11 class C2 extends C1 {

12 public void f() {

13 System.out.print(" 2 ");

14 }

15 }

16

17 public class Prog {

Page 151: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 151

18 public static void main(String args[]) {

19 C1 a = new C1();

20 a.f();

21 C2 b = new C2();

22 b.f();

23 a = b;

24 a.f();

25 b.g();

26 }

27 }

Considerando a execução do trecho de código em Java acima, o programa

(A) sequer compila, pois a atribuição “a = b” (linha 23) está incorreta por incompatibilidade de tipos.

(B) compila, mas é gerado um erro de execução por incompatibilidade da atribuição “a = b” (linha 23).

(C) imprime 1 2 1 1.

(D) imprime 1 2 1 2.

(E) imprime 1 2 2 2.

11. (Cesgranrio/Analista de Sistemas Júnior - Engenharia de Software/Petrobrás/2010)

01 class C1 {

02 public void mostraDados() {

03 System.out.print(" 1 ");

04 }

05 }

06

07 class C2 extends C1 {

08 public void mostraDados() {

09 System.out.print(" 2 ");

10 }

11 }

12

13 public class Prog {

Page 152: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 152

14 public static void f(C1 c) {

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

16 c.mostraDados();

17 }

18

19 public static void f(C2 c) {

20 System.out.print(" B ");

21 c.mostraDados();

22 }

23

24 public static void main(String args[]) {

25 C1 c1 = new C2();

26 f(c1);

27 }

28 }

Após a execução do trecho acima, na saída padrão o programa

(A) não compila.

(B) imprime A 1.

(C) imprime A 2.

(D) imprime B 1.

(E) imprime B 2.

12. (Cesgranrio/BNDES/Analista de Sistemas/Suporte/2010) O gerente de infraestrutura de uma empresa reuniu seus analistas para decidir sobre a topologia do ambiente de um servidor de aplicação JAVA comercial, recentemente adquirido.

Uma possível ordem de interconexão entre os elementos desse ambiente, considerando-se a necessidade de controle do tráfego externo, seria

(A) Link Internet, Firewall, Servidor WEB (Proxy), Servidor JAVA.

(B) Link Internet, Servidor WEB (Proxy), Servidor JAVA, Firewall.

(C) Firewall, Link Internet, Servidor WEB (Proxy), Servidor JAVA.

(D) Firewall, Link Internet, Servidor JAVA, Servidor WEB (Proxy).

(E) Servidor WEB (Proxy), Link Internet, Firewall, Servidor JAVA.

Page 153: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 153

13. (CESGRANRIO/2009/Casa da moeda)

public class Main {

public static void main(String[] args) {

int x = 1;

int y = 3;

int z = 6;

x += calcula(y++ + ++z);

System.out.println(x);

}

public static int calcula(int x) {

return x * 2;

}

public static int calcula(int y, int z) {

return z - y;

}

}

Qual será a saída do programa Java mostrado acima?

(A) 3

(B) 5

(C) 19

(D) 21

(E) 23

14. (CESGRANRIO/2009/IBGE) O código abaixo foi escrito em Java.

package execute;

import java.lang.Exception;

import java.lang.ArithmeticException;

public class Main {

public static class ClassMsg

{

public void processa (int par1, int par2)

{

String msg = “V=”;

Page 154: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 154

try {

msg = msg + Double.toString(par1/par2);

System.out.print(msg);

} catch (ArithmeticException ar) {

System.out.print(“AR”);

} catch (Exception ex) {

System.out.print(“EX”);

} finally {

System.out.print(“FI”);

}

System.out.print(msg);

}

}

public static void main(String[] args) {

ClassMsg obj = new ClassMsg();

obj.processa(10, 0);

System.out.print(4/2);

}

}

A saída da execução desse programa é

(A) V=2

(B) FIV=2

(C) ARFIV=

(D) ARFIV=2

(E) AREXFIV=

15. (CESGRANRIO/2005/ANALISTA DE SISTEMAS, TÉCNICO E TÉCNICO DE NÍVEL SUPERIOR – Amazonas) Considere a seguinte classe escrita em Java:

class calcula {

int resultado = 0;

public int processar (int par)

{ resultado = resultado + par;

Page 155: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 155

par = par - 2;

if (par >= 0)

{ processar (par);

} return resultado; } public static void main (String[] arguments) { calcula r = new calcula(); System.out.println(r.processar(7)); } }

Após a execução do método “main”, o valor apresentado pelo comando

“System.out.println(r.processar(7));” é:

16. (CESGRANRIO/BNDES/Analista de Sistemas – Suporte/2008) Um servidor Linux, que roda, exclusivamente, um servidor de aplicação Java EE, possui 2 GB de memória RAM e 1 CPU. A única aplicação em execução atinge, em momentos de pico, 50 usuários simultâneos. Para que essa aplicação tenha um desempenho adequado, o tamanho máximo da Heap da JVM pode ser configurado para

a) 100 threads.

b) 32 MB.

c) 60 threads.

d) 2 GB.

e) 512 MB.

17. (CESGRANRIO/2005/ANALISTA DE SISTEMAS, TÉCNICO E TÉCNICO DE NÍVEL SUPERIOR – Amazonas) Os miniaplicativos Java transferidos para o nosso computador quando acessamos uma página na Internet que os utiliza são chamados:

(A) applets.

(B) browsers.

(C) caches.

(D) cookies.

(E) sites.

Page 156: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 156

18. (CESGRANRIO/2010/Petrobrás - Analista de Sistemas Júnior) Testar é uma disciplina de suma importância para a engenharia de software. A literatura divide os tipos de testes em duas grandes categorias: teste de caixa preta e teste de caixa branca. Sobre esta classificação, pode-se afirmar que

I - testes de interfaces são classificados como de caixa branca; II - testes de caixa preta são também chamados de teste comportamental, onde o foco são os requisitos funcionais do software; III - testes de caixa preta são complementares aos testes de caixa branca, uma vez que contemplam diferentes classes de erros. É correto o que se afirma em

a) I, apenas.

b) I e II, apenas.

c) I e III, apenas.

d) II e III, apenas.

e) I, II e III.

19. (Cesgranrio/Petrobrás/Processos de Negócios/2008) Um importante aspecto da elaboração de casos de testes para um sistema em desenvolvimento é a escolha dos valores de entrada e das saídas previstas dos casos de teste. Escolhas baseadas apenas em valores típicos, em geral, são incapazes de revelar todas as falhas da implementação. É necessário identificar conjuntos de valores que possuam características comuns, do ponto de vista das funcionalidades a serem testadas, como, por exemplo, “números negativos”, “números com mais dígitos do que o previsto”, “strings sem brancos”, “arrays de um só elemento”, além de prever casos de teste cobrindo a totalidade destes conjuntos, e projetar, para cada conjunto, casos de teste com valores nos limites e próximos ao ponto médio do conjunto. Esses conjuntos são denominados

(A) partições de equivalência.

(B) grupos de controle.

(C) espaços amostrais.

(D) classes características.

(E) intervalos de testes.

20. (Cesgranrio/BNDES/2008) No âmbito de estratégias e técnicas de testes de software, assinale a afirmativa correta.

(A) É uma boa prática automatizar os testes de unidade, embora não seja recomendado, em geral, automatizar os testes de regressão.

Page 157: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 157

(B) São exemplos de abordagens de testes para aplicações cliente-servidor: teste de função da aplicação cliente, teste de servidor, teste de banco de dados, teste de transação e teste de comunicação em rede.

(C) São exemplos de teste de caixa-branca: teste de caminho básico, teste de estrutura de controle e teste utilizando particionamento de equivalência.

(D) A verificação é testada pela pergunta: “Estamos construindo o produto correto?”, enquanto a validação indaga: “Estamos construindo o produto corretamente?”.

(E) Depois do teste de unidade, o teste seguinte a ser aplicado a um software é, comumente, o teste de validação.

Questões Complementares

21. (ESAF/2008/STN/DESENVOLVIMENTO DE SISTEMAS) Para resolver um determinado problema, um programador tem em mente como deve ser o programa principal que, por sua vez, controlará todas as outras tarefas distribuídas em sub-rotinas, para as quais deverá desenvolver os respectivos algoritmos. Este cenário exemplifica o conceito de programação

a) estruturada.

b) orientada a objetos.

c) funcional.

d) numérica.

e) orientada a aspectos.

22. (ESAF/2007/SEFAZ-CE-TI) Quando uma função é definida em termos de si mesma fica caracterizado o uso

a) da recursividade.

b) da iteratividade.

c) da interatividade.

d) do acesso direto a Banco de Dados.

e) de DLLs.

23. (ESAF/2006/TRF) Analise as seguintes afirmações relacionadas à Programação Orientada a Objetos:

I. Em um Programa Orientado a Objetos as instâncias de uma classe armazenam tipos diferentes de informações e apresentam comportamentos distintos.

II. Em uma Aplicação Orientada a Objetos podem existir múltiplas instâncias de uma mesma classe.

Page 158: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 158

III. Em Programação Orientada a Objetos deve existir um e somente um objeto de uma mesma classe.

IV. Os serviços que podem ser solicitados a um objeto são definidos pelos

métodos.

Indique a opção que contenha todas as afirmações verdadeiras.

a)II e IV b) II e III c) III e IV d) I e III e) I e II

24. (ESAF/2006/TRF) Na Programação Orientada a Objetos,

a) a definição dos objetos deve ser obrigatoriamente definida no corpo do construtor.

b) o código construtor é responsável por criar e inicializar os atributos dos objetos.

c) o construtor é uma função que tem um nome qualquer e, quando instanciada, faz referência aos atributos da classe a ser definida.

d) o código construtor é responsável por criar os métodos da classe.

e) quando se instancia uma classe diversas vezes, o código construtor é responsável por armazenar e compartilhar os atributos das instâncias e os de classe utilizados ao longo de todo o processo.

25. (ESAF/2006/CGU) Analise as seguintes afirmações relacionadas aos conceitos básicos de Programação Orientada a Objetos.

I. Modificações de uma classe base requerem, obrigatoriamente, que as classes derivadas mudem.

II. Uma classe derivada não pode conter atributos adicionais diferentes dos

existentes na sua classe base.

III. Criar uma classe derivada não afeta o código-fonte da sua classe base. A integridade de uma classe base é preservada pela herança.

IV. Uma classe derivada contém os atributos e comportamentos de sua classe base.

Indique a opção que contenha todas as afirmações verdadeiras.

a) I e II

b) II e III

c) III e IV

d) I e III

e) II e IV

Page 159: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 159

26. (Cops/Analista Administrativo- TI/2011)

Assinale a alternativa correta:

A)Somente as afirmativas I e II são corretas.

B)Somente as afirmativas I e IV são corretas.

C)Somente as afirmativas III e IV são corretas.

D)Somente as afirmativas I, II e III são corretas.

E)Somente as afirmativas II, III e IV são corretas.

Page 160: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 160

27. (Cops/Analista Administrativo- TI/2011)

28. (FUMARC/2007/PREF.MUN.BETIM/Analista de Sistemas da Saúde) Considere que, no algoritmo em alto nível a seguir, todas as variáveis sejam inteiras:

Na execução desse algoritmo, o valor impresso na linha 7 é:

a) 55

b) 89

c) 144

d) 233

Page 161: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 161

29. (FUMARC/2007/PREF.MUN.BETIM/Analista de Sistemas da Saúde) Considere que, no algoritmo em alto nível a seguir, V seja um vetor de inteiros contendo 100 elementos indexados de 0 a 99, e todas as demais variáveis sejam inteiras.

O objetivo desse algoritmo é:

a) Imprimir o vetor V em ordem crescente.

b) Imprimir o vetor V em ordem decrescente.

c) Imprimir o maior valor armazenado no vetor V.

d) Imprimir o menor valor armazenado no vetor V.

30. (FUMARC/2007/MINISTÉRIO PÚBLICO/Análise de Sistemas) Em relação a algoritmos e lógica de programação, todas as afirmativas estão corretas, EXCETO:

a) Funções e sub-rotinas (procedimentos) são ferramentas de modularização de programas.

b) Os comandos de entrada e saída são utilizados para iniciar e finalizar a execução de um programa de computador.

c) Estruturas condicionais permitem escolher ações que serão executadas quando determinadas condições são satisfeitas.

d) Estruturas de repetição permitem que uma sequência de comandos seja executada repetidamente até que uma determinada condição de interrupção seja satisfeita.

31. (FUMARC/2007/MINISTÉRIO PÚBLICO/Análise de Sistemas) Em relação às estruturas de dados, todas as afirmativas estão corretas, EXCETO:

a) Vetores são variáveis compostas unidimensionais identificadas por um mesmo nome.

b) Matrizes são variáveis compostas multidimensionais individualizadas por índices.

Page 162: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 162

c) Registros são conjuntos de dados logicamente relacionados, mas de tipos diferentes.

d) Variáveis compostas homogêneas correspondem a posições de memória cujo conteúdo pode ser de diferentes tipos de dados.

32. (ESAF/2007/SEFAZ-CE-TI) Os parâmetros são dados utilizados por funções para realizarem suas operações. Com relação ao uso de parâmetros e funções é correto afirmar que

a) cada função só poderá receber um único parâmetro por cada vez que é executada. Quando uma função necessitar receber mais de um parâmetro, utiliza-se um loop controlado pelo indicador da quantidade de parâmetros desejados.

b) na hora de definir a função, no cabeçalho, definem-se os parâmetros que ela vai receber.

c) uma função pode receber qualquer número de parâmetros, exceto nenhum.

d) uma função pode receber qualquer número de parâmetros, desde que estes sejam do tipo Booleano.

e) uma função pode receber qualquer número de parâmetros, desde que estes sejam do tipo Inteiro.

33. (ESAF/2005/AFRF) Classes e objetos são dois conceitos-chave da programação orientada a objetos. Com relação a estes conceitos, é correto afirmar que

a) se pode definir uma classe como um pacote de software, de modo que, com a herança, um objeto define comportamento e forma-padrão para a construção de uma nova classe abstrata.

b) uma classe é uma descrição de um ou mais objetos por meio de um conjunto uniforme de atributos e serviços. Além disso, pode conter uma descrição de como criar novos objetos na classe.

c) uma classe é uma abstração de alguma coisa no domínio de um problema ou na sua implementação, refletindo a capacidade de um sistema para manter informações sobre ela, interagir com ela ou ambos.

d) um objeto é um protótipo que define os atributos e métodos comuns a todas as classes de um certo tipo.

e) o polimorfismo caracteriza-se pela possibilidade de objetos distintos possuírem métodos com nomes idênticos, mas com implementações distintas.

Page 163: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 163

34. (ESAF/2008/MPOG) A estrutura de dados na qual a inserção e a remoção se dá na mesma extremidade, isto é, no topo da lista, é denominada:

a) lista duplamente encadeada.

b) lista circular.

c) fila.

d) pilha.

e) árvore.

35. (COVESTE/UFPE_UFRPE_APEF_EAF Vitória PE/ Programador de Computador) Boas práticas de programação orientada a objetos recomendam o seguinte:

A) declarar atributos como públicos, para facilitar o acesso de classes clientes.

B) definir a arquitetura de classes com base nas funções da aplicação (decomposição funcional).

C) evitar métodos privados, já que estes não podem ser chamados por classes clientes.

D) implementar relacionamentos entre classes, utilizando atributos chaves, como em uma modelagem relacional, ao invés de referenciar os objetos propriamente ditos.

E) usar herança com cautela, apenas quando o relacionamento for comportamental (é um) entre a classe que herda e a classe original.

36. (COVESTE/2004/UFPE_UFRPE_APEF_EAF Vitória PE/ Programador de Computador) Uma importante característica da orientação a objetos é o fato de um objeto de uma classe poder ser utilizado em um contexto onde um objeto de uma superclasse é esperado. Este tipo de substituição é possível graças a qual dos conceitos a seguir?

A) Encapsulamento

B) Herança múltipla

C) Polimorfismo de subtipos

D) Modularidade

E) Classes parametrizadas

37. (COVESTE/2004/UFPE_UFRPE_APEF_EAF Vitória PE/ Programador de Computador) Para representar um Funcionário, considere a declaração da seguinte classe em Java, com atributos para armazenar a matrícula e o nome do funcionário, em que a numeração de

Page 164: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 164

(1) a (6) é apenas uma anotação para facilitar e referenciar parte específica do código.

class Funcionário {

(1) private int mat;

(2) private String nome;

(3) public Funcionário (int mat, String nome) {

this.mat = mat;

this.nome = nome;

}

(4) public int getMat () {return mat;}

(5) public String getNome () {return nome;}

(6) public void alteraNome(String nome)

{this.nome = nome;}

}

Considere, ainda, o trecho de código:

(7) Funcionario f = new Funcionario(1457,“José da Silva”);

Com base nesses dados, é correto afirmar que:

A) uma vez criado um objeto da classe Funcionario, como exemplificado no item (7), é impossível alterar a sua matrícula.

B) a declaração iniciada no item (3) é inválida, pois define um método com o mesmo nome da classe.

C) um objeto da classe Funcionario poderia ser criado, utilizando-se o construtor default, através da seguinte expressão: new Funcionario().

D) Através da variável f declarada no item (7), é possível acessar os atributos declarados nos itens (1) e (2), através das expressões f.mat e f.nome.

E) A utilização do qualificador this, tanto na declaração iniciada no item (3) como na declaração no item (6), é opcional.

38. (ESAF/2008/AFC-STN/INFRAESTRUTURA DE TI) A habilidade para uso de uma mesma mensagem para invocar comportamentos distintos de um determinado objeto é denominada

Page 165: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 165

a) Interface.

b) Polimorfismo.

c) Herança.

d) Encapsulamento.

e) Abstração.

39. (ESAF/2007/SEFAZ-CE) Analise as seguintes afirmações relacionadas à programação orientada a objetos e a UML.

I. Um relacionamento é uma conexão entre itens. Na modelagem orientada a objetos, os quatro relacionamentos mais importantes são as dependências, as generalizações, as associações e as realizações.

II. Um diagrama de objetos é um tipo especial de diagrama, composto por objetos e seus vínculos, que compartilha as mesmas propriedades comuns a todos os outros diagramas, isto é, um nome e o conteúdo gráfico.

III. As exceções são manifestações concretas de uma abstração à qual um conjunto de operações, sempre esperadas e controladas, poderão ser aplicadas.

IV. O diagrama de classes faz a modelagem de instâncias de itens contidos em diagramas de objetos. Um diagrama de classes mostra um conjunto de objetos e seus relacionamentos em determinado ponto no tempo.

Indique a opção que contenha todas as afirmações verdadeiras.

a) I e II

b) II e III

c) III e IV

d) I e III

e) II e IV

40. (ESAF/2006/TRF) Analise as seguintes afirmações relacionadas à Orientação a Objetos:

I. Os atributos podem ser de instância ou de classe. Quando os atributos são de instância, cada objeto guarda a sua própria cópia de tais atributos.

II. Os atributos compartilhados entre objetos de uma classe são chamados de atributos de objetos. Em Java, por exemplo, esses atributos são identificados com a palavra static.

III. Existem métodos cujo código apenas acessa atributos de classe ou os parâmetros passados. Esses métodos são chamados de métodos de classe.

IV. Um mesmo nome de objeto pode ser usado para identificar diferentes objetos em uma mesma classe ou diferentes objetos em classes diferentes,

Page 166: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 166

evitando assim, que seja necessário usar nomes diferentes para objetos diferentes que realizam a mesma operação. A esta característica da Orientação a Objetos dá-se o nome de Polimorfismo.

Indique a opção que contenha todas as afirmações verdadeiras.

a)I e II b) II e III c) III e IV d) II e IV e) I e III

41. (CESPE/2010/BANCO DA AMAZONIA/Área: Tecnologia da Informação — Administração de Dados/Q. 72) O Jboss é um servidor de aplicação avançado que, apesar de ter sido implementado na linguagem Java, funciona em qualquer tipo de sistema operacional, independentemente de este ter sido desenvolvido em Java.

42. (CESPE/2010/BANCO DA AMAZONIA/Área: Tecnologia da Informação — Suporte Técnico/Q. 115) O servidor de aplicação JBOSS foi desenvolvido utilizando-se a linguagem de programação Java. As versões mais atuais são preparadas para suportar aplicações que utilizam as especificações servlets e JSP, mas são incompatíveis com a especificação EJB.

A base textual da Web não permite interação muito adequada para tarefas automatizadas entre sistemas. O conceito de web services cria uma forma mais adequada para a comunicação entre diferentes aplicações e serviços, possibilitando a execução e o processamento automático de informações constantes em diferentes aplicações. Acerca de web services e tecnologias relacionadas, julgue os itens que se seguem.

43. (CESPE/2010/ IJSN/ES/ Informática e Gestão da Informação) Web services permitem a comunicação entre diferentes sistemas. Com a adoção de tecnologias como UDDI, XML, WSDL e SOAP, aplicações de diversos locais da Internet podem ser integradas e interconectadas como se fizessem parte de um mesmo sistema, independentemente da linguagem de programação na qual foram desenvolvidas.

44. (CESPE/2010/BANCO DA AMAZONIA/Área: Tecnologia da Informação — Suporte Técnico) Alguns servidores de aplicação suportam a plataforma Java EE 6, como é o caso do GlassFish em sua versão mais recente.

45. (EMBRAPA/2010/Área: Gestão da Informação — Analista Classe A Desenvolvimento, Manutenção de Sistemas e Gestão de Projetos) Um servidor de aplicações tem por objetivo disponibilizar uma plataforma que abstraia do desenvolvedor de software algumas das complexidades de

Page 167: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 167

um sistema computacional. O servidor de aplicações responde a algumas questões comuns a todas as aplicações. Assinale a alternativa que não corresponde a uma questão comum disponibilizada pelo servidor de aplicações.

A) Segurança

B) Disponibilidade

C) Balanceamento de Carga

D) Tratamento de Exceções

E) Regra de Negócios

46. (CESPE/BANCO DA AMAZÔNIA/Técnico Científico — Área: Tecnologia da Informação — ANÁLISE DE SISTEMAS/2010) Objetos têm identidade própria. Isso garante que, mesmo tendo os mesmos valores de variáveis e pertencendo à mesma classe, dois objetos sejam considerados diferentes.

47. (CEPERJ/2010/IPEM-RJ/Analista de Sistemas) No que tange aos paradigmas da Orientação a Objetos (OO), um princípio está diretamente relacionado às operações realizadas por um objeto e ao modo como as operações são executadas, constituindo uma forma de restringir o acesso ao comportamento interno de um objeto. Nesse processo, um objeto que precise da colaboração de outro para realizar alguma tarefa deve enviar uma mensagem a este último. Além disso, separa os aspectos externos de um objeto dos detalhes internos da implementação. Considerando esse contexto, observe a figura abaixo.

O princípio da OO é conhecido por:

a) Compartilhamento

b) Acoplamento

c) Herança

d) Polimorfismo

e) Encapsulamento

Page 168: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 168

48. (Cetro/2007/Liquigás Distribuidora S. A. – Profissional Jr. para atuar em Informática – Análise de Sistemas) Sobre a linguagem XML, é incorreto afirmar que

(A) o conteúdo de um elemento XML é especificado entre uma tag de abertura e uma tag de fechamento.

(B) documentos XML podem ser utilizados para a transferência de dados através da web.

(C) XML é uma linguagem de marcação com um conjunto fixo de tags.

(D) um atributo na XML define uma propriedade de um elemento.

(E) A linguagem XML é definida como o formato universal para dados estruturados na Web.

49. (ESAF/2008/MPOG) O XML (Extensible Markup Language) surgiu como um padrão para estruturação e troca de dados. A fim de permitir a validação de documentos XML, um tipo de documento contendo “metadados” pode ser criado para definir quais elementos, atributos e outros itens podem estar contidos em um documento XML. A informação de “metadados” pode estar contida em um documento XML DTD (Document Type Definition) ou em um documento de esquema XML (XML Schema). A respeito da notação utilizada nas DTDs é incorreto afirmar que

a) um caractere + (adição) colocado após o nome de elemento significa que este pode ser repetido uma ou mais vezes no documento. Esse tipo de elemento é um elemento multivalorado (repetitivo) obrigatório.

b) um caractere * (multiplicação) colocado após o nome de elemento significa que este pode ser repetido zero ou mais vezes no documento. Esse tipo de elemento é conhecido como elemento multivalorado (repetitivo) opcional.

c) um caractere % (porcentagem) colocado após o nome de elemento significa que este pode ser repetido zero ou mais vezes no documento. Esse tipo de elemento é um elemento multivalorado (repetitivo) opcional.

d) um caractere ? (interrogação) colocado após o nome de elemento significa que este pode ser repetido zero ou uma vez. Esse tipo é um elemento de valor único (não-repetitivo) opcional.

e) um elemento que aparece sem nenhum dos seguintes caracteres (% ou + ou * ou ?) após o nome de elemento significa que este deve aparecer exatamente uma vez no documento. Esse tipo é um elemento de valor único (não-repetitivo) obrigatório.

50. (COPS/2011/Analista Administrativo-TI) O método de teste que tem por finalidade determinar se os requisitos dos usuários foram total ou parcialmente satisfeitos pelo produto, preocupando-se também em verificar

Page 169: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 169

como ocorre o processamento, ou seja, demonstrando o caminho percorrido pelo dado de entrada, é conhecido como

a.Caixa Preta.

b.Caixa Branca.

c.Teste de Domínio.

d.Teste de Stress.

e.Teste de Atividade.

51. (UEL/Estrada de Ferro Paraná Oeste S.A/Analista de Sistemas - 2008) Considere as afirmativas a seguir, sobre Teste de software:

I. Teste funcional é uma técnica utilizada para se projetar casos de teste no qual o programa ou sistema é considerado uma caixa preta e, para testá-lo, são fornecidas entradas e avaliadas as saídas geradas para verificar se estão em conformidade com os objetivos especificados.

II. A técnica estrutural estabelece os requisitos de teste com base em uma dada implementação, requerendo a execução de partes ou de componentes elementares do programa.

III. Teste é um conjunto de atividades que não pode ser planejado antecipadamente, porém deve ser realizado sistematicamente.

IV. Um módulo driver chama o módulo que está sendo testado, devendo conter apenas as inicializações das variáveis globais e dos parâmetros que serão utilizados para a chamada do módulo testado.

Assinale a alternativa correta.

a) Somente as afirmativas I e III estão corretas.

b) Somente as afirmativas III e IV estão corretas.

c) Somente as afirmativas I e II estão corretas.

d) Somente as afirmativas I, II e IV estão corretas.

e) Somente as afirmativas II, III e IV estão corretas.

52. (UEL/Analista de Informática Júnior – Desenvolvimento de Sistemas/ 2009) O método de teste, que tem por finalidade determinar se os requisitos dos usuários foram total ou parcialmente satisfeitos pelo produto, preocupando-se também em verificar como ocorre o processamento, ou seja, preocupando-se com o caminho percorrido pelo dado de entrada, é conhecido como:

a) Caixa preta.

b) Teste de domínio.

c) Caixa branca.

d) Teste de Stress.

Page 170: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 170

e) Teste de Atividade.

53. (CESPE/2010/BANCO DA AMAZÔNIA/Técnico Científico — Área: Tecnologia da Informação — Arquitetura de Tecnologia/Q.76) Teste rápido é um mecanismo para identificar requisitos de software.

54. (CESPE/2008/TRT - 5ª Região (BA) - Analista Judiciário - Tecnologia da Informação) Com relação a engenharia de software, processos de software, análise de requisitos, estratégias de validação e ferramentas CASE, julgue os próximos itens. Entre os tipos de testes de caixa preta, encontram-se o teste baseado em grafos; o particionamento de equivalência; a análise de valor-limite; e o teste de matriz ortogonal.

55. (CESPE/2008/TRT - 5ª Região (BA) - Analista Judiciário - Tecnologia da Informação) A diferença entre verificação e validação reside no fato de que a primeira se refere ao conjunto de atividades que garante que o software realiza corretamente uma função específica, enquanto a segunda refere-se a um conjunto diferente de atividades que garante que o software que foi construído é rastreável às exigências do cliente.

56. (CESPE/2009/TRE-MA - Técnico Judiciário - Programação de Sistemas) O teste do software tem a finalidade de fornecer informações acerca da qualidade do software em relação ao contexto em que ele deve operar. Os testes de software incluem a técnica denominada

I caixa preta.

II caixa branca.

III caixa cinza.

IV teste de integração.

V teste de sistema.

A quantidade de itens certos é igual a

a) 0.

b) 1.

c) 2.

d) 3.

e) 4.

Page 171: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 171

57. (ESAF/2008/MPOG) Uma estratégia de teste de software integra métodos de projeto de casos de teste em uma série planejada de passos. Em relação a estratégias de testes, é correto afirmar que:

a) realizar testes para mostrar que não existem defeitos no software faz parte das estratégias de testes.

b) demonstrar ao desenvolvedor e ao cliente que o software atende aos requisitos é uma meta de validação do software.

c) o particionamento de equivalência é uma maneira estratégica de aplicar testes de software.

d) o teste estrutural é uma estratégia que se baseia na análise da especificação de um programa para ajudar na seleção de casos de teste.

e) funções ou métodos individuais de um objeto não são exemplos de estratégia da aplicação de teste de componentes.

58. (CESPE/2010/TRE-MT/Técnico Judiciário - Programação de Sistemas) – ADAPTADA. Testes de regressão são realizados somente durante a manutenção do software.

59. (CESPE/2010/TRE-MT - Técnico Judiciário - Programação de Sistemas) – ADAPTADA. O teste de unidade tem foco na menor unidade de um sistema, um programa. Testes em funções, procedimentos ou métodos não são considerados testes de unidade.

60. (CESPE/2010/TRE-MT - Técnico Judiciário - Programação de Sistemas) – ADAPTADA. Testes de sistema não podem explorar requisitos não funcionais.

61. (FEPESE/2010/SEFAZ-SC - Auditor Fiscal da Receita Estadual) Analise a definição abaixo.

Teste de software que procura descobrir erros por meio da reaplicação parcial dos testes a um programa modificado.

Assinale a alternativa que cita corretamente o conceito ao qual se refere a definição.

a) Teste de sistema

b) Teste de unidade

c) Teste de regressão

d) Teste de integração

e) Teste de requisitos

Page 172: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 172

62. (FIP/2009/CAMARA-SJC/Analista de Sistemas) Considere as seguintes afirmações:

(4) Programas de computador são obras de engenharia que devem seguir, rigidamente, normas e padrões técnicos.

(5) Uma falha de software pode comprometer a integridade, disponibilidade e confidencialidade de um sistema de informações empresarial.

(6) Os testes de caixa preta são utilizados para demonstrar que as funções do software estão operacionais, que as entradas válidas são adequadamente aceitas e produzem saídas corretas, mantendo a integridade das informações externas.

É correto afirmar que:

a) Todas as afirmações estão corretas.

b) Apenas as afirmações (1) e (3) estão corretas.

c) Apenas as afirmações (2) e (3) estão corretas.

d) Apenas as afirmações (1) e (2) estão corretas.

e) N.D.A.

63. (FCC/2009/TRT - 15ª Região - Analista Judiciário - Tecnologia da Informação) Os testes de integração têm por objetivo verificar se

a) os módulos testados produzem os mesmos resultados que as unidades testadas individualmente.

b) os módulos testados suportam grandes volumes de dados.

c) as funcionalidades dos módulos testados atendem aos requisitos.

d) os valores limites entre as unidades testadas individualmente são aceitáveis.

e) o tempo de resposta dos módulos testados está adequado.

64. (ESAF/2008/Prefeitura de Natal - RN - Auditor do Tesouro Municipal - Tecnologia da Informação) Com relação aos tipos de testes que podem ser considerados e executados em um projeto de software, é correto afirmar que o objetivo principal do Teste Funcional é assegurar que

a) a interface forneça ao usuário o acesso e a navegação adequados através das funções do software.

b) os objetos contidos na interface funcionam conforme o esperado e estejam em conformidade com padrões estabelecidos.

c) foram exercitados um conjunto de funcionalidades para avaliar a navegação pelo software e a facilidade de uso do mesmo.

d) houve uma correta implementação dos requisitos do sistema, como, por exemplo, regras de negócio, através da interface do usuário.

e) foram executadas transações, variando as cargas de trabalho, para observar e registrar o comportamento do sistema.

Page 173: Aula 11

TECNOLOGIA DA INFORMAÇÃO EM EXERCÍCIOS PARA BACEN

Profa. Patrícia Lima Quintão www.pontodosconcursos.com.br 173

GABARITO

1. Letra C.

2. Letra C.

3. Letra A.

4. Letra E.

5. Letra A.

6. Letra A.

7. Letra C.

8. Letra D.

9. Letra B.

10. Letra E.

11. Letra C.

12. Letra D.

13. Letra D.

14. Letra D.

15. Letra E.

16. Letra E.

17. Letra A.

18. Letra D.

19. Letra A.

20. Letra B.

21. Letra A.

22. Letra A.

23. Letra A.

24. Letra B.

25. Letra C.

26. Letra D.

27. Letra B.

28. Letra C.

29. Letra D.

30. Letra B.

31. Letra D.

32. Letra B.

33. Letra B.

34. Letra D.

35. Letra E.

36. Letra C.

37. Letra A.

38. Letra B.

39. Letra A.

40. Letra E.

41. Item errado.

42. Item errado.

43. Item correto.

44. Item correto.

45. Letra E.

46. Item correto.

47. Letra E.

48. Letra C.

49. Letra C.

50. Letra B.

51. Letra D.

52. Letra C.

53. Item errado.

54. Item correto.

55. Item correto.

56. Letra D.

57. Letra B.

58. Item correto.

59. Item errado.

60. Item errado.

61. Letra C.

62. Letra A.

63. Letra C.

64. Letra D